quadwork 1.19.3 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +19 -35
  2. package/bin/quadwork.js +48 -1118
  3. package/out/404.html +1 -1
  4. package/out/__next.__PAGE__.txt +3 -3
  5. package/out/__next._full.txt +14 -14
  6. package/out/__next._head.txt +4 -4
  7. package/out/__next._index.txt +8 -8
  8. package/out/__next._tree.txt +2 -2
  9. package/out/_next/static/chunks/{030cjkhts487t.js → 079wdniva~de1.js} +1 -1
  10. package/out/_next/static/chunks/{0n~dq4kpx9xxx.js → 07lhk_q6pmm3r.js} +1 -1
  11. package/out/_next/static/chunks/0_79hkefw1mo2.js +1 -0
  12. package/out/_next/static/chunks/{08tog0xc~.es_.js → 0jllnzexn48._.js} +1 -1
  13. package/out/_next/static/chunks/0oxv9vrvc17to.js +2 -0
  14. package/out/_next/static/chunks/0py7102i226n5.js +1 -0
  15. package/out/_next/static/chunks/{13fv-yi7.v52g.js → 0q4bm04c1jl_3.js} +1 -1
  16. package/out/_next/static/chunks/{0_idxioyl0p7h.js → 0sjhy6oe3mbon.js} +1 -1
  17. package/out/_next/static/chunks/{11khe5i7gu158.js → 0z.9wnba-t6z8.js} +1 -1
  18. package/out/_next/static/chunks/13xk0vgfbrcld.css +2 -0
  19. package/out/_next/static/chunks/163_ddkdca5q4.js +25 -0
  20. package/out/_next/static/chunks/{turbopack-0qm-e3ifrz~2u.js → turbopack-0y2u-q0l2m67w.js} +1 -1
  21. package/out/_not-found/__next._full.txt +13 -13
  22. package/out/_not-found/__next._head.txt +4 -4
  23. package/out/_not-found/__next._index.txt +8 -8
  24. package/out/_not-found/__next._not-found.__PAGE__.txt +2 -2
  25. package/out/_not-found/__next._not-found.txt +3 -3
  26. package/out/_not-found/__next._tree.txt +2 -2
  27. package/out/_not-found.html +1 -1
  28. package/out/_not-found.txt +13 -13
  29. package/out/app-shell/__next._full.txt +13 -13
  30. package/out/app-shell/__next._head.txt +4 -4
  31. package/out/app-shell/__next._index.txt +8 -8
  32. package/out/app-shell/__next._tree.txt +2 -2
  33. package/out/app-shell/__next.app-shell.__PAGE__.txt +2 -2
  34. package/out/app-shell/__next.app-shell.txt +3 -3
  35. package/out/app-shell.html +1 -1
  36. package/out/app-shell.txt +13 -13
  37. package/out/index.html +1 -1
  38. package/out/index.txt +14 -14
  39. package/out/project/_/__next._full.txt +14 -14
  40. package/out/project/_/__next._head.txt +4 -4
  41. package/out/project/_/__next._index.txt +8 -8
  42. package/out/project/_/__next._tree.txt +2 -2
  43. package/out/project/_/__next.project.$d$id.__PAGE__.txt +3 -3
  44. package/out/project/_/__next.project.$d$id.txt +3 -3
  45. package/out/project/_/__next.project.txt +3 -3
  46. package/out/project/_/queue/__next._full.txt +14 -14
  47. package/out/project/_/queue/__next._head.txt +4 -4
  48. package/out/project/_/queue/__next._index.txt +8 -8
  49. package/out/project/_/queue/__next._tree.txt +2 -2
  50. package/out/project/_/queue/__next.project.$d$id.queue.__PAGE__.txt +3 -3
  51. package/out/project/_/queue/__next.project.$d$id.queue.txt +3 -3
  52. package/out/project/_/queue/__next.project.$d$id.txt +3 -3
  53. package/out/project/_/queue/__next.project.txt +3 -3
  54. package/out/project/_/queue.html +1 -1
  55. package/out/project/_/queue.txt +14 -14
  56. package/out/project/_.html +1 -1
  57. package/out/project/_.txt +14 -14
  58. package/out/settings/__next._full.txt +14 -14
  59. package/out/settings/__next._head.txt +4 -4
  60. package/out/settings/__next._index.txt +8 -8
  61. package/out/settings/__next._tree.txt +2 -2
  62. package/out/settings/__next.settings.__PAGE__.txt +3 -3
  63. package/out/settings/__next.settings.txt +3 -3
  64. package/out/settings.html +1 -1
  65. package/out/settings.txt +14 -14
  66. package/out/setup/__next._full.txt +14 -14
  67. package/out/setup/__next._head.txt +4 -4
  68. package/out/setup/__next._index.txt +8 -8
  69. package/out/setup/__next._tree.txt +2 -2
  70. package/out/setup/__next.setup.__PAGE__.txt +3 -3
  71. package/out/setup/__next.setup.txt +3 -3
  72. package/out/setup.html +1 -1
  73. package/out/setup.txt +14 -14
  74. package/package.json +4 -2
  75. package/server/ac-restore.js +128 -0
  76. package/server/bridges/discord.js +244 -0
  77. package/server/bridges/telegram.js +258 -0
  78. package/server/config.js +4 -60
  79. package/server/file-chat.js +318 -0
  80. package/server/index.js +129 -1294
  81. package/server/install-agentchattr.js +3 -284
  82. package/server/mcp-chat-shim.js +171 -0
  83. package/server/migrate-ac.js +158 -0
  84. package/server/pty-dispatcher.js +188 -0
  85. package/server/routes.js +155 -1398
  86. package/templates/CLAUDE.md +2 -2
  87. package/templates/OVERNIGHT-QUEUE.md +1 -1
  88. package/templates/seeds/butler.CLAUDE.md +30 -62
  89. package/templates/seeds/dev.AGENTS.md +10 -1
  90. package/templates/seeds/head.AGENTS.md +12 -8
  91. package/templates/seeds/re1.AGENTS.md +3 -3
  92. package/templates/seeds/re2.AGENTS.md +3 -3
  93. package/bridges/discord/__pycache__/discord_bridge.cpython-314.pyc +0 -0
  94. package/bridges/discord/discord_bridge.py +0 -666
  95. package/bridges/discord/requirements.txt +0 -2
  96. package/out/_next/static/chunks/08kw.2kplxa.6.css +0 -2
  97. package/out/_next/static/chunks/0_nm7se0m3twm.js +0 -25
  98. package/out/_next/static/chunks/0uz5svjlo9dwl.js +0 -1
  99. package/out/_next/static/chunks/0zahstmgdrpy5.js +0 -1
  100. package/out/_next/static/chunks/0zfotsowwll1x.js +0 -2
  101. package/server/__tests__/bridge-auto-stop-guard.test.js +0 -134
  102. package/server/__tests__/rate-limit-handling.test.js +0 -168
  103. package/server/__tests__/scrub-secrets.test.js +0 -235
  104. package/server/__tests__/v1110-security-qa.test.js +0 -312
  105. package/server/agentchattr-registry.js +0 -188
  106. package/server/install-agentchattr.patchCrashTimeout.test.js +0 -71
  107. package/server/queue-watcher.js +0 -171
  108. package/server/queue-watcher.test.js +0 -64
  109. package/server/routes.batchProgress.test.js +0 -94
  110. package/server/routes.chatWsSend.test.js +0 -161
  111. package/server/routes.discordBridge.test.js +0 -80
  112. package/server/routes.parseActiveBatch.test.js +0 -88
  113. package/server/routes.telegramBridge.test.js +0 -241
  114. package/templates/config.toml +0 -72
  115. package/templates/wrapper.py +0 -70
  116. /package/out/_next/static/{D66Um4H226QD5y4w5xTKq → MmPC1Rj12BOy4-HvMJjEX}/_buildManifest.js +0 -0
  117. /package/out/_next/static/{D66Um4H226QD5y4w5xTKq → MmPC1Rj12BOy4-HvMJjEX}/_clientMiddlewareManifest.js +0 -0
  118. /package/out/_next/static/{D66Um4H226QD5y4w5xTKq → MmPC1Rj12BOy4-HvMJjEX}/_ssgManifest.js +0 -0
