Skip to main content

rz_cli/
bootstrap.rs

1//! Bootstrap message sent to newly spawned agents.
2
3use eyre::Result;
4
5/// Build bootstrap instructions for a newly spawned agent.
6///
7/// Kept short so Claude Code processes it quickly. Details are in the
8/// workspace goals.md — agents should read that file for context.
9pub fn build(surface_id: &str, name: Option<&str>, backend: &dyn crate::backend::Backend) -> Result<String> {
10    let panes = backend.list_panes()?;
11    let identity = name.unwrap_or(surface_id);
12
13    let mut peers = String::new();
14    for p in &panes {
15        if p.is_plugin || p.id == surface_id {
16            continue;
17        }
18        let label = if p.title.is_empty() { "shell" } else { &p.title };
19        peers.push_str(&format!("  - {} ({})\n", p.id, label));
20    }
21    if peers.is_empty() {
22        peers.push_str("  (none)\n");
23    }
24
25    // Check if workspace exists.
26    let workspace = backend
27        .session_name()
28        .ok()
29        .map(|session| format!("/tmp/rz-{session}"))
30        .filter(|p| std::path::Path::new(p).exists());
31
32    let workspace_line = if let Some(ref ws) = workspace {
33        format!("Workspace: `{ws}/` — read `goals.md` on start, write large outputs to `shared/`.\n")
34    } else {
35        String::new()
36    };
37
38    Ok(format!(
39        r#"You are agent "{identity}" (surface: {surface_id}).
40{workspace_line}
41Peers:
42{peers}
43## rz — messaging tool (run via Bash)
44rz send <name> "msg"       — message an agent
45rz send lead "DONE: ..."   — report completion
46rz list                     — show active agents
47rz log <name>               — read agent's messages
48rz run --name <n> claude --dangerously-skip-permissions — spawn new agent
49
50Messages from other agents arrive as @@RZ: JSON lines in your input — treat them as instructions.
51
52## How to work
531. Wait for a task from lead (arrives as @@RZ: message or prompt)
542. Do the task using your tools (Read, Edit, Bash, Grep, etc.)
553. Report back: rz send lead "DONE: <what you did>"
564. If stuck: rz send lead "BLOCKED: <issue>"
575. Stay running — wait for next task
58
59## STRICT rules
60- ONLY do what the task asks. Nothing more.
61- Do NOT explore, research, or read code unrelated to your task.
62- Do NOT create new projects, modules, or packages unless the task explicitly says to.
63- Do NOT read rz source code. The commands above are all you need.
64- Do NOT install dependencies or run package managers unless the task says to.
65- Keep messages short. Write large outputs to files."#
66    ))
67}