Skip to main content

rz_cli/
bootstrap.rs

1//! Bootstrap message sent to newly spawned agents.
2
3use eyre::Result;
4
5use crate::zellij;
6
7/// Build bootstrap instructions for a newly spawned agent.
8///
9/// Includes: identity, how to communicate, who else is running.
10pub fn build(pane_id: &str, name: Option<&str>, rz_path: &str) -> Result<String> {
11    let panes = zellij::list_panes()?;
12    let identity = name.unwrap_or(pane_id);
13
14    let mut peers = String::new();
15    for p in &panes {
16        if p.is_plugin || p.pane_id() == pane_id {
17            continue;
18        }
19        let cmd = p.pane_command.as_deref().unwrap_or("shell");
20        let tab = p.tab_name.as_deref().unwrap_or("-");
21        peers.push_str(&format!("  - {} ({}, tab: {})\n", p.pane_id(), cmd, tab));
22    }
23    if peers.is_empty() {
24        peers.push_str("  (none)\n");
25    }
26
27    // Check if workspace exists.
28    let workspace = std::env::var("ZELLIJ_SESSION_NAME")
29        .ok()
30        .map(|s| format!("/tmp/rz-{s}"))
31        .filter(|p| std::path::Path::new(p).exists());
32
33    let workspace_section = if let Some(ref ws) = workspace {
34        format!(
35            r#"### Workspace
36
37Shared workspace: `{ws}/shared/` — write large outputs here, not in messages.
38
39**Project files** (read these first, update as you work):
40
41- **`{ws}/goals.md`** — Session objectives. READ on start. Add sub-goals you discover.
42- **`{ws}/context.md`** — Decisions and discoveries. APPEND entries as you learn things others should know.
43- **`{ws}/agents.md`** — Who's doing what. UPDATE with your pane ID, name, and current task when you start or switch tasks.
44"#
45        )
46    } else {
47        String::new()
48    };
49
50    Ok(format!(
51        r#"## Multi-Agent Environment
52
53You are agent "{identity}" (pane: {pane_id}) in a multi-agent Zellij session.
54
55You are **long-lived** — you will receive multiple tasks over time, not just one.
56After completing a task, report back and wait for the next one. Your context
57and knowledge accumulate across tasks, making you more valuable over time.
58Do not exit after finishing a task.
59
60### Communication
61
62You have `rz` at `{rz_path}`. Use it to talk to other agents:
63
64```bash
65# Send a message to another agent (use just the number)
66{rz_path} send <pane_id> "your message"
67
68# Send and block until reply (timeout in seconds)
69{rz_path} send --wait 30 <pane_id> "question"
70
71# Reply to a specific message (threading)
72{rz_path} send --ref <message_id> <pane_id> "your response"
73
74# List all agents
75{rz_path} list
76
77# Session overview with message counts
78{rz_path} status
79
80# Read another agent's scrollback (last N lines)
81{rz_path} dump <pane_id> --last 50
82
83# View protocol messages only
84{rz_path} log <pane_id>
85
86# Broadcast to all agents
87{rz_path} broadcast "message"
88
89# Set a timer — you'll get an @@RZ: Timer message when it fires
90{rz_path} timer <seconds> "label"
91```
92
93{workspace_section}### Active agents
94
95{peers}
96### Protocol
97
98When you receive a message starting with `@@RZ:` it is a protocol envelope.
99The JSON inside has `from`, `kind`, and `ts` fields. Reply with
100`{rz_path} send --ref <message_id> <from_pane_id> "your response"`.
101
102### Working patterns
103
104**Messages vs files.** Keep `rz send` messages short (status updates, questions,
105results). Write large outputs (research, code drafts, audit reports) to the
106workspace `shared/` directory and send the file path instead.
107
108**Parallel work.** When multiple agents edit code simultaneously, divide by
109**file** not by feature. Two agents editing the same file causes conflicts.
110Claim your files, finish, then hand off.
111
112**Spawning sub-agents.** You can spawn your own helpers for sub-tasks:
113`{rz_path} spawn --name subtask-name -p "focused task description" claude`
114Give sub-agents narrow scope. They report back to you; you report to your caller.
115
116**Situational awareness.** Run `{rz_path} status` or `{rz_path} list` to see
117who else is active. Check `{rz_path} log <pane_id>` to catch up on what
118another agent has been doing.
119
120**Timers.** Use `{rz_path} timer 300 "check build"` for periodic monitoring,
121build checks, or goal reviews. No polling — the hub wakes you up.
122
123**Audits and reviews.** Write findings to the workspace (`shared/audit-*.md`).
124Send a short summary via message with the file path. Do NOT fix code outside
125your assigned scope — report issues and let the responsible agent fix them.
126This prevents merge conflicts and respects file ownership."#
127    ))
128}