@@ -1,6 +1,6 @@
1
1
  # {{project_name}} — Development Rules
2
2
 
3
- ## Multi-Agent System (AgentChattr)
3
+ ## Multi-Agent System
4
4
 
5
5
  | Agent | Role | Can Code? | Authority |
6
6
  |-------|------|-----------|-----------|
@@ -10,7 +10,7 @@
10
10
  | Dev | Full-Stack Builder | Yes | Implementation |
11
11
 
12
12
  - **Each agent = ONE role** — escalate to Head/RE1/RE2 if task doesn't match
13
- - **AGENTS.md is the primary instruction set** when running as an AgentChattr agent — it overrides these rules where they conflict
13
+ - **AGENTS.md is the primary instruction set** when running as a QuadWork agent — it overrides these rules where they conflict
14
14
 
15
15
  ## GitHub Workflow
16
16
 
@@ -32,4 +32,4 @@
32
32
  2. One ticket assigned to Dev at a time.
33
33
  3. Wait for both reviewers to approve before merging.
34
34
  4. After merge, immediately assign next item.
35
- 5. Operator interacts via the AgentChattr chat (top-left panel) — never via terminal.
35
+ 5. Operator interacts via the project chat panel (top-left) — never via terminal.
@@ -4,7 +4,7 @@
4
4
 
