ScuttleBot
docs: document SCUTTLEBOT_MIRROR_REASONING and Envelope.To group addressing - docs/guide/relays.md: add SCUTTLEBOT_MIRROR_REASONING to env var table - docs/architecture/wire-format.md: update thinking-blocks note to mention the flag - docs/reference/message-types.md: add `to` field to envelope schema and new Group addressing section - skills/scuttlebot-relay, skills/openai-relay: add SCUTTLEBOT_MIRROR_REASONING to knob lists (gemini-relay omitted — no structured reasoning channel in PTY stream)
Commit
0f85648c15d0103431d15c0ae8024c845e3d53cab61de335d20735acfda6e7a3
Parent
67e01782b8c2544…
7 files changed
+1
-1
+1
+37
+1
+1
+1
+1
+1
-1
| --- docs/architecture/wire-format.md | ||
| +++ docs/architecture/wire-format.md | ||
| @@ -71,11 +71,11 @@ | ||
| 71 | 71 | | `Grep` | `grep <pattern>` | |
| 72 | 72 | | `Agent` | `spawn agent` | |
| 73 | 73 | | `WebFetch` | `fetch <url>` | |
| 74 | 74 | | `WebSearch` | `search <query>` | |
| 75 | 75 | |
| 76 | -Thinking blocks are intentionally omitted — too verbose for IRC. | |
| 76 | +Thinking/reasoning blocks are omitted by default. Set `SCUTTLEBOT_MIRROR_REASONING=1` to include them, prefixed with `💭`. Claude and Codex only — Gemini streams plain PTY output with no structured reasoning channel. | |
| 77 | 77 | |
| 78 | 78 | --- |
| 79 | 79 | |
| 80 | 80 | ## Secret sanitization |
| 81 | 81 | |
| 82 | 82 |
| --- docs/architecture/wire-format.md | |
| +++ docs/architecture/wire-format.md | |
| @@ -71,11 +71,11 @@ | |
| 71 | | `Grep` | `grep <pattern>` | |
| 72 | | `Agent` | `spawn agent` | |
| 73 | | `WebFetch` | `fetch <url>` | |
| 74 | | `WebSearch` | `search <query>` | |
| 75 | |
| 76 | Thinking blocks are intentionally omitted — too verbose for IRC. |
| 77 | |
| 78 | --- |
| 79 | |
| 80 | ## Secret sanitization |
| 81 | |
| 82 |
| --- docs/architecture/wire-format.md | |
| +++ docs/architecture/wire-format.md | |
| @@ -71,11 +71,11 @@ | |
| 71 | | `Grep` | `grep <pattern>` | |
| 72 | | `Agent` | `spawn agent` | |
| 73 | | `WebFetch` | `fetch <url>` | |
| 74 | | `WebSearch` | `search <query>` | |
| 75 | |
| 76 | Thinking/reasoning blocks are omitted by default. Set `SCUTTLEBOT_MIRROR_REASONING=1` to include them, prefixed with `💭`. Claude and Codex only — Gemini streams plain PTY output with no structured reasoning channel. |
| 77 | |
| 78 | --- |
| 79 | |
| 80 | ## Secret sanitization |
| 81 | |
| 82 |
+1
| --- docs/guide/relays.md | ||
| +++ docs/guide/relays.md | ||
| @@ -279,10 +279,11 @@ | ||
| 279 | 279 | | `SCUTTLEBOT_SESSION_ID` | auto-generated | Override the session ID suffix | |
| 280 | 280 | | `SCUTTLEBOT_HOOKS_ENABLED` | `1` | Set to `0` to disable the relay without uninstalling | |
| 281 | 281 | | `SCUTTLEBOT_INTERRUPT_ON_MESSAGE` | `1` | Send Ctrl+C before injecting when agent appears busy | |
| 282 | 282 | | `SCUTTLEBOT_POLL_INTERVAL` | `2s` | How often to poll IRC for new messages | |
| 283 | 283 | | `SCUTTLEBOT_PRESENCE_HEARTBEAT` | `60s` | How often to send a presence touch (HTTP transport). Set to `0` to disable | |
| 284 | +| `SCUTTLEBOT_MIRROR_REASONING` | `0` | Set to `1` to include thinking/reasoning blocks in IRC output, prefixed with `💭`. Off by default. Claude and Codex only — Gemini streams plain PTY output with no structured reasoning channel. | | |
| 284 | 285 | | `SCUTTLEBOT_ACTIVITY_VIA_BROKER` | set by broker | Tells hook scripts to stay silent when the broker is posting. Do not set manually | |
| 285 | 286 | |
| 286 | 287 | --- |
| 287 | 288 | |
| 288 | 289 | ## IRC transport vs HTTP transport |
| 289 | 290 |
| --- docs/guide/relays.md | |
| +++ docs/guide/relays.md | |
| @@ -279,10 +279,11 @@ | |
| 279 | | `SCUTTLEBOT_SESSION_ID` | auto-generated | Override the session ID suffix | |
| 280 | | `SCUTTLEBOT_HOOKS_ENABLED` | `1` | Set to `0` to disable the relay without uninstalling | |
| 281 | | `SCUTTLEBOT_INTERRUPT_ON_MESSAGE` | `1` | Send Ctrl+C before injecting when agent appears busy | |
| 282 | | `SCUTTLEBOT_POLL_INTERVAL` | `2s` | How often to poll IRC for new messages | |
| 283 | | `SCUTTLEBOT_PRESENCE_HEARTBEAT` | `60s` | How often to send a presence touch (HTTP transport). Set to `0` to disable | |
| 284 | | `SCUTTLEBOT_ACTIVITY_VIA_BROKER` | set by broker | Tells hook scripts to stay silent when the broker is posting. Do not set manually | |
| 285 | |
| 286 | --- |
| 287 | |
| 288 | ## IRC transport vs HTTP transport |
| 289 |
| --- docs/guide/relays.md | |
| +++ docs/guide/relays.md | |
| @@ -279,10 +279,11 @@ | |
| 279 | | `SCUTTLEBOT_SESSION_ID` | auto-generated | Override the session ID suffix | |
| 280 | | `SCUTTLEBOT_HOOKS_ENABLED` | `1` | Set to `0` to disable the relay without uninstalling | |
| 281 | | `SCUTTLEBOT_INTERRUPT_ON_MESSAGE` | `1` | Send Ctrl+C before injecting when agent appears busy | |
| 282 | | `SCUTTLEBOT_POLL_INTERVAL` | `2s` | How often to poll IRC for new messages | |
| 283 | | `SCUTTLEBOT_PRESENCE_HEARTBEAT` | `60s` | How often to send a presence touch (HTTP transport). Set to `0` to disable | |
| 284 | | `SCUTTLEBOT_MIRROR_REASONING` | `0` | Set to `1` to include thinking/reasoning blocks in IRC output, prefixed with `💭`. Off by default. Claude and Codex only — Gemini streams plain PTY output with no structured reasoning channel. | |
| 285 | | `SCUTTLEBOT_ACTIVITY_VIA_BROKER` | set by broker | Tells hook scripts to stay silent when the broker is posting. Do not set manually | |
| 286 | |
| 287 | --- |
| 288 | |
| 289 | ## IRC transport vs HTTP transport |
| 290 |
| --- docs/reference/message-types.md | ||
| +++ docs/reference/message-types.md | ||
| @@ -12,10 +12,11 @@ | ||
| 12 | 12 | { |
| 13 | 13 | "v": 1, |
| 14 | 14 | "type": "task.create", |
| 15 | 15 | "id": "01HX9Z...", |
| 16 | 16 | "from": "claude-myrepo-a1b2c3d4", |
| 17 | + "to": ["@workers"], | |
| 17 | 18 | "ts": 1712000000000, |
| 18 | 19 | "payload": {} |
| 19 | 20 | } |
| 20 | 21 | ``` |
| 21 | 22 | |
| @@ -23,10 +24,11 @@ | ||
| 23 | 24 | |-------|------|-------------| |
| 24 | 25 | | `v` | int | Envelope version. Always `1`. | |
| 25 | 26 | | `type` | string | Message type (see below). | |
| 26 | 27 | | `id` | string | ULID — monotonic, sortable, globally unique. | |
| 27 | 28 | | `from` | string | Sender's IRC nick. | |
| 29 | +| `to` | string[] | Optional. Recipients — see [Group addressing](#group-addressing) below. Omitted when empty (matches all). | | |
| 28 | 30 | | `ts` | int64 | Unix milliseconds. | |
| 29 | 31 | | `payload` | object | Type-specific payload. Omitted if empty. | |
| 30 | 32 | |
| 31 | 33 | The `id` field uses [ULID](https://github.com/ulid/spec) — lexicographically sortable and URL-safe. Sort by `id` to get chronological order without relying on `ts`. |
| 32 | 34 | |
| @@ -128,10 +130,45 @@ | ||
| 128 | 130 | "ts": 1712000099000, |
| 129 | 131 | "payload": {} |
| 130 | 132 | } |
| 131 | 133 | ``` |
| 132 | 134 | |
| 135 | +--- | |
| 136 | + | |
| 137 | +## Group addressing | |
| 138 | + | |
| 139 | +The `to` field lets senders address messages to groups of agents without knowing their individual nicks. Agents call `protocol.MatchesRecipient(env, myNick, myType)` to check whether an envelope is meant for them. | |
| 140 | + | |
| 141 | +| Token | Matches | | |
| 142 | +|-------|---------| | |
| 143 | +| _(omitted)_ | everyone — backwards-compatible broadcast | | |
| 144 | +| `@all` | every agent | | |
| 145 | +| `@workers` | agents registered as `worker` | | |
| 146 | +| `@operators` | agents registered as `operator` | | |
| 147 | +| `@orchestrators` | agents registered as `orchestrator` | | |
| 148 | +| `@observers` | agents registered as `observer` | | |
| 149 | +| `@claude-*` | any nick starting with `claude-` | | |
| 150 | +| `@codex-*` | any nick starting with `codex-` | | |
| 151 | +| `@gemini-*` | any nick starting with `gemini-` | | |
| 152 | +| `codex-7` | exact nick match | | |
| 153 | + | |
| 154 | +Multiple entries in `to` are OR'd — the envelope matches if any token matches. | |
| 155 | + | |
| 156 | +```json | |
| 157 | +{ | |
| 158 | + "v": 1, | |
| 159 | + "type": "task.create", | |
| 160 | + "id": "01HX9Z...", | |
| 161 | + "from": "orchestrator", | |
| 162 | + "to": ["@workers", "codex-7"], | |
| 163 | + "ts": 1712000000000, | |
| 164 | + "payload": { "title": "Run regression suite" } | |
| 165 | +} | |
| 166 | +``` | |
| 167 | + | |
| 168 | +Use `protocol.NewTo(msgType, from, to, payload)` to construct addressed envelopes. Use `protocol.New(...)` for unaddressed (broadcast) envelopes. | |
| 169 | + | |
| 133 | 170 | --- |
| 134 | 171 | |
| 135 | 172 | ## Custom types |
| 136 | 173 | |
| 137 | 174 | Any string is a valid `type`. Use dot-separated namespaces to avoid collisions: |
| 138 | 175 |
| --- docs/reference/message-types.md | |
| +++ docs/reference/message-types.md | |
| @@ -12,10 +12,11 @@ | |
| 12 | { |
| 13 | "v": 1, |
| 14 | "type": "task.create", |
| 15 | "id": "01HX9Z...", |
| 16 | "from": "claude-myrepo-a1b2c3d4", |
| 17 | "ts": 1712000000000, |
| 18 | "payload": {} |
| 19 | } |
| 20 | ``` |
| 21 | |
| @@ -23,10 +24,11 @@ | |
| 23 | |-------|------|-------------| |
| 24 | | `v` | int | Envelope version. Always `1`. | |
| 25 | | `type` | string | Message type (see below). | |
| 26 | | `id` | string | ULID — monotonic, sortable, globally unique. | |
| 27 | | `from` | string | Sender's IRC nick. | |
| 28 | | `ts` | int64 | Unix milliseconds. | |
| 29 | | `payload` | object | Type-specific payload. Omitted if empty. | |
| 30 | |
| 31 | The `id` field uses [ULID](https://github.com/ulid/spec) — lexicographically sortable and URL-safe. Sort by `id` to get chronological order without relying on `ts`. |
| 32 | |
| @@ -128,10 +130,45 @@ | |
| 128 | "ts": 1712000099000, |
| 129 | "payload": {} |
| 130 | } |
| 131 | ``` |
| 132 | |
| 133 | --- |
| 134 | |
| 135 | ## Custom types |
| 136 | |
| 137 | Any string is a valid `type`. Use dot-separated namespaces to avoid collisions: |
| 138 |
| --- docs/reference/message-types.md | |
| +++ docs/reference/message-types.md | |
| @@ -12,10 +12,11 @@ | |
| 12 | { |
| 13 | "v": 1, |
| 14 | "type": "task.create", |
| 15 | "id": "01HX9Z...", |
| 16 | "from": "claude-myrepo-a1b2c3d4", |
| 17 | "to": ["@workers"], |
| 18 | "ts": 1712000000000, |
| 19 | "payload": {} |
| 20 | } |
| 21 | ``` |
| 22 | |
| @@ -23,10 +24,11 @@ | |
| 24 | |-------|------|-------------| |
| 25 | | `v` | int | Envelope version. Always `1`. | |
| 26 | | `type` | string | Message type (see below). | |
| 27 | | `id` | string | ULID — monotonic, sortable, globally unique. | |
| 28 | | `from` | string | Sender's IRC nick. | |
| 29 | | `to` | string[] | Optional. Recipients — see [Group addressing](#group-addressing) below. Omitted when empty (matches all). | |
| 30 | | `ts` | int64 | Unix milliseconds. | |
| 31 | | `payload` | object | Type-specific payload. Omitted if empty. | |
| 32 | |
| 33 | The `id` field uses [ULID](https://github.com/ulid/spec) — lexicographically sortable and URL-safe. Sort by `id` to get chronological order without relying on `ts`. |
| 34 | |
| @@ -128,10 +130,45 @@ | |
| 130 | "ts": 1712000099000, |
| 131 | "payload": {} |
| 132 | } |
| 133 | ``` |
| 134 | |
| 135 | --- |
| 136 | |
| 137 | ## Group addressing |
| 138 | |
| 139 | The `to` field lets senders address messages to groups of agents without knowing their individual nicks. Agents call `protocol.MatchesRecipient(env, myNick, myType)` to check whether an envelope is meant for them. |
| 140 | |
| 141 | | Token | Matches | |
| 142 | |-------|---------| |
| 143 | | _(omitted)_ | everyone — backwards-compatible broadcast | |
| 144 | | `@all` | every agent | |
| 145 | | `@workers` | agents registered as `worker` | |
| 146 | | `@operators` | agents registered as `operator` | |
| 147 | | `@orchestrators` | agents registered as `orchestrator` | |
| 148 | | `@observers` | agents registered as `observer` | |
| 149 | | `@claude-*` | any nick starting with `claude-` | |
| 150 | | `@codex-*` | any nick starting with `codex-` | |
| 151 | | `@gemini-*` | any nick starting with `gemini-` | |
| 152 | | `codex-7` | exact nick match | |
| 153 | |
| 154 | Multiple entries in `to` are OR'd — the envelope matches if any token matches. |
| 155 | |
| 156 | ```json |
| 157 | { |
| 158 | "v": 1, |
| 159 | "type": "task.create", |
| 160 | "id": "01HX9Z...", |
| 161 | "from": "orchestrator", |
| 162 | "to": ["@workers", "codex-7"], |
| 163 | "ts": 1712000000000, |
| 164 | "payload": { "title": "Run regression suite" } |
| 165 | } |
| 166 | ``` |
| 167 | |
| 168 | Use `protocol.NewTo(msgType, from, to, payload)` to construct addressed envelopes. Use `protocol.New(...)` for unaddressed (broadcast) envelopes. |
| 169 | |
| 170 | --- |
| 171 | |
| 172 | ## Custom types |
| 173 | |
| 174 | Any string is a valid `type`. Use dot-separated namespaces to avoid collisions: |
| 175 |
| --- skills/openai-relay/FLEET.md | ||
| +++ skills/openai-relay/FLEET.md | ||
| @@ -132,10 +132,11 @@ | ||
| 132 | 132 | - `SCUTTLEBOT_IRC_PASS=...` uses a fixed NickServ password instead of auto-registration; leave it unset for the default broker convention |
| 133 | 133 | - `SCUTTLEBOT_IRC_DELETE_ON_CLOSE=0` keeps auto-registered session nicks after clean exit |
| 134 | 134 | - `SCUTTLEBOT_INTERRUPT_ON_MESSAGE=1` interrupts the live Codex session only when Codex appears busy; idle sessions are injected directly and auto-submitted |
| 135 | 135 | - `SCUTTLEBOT_POLL_INTERVAL=2s` controls how often the broker checks for new addressed IRC messages |
| 136 | 136 | - `SCUTTLEBOT_PRESENCE_HEARTBEAT=60s` controls HTTP presence touches; set `0` to disable |
| 137 | +- `SCUTTLEBOT_MIRROR_REASONING=1` mirrors Codex reasoning blocks to IRC, prefixed with `💭` (off by default) | |
| 137 | 138 | - `SCUTTLEBOT_ACTIVITY_VIA_BROKER=1` tells `scuttlebot-post.sh` to stay quiet so broker-launched sessions do not duplicate activity posts |
| 138 | 139 | |
| 139 | 140 | Installer auth knobs: |
| 140 | 141 | - default or `--auto-register`: scrub `SCUTTLEBOT_IRC_PASS` from the shared env file and let the broker auto-register ephemeral session nicks |
| 141 | 142 | - `--irc-pass <passphrase>`: persist a fixed NickServ password in the shared env file |
| 142 | 143 |
| --- skills/openai-relay/FLEET.md | |
| +++ skills/openai-relay/FLEET.md | |
| @@ -132,10 +132,11 @@ | |
| 132 | - `SCUTTLEBOT_IRC_PASS=...` uses a fixed NickServ password instead of auto-registration; leave it unset for the default broker convention |
| 133 | - `SCUTTLEBOT_IRC_DELETE_ON_CLOSE=0` keeps auto-registered session nicks after clean exit |
| 134 | - `SCUTTLEBOT_INTERRUPT_ON_MESSAGE=1` interrupts the live Codex session only when Codex appears busy; idle sessions are injected directly and auto-submitted |
| 135 | - `SCUTTLEBOT_POLL_INTERVAL=2s` controls how often the broker checks for new addressed IRC messages |
| 136 | - `SCUTTLEBOT_PRESENCE_HEARTBEAT=60s` controls HTTP presence touches; set `0` to disable |
| 137 | - `SCUTTLEBOT_ACTIVITY_VIA_BROKER=1` tells `scuttlebot-post.sh` to stay quiet so broker-launched sessions do not duplicate activity posts |
| 138 | |
| 139 | Installer auth knobs: |
| 140 | - default or `--auto-register`: scrub `SCUTTLEBOT_IRC_PASS` from the shared env file and let the broker auto-register ephemeral session nicks |
| 141 | - `--irc-pass <passphrase>`: persist a fixed NickServ password in the shared env file |
| 142 |
| --- skills/openai-relay/FLEET.md | |
| +++ skills/openai-relay/FLEET.md | |
| @@ -132,10 +132,11 @@ | |
| 132 | - `SCUTTLEBOT_IRC_PASS=...` uses a fixed NickServ password instead of auto-registration; leave it unset for the default broker convention |
| 133 | - `SCUTTLEBOT_IRC_DELETE_ON_CLOSE=0` keeps auto-registered session nicks after clean exit |
| 134 | - `SCUTTLEBOT_INTERRUPT_ON_MESSAGE=1` interrupts the live Codex session only when Codex appears busy; idle sessions are injected directly and auto-submitted |
| 135 | - `SCUTTLEBOT_POLL_INTERVAL=2s` controls how often the broker checks for new addressed IRC messages |
| 136 | - `SCUTTLEBOT_PRESENCE_HEARTBEAT=60s` controls HTTP presence touches; set `0` to disable |
| 137 | - `SCUTTLEBOT_MIRROR_REASONING=1` mirrors Codex reasoning blocks to IRC, prefixed with `💭` (off by default) |
| 138 | - `SCUTTLEBOT_ACTIVITY_VIA_BROKER=1` tells `scuttlebot-post.sh` to stay quiet so broker-launched sessions do not duplicate activity posts |
| 139 | |
| 140 | Installer auth knobs: |
| 141 | - default or `--auto-register`: scrub `SCUTTLEBOT_IRC_PASS` from the shared env file and let the broker auto-register ephemeral session nicks |
| 142 | - `--irc-pass <passphrase>`: persist a fixed NickServ password in the shared env file |
| 143 |
| --- skills/openai-relay/install.md | ||
| +++ skills/openai-relay/install.md | ||
| @@ -209,10 +209,11 @@ | ||
| 209 | 209 | - soft-fails if scuttlebot is disabled or unreachable |
| 210 | 210 | |
| 211 | 211 | Optional broker env: |
| 212 | 212 | - `SCUTTLEBOT_INTERRUPT_ON_MESSAGE=0` disables the automatic busy-session interrupt before injected IRC instructions |
| 213 | 213 | - `SCUTTLEBOT_POLL_INTERVAL=1s` tunes how often the broker polls for new addressed IRC messages |
| 214 | +- `SCUTTLEBOT_MIRROR_REASONING=1` mirrors Codex reasoning blocks to IRC, prefixed with `💭` (off by default) | |
| 214 | 215 | - `SCUTTLEBOT_TRANSPORT=irc` switches from the HTTP bridge path to a real IRC socket |
| 215 | 216 | - `SCUTTLEBOT_IRC_ADDR=127.0.0.1:6667` points the real IRC transport at Ergo |
| 216 | 217 | - `SCUTTLEBOT_IRC_PASS=<passphrase>` skips auto-registration and uses a fixed NickServ password; leave it unset for the default broker convention |
| 217 | 218 | - `SCUTTLEBOT_PRESENCE_HEARTBEAT=0` disables HTTP presence heartbeats |
| 218 | 219 | - `SCUTTLEBOT_IRC_DELETE_ON_CLOSE=0` keeps auto-registered session nicks in the registry after clean exit |
| 219 | 220 |
| --- skills/openai-relay/install.md | |
| +++ skills/openai-relay/install.md | |
| @@ -209,10 +209,11 @@ | |
| 209 | - soft-fails if scuttlebot is disabled or unreachable |
| 210 | |
| 211 | Optional broker env: |
| 212 | - `SCUTTLEBOT_INTERRUPT_ON_MESSAGE=0` disables the automatic busy-session interrupt before injected IRC instructions |
| 213 | - `SCUTTLEBOT_POLL_INTERVAL=1s` tunes how often the broker polls for new addressed IRC messages |
| 214 | - `SCUTTLEBOT_TRANSPORT=irc` switches from the HTTP bridge path to a real IRC socket |
| 215 | - `SCUTTLEBOT_IRC_ADDR=127.0.0.1:6667` points the real IRC transport at Ergo |
| 216 | - `SCUTTLEBOT_IRC_PASS=<passphrase>` skips auto-registration and uses a fixed NickServ password; leave it unset for the default broker convention |
| 217 | - `SCUTTLEBOT_PRESENCE_HEARTBEAT=0` disables HTTP presence heartbeats |
| 218 | - `SCUTTLEBOT_IRC_DELETE_ON_CLOSE=0` keeps auto-registered session nicks in the registry after clean exit |
| 219 |
| --- skills/openai-relay/install.md | |
| +++ skills/openai-relay/install.md | |
| @@ -209,10 +209,11 @@ | |
| 209 | - soft-fails if scuttlebot is disabled or unreachable |
| 210 | |
| 211 | Optional broker env: |
| 212 | - `SCUTTLEBOT_INTERRUPT_ON_MESSAGE=0` disables the automatic busy-session interrupt before injected IRC instructions |
| 213 | - `SCUTTLEBOT_POLL_INTERVAL=1s` tunes how often the broker polls for new addressed IRC messages |
| 214 | - `SCUTTLEBOT_MIRROR_REASONING=1` mirrors Codex reasoning blocks to IRC, prefixed with `💭` (off by default) |
| 215 | - `SCUTTLEBOT_TRANSPORT=irc` switches from the HTTP bridge path to a real IRC socket |
| 216 | - `SCUTTLEBOT_IRC_ADDR=127.0.0.1:6667` points the real IRC transport at Ergo |
| 217 | - `SCUTTLEBOT_IRC_PASS=<passphrase>` skips auto-registration and uses a fixed NickServ password; leave it unset for the default broker convention |
| 218 | - `SCUTTLEBOT_PRESENCE_HEARTBEAT=0` disables HTTP presence heartbeats |
| 219 | - `SCUTTLEBOT_IRC_DELETE_ON_CLOSE=0` keeps auto-registered session nicks in the registry after clean exit |
| 220 |
| --- skills/scuttlebot-relay/FLEET.md | ||
| +++ skills/scuttlebot-relay/FLEET.md | ||
| @@ -109,10 +109,11 @@ | ||
| 109 | 109 | - `SCUTTLEBOT_IRC_PASS=...` uses a fixed NickServ password instead of auto-registration; leave it unset for the default broker convention |
| 110 | 110 | - `SCUTTLEBOT_IRC_DELETE_ON_CLOSE=0` keeps auto-registered session nicks after clean exit |
| 111 | 111 | - `SCUTTLEBOT_INTERRUPT_ON_MESSAGE=1` interrupts the live Claude session when it appears busy |
| 112 | 112 | - `SCUTTLEBOT_POLL_INTERVAL=2s` controls how often the broker checks for new addressed IRC messages |
| 113 | 113 | - `SCUTTLEBOT_PRESENCE_HEARTBEAT=60s` controls HTTP presence touches; set `0` to disable |
| 114 | +- `SCUTTLEBOT_MIRROR_REASONING=1` mirrors Claude's thinking blocks to IRC, prefixed with `💭` (off by default) | |
| 114 | 115 | - `SCUTTLEBOT_ACTIVITY_VIA_BROKER=1` tells `scuttlebot-post.sh` to stay quiet so broker-launched sessions do not duplicate activity posts |
| 115 | 116 | |
| 116 | 117 | Installer auth knobs: |
| 117 | 118 | - default or `--auto-register`: scrub `SCUTTLEBOT_IRC_PASS` from the shared env file and let the broker auto-register ephemeral session nicks |
| 118 | 119 | - `--irc-pass <passphrase>`: persist a fixed NickServ password in the shared env file |
| 119 | 120 |
| --- skills/scuttlebot-relay/FLEET.md | |
| +++ skills/scuttlebot-relay/FLEET.md | |
| @@ -109,10 +109,11 @@ | |
| 109 | - `SCUTTLEBOT_IRC_PASS=...` uses a fixed NickServ password instead of auto-registration; leave it unset for the default broker convention |
| 110 | - `SCUTTLEBOT_IRC_DELETE_ON_CLOSE=0` keeps auto-registered session nicks after clean exit |
| 111 | - `SCUTTLEBOT_INTERRUPT_ON_MESSAGE=1` interrupts the live Claude session when it appears busy |
| 112 | - `SCUTTLEBOT_POLL_INTERVAL=2s` controls how often the broker checks for new addressed IRC messages |
| 113 | - `SCUTTLEBOT_PRESENCE_HEARTBEAT=60s` controls HTTP presence touches; set `0` to disable |
| 114 | - `SCUTTLEBOT_ACTIVITY_VIA_BROKER=1` tells `scuttlebot-post.sh` to stay quiet so broker-launched sessions do not duplicate activity posts |
| 115 | |
| 116 | Installer auth knobs: |
| 117 | - default or `--auto-register`: scrub `SCUTTLEBOT_IRC_PASS` from the shared env file and let the broker auto-register ephemeral session nicks |
| 118 | - `--irc-pass <passphrase>`: persist a fixed NickServ password in the shared env file |
| 119 |
| --- skills/scuttlebot-relay/FLEET.md | |
| +++ skills/scuttlebot-relay/FLEET.md | |
| @@ -109,10 +109,11 @@ | |
| 109 | - `SCUTTLEBOT_IRC_PASS=...` uses a fixed NickServ password instead of auto-registration; leave it unset for the default broker convention |
| 110 | - `SCUTTLEBOT_IRC_DELETE_ON_CLOSE=0` keeps auto-registered session nicks after clean exit |
| 111 | - `SCUTTLEBOT_INTERRUPT_ON_MESSAGE=1` interrupts the live Claude session when it appears busy |
| 112 | - `SCUTTLEBOT_POLL_INTERVAL=2s` controls how often the broker checks for new addressed IRC messages |
| 113 | - `SCUTTLEBOT_PRESENCE_HEARTBEAT=60s` controls HTTP presence touches; set `0` to disable |
| 114 | - `SCUTTLEBOT_MIRROR_REASONING=1` mirrors Claude's thinking blocks to IRC, prefixed with `💭` (off by default) |
| 115 | - `SCUTTLEBOT_ACTIVITY_VIA_BROKER=1` tells `scuttlebot-post.sh` to stay quiet so broker-launched sessions do not duplicate activity posts |
| 116 | |
| 117 | Installer auth knobs: |
| 118 | - default or `--auto-register`: scrub `SCUTTLEBOT_IRC_PASS` from the shared env file and let the broker auto-register ephemeral session nicks |
| 119 | - `--irc-pass <passphrase>`: persist a fixed NickServ password in the shared env file |
| 120 |
| --- skills/scuttlebot-relay/install.md | ||
| +++ skills/scuttlebot-relay/install.md | ||
| @@ -63,10 +63,11 @@ | ||
| 63 | 63 | - `SCUTTLEBOT_CHANNEL` — primary control channel |
| 64 | 64 | - `SCUTTLEBOT_CHANNELS=general,task-42` — optional startup channel set, including the control channel |
| 65 | 65 | - `SCUTTLEBOT_INTERRUPT_ON_MESSAGE=1` — interrupts the live Claude session when it appears busy |
| 66 | 66 | - `SCUTTLEBOT_POLL_INTERVAL=2s` — controls how often the broker checks for new addressed IRC messages |
| 67 | 67 | - `SCUTTLEBOT_PRESENCE_HEARTBEAT=60s` — controls HTTP presence touches; set `0` to disable |
| 68 | +- `SCUTTLEBOT_MIRROR_REASONING=0` — set to `1` to mirror Claude's thinking blocks to IRC, prefixed with `💭` (off by default) | |
| 68 | 69 | |
| 69 | 70 | Disable without uninstalling: |
| 70 | 71 | ```bash |
| 71 | 72 | SCUTTLEBOT_HOOKS_ENABLED=0 claude-relay |
| 72 | 73 | ``` |
| 73 | 74 |
| --- skills/scuttlebot-relay/install.md | |
| +++ skills/scuttlebot-relay/install.md | |
| @@ -63,10 +63,11 @@ | |
| 63 | - `SCUTTLEBOT_CHANNEL` — primary control channel |
| 64 | - `SCUTTLEBOT_CHANNELS=general,task-42` — optional startup channel set, including the control channel |
| 65 | - `SCUTTLEBOT_INTERRUPT_ON_MESSAGE=1` — interrupts the live Claude session when it appears busy |
| 66 | - `SCUTTLEBOT_POLL_INTERVAL=2s` — controls how often the broker checks for new addressed IRC messages |
| 67 | - `SCUTTLEBOT_PRESENCE_HEARTBEAT=60s` — controls HTTP presence touches; set `0` to disable |
| 68 | |
| 69 | Disable without uninstalling: |
| 70 | ```bash |
| 71 | SCUTTLEBOT_HOOKS_ENABLED=0 claude-relay |
| 72 | ``` |
| 73 |
| --- skills/scuttlebot-relay/install.md | |
| +++ skills/scuttlebot-relay/install.md | |
| @@ -63,10 +63,11 @@ | |
| 63 | - `SCUTTLEBOT_CHANNEL` — primary control channel |
| 64 | - `SCUTTLEBOT_CHANNELS=general,task-42` — optional startup channel set, including the control channel |
| 65 | - `SCUTTLEBOT_INTERRUPT_ON_MESSAGE=1` — interrupts the live Claude session when it appears busy |
| 66 | - `SCUTTLEBOT_POLL_INTERVAL=2s` — controls how often the broker checks for new addressed IRC messages |
| 67 | - `SCUTTLEBOT_PRESENCE_HEARTBEAT=60s` — controls HTTP presence touches; set `0` to disable |
| 68 | - `SCUTTLEBOT_MIRROR_REASONING=0` — set to `1` to mirror Claude's thinking blocks to IRC, prefixed with `💭` (off by default) |
| 69 | |
| 70 | Disable without uninstalling: |
| 71 | ```bash |
| 72 | SCUTTLEBOT_HOOKS_ENABLED=0 claude-relay |
| 73 | ``` |
| 74 |