@bradheitmann/odin-sentinel 0.4.2 → 0.4.3
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.
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sentinel-coordination-protocol
|
|
3
3
|
description: "Operate and improve SCP governance for multi-agent teams: self-bootstrap and teardown of federated pods, generic role topology, TEAM PM / TEAM ODIN separation, minimal bootstrap receipts, terminal locator identity, control-plane non-implementation, delegation receipts, terminal/CMUX delivery proof and verdicts, heartbeat cadence, branch-visible claims, adversarial QA, finish audit, and safe skill dissemination. Use when introducing SCP v3.5; installing SCP skills/adapters for Codex, Claude Code, OpenCode, Droid, Crush, OpenHands, Goose, KiloCode, Cursor, Zed, Pi, or other local coding agents; assigning EXEC/TEAM/WORKER roles; or preventing premature activation from an uncommitted draft artifact."
|
|
4
|
-
version: 3.6.
|
|
4
|
+
version: 3.6.1
|
|
5
5
|
updated: 2026-05-11
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Sentinel Coordination Protocol
|
|
9
9
|
|
|
10
|
-
Use this skill for SCP policy introduction, repo landing, adoption-gate proof, controlled dissemination, active multi-agent control loops, and automated team lifecycle management. SCP is a governance layer for multi-team agent operation; it
|
|
10
|
+
Use this skill for SCP policy introduction, repo landing, adoption-gate proof, controlled dissemination, active multi-agent control loops, and automated team lifecycle management. SCP is a governance layer for multi-team agent operation; it complements other coordination layers and `AGENTS.md` files where present. It sits above them after activation.
|
|
11
11
|
|
|
12
12
|
## Source Of Truth
|
|
13
13
|
|
|
@@ -25,22 +25,22 @@ Portable curated skill/session records may live under the skill directory, for e
|
|
|
25
25
|
|
|
26
26
|
- Treat SCP packages or protocol bundles imported from Downloads, temp directories, external artifacts, narrative reports, or uncommitted checkouts as drafts until a repo-capable agent lands them under the canonical repo path and records proof.
|
|
27
27
|
- Do not activate SCP from Downloads, a temp directory, an uncommitted checkout, or a narrative report.
|
|
28
|
-
- Keep the pre-activation exception intact: the current `EXEC PM` may continue hands-on hygiene, planning, governance-artifact, and ledger-bootstrap work until
|
|
28
|
+
- Keep the pre-activation exception intact: the current `EXEC PM` may continue hands-on hygiene, planning, governance-artifact, and ledger-bootstrap work until the user or designated authority explicitly declares transition after the adoption gate clears. `codex-pm` is a legacy/session alias for a pane currently acting as `EXEC PM`; it is not a role name.
|
|
29
29
|
- Make every closure claim claim-bound. Lifecycle closure requires both branch-visible persistence and QA-accepted correctness.
|
|
30
30
|
- Require adversarial QA. A summary, spot-check, liveness check, or "looks good" is not QA acceptance.
|
|
31
31
|
- Keep agents interchangeable by role, not by blurred authority. Any supported harness may serve any role only after it has a clean boot block declaring the current role, write scope, branch, cwd, model/harness, and proof source. The same assignment must not QA and close its own work.
|
|
32
32
|
- Preserve strict scope. Governance/package work cannot mutate product code, Loop runtime, design prototypes, operational-team work product, or lifecycle state unless explicitly authorized.
|
|
33
33
|
- Use zero-secret-output behavior. Never print tokens, API keys, OAuth material, or config values. Report secret presence by name/count/status only.
|
|
34
34
|
- Under SCP, team topology is the audit surface. If work is not visible in CMUX, it is not governed work.
|
|
35
|
-
- Preserve official SCP team topology. Once `EXEC PM` has bootstrapped the executive office and pods, role-named CMUX panes/surfaces are immutable operating slots. Do not close, delete, rename, repurpose, or replace the slot itself unless
|
|
35
|
+
- Preserve official SCP team topology. Once `EXEC PM` has bootstrapped the executive office and pods, role-named CMUX panes/surfaces are immutable operating slots. Do not close, delete, rename, repurpose, or replace the slot itself unless the user explicitly authorizes that exact slot mutation.
|
|
36
36
|
- Treat agents as occupants of durable role slots. If a model/harness is blocked, stale, over budget, in plan mode, context-exhausted, or wrong for the task, clear, restart, exit, or substitute the agent occupant inside the existing role slot. Do not remove the CMUX pane/surface.
|
|
37
|
-
- Do not create extra panes, extra workers, hidden assistants, invisible subagents, or ad hoc capacity during an active SCP run unless
|
|
37
|
+
- Do not create extra panes, extra workers, hidden assistants, invisible subagents, or ad hoc capacity during an active SCP run unless the user explicitly authorizes topology expansion. `EXEC PM` must route work to official roles already present in CMUX.
|
|
38
38
|
- Do not use invisible internal subagents, hidden background forks, non-terminal model assistants, or `spawn_agent` while SCP is active. Delegation must be visible through CMUX/terminal surfaces, boot receipts, terminal locators, delivery proof, and ODIN polling.
|
|
39
39
|
- `$delegate` under SCP means governed visible delegation to an existing CMUX role slot. It does not authorize hidden model fan-out, off-ledger research, or new worker invention.
|
|
40
40
|
- Enforce model/harness diversity and cost discipline. SCP must distribute work across available inference sources and avoid concentrating routine work in ChatGPT/Codex, Claude Code, or any single scarce quota pool.
|
|
41
|
-
- Current local policy: Gemini models are not assigned during SCP runs unless
|
|
42
|
-
- Claude Code is limited to one active instance per pod by default unless
|
|
43
|
-
- If `EXEC PM` believes a specialized model/harness outside the current team topology is required, it must stop and ping
|
|
41
|
+
- Current local policy: Gemini models are not assigned during SCP runs unless the user explicitly reauthorizes Gemini for a named task. If this is later relaxed, record it as a model-mix policy update.
|
|
42
|
+
- Claude Code is limited to one active instance per pod by default unless the user explicitly authorizes an exception.
|
|
43
|
+
- If `EXEC PM` believes a specialized model/harness outside the current team topology is required, it must stop and ping the user with: exact need, why existing visible roles cannot do it, proposed model/harness, cost tier, scope, expiry condition, and risk if not added.
|
|
44
44
|
- `A/EXEC-PM` is the sole staffing authority. No TEAM PM staffs its own pod or any other pod. No worker spawns capacity. Any staffing action originating outside `A/EXEC-PM` is a protocol breach. TEAM PMs needing more staff must escalate to `A/EXEC-PM` and not act.
|
|
45
45
|
- `A/EXEC-PM` is the sole CMUX surface custodian. `cmux new-split`, `cmux new-surface`, `cmux move-surface`, `cmux close-surface`, and `cmux drag-surface-to-split` are EXEC-PM-only operations. TEAM PMs and workers do not split, move, or close panes.
|
|
46
46
|
- Surface layout follows the canonical packing rule: max two surfaces per column, equal column widths, Team A in column 0, Team A alone in the tall column when team count is odd and at least 3. See the Surface Layout Custodianship section for the full algorithm and pre-staffing gate.
|
|
@@ -77,13 +77,13 @@ SCP role names are generic. Do not bind authority to model names, harness names,
|
|
|
77
77
|
Preferred role taxonomy:
|
|
78
78
|
|
|
79
79
|
- `EXEC PM`: owns intent, priority, authorization, escalation, and final branch-visible claim framing.
|
|
80
|
-
- `EXEC ODIN`: executive-office meta-control role. Reports to
|
|
80
|
+
- `EXEC ODIN`: executive-office meta-control role. Reports to user authority, not to `EXEC PM`; watches governance health, polling, delivery, permission waits, role boundaries, cross-team ODIN mesh state, and closeout hygiene. Coordinates with `EXEC PM` as a coequal control-plane partner and may advise, prod, freeze, or escalate, but does not implement, QA-accept, expand scope, or act as another assistant by default.
|
|
81
81
|
- `EXEC ASST`: owns CMUX delivery proof, heartbeat ledger, pane inventory, artifact index, reminders, and "did the command land?" checks.
|
|
82
82
|
- `EXEC DISPATCH` / `SWITCHBOARD`: optional executive-office attention router. Owns CMUX notification watching, waiting-agent detection, short relay pings to responsible PM/ODIN roles, and provider/harness routing recommendations according to declared policy and health. Does not approve permissions, expand scope, implement, QA-accept, or synthesize beyond routing summaries unless separately authorized.
|
|
83
83
|
- `EXEC RSCH`: read-only strategy, research, alternatives, context recovery, and architectural risk analysis.
|
|
84
84
|
- `EXEC QA`: independent adversarial audit of process, evidence, closure language, branch proof, and drift.
|
|
85
85
|
- `TEAM PM`: pod-level task router and assignment owner. Receives assignments from `EXEC PM`, activates pod workers, coordinates with `TEAM ODIN`, and reports pod state. Does not implement or QA-close by default.
|
|
86
|
-
- `TEAM ODIN`: pod-level meta-control role. Reports to
|
|
86
|
+
- `TEAM ODIN`: pod-level meta-control role. Reports to user authority through the ODIN layer while coordinating with, not subordinating to, `TEAM PM`. Monitors panes, polls lane health, intervenes on blockers, freezes unsafe work, reports health, and maintains lateral ODIN mesh awareness. Does not implement.
|
|
87
87
|
- `DEV WORKER`: bounded implementation inside exact write scope with evidence.
|
|
88
88
|
- `QA WORKER`: independent adversarial QA inside exact review scope. Cannot QA own work or self-close.
|
|
89
89
|
- `SHADOW REVIEWER`: read-only drift, stale-proof, scope, validator, and evidence watcher.
|
|
@@ -124,23 +124,23 @@ Every boot receipt and team manifest should include a `terminal_locator` block.
|
|
|
124
124
|
|
|
125
125
|
```yaml
|
|
126
126
|
terminal_locator:
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
127
|
+
terminal_app: cmux | tmux | wezterm | iterm2 | ghostty | warp | cursor | zed | vscode | unknown
|
|
128
|
+
terminal_adapter: cmux | tmux | libghostyy | apple_script | cli | ide_terminal | unavailable
|
|
129
|
+
workspace_ref: <workspace:1 | tmux-session | unavailable>
|
|
130
|
+
workspace_id: <uuid-or-stable-id | unavailable>
|
|
131
|
+
window_ref: <window:1 | tmux-window | unavailable>
|
|
132
|
+
window_id: <uuid-or-stable-id | unavailable>
|
|
133
|
+
pane_ref: <pane:47 | %3 | unavailable>
|
|
134
|
+
pane_id: <uuid-or-stable-id | unavailable>
|
|
135
|
+
surface_ref: <surface:40 | tab/pane route | unavailable>
|
|
136
|
+
surface_id: <uuid-or-stable-id | unavailable>
|
|
137
|
+
tab_ref: <tab:40 | unavailable>
|
|
138
|
+
tab_id: <uuid-or-stable-id | unavailable>
|
|
139
|
+
surface_type: terminal | browser | editor | unknown
|
|
140
|
+
title: <visible pane/tab title>
|
|
141
|
+
route_command: <non-secret command or unavailable>
|
|
142
|
+
locator_source: <command/tool/observation used>
|
|
143
|
+
locator_captured_at: <ISO-8601 timestamp or unavailable>
|
|
144
144
|
```
|
|
145
145
|
|
|
146
146
|
For CMUX, prefer `cmux --json --id-format both identify` or equivalent because it exposes both human-short refs and UUIDs. For tmux, capture session/window/pane using `tmux display-message -p`; tmux pane ids like `%3` are the native stable handle inside a server, not UUIDs. For WezTerm, use its CLI/json pane/window/tab ids where available. For iTerm2/Ghostty/Warp/IDE terminals, record the strongest scriptable locator available and mark the rest `unavailable`.
|
|
@@ -151,36 +151,36 @@ If a terminal adapter exposes libghostty-vt or a congruent virtual-terminal API,
|
|
|
151
151
|
|
|
152
152
|
```yaml
|
|
153
153
|
vt_state_snapshot:
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
154
|
+
vt_provider: libghostty-vt | terminal-capture | unavailable
|
|
155
|
+
vt_api_stability: work_in_progress_unstable | stable | unknown
|
|
156
|
+
terminal_instance_ref: <GhosttyTerminal handle/ref or unavailable>
|
|
157
|
+
terminal_instance_id: <product-generated id or unavailable>
|
|
158
|
+
pty_ref: <pty/process route or unavailable>
|
|
159
|
+
capture_source: <formatter | render_state | grid_ref | read_screen | unavailable>
|
|
160
|
+
formatter_format: plain | vt | html | unavailable
|
|
161
|
+
rows: <GHOSTTY_TERMINAL_DATA_ROWS or unavailable>
|
|
162
|
+
cols: <GHOSTTY_TERMINAL_DATA_COLS or unavailable>
|
|
163
|
+
total_rows: <GHOSTTY_TERMINAL_DATA_TOTAL_ROWS or unavailable>
|
|
164
|
+
scrollback_rows: <GHOSTTY_TERMINAL_DATA_SCROLLBACK_ROWS or unavailable>
|
|
165
|
+
width_px: <GHOSTTY_TERMINAL_DATA_WIDTH_PX or unavailable>
|
|
166
|
+
height_px: <GHOSTTY_TERMINAL_DATA_HEIGHT_PX or unavailable>
|
|
167
|
+
active_screen: primary | alternate | unavailable
|
|
168
|
+
cursor_x: <GHOSTTY_TERMINAL_DATA_CURSOR_X or unavailable>
|
|
169
|
+
cursor_y: <GHOSTTY_TERMINAL_DATA_CURSOR_Y or unavailable>
|
|
170
|
+
cursor_visible: true | false | unavailable
|
|
171
|
+
cursor_pending_wrap: true | false | unavailable
|
|
172
|
+
title: <GHOSTTY_TERMINAL_DATA_TITLE or unavailable>
|
|
173
|
+
pwd: <GHOSTTY_TERMINAL_DATA_PWD or unavailable>
|
|
174
|
+
render_dirty: false | partial | full | unavailable
|
|
175
|
+
semantic_prompt_observed: true | false | unavailable
|
|
176
|
+
semantic_input_observed: true | false | unavailable
|
|
177
|
+
semantic_output_observed: true | false | unavailable
|
|
178
|
+
paste_safety_checked: true | false | unavailable
|
|
179
|
+
paste_safe: true | false | unavailable
|
|
180
|
+
key_encoding_provider: libghostty-vt | terminal | unavailable
|
|
181
|
+
mouse_encoding_provider: libghostty-vt | terminal | unavailable
|
|
182
|
+
focus_encoding_provider: libghostty-vt | terminal | unavailable
|
|
183
|
+
snapshot_captured_at: <ISO-8601 timestamp or unavailable>
|
|
184
184
|
```
|
|
185
185
|
|
|
186
186
|
When using libghostty-vt, prefer formatter or render-state snapshots for repeated observation. `grid_ref` data is ephemeral and must be copied immediately because refs are invalidated by later terminal updates. Treat libghostty-vt's current public API as unstable unless the upstream project declares stability.
|
|
@@ -190,9 +190,9 @@ Cost-tier operating rule:
|
|
|
190
190
|
- Each role must declare model, harness, cost tier, and current cost-policy basis in `SCP_BOOT_RECEIPT`.
|
|
191
191
|
- Model/cost policy is local operating policy, not universal model truth. Refresh it when model availability, pricing, quota, or quality changes.
|
|
192
192
|
- Drift from the declared cost/model policy requires a checkpoint or freeze as applicable; do not hard-code stale pricing as governance truth.
|
|
193
|
-
- Bootstrap/session manifests should include non-secret `inference_provider_inventory`: provider, account tier, non-secret quota/balance class when
|
|
194
|
-
- Provider inventory is non-secret. Never record API keys, secret config values, OAuth material, or hidden account details. Record account/tier/token pool/balance class only when
|
|
195
|
-
- Current local provider policy: prefer Z.ai/GLM Coding Plan for routine supported coding tasks when operationally healthy because
|
|
193
|
+
- Bootstrap/session manifests should include non-secret `inference_provider_inventory`: provider, account tier, non-secret quota/balance class when the user supplied it, token pool, supported harnesses, marginal cost class, throughput risk, default use policy, and `last_verified_source` with date/source URL when the policy depends on external documentation.
|
|
194
|
+
- Provider inventory is non-secret. Never record API keys, secret config values, OAuth material, or hidden account details. Record account/tier/token pool/balance class only when the user explicitly supplied non-secret information.
|
|
195
|
+
- Current local provider policy: prefer Z.ai/GLM Coding Plan for routine supported coding tasks when operationally healthy because the user identified it as the lowest marginal-cost paid plan. This is a preference, not an unconditional mandate.
|
|
196
196
|
- Z.ai/GLM Coding Plan must use the documented Coding API base URL `https://api.z.ai/api/coding/paas/v4`, not the general API URL. Use subscription benefits only within documented supported tool/product scope. Treat supported tool lists as source-attributed and time-sensitive, not universal truth; record `last_verified_source` and verification date.
|
|
197
197
|
- If Z.ai/GLM has throughput, rate-limit, quality, auth, or tooling blockers, classify `PROVIDER_BLOCKER` or `COST_ROUTING_BLOCKED`, route through the visible fallback ladder, and record provider, token pool, reason, wait time if known, fallback selected, and result.
|
|
198
198
|
- Local server and local LLM lanes are normal visible role occupants and token pools, never hidden capacity. They require boot receipts, visible role slots, token-pool declaration, and at least one smoke/test or real assignment when activated and not explicitly standby.
|
|
@@ -204,47 +204,47 @@ Default model/harness profile is local operating policy, not universal model tru
|
|
|
204
204
|
|
|
205
205
|
```yaml
|
|
206
206
|
default_role_model_harness_profile:
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
207
|
+
EXEC_PM:
|
|
208
|
+
model: GPT-5.5
|
|
209
|
+
harness: Codex CLI
|
|
210
|
+
reasoning: high
|
|
211
|
+
EXEC_ODIN:
|
|
212
|
+
model: GPT-5.5
|
|
213
|
+
harness: Codex CLI
|
|
214
|
+
reasoning: xhigh
|
|
215
|
+
note: xhigh is the Codex max-reasoning equivalent when available.
|
|
216
|
+
EXEC_ASST:
|
|
217
|
+
model: Claude Haiku latest available
|
|
218
|
+
harness: Claude Code
|
|
219
|
+
reasoning: default_or_high_if_supported
|
|
220
|
+
EXEC_RSCH:
|
|
221
|
+
model: Kimi K2.6
|
|
222
|
+
harness: Droid
|
|
223
|
+
reasoning: high
|
|
224
|
+
EXEC_QA:
|
|
225
|
+
model: Kimi K2.6
|
|
226
|
+
harness: Droid
|
|
227
|
+
reasoning: high
|
|
228
|
+
TEAM_PM:
|
|
229
|
+
model: Claude Opus 4.7 or latest available Opus
|
|
230
|
+
harness: Claude Code
|
|
231
|
+
reasoning: high_if_supported
|
|
232
|
+
TEAM_ODIN:
|
|
233
|
+
model: GPT-5.5
|
|
234
|
+
harness: Codex CLI
|
|
235
|
+
reasoning: low
|
|
236
|
+
DEV_WORKER:
|
|
237
|
+
model: Kimi K2.6
|
|
238
|
+
harness: Droid
|
|
239
|
+
reasoning: high
|
|
240
|
+
QA_WORKER:
|
|
241
|
+
model: GLM-5.1
|
|
242
|
+
harness: Crush
|
|
243
|
+
reasoning: high
|
|
244
|
+
SHADOW_REVIEWER:
|
|
245
|
+
model: Kimi K2.6
|
|
246
|
+
harness: Droid
|
|
247
|
+
reasoning: high
|
|
248
248
|
```
|
|
249
249
|
|
|
250
250
|
Default worker fallback policy: if `Crush` fails for a worker-style role, try `Droid`; if both `Crush` and `Droid` fail, use `Claude Code` with Claude Sonnet 4.6 or the latest available Sonnet. For worker backup generally, prefer Kimi K2.6 on Droid or Claude Sonnet 4.6/latest Sonnet on Claude Code with high reasoning when supported.
|
|
@@ -255,19 +255,19 @@ Default operating architecture is a small executive office plus horizontally sca
|
|
|
255
255
|
- Each pod: `TEAM PM`, `TEAM ODIN`, `DEV WORKER`, `QA WORKER`, and optional `SHADOW REVIEWER`.
|
|
256
256
|
- Floaters: `INTEGRATION STEWARD` and `QUEUE TRIAGE` when branch integration or queue pressure warrants them.
|
|
257
257
|
|
|
258
|
-
During SCP setup/bootstrap, the named `EXEC PM` must ask
|
|
258
|
+
During SCP setup/bootstrap, the named `EXEC PM` must ask the user how many pods/teams he wants unless the user already specified topology. When useful, `EXEC PM` should briefly present grouping options. Default topology, when the user does not specify otherwise, is executive office plus one development pod. Default executive office: `A/EXEC-PM`, `A/EXEC-ODIN`, `A/EXEC-ASST`, `A/EXEC-RSCH`, and `A/EXEC-QA`. Default development pod: `<TEAM>/TEAM-PM`, `<TEAM>/ODIN`, `<TEAM>/DEV-1`, `<TEAM>/QA-1`, optional `<TEAM>/SHADOW-1`. Additional pods, floaters, specialized roles, or model/harness capacity outside this topology require the user authorization through `[SCP-TOPOLOGY-EXPANSION-REQUEST]`.
|
|
259
259
|
|
|
260
|
-
Specialized teams may require a team profile instead of the generic federated development pod. UX/design teams are not automatically treated as generic DEV/QA pods; preserve their prototype/design boundaries until
|
|
260
|
+
Specialized teams may require a team profile instead of the generic federated development pod. UX/design teams are not automatically treated as generic DEV/QA pods; preserve their prototype/design boundaries until the user or `EXEC PM` assigns a UX-specific topology.
|
|
261
261
|
|
|
262
|
-
`EXEC ODIN` is the executive ODIN primitive. Do not create separate default personal continuity, holdout, or watchdog roles unless
|
|
262
|
+
`EXEC ODIN` is the executive ODIN primitive. Do not create separate default personal continuity, holdout, or watchdog roles unless the user explicitly authorizes them. A resumed private continuity or holdout agent may exist outside the declared team topology when the user intentionally withholds or masks that role; it must not be treated as governed team capacity unless the user brings it into the visible topology.
|
|
263
263
|
|
|
264
|
-
`TEAM PM` and `TEAM ODIN` are complementary, not aliases. `TEAM PM` owns pod assignment routing and worker activation; `TEAM ODIN` owns governance/control integrity, polling, intervention, and role/scope enforcement. `TEAM ODIN` is not subordinate to `TEAM PM` and is not superior to it; it is a coequal meta-control layer accountable to
|
|
264
|
+
`TEAM PM` and `TEAM ODIN` are complementary, not aliases. `TEAM PM` owns pod assignment routing and worker activation; `TEAM ODIN` owns governance/control integrity, polling, intervention, and role/scope enforcement. `TEAM ODIN` is not subordinate to `TEAM PM` and is not superior to it; it is a coequal meta-control layer accountable to user authority and the ODIN mesh. Either may relay to workers only within the assignment contract, but neither implements or QA-closes by default.
|
|
265
265
|
|
|
266
266
|
Team PMs and team ODINs may coordinate laterally when needed, but lateral messages must be logged as coordination events. Top-down command is the default; lateral coordination is for dependency, blocker, or health propagation, not unsupervised work selection.
|
|
267
267
|
|
|
268
268
|
ODINs must establish a lateral ODIN mesh at bootstrap. `A/EXEC-ODIN` and each `TEAM ODIN` must exchange a short introduction containing role, team, reports-to/coordinates-with chain, team composition, active agent occupants, model/harness/cost tier, known blockers, and next poll time. This is a meta-communication layer, not command authority.
|
|
269
269
|
|
|
270
|
-
During active execution, `A/EXEC-ODIN` should run an ODIN round-robin health pass on a declared cadence, default 10 minutes unless
|
|
270
|
+
During active execution, `A/EXEC-ODIN` should run an ODIN round-robin health pass on a declared cadence, default 10 minutes unless the user or `EXEC PM` sets another cadence. The executive ODIN starts with its own executive-office health note, sends it to the first team ODIN, and instructs each team ODIN to append its short team composition/status/health note and forward to the next ODIN. The final team ODIN returns the appended packet to `A/EXEC-ODIN`. `A/EXEC-ODIN` compiles the packet, may ask `EXEC DISPATCH` / `SWITCHBOARD` for outstanding communication or waiting-agent notes, then sends a concise status report to `EXEC PM`.
|
|
271
271
|
|
|
272
272
|
ODIN mesh reports must stay short by default and include: team, active occupants, provider/model/harness mix, blocked agents, permission waits, plan-mode/quota/provider failures, role breaches, delivery failures, outstanding relays, and recommended intervention. ODINs may request temporary secondment of another control-plane agent through `EXEC PM` when a PM/ODIN lane fails, but they must not directly reassign agents or expand topology without authorization.
|
|
273
273
|
|
|
@@ -281,7 +281,7 @@ Definitions:
|
|
|
281
281
|
- `terminal_surface`: CMUX/tmux/terminal object hosting that slot.
|
|
282
282
|
- `agent_occupant`: current model/harness process inside that slot.
|
|
283
283
|
|
|
284
|
-
During active SCP operation, role slots must remain present in CMUX. Closing a role-named pane/surface is a topology mutation and requires explicit
|
|
284
|
+
During active SCP operation, role slots must remain present in CMUX. Closing a role-named pane/surface is a topology mutation and requires explicit the user authorization.
|
|
285
285
|
|
|
286
286
|
Allowed occupant-level remediation:
|
|
287
287
|
|
|
@@ -293,7 +293,7 @@ Allowed occupant-level remediation:
|
|
|
293
293
|
- mark the slot `VACANT_ROLE_SLOT`;
|
|
294
294
|
- mark the slot `AGENT_CONTEXT_RESET_REQUIRED`, `AGENT_RESTART_REQUIRED`, or `AGENT_SUBSTITUTION_REQUIRED`.
|
|
295
295
|
|
|
296
|
-
Forbidden without explicit
|
|
296
|
+
Forbidden without explicit the user authorization:
|
|
297
297
|
|
|
298
298
|
- closing a role-named pane/surface;
|
|
299
299
|
- deleting a role slot from CMUX;
|
|
@@ -302,7 +302,7 @@ Forbidden without explicit Brad authorization:
|
|
|
302
302
|
- renaming a role slot to serve a different role;
|
|
303
303
|
- moving work to a hidden or non-terminal agent.
|
|
304
304
|
|
|
305
|
-
If a role slot is accidentally closed, emit `[SCP-FREEZE]` or `[SCP-FEEDBACK]`, classify `ROLE_SLOT_CLOSURE_VIOLATION`, and record the restoration or next-run correction requirement. When possible, recreate or re-reserve the same role slot, mark the prior occupant `AGENT_STOOD_DOWN` or lost, and require
|
|
305
|
+
If a role slot is accidentally closed, emit `[SCP-FREEZE]` or `[SCP-FEEDBACK]`, classify `ROLE_SLOT_CLOSURE_VIOLATION`, and record the restoration or next-run correction requirement. When possible, recreate or re-reserve the same role slot, mark the prior occupant `AGENT_STOOD_DOWN` or lost, and require the user or `A/EXEC-PM` reconciliation before any clean, ready, closure, or finish claim.
|
|
306
306
|
|
|
307
307
|
Plan-mode and read-only blockers are occupant state failures, not topology failures. They trigger `AGENT_SUBSTITUTION_REQUIRED`, `AGENT_CONTEXT_RESET_REQUIRED`, or operator exit from plan mode inside the same role slot. They do not justify hidden subagents, invisible delegation, or new panes.
|
|
308
308
|
|
|
@@ -314,15 +314,15 @@ Default official grouping:
|
|
|
314
314
|
|
|
315
315
|
- Executive office: `A/EXEC-PM`, `A/EXEC-ODIN`, `A/EXEC-ASST`, `A/EXEC-RSCH`, `A/EXEC-QA`.
|
|
316
316
|
- Each pod: `<TEAM>/TEAM-PM`, `<TEAM>/ODIN`, `<TEAM>/DEV-1`, `<TEAM>/QA-1`, optional `<TEAM>/SHADOW-1`.
|
|
317
|
-
- Optional official executive support roles only when intentionally bootstrapped or
|
|
317
|
+
- Optional official executive support roles only when intentionally bootstrapped or user-authorized: `A/EXEC-DISPATCH`, `A/SWITCHBOARD`, `A/INTEGRATION-STEWARD`, `A/QUEUE-TRIAGE`, or named specialized roles.
|
|
318
318
|
|
|
319
319
|
`EXEC PM` must route work to the appropriate existing role, not to any convenient model. The first routing question is always:
|
|
320
320
|
|
|
321
321
|
> Which existing CMUX role owns this work?
|
|
322
322
|
|
|
323
|
-
If no existing role is appropriate, `EXEC PM` must request
|
|
323
|
+
If no existing role is appropriate, `EXEC PM` must request the user authorization before creating capacity.
|
|
324
324
|
|
|
325
|
-
Active SCP visible role-slot rules override generic external
|
|
325
|
+
Active SCP visible role-slot rules override generic external subagent language while SCP is active. Generic external coordination concepts may describe Dev/QA capacity, but under SCP that capacity must be represented by visible CMUX role slots unless the user authorizes topology expansion.
|
|
326
326
|
|
|
327
327
|
## Surface Layout Custodianship
|
|
328
328
|
|
|
@@ -338,14 +338,14 @@ Surface layout follows a deterministic packing rule:
|
|
|
338
338
|
Reference layouts (slash separates stacked surfaces in a column, single bracket = single surface):
|
|
339
339
|
|
|
340
340
|
```
|
|
341
|
-
N=1
|
|
342
|
-
N=2
|
|
343
|
-
N=3
|
|
344
|
-
N=4
|
|
345
|
-
N=5
|
|
346
|
-
N=6
|
|
347
|
-
N=7
|
|
348
|
-
N=8
|
|
341
|
+
N=1 [A]
|
|
342
|
+
N=2 [A] [B]
|
|
343
|
+
N=3 [A] [B/C] ← A tall, B+C stacked
|
|
344
|
+
N=4 [A/D] [B/C] ← balanced
|
|
345
|
+
N=5 [A] [B/C] [D/E] ← new column, A returns to tall
|
|
346
|
+
N=6 [A/F] [B/C] [D/E] ← balanced
|
|
347
|
+
N=7 [A] [B/C] [D/E] [F/G]
|
|
348
|
+
N=8 [A/H] [B/C] [D/E] [F/G]
|
|
349
349
|
```
|
|
350
350
|
|
|
351
351
|
### Pre-Staffing Gate
|
|
@@ -366,7 +366,7 @@ When the odin-sentinel MCP server is not available (rare; the published `@bradhe
|
|
|
366
366
|
|
|
367
367
|
Under SCP, `$delegate` is constrained by visible CMUX topology.
|
|
368
368
|
|
|
369
|
-
Delegation must target an existing role slot unless
|
|
369
|
+
Delegation must target an existing role slot unless the user authorizes topology expansion. A valid delegation target must have:
|
|
370
370
|
|
|
371
371
|
- role identity;
|
|
372
372
|
- terminal locator;
|
|
@@ -388,9 +388,9 @@ Prohibited by default:
|
|
|
388
388
|
|
|
389
389
|
If the current occupant cannot perform the task, use the role's fallback ladder inside the same CMUX slot.
|
|
390
390
|
|
|
391
|
-
Hidden/internal subagent output produced during active SCP is non-governed and advisory only. It cannot support QA acceptance, closure, lifecycle mutation, branch-visible claims, evidence-gate satisfaction, policy synthesis, or dispatch decisions unless
|
|
391
|
+
Hidden/internal subagent output produced during active SCP is non-governed and advisory only. It cannot support QA acceptance, closure, lifecycle mutation, branch-visible claims, evidence-gate satisfaction, policy synthesis, or dispatch decisions unless the user explicitly records an `[SCP-EXCEPTION]` and reconciles provenance into the visible SCP ledger.
|
|
392
392
|
|
|
393
|
-
When `delegate` is invoked during active SCP, SCP topology rules override generic delegation behavior. `delegate` may compose instruction bundles and harness commands, but launch targets must be existing visible SCP role slots unless
|
|
393
|
+
When `delegate` is invoked during active SCP, SCP topology rules override generic delegation behavior. `delegate` may compose instruction bundles and harness commands, but launch targets must be existing visible SCP role slots unless the user authorizes topology expansion. `delegate` must not create hidden subagents, non-CMUX background workers, or off-ledger research capacity during active SCP.
|
|
394
394
|
|
|
395
395
|
## Role Occupant Fallback Ladders
|
|
396
396
|
|
|
@@ -408,188 +408,188 @@ When a role needs substitution:
|
|
|
408
408
|
|
|
409
409
|
Fallback may be triggered by quota exhaustion, plan mode blocking required work, missing tools, auth failure, context degradation, model/harness mismatch, cost guardrail violation, repeated low-quality output, or role breach.
|
|
410
410
|
|
|
411
|
-
Default ladders are local operating policy, not universal model truth. They are overridable only by
|
|
411
|
+
Default ladders are local operating policy, not universal model truth. They are overridable only by the user authorization or recorded `[SCP-EXCEPTION]`, and they must be refreshed when model availability, local harness health, pricing, quota, or quality changes.
|
|
412
412
|
|
|
413
413
|
```yaml
|
|
414
414
|
role_model_fallback_ladders:
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
415
|
+
EXEC_PM:
|
|
416
|
+
- model: GPT-5.5
|
|
417
|
+
harnesses: [codex]
|
|
418
|
+
reasoning: high
|
|
419
|
+
- model: Kimi K2.6
|
|
420
|
+
harnesses: [droid]
|
|
421
|
+
reasoning: high
|
|
422
|
+
- model: GLM-5.1
|
|
423
|
+
harnesses: [crush, opencode]
|
|
424
|
+
reasoning: high
|
|
425
|
+
|
|
426
|
+
EXEC_ODIN:
|
|
427
|
+
- model: GPT-5.5
|
|
428
|
+
harnesses: [codex]
|
|
429
|
+
reasoning: xhigh
|
|
430
|
+
- model: GPT-5.5
|
|
431
|
+
harnesses: [codex]
|
|
432
|
+
reasoning: high
|
|
433
|
+
- model: Kimi K2.6
|
|
434
|
+
harnesses: [droid]
|
|
435
|
+
reasoning: high
|
|
436
|
+
|
|
437
|
+
EXEC_ASST:
|
|
438
|
+
- model: Claude Haiku latest available
|
|
439
|
+
harnesses: [claude]
|
|
440
|
+
reasoning: default_or_high_if_supported
|
|
441
|
+
- model: MiniMax
|
|
442
|
+
harnesses: [droid]
|
|
443
|
+
reasoning: medium
|
|
444
|
+
- model: Kimi K2.6
|
|
445
|
+
harnesses: [droid]
|
|
446
|
+
reasoning: medium
|
|
447
|
+
|
|
448
|
+
EXEC_RSCH:
|
|
449
|
+
- model: Kimi K2.6
|
|
450
|
+
harnesses: [droid]
|
|
451
|
+
reasoning: high
|
|
452
|
+
- model: GLM-5.1
|
|
453
|
+
harnesses: [crush, opencode]
|
|
454
|
+
reasoning: high
|
|
455
|
+
- model: MiniMax
|
|
456
|
+
harnesses: [droid]
|
|
457
|
+
reasoning: medium
|
|
458
|
+
|
|
459
|
+
EXEC_QA:
|
|
460
|
+
- model: Kimi K2.6
|
|
461
|
+
harnesses: [droid]
|
|
462
|
+
reasoning: high
|
|
463
|
+
- model: GLM-5.1
|
|
464
|
+
harnesses: [crush, opencode]
|
|
465
|
+
reasoning: high
|
|
466
|
+
- model: Claude Sonnet latest available
|
|
467
|
+
harnesses: [claude]
|
|
468
|
+
reasoning: high_if_supported
|
|
469
|
+
|
|
470
|
+
TEAM_PM:
|
|
471
|
+
- model: Claude Opus 4.7 or latest available Opus
|
|
472
|
+
harnesses: [claude]
|
|
473
|
+
reasoning: high_if_supported
|
|
474
|
+
- model: Kimi K2.6
|
|
475
|
+
harnesses: [droid]
|
|
476
|
+
reasoning: high
|
|
477
|
+
- model: GPT-5.5
|
|
478
|
+
harnesses: [codex]
|
|
479
|
+
reasoning: high
|
|
480
|
+
|
|
481
|
+
TEAM_ODIN:
|
|
482
|
+
- model: GPT-5.5
|
|
483
|
+
harnesses: [codex]
|
|
484
|
+
reasoning: low
|
|
485
|
+
- model: Kimi K2.6
|
|
486
|
+
harnesses: [droid]
|
|
487
|
+
reasoning: high
|
|
488
|
+
- model: GLM-5.1
|
|
489
|
+
harnesses: [crush, opencode]
|
|
490
|
+
reasoning: medium
|
|
491
|
+
|
|
492
|
+
DEV_WORKER:
|
|
493
|
+
- model: Kimi K2.6
|
|
494
|
+
harnesses: [droid]
|
|
495
|
+
reasoning: high
|
|
496
|
+
- model: Claude Sonnet 4.6 or latest available Sonnet
|
|
497
|
+
harnesses: [claude]
|
|
498
|
+
reasoning: high_if_supported
|
|
499
|
+
limit: one_claude_code_per_pod
|
|
500
|
+
- model: GLM-5.1
|
|
501
|
+
harnesses: [crush, opencode]
|
|
502
|
+
reasoning: high
|
|
503
|
+
|
|
504
|
+
QA_WORKER:
|
|
505
|
+
- model: GLM-5.1
|
|
506
|
+
harnesses: [crush]
|
|
507
|
+
reasoning: high
|
|
508
|
+
- model: Kimi K2.6
|
|
509
|
+
harnesses: [droid]
|
|
510
|
+
reasoning: high
|
|
511
|
+
condition: if_crush_fails
|
|
512
|
+
- model: Claude Sonnet 4.6 or latest available Sonnet
|
|
513
|
+
harnesses: [claude]
|
|
514
|
+
reasoning: high_if_supported
|
|
515
|
+
condition: if_crush_and_droid_fail
|
|
516
|
+
|
|
517
|
+
SHADOW_REVIEWER:
|
|
518
|
+
- model: Kimi K2.6
|
|
519
|
+
harnesses: [droid]
|
|
520
|
+
reasoning: high
|
|
521
|
+
- model: Claude Sonnet 4.6 or latest available Sonnet
|
|
522
|
+
harnesses: [claude]
|
|
523
|
+
reasoning: high_if_supported
|
|
524
|
+
- model: GLM-5.1
|
|
525
|
+
harnesses: [crush, opencode]
|
|
526
|
+
reasoning: medium
|
|
527
|
+
|
|
528
|
+
INTEGRATION_STEWARD:
|
|
529
|
+
- model: GLM-5.1
|
|
530
|
+
harnesses: [crush, opencode]
|
|
531
|
+
reasoning: high
|
|
532
|
+
- model: Kimi K2.6
|
|
533
|
+
harnesses: [droid]
|
|
534
|
+
reasoning: high
|
|
535
|
+
- model: Claude Opus
|
|
536
|
+
harnesses: [claude]
|
|
537
|
+
reasoning: high
|
|
538
|
+
condition: Brad_authorized_high_risk_exception_only
|
|
539
|
+
|
|
540
|
+
QUEUE_TRIAGE:
|
|
541
|
+
- model: Kimi K2.6
|
|
542
|
+
harnesses: [droid]
|
|
543
|
+
reasoning: medium
|
|
544
|
+
- model: MiniMax
|
|
545
|
+
harnesses: [droid]
|
|
546
|
+
reasoning: medium
|
|
547
|
+
- model: GLM-5.1
|
|
548
|
+
harnesses: [crush, opencode]
|
|
549
|
+
reasoning: medium
|
|
550
550
|
```
|
|
551
551
|
|
|
552
552
|
`SCP-TEAM-MANIFEST` must include model mix policy and per-slot occupant state:
|
|
553
553
|
|
|
554
554
|
```yaml
|
|
555
555
|
model_mix_policy:
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
556
|
+
scarce_quota_pools:
|
|
557
|
+
- chatgpt_codex
|
|
558
|
+
- claude_code
|
|
559
|
+
locally_disallowed_without_brad_reauth:
|
|
560
|
+
- gemini
|
|
561
|
+
hidden_subagents_allowed: false
|
|
562
|
+
role_slot_closure_allowed: false
|
|
563
|
+
topology_expansion_allowed_without_brad: false
|
|
564
|
+
max_claude_code_instances_per_pod: 1
|
|
565
|
+
min_distinct_inference_sources_per_pod: 3
|
|
566
|
+
dev_qa_same_provider_allowed: false
|
|
567
|
+
fallback_ladder_required: true
|
|
568
|
+
delegate_must_use_cmux_visible_roles: true
|
|
569
569
|
|
|
570
570
|
role_slot:
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
571
|
+
title: B/DEV-1
|
|
572
|
+
role: DEV WORKER
|
|
573
|
+
surface_ref:
|
|
574
|
+
current_occupant:
|
|
575
|
+
model:
|
|
576
|
+
harness:
|
|
577
|
+
reasoning:
|
|
578
|
+
cost_tier:
|
|
579
|
+
status:
|
|
580
|
+
fallback_ladder:
|
|
581
|
+
- model:
|
|
582
|
+
acceptable_harnesses:
|
|
583
|
+
reasoning:
|
|
584
|
+
substitution_trigger:
|
|
585
|
+
topology_mutable: false
|
|
586
586
|
```
|
|
587
587
|
|
|
588
588
|
## Self-Bootstrap Team Lifecycle
|
|
589
589
|
|
|
590
|
-
The preferred operating mode is one human-started `EXEC PM` pane that bootstraps, operates, and tears down the rest of the organization.
|
|
590
|
+
The preferred operating mode is one human-started `EXEC PM` pane that bootstraps, operates, and tears down the rest of the organization. the user should not have to manually create panes, name agents, invoke harnesses, or clean up temporary teams during normal SCP operation.
|
|
591
591
|
|
|
592
|
-
When
|
|
592
|
+
When the user asks `EXEC PM` to spin up teams, `EXEC PM` must load `references/team-bootstrap-runbook.md` and compose these supporting skills:
|
|
593
593
|
|
|
594
594
|
- `team-composition-patterns` for pod sizing and role coverage,
|
|
595
595
|
- `dispatching-parallel-agents` for independent workstream decomposition,
|
|
@@ -626,9 +626,9 @@ Teardown sequence:
|
|
|
626
626
|
3. Snapshot official topology before cleanup, classify each surface as official role slot vs temporary/ad hoc, and list any proposed closures.
|
|
627
627
|
4. Run post-run hygiene and cleanup QA.
|
|
628
628
|
5. Choose and record teardown mode:
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
6. For either mode, close panes/surfaces only after `[SCP-FINISH]`, handoff/session report, ODIN snapshot, and
|
|
629
|
+
- `PARK_FOR_CONTINUITY`: park official role slots as `BOOTSTRAPPED_IDLE`, `VACANT_ROLE_SLOT`, `AGENT_STOOD_DOWN`, `AGENT_CONTEXT_RESET_REQUIRED`, `AGENT_RESTART_REQUIRED`, or `AGENT_SUBSTITUTION_REQUIRED`; close only non-role temporary panes/surfaces listed as closable in `SCP-TEAM-MANIFEST`.
|
|
630
|
+
- `FULL_SESSION_SHUTDOWN`: when the user explicitly wants the session closed, collect handoffs first, then quit each agent occupant using the harness-specific quit/exit action, verify it actually exited, close the CMUX surface/pane, and leave only the user-designated retained surfaces. Do not rely on agents to self-prune; older occupants may not have the current SCP skill or may stop at stand-down without quitting.
|
|
631
|
+
6. For either mode, close panes/surfaces only after `[SCP-FINISH]`, handoff/session report, ODIN snapshot, and the user or recorded cleanup-policy authorization.
|
|
632
632
|
7. Leave standing executive/UX or explicitly retained panes parked with fresh restart instructions only when teardown mode is `PARK_FOR_CONTINUITY`.
|
|
633
633
|
|
|
634
634
|
The `EXEC PM` may automate CMUX setup and teardown, but destructive cleanup of worktrees, untracked files, or branch state still requires the same branch/scope/proof gates and explicit approval rules as the rest of SCP.
|
|
@@ -649,7 +649,7 @@ Control-plane roles include `EXEC PM`, `EXEC ODIN`, `EXEC ASST`, `EXEC RSCH`, `E
|
|
|
649
649
|
|
|
650
650
|
A control-plane pane may not self-reclassify as `DEV WORKER` or `QA WORKER`. Worker exception requires all of:
|
|
651
651
|
|
|
652
|
-
- explicit
|
|
652
|
+
- explicit the user or `EXEC PM` authorization naming the pane,
|
|
653
653
|
- proof downstream capacity is unavailable, blocked, or inappropriate,
|
|
654
654
|
- exact write/review scope and prohibited paths,
|
|
655
655
|
- independent QA assignment by a different pane,
|
|
@@ -658,7 +658,7 @@ A control-plane pane may not self-reclassify as `DEV WORKER` or `QA WORKER`. Wor
|
|
|
658
658
|
|
|
659
659
|
If a control-plane pane begins product/source/test implementation, authors worker evidence, or accepts QA without the exception record, emit `[SCP-FREEZE]` and classify it as a role breach.
|
|
660
660
|
|
|
661
|
-
Editing canonical skills, adapters, runtime skill copies, sync scripts, lifecycle ledgers, branch state, or policy text is a control-plane governance mutation and requires `[SCP-CONTROL-PLANE-MUTATION]` before or with the mutation. ODIN/control-plane roles must not self-accept governance mutations they authored. Acceptance requires independent QA,
|
|
661
|
+
Editing canonical skills, adapters, runtime skill copies, sync scripts, lifecycle ledgers, branch state, or policy text is a control-plane governance mutation and requires `[SCP-CONTROL-PLANE-MUTATION]` before or with the mutation. ODIN/control-plane roles must not self-accept governance mutations they authored. Acceptance requires independent QA, user ratification, or explicitly named `EXEC PM` ratification after evidence review. An authorized control-plane mutation may be reported as implemented and validation complete, but remains pending ratification until the named ratifier accepts the evidence.
|
|
662
662
|
|
|
663
663
|
Canonical SCP audit, research, ODIN, and control-plane outputs must be written under a durable governance path such as `.odin/local/audit/<audit-id>/` or another declared `evidence_path`. `/tmp` may be used for intermediate captures, cache, delivery-proof repair, or mirrors only. Before `[SCP-FINISH]`, any `/tmp` artifact used for a claim must be copied, summarized, hashed, or explicitly declared non-canonical in the durable audit ledger.
|
|
664
664
|
|
|
@@ -690,7 +690,7 @@ A role receiving a HALT directive must:
|
|
|
690
690
|
2. Reply with a remediation plan within the next heartbeat interval.
|
|
691
691
|
3. Resume only after the supervising ODIN acknowledges the remediation.
|
|
692
692
|
|
|
693
|
-
Continuing past a HALT without remediation is itself a protocol breach. ODIN must escalate to `A/EXEC-ODIN`, which may escalate to
|
|
693
|
+
Continuing past a HALT without remediation is itself a protocol breach. ODIN must escalate to `A/EXEC-ODIN`, which may escalate to the user.
|
|
694
694
|
|
|
695
695
|
### Health Escalation
|
|
696
696
|
|
|
@@ -782,7 +782,7 @@ Staffing audit fields, required for any role outside the executive office (`team
|
|
|
782
782
|
|
|
783
783
|
Receipts missing these fields on non-exec roles produce ODIN warnings via `odin.validate_boot_receipt`. Receipts that declare `staffed_by` != `A/EXEC-PM` are halt-eligible: TEAM PMs and workers cannot self-staff.
|
|
784
784
|
|
|
785
|
-
If the harness is running with bypass, dangerous, or skip-permission mode, declare `permission_mode: DEGRADED_READ_ONLY` unless
|
|
785
|
+
If the harness is running with bypass, dangerous, or skip-permission mode, declare `permission_mode: DEGRADED_READ_ONLY` unless the user explicitly authorized write mode for that pane. A degraded pane may not write, commit, push, move lifecycle state, or claim closure.
|
|
786
786
|
|
|
787
787
|
When EXEC PM, EXEC ASST, or the terminal adapter already captured exact `terminal_locator` refs/ids, use those values as authoritative. The pane may acknowledge or add missing fields, but self-reported locator data must not override adapter-captured refs.
|
|
788
788
|
|
|
@@ -940,22 +940,22 @@ Canonical frozen state is `FROZEN`. `FROZEN_IDLE` is a `FROZEN` substate/alias m
|
|
|
940
940
|
|
|
941
941
|
Emit `[SCP-FREEZE]` if:
|
|
942
942
|
|
|
943
|
-
- a role-named pane/surface is closed without
|
|
944
|
-
- `EXEC PM` creates extra panes/workers beyond official topology without
|
|
945
|
-
- hidden `spawn_agent` or invisible subagent capacity is used without
|
|
943
|
+
- a role-named pane/surface is closed without the user authorization;
|
|
944
|
+
- `EXEC PM` creates extra panes/workers beyond official topology without the user authorization;
|
|
945
|
+
- hidden `spawn_agent` or invisible subagent capacity is used without the user authorization;
|
|
946
946
|
- `$delegate` routes outside visible CMUX role slots;
|
|
947
947
|
- hidden output is used for QA, closure, branch-visible claims, lifecycle mutation, evidence validation, policy synthesis, or dispatch decisions;
|
|
948
|
-
- Gemini is assigned without
|
|
948
|
+
- Gemini is assigned without the user reauthorization under the current local model policy;
|
|
949
949
|
- a pod exceeds one active Claude Code instance;
|
|
950
950
|
- DEV and QA use the same provider/model family without exception;
|
|
951
951
|
- ChatGPT/Codex is used for routine work while non-Codex fallback rungs are available;
|
|
952
952
|
- a role skips its fallback ladder without `[SCP-EXCEPTION]`;
|
|
953
953
|
- cleanup removes team structure instead of clearing/restarting/substituting the occupant;
|
|
954
|
-
- an agent claims exception status without a recorded `[SCP-EXCEPTION]` or
|
|
954
|
+
- an agent claims exception status without a recorded `[SCP-EXCEPTION]` or the user authorization.
|
|
955
955
|
|
|
956
956
|
### `[SCP-PERMISSION-ASSIST]`
|
|
957
957
|
|
|
958
|
-
Emit when `EXEC PM`,
|
|
958
|
+
Emit when `EXEC PM`, the user, ODIN, or an operator approves, clicks through, or sends keys into another role's pane.
|
|
959
959
|
|
|
960
960
|
Required fields:
|
|
961
961
|
|
|
@@ -976,7 +976,7 @@ Permissions remain on by default for write, destructive, lifecycle, branch, scop
|
|
|
976
976
|
|
|
977
977
|
### `[SCP-ROUND-ROBIN-CHECKPOINT]`
|
|
978
978
|
|
|
979
|
-
Routine bilateral coordination has `agent_exchange_budget: 3`; high-stakes synthesis or QA loops have max 5 unless
|
|
979
|
+
Routine bilateral coordination has `agent_exchange_budget: 3`; high-stakes synthesis or QA loops have max 5 unless the user or `EXEC PM` authorizes a higher limit with a stop condition. One exchange is an outbound message plus the response. Sequence is not authority; refinement is not corroboration. No two agents may continue bilateral debate after checkpoint without divergence reviewer, `EXEC PM` decision, or the user decision. Repeated permission prompts stop after 2 blocked approvals and emit `BLOCKED_BY_PERMISSION`.
|
|
980
980
|
|
|
981
981
|
Required fields:
|
|
982
982
|
|
|
@@ -1099,7 +1099,7 @@ Exceptions do not implicitly authorize implementation, QA acceptance, evidence w
|
|
|
1099
1099
|
|
|
1100
1100
|
## Session Closeout Metrics And Improvement Lifecycle
|
|
1101
1101
|
|
|
1102
|
-
Session closeout is an explicit SCP lifecycle phase. It begins when objectives are achieved or intentionally paused, branch/repo state is clean or classified, QA/quality gates are complete or blocked with owner, next-session path is clear, and `EXEC PM` is ready to hand off.
|
|
1102
|
+
Session closeout is an explicit SCP lifecycle phase. It begins when objectives are achieved or intentionally paused, branch/repo state is clean or classified, QA/quality gates are complete or blocked with owner, next-session path is clear, and `EXEC PM` is ready to hand off. the user may also trigger closeout with `$sentinel-coordination-protocol --finish` or `$sentinel-coordination-protocol --session-closeout`.
|
|
1103
1103
|
|
|
1104
1104
|
At bootstrap, `EXEC PM` must record a `SESSION_OBJECTIVES` contract before broad dispatch:
|
|
1105
1105
|
|
|
@@ -1112,7 +1112,7 @@ At bootstrap, `EXEC PM` must record a `SESSION_OBJECTIVES` contract before broad
|
|
|
1112
1112
|
- expected durable evidence paths,
|
|
1113
1113
|
- whether teams are expected to park, stand down, or remain active.
|
|
1114
1114
|
|
|
1115
|
-
If
|
|
1115
|
+
If the user has not supplied these, `EXEC PM` asks concise clarifying questions before broad dispatch.
|
|
1116
1116
|
|
|
1117
1117
|
Before final park, `EXEC PM` must emit `EXEC_PM_SESSION_REPORT` covering:
|
|
1118
1118
|
|
|
@@ -1163,7 +1163,7 @@ Decision trace fields:
|
|
|
1163
1163
|
|
|
1164
1164
|
After handoff, hygiene, metrics, and decision trace, `EXEC PM` asks ODINs, `EXEC QA`, and `EXEC RSCH` for protocol/skill/harness improvement hypotheses. Each hypothesis must include observation, metric signal, proposed change, expected score impact, risk, validation plan, owner, scope, and whether it is patch-now, defer, or reject.
|
|
1165
1165
|
|
|
1166
|
-
Skill edits are the last closeout action after session data, `EXEC_PM_SESSION_REPORT`, metrics, decision trace, and improvement hypotheses are captured. Any skill patch still requires `[SCP-CONTROL-PLANE-MUTATION]`, validation, sync/hash reporting, and independent, `EXEC PM`, or
|
|
1166
|
+
Skill edits are the last closeout action after session data, `EXEC_PM_SESSION_REPORT`, metrics, decision trace, and improvement hypotheses are captured. Any skill patch still requires `[SCP-CONTROL-PLANE-MUTATION]`, validation, sync/hash reporting, and independent, `EXEC PM`, or user ratification.
|
|
1167
1167
|
|
|
1168
1168
|
`EXEC PM` remains parked with the session report, decision trace pointer, metrics snapshot, and next actions. Other teams park, stand down, or become `VACANT_ROLE_SLOT` by durable role-slot policy. Finished teams are parked, not destroyed.
|
|
1169
1169
|
|
|
@@ -1205,78 +1205,78 @@ Recommended schema:
|
|
|
1205
1205
|
|
|
1206
1206
|
```yaml
|
|
1207
1207
|
scp_session_metrics:
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1208
|
+
metric_version: scp_efficiency_v0
|
|
1209
|
+
run_id:
|
|
1210
|
+
session_objectives:
|
|
1211
|
+
objectives: []
|
|
1212
|
+
success_criteria: []
|
|
1213
|
+
expected_stopping_point:
|
|
1214
|
+
required_branch_visible_outcomes: []
|
|
1215
|
+
cleanup_expectations: []
|
|
1216
|
+
handoff_standard:
|
|
1217
|
+
collection_basis:
|
|
1218
|
+
cmux_inventory: captured|partial|missing
|
|
1219
|
+
git_state: captured|partial|missing
|
|
1220
|
+
receipts_scan: captured|partial|missing
|
|
1221
|
+
harness_token_reports: exact|reported|partial|missing
|
|
1222
|
+
transcript_estimates: used|not_used
|
|
1223
|
+
per_agent:
|
|
1224
|
+
- role_slot:
|
|
1225
|
+
occupant:
|
|
1226
|
+
model:
|
|
1227
|
+
harness:
|
|
1228
|
+
cost_tier:
|
|
1229
|
+
token_pool: chatgpt_codex|claude_code|local|other|unknown
|
|
1230
|
+
tasks_assigned:
|
|
1231
|
+
deliverables_completed:
|
|
1232
|
+
deliverables_accepted:
|
|
1233
|
+
deliverables_rejected:
|
|
1234
|
+
deliverables_partial:
|
|
1235
|
+
deliverables_missing:
|
|
1236
|
+
interventions:
|
|
1237
|
+
blockers:
|
|
1238
|
+
permission_assists:
|
|
1239
|
+
exchange_checkpoints:
|
|
1240
|
+
delivery_failures:
|
|
1241
|
+
input_bar_only_events:
|
|
1242
|
+
provider:
|
|
1243
|
+
provider_token_pool:
|
|
1244
|
+
provider_blockers:
|
|
1245
|
+
throughput_wait:
|
|
1246
|
+
fallback_reason:
|
|
1247
|
+
fallback_selected:
|
|
1248
|
+
role_breaches:
|
|
1249
|
+
hidden_agent_violations:
|
|
1250
|
+
elapsed_time_basis: exact|estimated|unknown
|
|
1251
|
+
raw_tokens:
|
|
1252
|
+
token_count_basis: exact|reported|estimated|unknown
|
|
1253
|
+
token_count_confidence: high|medium|low|unknown
|
|
1254
|
+
efficiency_note:
|
|
1255
|
+
smoke_or_test_assignment: completed|failed|standby_exempt|not_done
|
|
1256
|
+
per_team:
|
|
1257
|
+
- team:
|
|
1258
|
+
role_slots: []
|
|
1259
|
+
tasks_assigned:
|
|
1260
|
+
accepted:
|
|
1261
|
+
rejected:
|
|
1262
|
+
partial:
|
|
1263
|
+
missing:
|
|
1264
|
+
cleanup_findings: []
|
|
1265
|
+
score:
|
|
1266
|
+
scale: 0-4
|
|
1267
|
+
objective_completion:
|
|
1268
|
+
qa_evidence_quality:
|
|
1269
|
+
branch_repo_hygiene:
|
|
1270
|
+
coordination_compliance:
|
|
1271
|
+
token_efficiency:
|
|
1272
|
+
model_mix_diversity:
|
|
1273
|
+
autonomy_low_human_intervention:
|
|
1274
|
+
rework_rate:
|
|
1275
|
+
cleanup_completeness:
|
|
1276
|
+
handoff_quality:
|
|
1277
|
+
confidence: high|medium|low
|
|
1278
|
+
basis:
|
|
1279
|
+
unknown_metrics: []
|
|
1280
1280
|
```
|
|
1281
1281
|
|
|
1282
1282
|
Provider/token-pool metrics must record provider, token pool, raw tokens, token count basis, task result, acceptance/rejection/partial status, rework count, blocker, throughput wait when known, fallback reason, and efficiency note. Provider routing claims must distinguish exact/reported/estimated/unknown token data and must not invent cost precision.
|
|
@@ -1294,28 +1294,28 @@ Close-out is not just cleanup. Close-out must prove the coordination process its
|
|
|
1294
1294
|
5. `EXEC PM` emits `EXEC_PM_SESSION_REPORT`, `[SCP-SESSION-METRICS]`, and a curated session decision trace when skill/protocol changes occurred.
|
|
1295
1295
|
6. `EXEC PM` records a `$handoff` and session report with branch, SHA, worktree, evidence, dirty state, blockers, pane disposition, metrics snapshot, decision trace pointer, and next-session instructions.
|
|
1296
1296
|
7. ODIN captures CMUX pane snapshots and runs the post-run self-audit before temporary panes are closed:
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1297
|
+
- one pane auditor per pane,
|
|
1298
|
+
- boolean SCP effectiveness heuristic including role-contract compliance, control-plane non-implementation, delegation receipts, CMUX delivery confirmation, poll/action liveness, QA independence, branch proof, and hygiene reset,
|
|
1299
|
+
- `$atlas-synthesis` canonical packet,
|
|
1300
|
+
- adversarial `$qa-review` panel,
|
|
1301
|
+
- protocol/skill patch proposals,
|
|
1302
|
+
- metric deltas for the next run.
|
|
1303
1303
|
8. `EXEC PM` performs post-run hygiene reset:
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1304
|
+
- prove every non-excluded repo/worktree has a classified branch, HEAD/upstream state, dirty state, staged state, and retained/deferred/deleted disposition,
|
|
1305
|
+
- record teardown mode as `PARK_FOR_CONTINUITY` or `FULL_SESSION_SHUTDOWN`,
|
|
1306
|
+
- for `PARK_FOR_CONTINUITY`, return standing executive-office and pod control-plane panes to their baseline roles with fresh-context restart or explicit parked handoff,
|
|
1307
|
+
- snapshot official topology before cleanup, classify each surface as official role slot vs temporary/ad hoc, and list any proposed closures,
|
|
1308
|
+
- in `PARK_FOR_CONTINUITY`, preserve official role slots; cleanup may stand down occupants, clear context, restart agents, mark slots vacant, or request substitution, but it must not close role-named CMUX panes/surfaces,
|
|
1309
|
+
- in `FULL_SESSION_SHUTDOWN`, after handoffs and snapshots are captured, explicitly quit each agent occupant using the correct app/harness-specific exit path, verify the occupant is no longer live, then close its CMUX surface/pane; if an occupant only stands down but remains live, classify `AGENT_STOOD_DOWN_NOT_EXITED` and close the surface directly if the user authorized full shutdown,
|
|
1310
|
+
- close temporary ad hoc panes only if they are listed as closable in `SCP-TEAM-MANIFEST`, have emitted `[SCP-FINISH]` or are classified stale/unresponsive, have handoff/snapshot captured, and the user or the recorded cleanup policy authorizes closure,
|
|
1311
|
+
- if cleanup discovers official role slots were closed during `PARK_FOR_CONTINUITY`, classify `ROLE_SLOT_CLOSURE_VIOLATION` and record restoration or next-run correction; official role-slot closure is expected only under `FULL_SESSION_SHUTDOWN`,
|
|
1312
|
+
- clean or archive stray worktrees only when the exact path, branch, dirty state, and approval requirement are recorded,
|
|
1313
|
+
- keep UX/design panes and design/prototype worktrees excluded unless the user explicitly includes them with a UX-specific team profile,
|
|
1314
|
+
- run `$qa-swarm-review` or equivalent adversarial review over the run's branch-visible artifacts and cleanup report before any clean/ready claim,
|
|
1315
|
+
- leave a final hygiene ledger listing active panes, closed panes, retained worktrees, pruned/deferred worktrees, retained local debris, branch SHAs, and unresolved risks.
|
|
1316
1316
|
9. Only after session data, `EXEC_PM_SESSION_REPORT`, metrics, decision trace, and improvement hypotheses are captured may `EXEC PM` authorize a final self-improvement skill patch through `[SCP-CONTROL-PLANE-MUTATION]`.
|
|
1317
1317
|
|
|
1318
|
-
The close-out meta-analysis must enumerate every delegated agent/role and required deliverable; record each deliverable status as `DELIVERED_FULL`, `DELIVERED_PARTIAL`, `NO_FINDINGS_WITH_SCOPE`, `BLOCKED_PARTIAL_REPORT`, `MISSING`, `MALFORMED`, or `NONCOMPLIANT_OUTPUT`; diagnose any missing/partial/noncompliant deliverable using visible pane state and last receipts; state which findings were incorporated or excluded and why; record orchestrator self-review including premature synthesis, permission assistance, scope changes, or audit bias; apply confidence downgrade where required; and choose corrective action: continue audit, accept partial with downgrade, reassign/substitute inside role slot, ask
|
|
1318
|
+
The close-out meta-analysis must enumerate every delegated agent/role and required deliverable; record each deliverable status as `DELIVERED_FULL`, `DELIVERED_PARTIAL`, `NO_FINDINGS_WITH_SCOPE`, `BLOCKED_PARTIAL_REPORT`, `MISSING`, `MALFORMED`, or `NONCOMPLIANT_OUTPUT`; diagnose any missing/partial/noncompliant deliverable using visible pane state and last receipts; state which findings were incorporated or excluded and why; record orchestrator self-review including premature synthesis, permission assistance, scope changes, or audit bias; apply confidence downgrade where required; and choose corrective action: continue audit, accept partial with downgrade, reassign/substitute inside role slot, ask the user, or park with owner/reason.
|
|
1319
1319
|
|
|
1320
1320
|
When an assigned agent fails, stalls, emits partial output, ignores scope, or does not deliver required findings, the orchestrator must not hand-wave, gloss over, synthesize around, or silently replace the missing deliverable. Required behavior: identify the missing required output; inspect visible pane state and last receipt; classify the failure state; issue a corrective directive or substitution inside the role slot; record whether downstream synthesis is blocked, partial, or safe to proceed; and explicitly state which required inputs were received and which were not before synthesis. Agents must either perform the delegated task exactly, emit a valid blocker/check-in, or emit a bounded partial/no-findings report when stopped. Silent parking after a force-report or required-deliverable directive is a protocol failure. This rule applies to `EXEC PM`: `EXEC PM` must not synthesize before required reports arrive unless it explicitly downgrades to `PARTIAL` and states missing inputs and reason.
|
|
1321
1321
|
|
|
@@ -1325,7 +1325,7 @@ The finish loop is observational and governance-only. It must not mutate product
|
|
|
1325
1325
|
|
|
1326
1326
|
Post-run hygiene is not proof of product readiness. It is only proof that the orchestration surface has been returned to a known, auditable state.
|
|
1327
1327
|
|
|
1328
|
-
A finished team is parked, not destroyed, unless
|
|
1328
|
+
A finished team is parked, not destroyed, unless the user has explicitly selected `FULL_SESSION_SHUTDOWN`; in that mode the goal is a verified quiet surface set, not durable visible role-slot preservation.
|
|
1329
1329
|
|
|
1330
1330
|
## Terminal State Vocabulary
|
|
1331
1331
|
|
|
@@ -1364,17 +1364,17 @@ Allowed pre-acceptance states:
|
|
|
1364
1364
|
- `AGENT_SUBSTITUTION_REQUIRED`: role slot remains, but occupant model/harness must change.
|
|
1365
1365
|
- `FALLBACK_RUNG_EXHAUSTED`: all authorized fallback occupants for the role failed or are unavailable.
|
|
1366
1366
|
- `COST_GUARDRAIL_BLOCKED`: role cannot continue on current provider/model because budget/quota pressure violates model mix policy.
|
|
1367
|
-
- `HIDDEN_AGENT_VIOLATION`: hidden subagent or non-visible fork was used without explicit
|
|
1368
|
-
- `ROLE_SLOT_CLOSURE_VIOLATION`: role-named pane/surface was closed or deleted without explicit
|
|
1367
|
+
- `HIDDEN_AGENT_VIOLATION`: hidden subagent or non-visible fork was used without explicit user-authorized exception.
|
|
1368
|
+
- `ROLE_SLOT_CLOSURE_VIOLATION`: role-named pane/surface was closed or deleted without explicit the user authorization.
|
|
1369
1369
|
- `MODEL_MIX_VIOLATION`: active model/harness assignment violates the declared model mix policy.
|
|
1370
|
-
- `TOPOLOGY_EXPANSION_REQUESTED`: new role slot, pane, pod, floater, or specialized model/harness has been requested and awaits
|
|
1371
|
-
- `TOPOLOGY_EXPANSION_BLOCKED_PENDING_BRAD`: topology expansion is blocked until
|
|
1370
|
+
- `TOPOLOGY_EXPANSION_REQUESTED`: new role slot, pane, pod, floater, or specialized model/harness has been requested and awaits the user decision.
|
|
1371
|
+
- `TOPOLOGY_EXPANSION_BLOCKED_PENDING_BRAD`: topology expansion is blocked until the user explicitly authorizes it.
|
|
1372
1372
|
|
|
1373
1373
|
If repo mechanics require moving a DEV slice to `done/` before independent QA, the handoff and ledger must say `DEV_COMPLETE_QA_PENDING`; it is not lifecycle closure.
|
|
1374
1374
|
|
|
1375
1375
|
## Role And QA Hard Gates
|
|
1376
1376
|
|
|
1377
|
-
- Control-plane panes are command, coordination, monitoring, and QA-health surfaces. They may edit only governance, ledger, status, or remediation artifacts explicitly named by
|
|
1377
|
+
- Control-plane panes are command, coordination, monitoring, and QA-health surfaces. They may edit only governance, ledger, status, or remediation artifacts explicitly named by the user or `EXEC PM`.
|
|
1378
1378
|
- Control-plane roles including `EXEC PM`, `EXEC ODIN`, `EXEC ASST`, `EXEC RSCH`, `EXEC QA`, `TEAM PM`, and `TEAM ODIN` may do read-only proof, audit, coordination, CMUX delivery, polling, and blocker reporting by default. Implementation, QA acceptance, branch mutation, evidence writing, lifecycle mutation, push, merge, cleanup, or closure claims require explicit scoped authorization.
|
|
1379
1379
|
- Product/source/test/evidence implementation must be delegated to `DEV WORKER` capacity. Control-plane reclassification is not self-service and requires the worker-exception record above.
|
|
1380
1380
|
- `EXEC PM` or orchestration authority does not imply product-code write authority.
|
|
@@ -1393,7 +1393,7 @@ If repo mechanics require moving a DEV slice to `done/` before independent QA, t
|
|
|
1393
1393
|
- Any hook output containing `blocking error` requires `[SCP-FREEZE]` unless a named `HOOK-EXCEPTION` is recorded.
|
|
1394
1394
|
- `HOOK-EXCEPTION` must include: owner, hook name, exact command, exit status, why the hook is non-governing, compensating validators, scope proof, branch proof, expiration, and artifact location.
|
|
1395
1395
|
- `SKIP_*`, `NO_*`, `BYPASS_*`, `--no-verify`, dangerous permission flags, and equivalent bypasses are governance bypasses by default.
|
|
1396
|
-
- A bypass flag is allowed only when
|
|
1396
|
+
- A bypass flag is allowed only when the user or `EXEC PM` explicitly authorizes the exact flag for the exact non-governing hook and the pane records compensating validators. Hook help text is not authorization.
|
|
1397
1397
|
- Missing expected validator path means stop and ask for the canonical path. Do not substitute a narrower validator unless `EXEC PM` explicitly authorizes it with compensating validators.
|
|
1398
1398
|
- Non-blocking PreToolUse or PostToolUse hook errors in governance-sensitive writes must be recorded as `HOOK HEALTH: WATCH` or escalated before closure language.
|
|
1399
1399
|
|
|
@@ -1426,39 +1426,39 @@ If a closure/evidence hook fails after a lifecycle move or verdict attempt, mark
|
|
|
1426
1426
|
## Core Workflow
|
|
1427
1427
|
|
|
1428
1428
|
1. Verify package provenance.
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1429
|
+
- Confirm the zip exists.
|
|
1430
|
+
- Capture `unzip -l` and `shasum -a 256`.
|
|
1431
|
+
- Extract only to a temp directory.
|
|
1432
|
+
- Read `00-SCP-protocol.md`, especially sections 0, 6, 7, 8, 10, 18, and 20.
|
|
1433
1433
|
|
|
1434
1434
|
2. Land the package, but do not activate it.
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1435
|
+
- Canonical package path: `project/planning/org/agentic-executive-mgmt/`.
|
|
1436
|
+
- Package landing branch: use a deterministic ops branch unless the user supplies another branch.
|
|
1437
|
+
- Ledger branch: `ops/ledger` for `ledger.yaml`.
|
|
1438
|
+
- If branch topology is ambiguous or conflicts with current repo state, stop and ask the user.
|
|
1439
1439
|
|
|
1440
1440
|
3. Create adoption-gate scaffolding.
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1441
|
+
- `project/planning/org/agentic-executive-mgmt/artifacts/adoption/adoption-gate.md`
|
|
1442
|
+
- `project/planning/org/agentic-executive-mgmt/ledger.yaml`
|
|
1443
|
+
- `tools/agentic-executive-mgmt/audit/banned-phrases.txt`
|
|
1444
|
+
- `tools/agentic-executive-mgmt/qa-review/RUBRIC.md`
|
|
1445
|
+
- Other artifact directories required by the SCP package.
|
|
1446
1446
|
|
|
1447
1447
|
4. Install or verify local skill/adapters.
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1448
|
+
- Native SKILL.md surfaces get this skill directory.
|
|
1449
|
+
- Non-native harnesses get an adapter prompt that points them at the canonical skill and SCP repo package.
|
|
1450
|
+
- Do not claim a harness has native skill support unless verified from local CLI/config.
|
|
1451
1451
|
|
|
1452
1452
|
5. Validate before adoption.
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1453
|
+
- `git diff --check`
|
|
1454
|
+
- `bash scripts/validate-planning-integrity.sh`
|
|
1455
|
+
- `bash scripts/validate-artifact-sync.sh`
|
|
1456
|
+
- Banned-phrases audit against the committed package.
|
|
1457
|
+
- Adversarial `$qa-review` or rubric-equivalent 16-point review of the SCP package itself. Minimum 14/16, no CRITICAL, no HIGH, evidence authentic.
|
|
1458
1458
|
|
|
1459
1459
|
6. Disseminate in two steps.
|
|
1460
|
-
|
|
1461
|
-
|
|
1460
|
+
- Pre-activation notice: awareness only, no behavior switch.
|
|
1461
|
+
- Activation announcement: only after the adoption gate is branch-visible, QA-accepted, ledger scaffolded, and the user or the CXO declares transition.
|
|
1462
1462
|
|
|
1463
1463
|
## Meta-Governance Recursion
|
|
1464
1464
|
|