5
5
  ### Rule 1: Communication
6
6
  **Your terminal output is INVISIBLE to all other agents. No agent can see what you print.**
7
- The ONLY way to communicate is by calling the AgentChattr MCP tool `chat_send` with an `@mention`.
7
+ The ONLY way to communicate is by calling the project chat MCP tool `chat_send` with an `@mention`.
8
8
  If you do not call `chat_send`, your message does NOT exist — it is lost forever. There is no exception.
9
9
  - CORRECT: Call `chat_send` with message "@user here's the batch I created"
10
10
  - WRONG: Printing "I'll message the operator now" in your terminal output
@@ -276,42 +276,41 @@ Butler must understand QuadWork's internal architecture to diagnose issues:
276
276
  - Runs on configurable port (default 8400)
277
277
  - Serves static Next.js frontend from `out/` directory
278
278
  - Manages PTY sessions for each agent via `node-pty`
279
- - WebSocket connections for terminal I/O and chat proxy
279
+ - WebSocket connections for terminal I/O and chat
280
280
 
281
- - **AgentChattr (AC)** (Python/FastAPI/uvicorn): chat server for agent communication
282
- - Separate process, one per project
283
- - Default port 8300, auto-increments for multiple projects (8300, 8301, 8302...)
284
- - Config: `~/.quadwork/<project>/agentchattr/config.toml`
285
- - Data: `~/.quadwork/<project>/agentchattr/data/`
286
- - Log: `~/.quadwork/<project>/agentchattr.log`
287
- - Pinned to commit via git checkout (see AGENTCHATTR_PIN in `bin/quadwork.js`)
288
- - Session token: required for API access, synced between QuadWork and AC
281
+ - **File-based Chat** (`server/file-chat.js`): chat system for agent communication
282
+ - Chat messages stored as JSONL files in `~/.quadwork/<project>/chat/`
283
+ - One JSONL file per channel (e.g., `general.jsonl`)
284
+ - Server reads/writes JSONL directly — no external process or port needed
285
+ - Corrupted lines are skipped on read for resilience
286
+
287
+ - **MCP Shim**: bridges chat into agent CLI sessions
288
+ - Exposes `chat_send`, `chat_read`, and other chat tools to agents via MCP
289
+ - Configured per agent in the project settings
290
+
291
+ - **PTY Dispatcher**: delivers chat messages to agents via terminal injection
292
+ - Watches for new messages in JSONL files
293
+ - Injects relevant messages into the agent's PTY session
289
294
 
290
295
  - **Agent PTYs**: 4 terminal sessions per project (head, dev, re1, re2)
291
296
  - Each runs a CLI tool (claude/codex/gemini) in its own git worktree
292
297
  - Worktree layout: `<project-dir>-head`, `<project-dir>-dev`, etc.
293
- - Registered with AC for chat integration via MCP
294
- - Heartbeat every 5s to keep AC registration alive
295
- - If heartbeat misses for `_CRASH_TIMEOUT` seconds, AC deregisters the agent
298
+ - Receives chat messages via PTY injection from the dispatcher
296
299
 
