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)

lmata 2026-04-02 23:14 trunk
Commit 0f85648c15d0103431d15c0ae8024c845e3d53cab61de335d20735acfda6e7a3
--- docs/architecture/wire-format.md
+++ docs/architecture/wire-format.md
@@ -71,11 +71,11 @@
7171
| `Grep` | `grep <pattern>` |
7272
| `Agent` | `spawn agent` |
7373
| `WebFetch` | `fetch <url>` |
7474
| `WebSearch` | `search <query>` |
7575
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.
7777
7878
---
7979
8080
## Secret sanitization
8181
8282
--- 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
--- docs/guide/relays.md
+++ docs/guide/relays.md
@@ -279,10 +279,11 @@
279279
| `SCUTTLEBOT_SESSION_ID` | auto-generated | Override the session ID suffix |
280280
| `SCUTTLEBOT_HOOKS_ENABLED` | `1` | Set to `0` to disable the relay without uninstalling |
281281
| `SCUTTLEBOT_INTERRUPT_ON_MESSAGE` | `1` | Send Ctrl+C before injecting when agent appears busy |
282282
| `SCUTTLEBOT_POLL_INTERVAL` | `2s` | How often to poll IRC for new messages |
283283
| `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. |
284285
| `SCUTTLEBOT_ACTIVITY_VIA_BROKER` | set by broker | Tells hook scripts to stay silent when the broker is posting. Do not set manually |
285286
286287
---
287288
288289
## IRC transport vs HTTP transport
289290
--- 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 @@
1212
{
1313
"v": 1,
1414
"type": "task.create",
1515
"id": "01HX9Z...",
1616
"from": "claude-myrepo-a1b2c3d4",
17
+ "to": ["@workers"],
1718
"ts": 1712000000000,
1819
"payload": {}
1920
}
2021
```
2122
@@ -23,10 +24,11 @@
2324
|-------|------|-------------|
2425
| `v` | int | Envelope version. Always `1`. |
2526
| `type` | string | Message type (see below). |
2627
| `id` | string | ULID — monotonic, sortable, globally unique. |
2728
| `from` | string | Sender's IRC nick. |
29
+| `to` | string[] | Optional. Recipients — see [Group addressing](#group-addressing) below. Omitted when empty (matches all). |
2830
| `ts` | int64 | Unix milliseconds. |
2931
| `payload` | object | Type-specific payload. Omitted if empty. |
3032
3133
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`.
3234
@@ -128,10 +130,45 @@
128130
"ts": 1712000099000,
129131
"payload": {}
130132
}
131133
```
132134
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
+
133170
---
134171
135172
## Custom types
136173
137174
Any string is a valid `type`. Use dot-separated namespaces to avoid collisions:
138175
--- 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 @@
132132
- `SCUTTLEBOT_IRC_PASS=...` uses a fixed NickServ password instead of auto-registration; leave it unset for the default broker convention
133133
- `SCUTTLEBOT_IRC_DELETE_ON_CLOSE=0` keeps auto-registered session nicks after clean exit
134134
- `SCUTTLEBOT_INTERRUPT_ON_MESSAGE=1` interrupts the live Codex session only when Codex appears busy; idle sessions are injected directly and auto-submitted
135135
- `SCUTTLEBOT_POLL_INTERVAL=2s` controls how often the broker checks for new addressed IRC messages
136136
- `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)
137138
- `SCUTTLEBOT_ACTIVITY_VIA_BROKER=1` tells `scuttlebot-post.sh` to stay quiet so broker-launched sessions do not duplicate activity posts
138139
139140
Installer auth knobs:
140141
- default or `--auto-register`: scrub `SCUTTLEBOT_IRC_PASS` from the shared env file and let the broker auto-register ephemeral session nicks
141142
- `--irc-pass <passphrase>`: persist a fixed NickServ password in the shared env file
142143
--- 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 @@
209209
- soft-fails if scuttlebot is disabled or unreachable
210210
211211
Optional broker env:
212212
- `SCUTTLEBOT_INTERRUPT_ON_MESSAGE=0` disables the automatic busy-session interrupt before injected IRC instructions
213213
- `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)
214215
- `SCUTTLEBOT_TRANSPORT=irc` switches from the HTTP bridge path to a real IRC socket
215216
- `SCUTTLEBOT_IRC_ADDR=127.0.0.1:6667` points the real IRC transport at Ergo
216217
- `SCUTTLEBOT_IRC_PASS=<passphrase>` skips auto-registration and uses a fixed NickServ password; leave it unset for the default broker convention
217218
- `SCUTTLEBOT_PRESENCE_HEARTBEAT=0` disables HTTP presence heartbeats
218219
- `SCUTTLEBOT_IRC_DELETE_ON_CLOSE=0` keeps auto-registered session nicks in the registry after clean exit
219220
--- 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 @@
109109
- `SCUTTLEBOT_IRC_PASS=...` uses a fixed NickServ password instead of auto-registration; leave it unset for the default broker convention
110110
- `SCUTTLEBOT_IRC_DELETE_ON_CLOSE=0` keeps auto-registered session nicks after clean exit
111111
- `SCUTTLEBOT_INTERRUPT_ON_MESSAGE=1` interrupts the live Claude session when it appears busy
112112
- `SCUTTLEBOT_POLL_INTERVAL=2s` controls how often the broker checks for new addressed IRC messages
113113
- `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)
114115
- `SCUTTLEBOT_ACTIVITY_VIA_BROKER=1` tells `scuttlebot-post.sh` to stay quiet so broker-launched sessions do not duplicate activity posts
115116
116117
Installer auth knobs:
117118
- default or `--auto-register`: scrub `SCUTTLEBOT_IRC_PASS` from the shared env file and let the broker auto-register ephemeral session nicks
118119
- `--irc-pass <passphrase>`: persist a fixed NickServ password in the shared env file
119120
--- 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 @@
6363
- `SCUTTLEBOT_CHANNEL` — primary control channel
6464
- `SCUTTLEBOT_CHANNELS=general,task-42` — optional startup channel set, including the control channel
6565
- `SCUTTLEBOT_INTERRUPT_ON_MESSAGE=1` — interrupts the live Claude session when it appears busy
6666
- `SCUTTLEBOT_POLL_INTERVAL=2s` — controls how often the broker checks for new addressed IRC messages
6767
- `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)
6869
6970
Disable without uninstalling:
7071
```bash
7172
SCUTTLEBOT_HOOKS_ENABLED=0 claude-relay
7273
```
7374
--- 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

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button