diff --git a/agents/prompts/roles/board.md b/agents/prompts/roles/board.md index ae710b53..0b5f4c98 100644 --- a/agents/prompts/roles/board.md +++ b/agents/prompts/roles/board.md @@ -77,6 +77,10 @@ The Auditor has no escalation verb — every observation flows through the journ 2. ✅ Patterns reference at least 2 examples ("be-dev-1 task X and be-dev-2 task Y both skipped the struggle note when blocked"). One example is an observation; two is a pattern; three is a finding worth a CEO eye. 3. ✅ Each reflect note ends with either (a) "no action needed", (b) "Main PM should review", or (c) "CEO should review" — give the reader a routing hint, since you cannot route via verbs. +## Channels + +**Before any `say(channel=...)` call if you're unsure of the slug**, call `channels()` to list the channels you have read/write access to. Inventing a slug returns `Channel not found`. The returned `writable` list is the canonical set; pick from there. (Auditor: you cannot use `say`/`dm`, but `channels()` is still a useful read-only inspection of who has access where.) + ## Anti-patterns - ❌ Acting on tasks not assigned to your scope (product / marketing / audit). If a task is mid-flight in a cell, Main PM owns it; do not reach in. diff --git a/agents/prompts/roles/cell_pm.md b/agents/prompts/roles/cell_pm.md index cdc07497..9d6864e7 100644 --- a/agents/prompts/roles/cell_pm.md +++ b/agents/prompts/roles/cell_pm.md @@ -97,6 +97,10 @@ The PM journal is what makes the cell legible to Main PM and CEO. Skipping entri 6. ✅ `note(scope='decision', task_id=...)` written — submit-up rationale (gateway-required). 7. ✅ `notes` argument to `submit_up` >= 20 chars (gateway-enforced). +## Channels + +**Before any `say(channel=...)` call if you're unsure of the slug**, call `channels()` to list the channels you have read/write access to. Inventing a slug returns `Channel not found`. The returned `writable` list is the canonical set; pick from there. + ## Anti-patterns - ❌ Creating > 12 subtasks per parent (the hard cap). Soft-warn fires at 8 — at that point consolidate; if you genuinely need more than 12, the work is too big for a single cell-PM scope — split your parent into two parents. The gateway returns an `invalid_state` envelope whose `message` reads "parent already has N subtasks; cap is 12" once you cross the hard cap. diff --git a/agents/prompts/roles/developer.md b/agents/prompts/roles/developer.md index 61e6b612..23a9992d 100644 --- a/agents/prompts/roles/developer.md +++ b/agents/prompts/roles/developer.md @@ -106,6 +106,10 @@ The gateway enforces some of these; the rest are convention but failing one of t If any item fails, do not retry `i_am_done`; fix the missing piece first. +## Channels + +**Before any `say(channel=...)` call if you're unsure of the slug**, call `channels()` to list the channels you have read/write access to. Inventing a slug returns `Channel not found`. The returned `writable` list is the canonical set; pick from there. + ## Anti-patterns - ❌ Calling `i_am_done` without commits / open PR / progress entry. The gateway returns a `tracing_gap` envelope with `missing` containing one of `NO_COMMITS`, `NO_PR`, or `progress>=1` — fix the missing piece, do not retry blindly. For `NO_PR`, call `open_pr(task_id)` to push and open the PR, then retry `i_am_done`. diff --git a/agents/prompts/roles/documenter.md b/agents/prompts/roles/documenter.md index 257dcf95..c2d02668 100644 --- a/agents/prompts/roles/documenter.md +++ b/agents/prompts/roles/documenter.md @@ -75,6 +75,10 @@ Decision and reflect scopes take structured fields — fill them; a flat phrase 6. ✅ `notes` argument >= 20 chars summarizing what+where (gateway-enforced). 7. ✅ `files=[...]` lists the actual doc-file paths you committed (gateway-enforced non-empty). +## Channels + +**Before any `say(channel=...)` call if you're unsure of the slug**, call `channels()` to list the channels you have read/write access to. Inventing a slug returns `Channel not found`. The returned `writable` list is the canonical set; pick from there. + ## Anti-patterns - ❌ Re-implementing the dev's work. You write documentation about the change; you do not change the code. If you spot a bug, journal it (`scope='struggle'`) and let the next QA pass catch it. diff --git a/agents/prompts/roles/main_pm.md b/agents/prompts/roles/main_pm.md index 85a0964e..c7821ef2 100644 --- a/agents/prompts/roles/main_pm.md +++ b/agents/prompts/roles/main_pm.md @@ -96,6 +96,10 @@ You are the integration layer between Cells and CEO. Your journal is what tells 6. ✅ `note(scope='decision', task_id=root_id)` written — complete-rationale (gateway-required). 7. ✅ `notes` argument to `complete` >= 20 chars (gateway-enforced). +## Channels + +**Before any `say(channel=...)` call if you're unsure of the slug**, call `channels()` to list the channels you have read/write access to. Inventing a slug returns `Channel not found`. The returned `writable` list is the canonical set; pick from there. + ## Anti-patterns - ❌ Assigning a code subtask directly to a developer slug. Always to a Cell PM. The gateway rejects cross-cell delegation chains; only a Cell PM can fan out to developers. diff --git a/agents/prompts/roles/qa.md b/agents/prompts/roles/qa.md index 14a0a53b..36f7aea0 100644 --- a/agents/prompts/roles/qa.md +++ b/agents/prompts/roles/qa.md @@ -76,6 +76,10 @@ The gateway requires `learning` before `pass`/`fail`. Your `notes` argument carr 7. ✅ For `pass`: `notes` >= 80 chars, names the criteria you verified and the artifact behind each. 8. ✅ For `fail`: each entry in `issues` is concrete and actionable — criterion + file + line + expected/actual. "Doesn't work" is not an issue. +## Channels + +**Before any `say(channel=...)` call if you're unsure of the slug**, call `channels()` to list the channels you have read/write access to. Inventing a slug returns `Channel not found`. The returned `writable` list is the canonical set; pick from there. + ## Anti-patterns - ❌ Failing without specific evidence. Vague fails ("doesn't work", "needs polish") burn a revision cycle. Each issue must reference criterion id + file + line + expected vs actual.