297
- - **Bridges** (Python): Discord and Telegram message forwarding
298
- - Discord bridge: bundled in `bridges/discord/discord_bridge.py`
299
- - Telegram bridge: cloned separately to `~/.quadwork/agentchattr-telegram/`
300
- - Both register with AC as agents (`dc` and `tg` slugs)
301
- - Config: `~/.quadwork/discord-<project>.toml`, `~/.quadwork/telegram-<project>.toml`
302
- - Logs: `~/.quadwork/dc-bridge-<project>.log`, `~/.quadwork/tg-bridge-<project>.log`
300
+ - **Bridges** (Node.js in-process): Discord and Telegram message forwarding
301
+ - Discord bridge: `server/bridges/discord.js`
302
+ - Telegram bridge: `server/bridges/telegram.js`
303
+ - Configured per-project in `~/.quadwork/config.json` (telegram/discord blocks)
303
304
 
304
305
  ### Key Files
305
306
  | File | Purpose |
306
307
  |------|---------|
307
308
  | `~/.quadwork/config.json` | Global QuadWork config (port, projects, agents) |
308
- | `~/.quadwork/<project>/agentchattr/config.toml` | Per-project AC config (ports, agents, routing) |
309
- | `~/.quadwork/<project>/agentchattr.log` | AC process stdout/stderr log |
309
+ | `~/.quadwork/<project>/chat/*.jsonl` | Per-project chat messages (one file per channel) |
310
310
  | `~/.quadwork/<project>/OVERNIGHT-QUEUE.md` | Task queue for the project's Head agent |
311
- | `~/.quadwork/<project>/agent-token-<agent>.txt` | Persisted AC registration tokens |
312
- | `server/index.js` | Main server: agent spawning, AC health monitor, registration |
313
- | `server/routes.js` | API routes: setup wizard, chat proxy, bridges, GitHub |
314
- | `server/agentchattr-registry.js` | AC registration, heartbeat, deregistration |
311
+ | `server/index.js` | Main server: agent spawning, chat integration |
312
+ | `server/file-chat.js` | File-based chat: read/write JSONL, message dispatch |
313
+ | `server/routes.js` | API routes: setup wizard, chat, bridges, GitHub |
315
314
  | `server/config.js` | Config read/write, project resolution, secure file helpers |
316
315
  | `bin/quadwork.js` | CLI: init wizard, start, stop, doctor commands |
317
316
 
@@ -319,55 +318,24 @@ Butler must understand QuadWork's internal architecture to diagnose issues:
319
318
  | Service | Default | Config key |
320
319
  |---------|---------|------------|
321
320
  | QuadWork dashboard | 8400 | config.json `port` |
322
- | AgentChattr (project 1) | 8300 | config.toml `[server] port` |
323
- | AgentChattr (project 2) | 8301 | auto-incremented |
324
321
  | MCP HTTP | 8200 | config.json `mcp_http_port` |
325
322
  | MCP SSE | 8201 | config.json `mcp_sse_port` |
326
323
 
327
- ### Agent Registration Flow
328
- 1. QuadWork spawns agent PTY with CLI command + MCP flags
329
- 2. Before spawn, calls `waitForAgentChattrReady(port, 30s)` — polls AC root `/`
330
- 3. Deregisters stale slot using persisted token (if exists)
331
- 4. Registers with AC: `POST /api/register { base: "head", label: "Head Owner", force: true }`
332
- 5. AC returns `{ name, token, slot }` — name may be suffixed if slot conflict
333
- 6. Starts heartbeat: `POST /api/heartbeat/<name>` every 5s with Bearer token
334
- 7. On heartbeat 409: triggers re-registration recovery
335
-
336
- ### Health Monitor
337
- - Runs every 30s, checks if AC port is alive for each project
338
- - 60s grace period after AC starts (skips checks during startup)
339
- - If AC down for 3 consecutive checks -> auto-restart AC
340
- - On AC recovery -> restarts unregistered agents
341
- - Auto-reset dedup: only one reset per 30s per project
342
-
343
- ### Common Log Patterns
344
- | Log pattern | Meaning |
345
- |-------------|---------|
346
- | `[#565] Agent X: AC not reachable on port` | AC wasn't ready when agent tried to register |
347
- | `[#565] Agent X: AC not reachable after 60s` | Deferred restart timeout — health monitor will handle |
348
- | `Crash timeout: deregistering X (no heartbeat for Ns)` | AC killed agent slot — heartbeat starvation |
349
- | `auto-reset N agent(s) after AC restart` | Health monitor restarting agents after AC recovery |
350
- | `unknown base: X` | AC config.toml missing `[agents.X]` section |
351
- | `409 Conflict` on heartbeat | Agent slot was taken by another registration |
352
- | `restart: port NNNN is free, spawning AC` | AC restart in progress |
353
- | `bridge-migrate` | Startup migration renaming bridge slugs |
354
-
355
324
  ## 10. Troubleshooting Workflow
356
325
 
357
326
  Read `docs/troubleshooting.md` first for known issues. Then use the architecture knowledge above to diagnose:
358
327
 
359
328
  1. Check server logs for error patterns
360
- 2. Check AC logs: `~/.quadwork/<project>/agentchattr.log`
329
+ 2. Check chat files: `ls -la ~/.quadwork/<project>/chat/`
361
330
  3. Check agent processes: `ps aux | grep -E "claude|codex"`
362
331
  4. Check port status: `lsof -iTCP:<port> -sTCP:LISTEN`
363
- 5. Check AC health: `curl http://127.0.0.1:<port>/`
364
- 6. Check agent status via API: `curl http://127.0.0.1:8400/api/agents/<project>`
365
- 7. Diagnose root cause before suggesting fixes
366
- 8. File a ticket if it's a code bug, guide operator for config issues
332
+ 5. Check agent status via API: `curl http://127.0.0.1:8400/api/agents/<project>`
333
+ 6. Diagnose root cause before suggesting fixes
334
+ 7. File a ticket if it's a code bug, guide operator for config issues
367
335
 
368
336
  ## 11. Project Launch Guidance
369
337
 
370
- Ask for repo/CLIs/creds, guide through dashboard wizard, verify worktrees/AC/registration, help with bridges and first batch.
338
+ Ask for repo/CLIs/creds, guide through dashboard wizard, verify worktrees and chat connectivity, help with bridges and first batch.
371
339
 
372
340
  ## 12. Design Awareness
373
341
 
@@ -402,7 +370,7 @@ Butler can create batches on any project directly by editing that project's OVER
402
370
  **Started:** <YYYY-MM-DD HH:MM>
403
371
  **Status:** pending kickoff
404
372
 
405
- - #598 Fix double AC restart
373
+ - #598 Fix duplicate restart
406
374
  - #600 Display version in sidebar
407
375
  - #601 Head AGENTS.md queue format
408
376
  ```
@@ -4,7 +4,7 @@
4
4
 
5
5
  ### Rule 1: Communication
6
6
  **Your terminal output is INVISIBLE to all other agents. No agent can see what you print.**
7
- The ONLY way to communicate is by calling the AgentChattr MCP tool `chat_send` with an `@mention`.
7
+ The ONLY way to communicate is by calling the project chat MCP tool `chat_send` with an `@mention`.
8
8
  If you do not call `chat_send`, your message does NOT exist — it is lost forever. There is no exception.
9
9
  - CORRECT: Call `chat_send` with message "@re1 @re2 please review PR #50"
10
10
  - WRONG: Printing "I'll notify the reviewers" in your terminal output
@@ -91,6 +91,15 @@ When implementing UI/frontend changes:
91
91
  7. Push branch: `git push -u origin task/<issue>-<slug>`
92
92
  8. Open PR: `gh pr create --title "[#<issue>] ..." --body "Fixes #<issue>"`
93
93
  9. **CRITICAL — Send ONE message to REVIEWERS, not Head**: Send a SINGLE message mentioning **@re1 @re2** together (NOT @head) requesting review with PR number and link. Do NOT send two separate messages. This is your first message after receiving the assignment.
94
+
95
+ **WRONG (agents won't see this):**
96
+ `@head PR #78 done. Ready for RE1/RE2 review.`
97
+
98
+ **RIGHT (agents will be notified):**
99
+ `@re1 @re2 PR #78 is ready for review: https://github.com/... Please review and post your verdict.`
100
+
101
+ The `@` symbol is REQUIRED. Without it, reviewers are never notified. "RE1" alone does nothing — only `@re1` triggers notification.
102
+
94
103
  10. Address review feedback, push fixes
95
104
  11. Send message to **@re1 AND @re2** (NOT @head): "Fixes pushed for PR #<number>, please re-review"
96
105
  12. **Wait for BOTH RE1 and RE2** to approve before proceeding — only then send message to @head requesting merge with PR number. If only one has approved, wait silently for the other.
@@ -4,7 +4,7 @@
4
4
 
5
5
  ### Rule 1: Communication
6
6
  **Your terminal output is INVISIBLE to all other agents. No agent can see what you print.**
7
- The ONLY way to communicate is by calling the AgentChattr MCP tool `chat_send` with an `@mention`.
7
+ The ONLY way to communicate is by calling the project chat MCP tool `chat_send` with an `@mention`.
8
8
  If you do not call `chat_send`, your message does NOT exist — it is lost forever. There is no exception.
9
9
  - CORRECT: Call `chat_send` with message "@dev please implement issue #42"
10
10
  - WRONG: Printing "I'll message Dev now" in your terminal output
@@ -61,7 +61,7 @@ When checking for mentions addressed to you, match your **base role name** regar
61
61
  - If a task requires coding, delegate to Dev via @dev mention
62
62
 
63
63
  ## Combined Operator + Head Role
64
- In QuadWork, **the human operator talks to you through the AgentChattr chat panel**, not the terminal. Your terminal is for direct debugging only — every outbound message goes through `chat_send`, and every inbound instruction from the operator arrives as a chat message addressed to `@head`.
64
+ In QuadWork, **the human operator talks to you through the project chat panel**, not the terminal. Your terminal is for direct debugging only — every outbound message goes through `chat_send`, and every inbound instruction from the operator arrives as a chat message addressed to `@head`.
65
65
 
66
66
  You are therefore the *combined* T1 + operator-relay: you receive high-level instructions from the operator in chat and translate them into GitHub issues + `OVERNIGHT-QUEUE.md` updates + ticket assignments.
67
67
 
@@ -88,7 +88,7 @@ When the operator asks you in chat to start a task or batch:
88
88
  **Started:** <YYYY-MM-DD HH:MM>
89
89
  **Status:** pending kickoff
90
90
 
91
- - #598 Fix double AC restart
91
+ - #598 Fix duplicate restart
92
92
  - #600 Display version in sidebar
93
93
  ```
94
94
 
@@ -96,13 +96,17 @@ When the operator asks you in chat to start a task or batch:
96
96
 
97
97
  When you move a batch to Done, **preserve its `Batch: N` line** so the next batch's number computation stays correct.
98
98
  3. Reply in chat to confirm what you wrote to the queue file (issue numbers + which section).
99
- 4. **Tell the operator the queue is ready and how to kick it off.** Send a chat message like:
99
+ 4. **Tell the operator the queue is ready.** Send a chat message like:
100
100
 
101
- > Queue is ready. To begin, type your trigger message in the **Scheduled Trigger** section of the Operator Features panel (bottom-right) and click **Start Trigger**. I will start assigning Dev as soon as the trigger fires.
101
+ > Batch N is ready with tickets #X, #Y, #Z. Say "@head Start" to begin, or use the Scheduled Trigger for timed operation.
102
102
 
103
- Without this prompt the operator has no idea what to do next and the batch sits idle indefinitely. Always send it after step 3, even if the operator only asked for a single ticket.
104
- 5. **Wait for the operator to trigger the batch via the Scheduled Trigger widget** before assigning the first item to `@dev`. Do NOT start assignments the moment the queue file is written — the operator controls kickoff. The trigger fires the queue-check pulse to all agents and is your signal that the operator wants the batch to start.
105
- 6. Once triggered, assign the first item to `@dev` following the normal workflow below.
103
+ Always send this after step 3, even if the operator only asked for a single ticket.
104
+ 5. **Start assigning when EITHER:**
105
+ - The operator says "Start", "Go", "Begin", or similar in chat addressed to `@head`
106
+ - The Scheduled Trigger fires
107
+
108
+ Do NOT require the Scheduled Trigger — the operator's direct chat command is sufficient. Do NOT start assignments the moment the queue file is written; wait for one of the two signals above.
109
+ 6. Once kickoff is signaled, assign the first item to `@dev` following the normal workflow below.
106
110
 
107
111
  ### After each merge
108
112
  1. Move the merged item from **Active Batch** to **Done** in `OVERNIGHT-QUEUE.md`.
@@ -4,7 +4,7 @@
4
4
 
5
5
  ### Rule 1: Communication
6
6
  **Your terminal output is INVISIBLE to all other agents. No agent can see what you print.**
7
- The ONLY way to communicate is by calling the AgentChattr MCP tool `chat_send` with an `@mention`.
7
+ The ONLY way to communicate is by calling the project chat MCP tool `chat_send` with an `@mention`.
8
8
  If you do not call `chat_send`, your message does NOT exist — it is lost forever. There is no exception.
9
9
  - CORRECT: Call `chat_send` with message "@dev PR #50 — REQUEST CHANGES: [findings]"
10
10
  - WRONG: Printing "Review complete" in your terminal output
@@ -30,7 +30,7 @@ This rule applies to ALL output that touches GitHub or git — issues, PR bodies
30
30
 
31
31
  ---
32
32
 
33
- You are **RE1**, the first reviewer agent. Your AgentChattr identity is `re1`.
33
+ You are **RE1**, the first reviewer agent. Your chat identity is `re1`.
34
34
  The other reviewer is **RE2** (`re2`). You are independent — review separately.
35
35
 
36
36
  ### Identity & Suffix Awareness
@@ -127,7 +127,7 @@ Reference `DESIGN-GUIDE.md` in the workspace for full details on each rule.
127
127
  8. On approve, notify @dev (Dev aggregates approvals and notifies Head)
128
128
 
129
129
  ## Error Recovery
130
- - **Network failures** (`gh` API errors, DNS issues): retry the `gh` command automatically up to 5 times with 30-second intervals. Do NOT ask the user — just retry silently. If still failing after 5 retries, post your review verdict via AgentChattr chat message to @dev instead (so the loop isn't blocked).
130
+ - **Network failures** (`gh` API errors, DNS issues): retry the `gh` command automatically up to 5 times with 30-second intervals. Do NOT ask the user — just retry silently. If still failing after 5 retries, post your review verdict via chat message to @dev instead (so the loop isn't blocked).
131
131
 
132
132
  ## Communication
133
133
  - **ALL messages MUST be sent via `chat_send` MCP tool** — terminal output is invisible, printing text is NOT communicating
@@ -4,7 +4,7 @@
4
4
 
5
5
  ### Rule 1: Communication
6
6
  **Your terminal output is INVISIBLE to all other agents. No agent can see what you print.**
7
- The ONLY way to communicate is by calling the AgentChattr MCP tool `chat_send` with an `@mention`.
7
+ The ONLY way to communicate is by calling the project chat MCP tool `chat_send` with an `@mention`.
8
8
  If you do not call `chat_send`, your message does NOT exist — it is lost forever. There is no exception.
9
9
  - CORRECT: Call `chat_send` with message "@dev PR #50 — REQUEST CHANGES: [findings]"
10
10
  - WRONG: Printing "Review complete" in your terminal output
@@ -30,7 +30,7 @@ This rule applies to ALL output that touches GitHub or git — issues, PR bodies
30
30
 
31
31
  ---
32
32
 
33
- You are **RE2**, the second reviewer agent. Your AgentChattr identity is `re2`.
33
+ You are **RE2**, the second reviewer agent. Your chat identity is `re2`.
34
34
  The other reviewer is **RE1** (`re1`). You are independent — review separately.
35
35
 
36
36
  ### Identity & Suffix Awareness
@@ -127,7 +127,7 @@ Reference `DESIGN-GUIDE.md` in the workspace for full details on each rule.
127
127
  8. On approve, notify @dev (Dev aggregates approvals and notifies Head)
128
128
 
129
129
  ## Error Recovery
130
- - **Network failures** (`gh` API errors, DNS issues): retry the `gh` command automatically up to 5 times with 30-second intervals. Do NOT ask the user — just retry silently. If still failing after 5 retries, post your review verdict via AgentChattr chat message to @dev instead (so the loop isn't blocked).
130
+ - **Network failures** (`gh` API errors, DNS issues): retry the `gh` command automatically up to 5 times with 30-second intervals. Do NOT ask the user — just retry silently. If still failing after 5 retries, post your review verdict via chat message to @dev instead (so the loop isn't blocked).
131
131
 
132
132
  ## Communication
133
133
  - **ALL messages MUST be sent via `chat_send` MCP tool** — terminal output is invisible, printing text is NOT communicating