@bradheitmann/odin-sentinel 0.4.11 → 0.4.13

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 (42) hide show
  1. package/.claude-plugin/marketplace.json +23 -0
  2. package/README.md +20 -16
  3. package/dist/src/mcp/server.js +32 -0
  4. package/dist/src/mcp/server.js.map +1 -1
  5. package/dist/src/protocol/repository.d.ts +6 -0
  6. package/dist/src/protocol/repository.js +12 -2
  7. package/dist/src/protocol/repository.js.map +1 -1
  8. package/dist/src/protocol/service.js +17 -9
  9. package/dist/src/protocol/service.js.map +1 -1
  10. package/dist/src/protocol/version.d.ts +2 -2
  11. package/dist/src/protocol/version.js +2 -2
  12. package/docs/guides/quick-start.md +7 -7
  13. package/docs/guides/quickstart-prompts.md +4 -4
  14. package/docs/reference/client-compatibility.md +1 -1
  15. package/docs/reference/distribution.md +11 -5
  16. package/docs/reference/public-surface-audit.md +2 -2
  17. package/package.json +5 -3
  18. package/plugins/odin-scp/.claude-plugin/plugin.json +25 -0
  19. package/plugins/odin-scp/README.md +62 -0
  20. package/plugins/odin-scp/skills/odin-scp/CHANGELOG.md +25 -0
  21. package/plugins/odin-scp/skills/odin-scp/SKILL.md +1518 -0
  22. package/plugins/odin-scp/skills/odin-scp/agents/openai.yaml +4 -0
  23. package/plugins/odin-scp/skills/odin-scp/references/boot-receipt-examples.md +439 -0
  24. package/plugins/odin-scp/skills/odin-scp/references/canonical-introduction-prompt.md +118 -0
  25. package/plugins/odin-scp/skills/odin-scp/references/harness-skill-targets.md +56 -0
  26. package/plugins/odin-scp/skills/odin-scp/references/team-bootstrap-runbook.md +298 -0
  27. package/plugins/odin-scp/skills/odin-scp/scripts/sync-installations.sh +233 -0
  28. package/protocol/SCP.md +3 -3
  29. package/protocol/bootstrap-skill.md +22 -13
  30. package/protocol/closeout.yaml +1 -1
  31. package/protocol/delegation.yaml +1 -1
  32. package/protocol/model-profiles.yaml +2 -2
  33. package/protocol/receipts/team-manifest.yaml +1 -1
  34. package/protocol/roles.yaml +1 -1
  35. package/protocol/skill-references/boot-receipt-examples.md +439 -0
  36. package/protocol/skill-references/canonical-introduction-prompt.md +118 -0
  37. package/protocol/skill-references/harness-skill-targets.md +56 -0
  38. package/protocol/skill-references/team-bootstrap-runbook.md +298 -0
  39. package/protocol/topology.yaml +1 -1
  40. package/scripts/audit/public-surface.mjs +32 -3
  41. package/scripts/audit/verify-pack.mjs +175 -12
  42. package/templates/team-manifest-template.yaml +6 -6
@@ -1,4 +1,4 @@
1
- version: 0.4.11
1
+ version: 0.4.13
2
2
  active_watch_terminal_states:
3
3
  - RELEASED_BY_OPERATOR
4
4
  - HANDED_OFF
@@ -1,4 +1,4 @@
1
- version: 0.4.11
1
+ version: 0.4.13
2
2
  delegation_contract:
3
3
  required_fields:
4
4
  - receipt_type
@@ -1,4 +1,4 @@
1
- version: 0.4.11
1
+ version: 0.4.13
2
2
  policy:
3
3
  semantics: Recommended starter profiles, not bundled dependencies or availability guarantees.
4
4
  runtime_requirement: Users must install and configure their own harnesses. Launchers must verify local harness/model availability before dispatch and apply fallbacks when unavailable.
@@ -29,7 +29,7 @@ policy:
29
29
  - mcp_tool_hydration
30
30
  - governed_role_ready
31
31
  non_governed_one_shot_only: Harnesses without MCP access, native SCP skill, or full injected protocol text must be classified NON_GOVERNED_ONE_SHOT_ONLY and must not hold persistent governed roles.
32
- scp_skill_install_recommendation: Skill-capable harnesses should install the sentinel-coordination-protocol skill before governed launch; native skill discoverability improved compliance in observed runs.
32
+ scp_skill_install_recommendation: Skill-capable harnesses should install the odin-scp skill before governed launch; native skill discoverability improved compliance in observed runs.
33
33
  harness_capabilities:
34
34
  Codex:
35
35
  can_hydrate_deferred_mcp_tools_at_boot: true
@@ -45,6 +45,6 @@ watcher_assignments:
45
45
  - heartbeat_ledger
46
46
  minimum_compatible_mcp_version: 0.4.5
47
47
  scp_context_sources:
48
- - native sentinel-coordination-protocol skill
48
+ - native odin-scp skill
49
49
  - odin-sentinel MCP at or above minimum version
50
50
  - full injected SCP protocol text
@@ -1,4 +1,4 @@
1
- version: 0.4.11
1
+ version: 0.4.13
2
2
  roles:
3
3
  EXEC_PM:
4
4
  title: EXEC PM
@@ -0,0 +1,439 @@
1
+ # SCP Boot Receipt Examples
2
+
3
+ Use these as patterns. Replace placeholder values with live command output.
4
+
5
+ ## Minimal Bootstrap Receipt
6
+
7
+ Use this only for initial pane readiness and parking. It is not enough to activate work, mutate files, perform QA, commit, push, or claim closure.
8
+
9
+ ```yaml
10
+ SCP_MIN_BOOT_RECEIPT:
11
+ agent_id: c-dev-1
12
+ team: C
13
+ role: DEV WORKER
14
+ reports_to: C/TEAM-PM
15
+ cwd: <pwd or EXEC PM supplied>
16
+ branch: <branch or EXEC PM supplied>
17
+ head_sha: <sha or EXEC PM supplied>
18
+ may_implement: false
19
+ may_qa_accept: false
20
+ permission_mode: READ_ONLY
21
+ current_state: BOOTSTRAPPED_IDLE
22
+ terminal_locator:
23
+ terminal_app: cmux
24
+ terminal_adapter: cmux
25
+ workspace_ref: <workspace:1>
26
+ workspace_id: <uuid-or-unavailable>
27
+ window_ref: <window-or-unavailable>
28
+ window_id: <uuid-or-unavailable>
29
+ pane_ref: <pane>
30
+ pane_id: <uuid-or-unavailable>
31
+ surface_ref: <surface>
32
+ surface_id: <uuid-or-unavailable>
33
+ tab_ref: <tab-or-unavailable>
34
+ tab_id: <uuid-or-unavailable>
35
+ surface_type: terminal
36
+ title: C/DEV-1
37
+ route_command: cmux send --workspace <workspace> --surface <surface>
38
+ locator_source: EXEC PM supplied from cmux --json --id-format both
39
+ locator_captured_at: <ISO-8601 timestamp>
40
+ target_sha_or_base: <declared base>
41
+ proof_source: EXEC PM supplied branch/SHA/cwd/locator plus pane role acknowledgment
42
+ next_expected_receipt: SCP_BOOT_RECEIPT before activation
43
+ ```
44
+
45
+ ## EXEC PM
46
+
47
+ ```yaml
48
+ SCP_BOOT_RECEIPT:
49
+ agent_id: a-exec-pm
50
+ terminal_locator:
51
+ terminal_app: cmux
52
+ terminal_adapter: cmux
53
+ workspace_ref: <workspace:1>
54
+ workspace_id: <uuid>
55
+ window_ref: <window:1>
56
+ window_id: <uuid>
57
+ pane_ref: <pane:47>
58
+ pane_id: <uuid>
59
+ surface_ref: <surface:40>
60
+ surface_id: <uuid>
61
+ tab_ref: <tab:40>
62
+ tab_id: <uuid>
63
+ surface_type: terminal
64
+ title: A/EXEC-PM
65
+ route_command: cmux send --workspace <workspace> --surface <surface>
66
+ locator_source: cmux --json --id-format both identify
67
+ locator_captured_at: <ISO-8601 timestamp>
68
+ vt_state_snapshot:
69
+ vt_provider: unavailable
70
+ vt_api_stability: unknown
71
+ terminal_instance_ref: unavailable
72
+ terminal_instance_id: unavailable
73
+ pty_ref: unavailable
74
+ capture_source: cmux read-screen
75
+ formatter_format: plain
76
+ rows: unavailable
77
+ cols: unavailable
78
+ total_rows: unavailable
79
+ scrollback_rows: unavailable
80
+ width_px: unavailable
81
+ height_px: unavailable
82
+ active_screen: unavailable
83
+ cursor_x: unavailable
84
+ cursor_y: unavailable
85
+ cursor_visible: unavailable
86
+ cursor_pending_wrap: unavailable
87
+ title: A/EXEC-PM
88
+ pwd: unavailable
89
+ render_dirty: unavailable
90
+ semantic_prompt_observed: unavailable
91
+ semantic_input_observed: unavailable
92
+ semantic_output_observed: unavailable
93
+ paste_safety_checked: unavailable
94
+ paste_safe: unavailable
95
+ key_encoding_provider: unavailable
96
+ mouse_encoding_provider: unavailable
97
+ focus_encoding_provider: unavailable
98
+ snapshot_captured_at: <ISO-8601 timestamp>
99
+ team: A
100
+ role: EXEC PM
101
+ authority_layer: executive
102
+ model_harness: <model>/<harness>
103
+ cost_tier: high_reasoning
104
+ capability_profile: orchestration, authorization, branch-visible claim framing
105
+ cwd: <pwd>
106
+ branch: <git branch --show-current>
107
+ upstream: <git rev-parse --abbrev-ref --symbolic-full-name @{u}>
108
+ head_sha: <git rev-parse HEAD>
109
+ target_sha_or_base: <declared base>
110
+ may_implement: false
111
+ may_qa_accept: false
112
+ delegates_to: [EXEC ASST, EXEC RSCH, EXEC QA, TEAM PM, TEAM SENTINEL]
113
+ reports_to: human operator
114
+ worker_exception_authority: human operator only
115
+ write_scope: governance/control artifacts explicitly assigned
116
+ read_scope: active repo, evidence, panes, handoffs
117
+ prohibited_paths: product source, runtime mutation, holdout, secrets, design unless authorized
118
+ evidence_path: <control evidence or handoff path>
119
+ terminal_state_vocabulary: READINESS_ONLY, FROZEN, QUARANTINED, DEV_COMPLETE_QA_PENDING
120
+ proof_source: pwd; git status; git rev-parse HEAD @{u}
121
+ permission_mode: <declared mode>
122
+ ```
123
+
124
+ ## TEAM PM
125
+
126
+ ```yaml
127
+ SCP_BOOT_RECEIPT:
128
+ agent_id: c-team-pm
129
+ terminal_locator:
130
+ terminal_app: cmux
131
+ terminal_adapter: cmux
132
+ workspace_ref: <workspace:1>
133
+ workspace_id: <uuid>
134
+ window_ref: <window:1>
135
+ window_id: <uuid>
136
+ pane_ref: <pane>
137
+ pane_id: <uuid>
138
+ surface_ref: <surface>
139
+ surface_id: <uuid>
140
+ tab_ref: <tab>
141
+ tab_id: <uuid>
142
+ surface_type: terminal
143
+ title: C/TEAM-PM
144
+ route_command: cmux send --workspace <workspace> --surface <surface>
145
+ locator_source: EXEC PM supplied from cmux --json --id-format both
146
+ locator_captured_at: <ISO-8601 timestamp>
147
+ vt_state_snapshot:
148
+ vt_provider: unavailable
149
+ vt_api_stability: unknown
150
+ terminal_instance_ref: unavailable
151
+ terminal_instance_id: unavailable
152
+ pty_ref: unavailable
153
+ capture_source: cmux read-screen
154
+ formatter_format: plain
155
+ rows: unavailable
156
+ cols: unavailable
157
+ total_rows: unavailable
158
+ scrollback_rows: unavailable
159
+ width_px: unavailable
160
+ height_px: unavailable
161
+ active_screen: unavailable
162
+ cursor_x: unavailable
163
+ cursor_y: unavailable
164
+ cursor_visible: unavailable
165
+ cursor_pending_wrap: unavailable
166
+ title: C/TEAM-PM
167
+ pwd: unavailable
168
+ render_dirty: unavailable
169
+ semantic_prompt_observed: unavailable
170
+ semantic_input_observed: unavailable
171
+ semantic_output_observed: unavailable
172
+ paste_safety_checked: unavailable
173
+ paste_safe: unavailable
174
+ key_encoding_provider: unavailable
175
+ mouse_encoding_provider: unavailable
176
+ focus_encoding_provider: unavailable
177
+ snapshot_captured_at: <ISO-8601 timestamp>
178
+ team: C
179
+ role: TEAM PM
180
+ authority_layer: pod_assignment_owner
181
+ model_harness: <model>/<harness>
182
+ cost_tier: high_reasoning_or_mid_reasoning
183
+ capability_profile: pod routing, worker activation, pod status, escalation
184
+ cwd: <pwd>
185
+ branch: <branch>
186
+ upstream: <upstream>
187
+ head_sha: <sha>
188
+ target_sha_or_base: <declared base>
189
+ may_implement: false
190
+ may_qa_accept: false
191
+ delegates_to: [C/DEV-1, C/QA-1, C/SHADOW-1]
192
+ reports_to: EXEC PM
193
+ worker_exception_authority: human operator or EXEC PM with branch-visible exception record
194
+ write_scope: pod ledger, prompts, pod handoff only
195
+ read_scope: assigned pod panes, assigned artifacts, validators
196
+ prohibited_paths: worker deliverables, product source, QA acceptance artifacts unless assigned
197
+ evidence_path: <pod ledger or handoff>
198
+ terminal_state_vocabulary: BOOTSTRAPPED_IDLE, READINESS_ONLY, FROZEN, QUARANTINED
199
+ proof_source: pwd; git status; git rev-parse HEAD @{u}; cmux read-screen
200
+ permission_mode: <declared mode>
201
+ ```
202
+
203
+ ## TEAM SENTINEL
204
+
205
+ ```yaml
206
+ SCP_BOOT_RECEIPT:
207
+ agent_id: c-team-sentinel
208
+ terminal_locator:
209
+ terminal_app: cmux
210
+ terminal_adapter: cmux
211
+ workspace_ref: <workspace:1>
212
+ workspace_id: <uuid>
213
+ window_ref: <window:1>
214
+ window_id: <uuid>
215
+ pane_ref: <pane>
216
+ pane_id: <uuid>
217
+ surface_ref: <surface>
218
+ surface_id: <uuid>
219
+ tab_ref: <tab>
220
+ tab_id: <uuid>
221
+ surface_type: terminal
222
+ title: C/TEAM-SENTINEL
223
+ route_command: cmux send --workspace <workspace> --surface <surface>
224
+ locator_source: cmux --json --id-format both identify
225
+ locator_captured_at: <ISO-8601 timestamp>
226
+ vt_state_snapshot:
227
+ vt_provider: unavailable
228
+ vt_api_stability: unknown
229
+ terminal_instance_ref: unavailable
230
+ terminal_instance_id: unavailable
231
+ pty_ref: unavailable
232
+ capture_source: cmux read-screen
233
+ formatter_format: plain
234
+ rows: unavailable
235
+ cols: unavailable
236
+ total_rows: unavailable
237
+ scrollback_rows: unavailable
238
+ width_px: unavailable
239
+ height_px: unavailable
240
+ active_screen: unavailable
241
+ cursor_x: unavailable
242
+ cursor_y: unavailable
243
+ cursor_visible: unavailable
244
+ cursor_pending_wrap: unavailable
245
+ title: C/TEAM-SENTINEL
246
+ pwd: unavailable
247
+ render_dirty: unavailable
248
+ semantic_prompt_observed: unavailable
249
+ semantic_input_observed: unavailable
250
+ semantic_output_observed: unavailable
251
+ paste_safety_checked: unavailable
252
+ paste_safe: unavailable
253
+ key_encoding_provider: unavailable
254
+ mouse_encoding_provider: unavailable
255
+ focus_encoding_provider: unavailable
256
+ snapshot_captured_at: <ISO-8601 timestamp>
257
+ team: C
258
+ role: TEAM SENTINEL
259
+ authority_layer: team_control_lead
260
+ model_harness: <model>/<harness>
261
+ cost_tier: high_reasoning
262
+ capability_profile: watchdog control, polling, intervention, scope control
263
+ cwd: <pwd>
264
+ branch: <branch>
265
+ upstream: <upstream>
266
+ head_sha: <sha>
267
+ target_sha_or_base: <declared base>
268
+ may_implement: false
269
+ may_qa_accept: false
270
+ delegates_to: [C/TEAM-PM, C/DEV-1, C/QA-1, C/SHADOW-1]
271
+ reports_to: EXEC PM
272
+ coordination_note: C/TEAM-PM owns normal worker activation; TEAM SENTINEL may relay corrective prompts and freeze unsafe lanes.
273
+ worker_exception_authority: human operator or EXEC PM with branch-visible exception record
274
+ write_scope: control ledger, prompts, lane handoff only
275
+ read_scope: assigned pod panes, assigned artifacts, validators
276
+ prohibited_paths: worker deliverables, product source, QA acceptance artifacts unless assigned
277
+ evidence_path: <lane ledger or handoff>
278
+ terminal_state_vocabulary: READINESS_ONLY, FROZEN, QUARANTINED
279
+ proof_source: pwd; git status; git rev-parse HEAD @{u}; cmux read-screen
280
+ permission_mode: <declared mode>
281
+ ```
282
+
283
+ ## DEV WORKER
284
+
285
+ ```yaml
286
+ SCP_BOOT_RECEIPT:
287
+ agent_id: c-dev-1
288
+ terminal_locator:
289
+ terminal_app: tmux
290
+ terminal_adapter: tmux
291
+ workspace_ref: <session-name>
292
+ workspace_id: unavailable
293
+ window_ref: <window-index-or-name>
294
+ window_id: <window-id-or-unavailable>
295
+ pane_ref: <%pane-id>
296
+ pane_id: <%pane-id>
297
+ surface_ref: <%pane-id>
298
+ surface_id: unavailable
299
+ tab_ref: unavailable
300
+ tab_id: unavailable
301
+ surface_type: terminal
302
+ title: C/DEV-1
303
+ route_command: tmux send-keys -t <session:window.%pane> '<message>' Enter
304
+ locator_source: tmux display-message -p
305
+ locator_captured_at: <ISO-8601 timestamp>
306
+ vt_state_snapshot:
307
+ vt_provider: terminal-capture
308
+ vt_api_stability: unknown
309
+ terminal_instance_ref: unavailable
310
+ terminal_instance_id: unavailable
311
+ pty_ref: <tty or unavailable>
312
+ capture_source: tmux capture-pane
313
+ formatter_format: plain
314
+ rows: <tmux pane_height or unavailable>
315
+ cols: <tmux pane_width or unavailable>
316
+ total_rows: unavailable
317
+ scrollback_rows: unavailable
318
+ width_px: unavailable
319
+ height_px: unavailable
320
+ active_screen: unavailable
321
+ cursor_x: unavailable
322
+ cursor_y: unavailable
323
+ cursor_visible: unavailable
324
+ cursor_pending_wrap: unavailable
325
+ title: C/DEV-1
326
+ pwd: <pane_current_path or unavailable>
327
+ render_dirty: unavailable
328
+ semantic_prompt_observed: unavailable
329
+ semantic_input_observed: unavailable
330
+ semantic_output_observed: unavailable
331
+ paste_safety_checked: false
332
+ paste_safe: unavailable
333
+ key_encoding_provider: terminal
334
+ mouse_encoding_provider: terminal
335
+ focus_encoding_provider: terminal
336
+ snapshot_captured_at: <ISO-8601 timestamp>
337
+ team: C
338
+ role: DEV WORKER
339
+ authority_layer: worker
340
+ model_harness: <model>/<harness>
341
+ cost_tier: bounded_execution
342
+ capability_profile: implementation inside exact write scope, evidence capture
343
+ cwd: <pwd>
344
+ branch: <branch>
345
+ upstream: <upstream>
346
+ head_sha: <sha>
347
+ target_sha_or_base: <declared base>
348
+ may_implement: true
349
+ may_qa_accept: false
350
+ delegates_to: []
351
+ reports_to: C/TEAM-SENTINEL
352
+ worker_exception_authority: not_applicable
353
+ write_scope: <exact files or directories from slice>
354
+ read_scope: <required reading list>
355
+ prohibited_paths: outside write scope, holdout, secrets, unrelated design/runtime
356
+ evidence_path: <dev evidence path declared by dispatch>
357
+ terminal_state_vocabulary: DEV_COMPLETE_QA_PENDING, BLOCKED_BY_LIMIT, FROZEN
358
+ proof_source: assigned slice; pwd; git status; validators
359
+ permission_mode: <declared mode>
360
+ ```
361
+
362
+ ## QA WORKER
363
+
364
+ ```yaml
365
+ SCP_BOOT_RECEIPT:
366
+ agent_id: c-qa-1
367
+ terminal_locator:
368
+ terminal_app: unknown
369
+ terminal_adapter: unavailable
370
+ workspace_ref: unavailable
371
+ workspace_id: unavailable
372
+ window_ref: unavailable
373
+ window_id: unavailable
374
+ pane_ref: unavailable
375
+ pane_id: unavailable
376
+ surface_ref: unavailable
377
+ surface_id: unavailable
378
+ tab_ref: unavailable
379
+ tab_id: unavailable
380
+ surface_type: unknown
381
+ title: C/QA-1
382
+ route_command: unavailable
383
+ locator_source: self-reported; not independently verified
384
+ locator_captured_at: unavailable
385
+ vt_state_snapshot:
386
+ vt_provider: unavailable
387
+ vt_api_stability: unknown
388
+ terminal_instance_ref: unavailable
389
+ terminal_instance_id: unavailable
390
+ pty_ref: unavailable
391
+ capture_source: unavailable
392
+ formatter_format: unavailable
393
+ rows: unavailable
394
+ cols: unavailable
395
+ total_rows: unavailable
396
+ scrollback_rows: unavailable
397
+ width_px: unavailable
398
+ height_px: unavailable
399
+ active_screen: unavailable
400
+ cursor_x: unavailable
401
+ cursor_y: unavailable
402
+ cursor_visible: unavailable
403
+ cursor_pending_wrap: unavailable
404
+ title: C/QA-1
405
+ pwd: unavailable
406
+ render_dirty: unavailable
407
+ semantic_prompt_observed: unavailable
408
+ semantic_input_observed: unavailable
409
+ semantic_output_observed: unavailable
410
+ paste_safety_checked: unavailable
411
+ paste_safe: unavailable
412
+ key_encoding_provider: unavailable
413
+ mouse_encoding_provider: unavailable
414
+ focus_encoding_provider: unavailable
415
+ snapshot_captured_at: unavailable
416
+ team: C
417
+ role: QA WORKER
418
+ authority_layer: worker
419
+ model_harness: <model>/<harness>
420
+ cost_tier: bounded_review
421
+ capability_profile: adversarial qa-review, evidence authenticity, independent gates
422
+ cwd: <pwd>
423
+ branch: <branch>
424
+ upstream: <upstream>
425
+ head_sha: <sha>
426
+ target_sha_or_base: <dev commit or evidence base>
427
+ may_implement: false
428
+ may_qa_accept: true
429
+ delegates_to: []
430
+ reports_to: C/TEAM-SENTINEL or EXEC QA
431
+ worker_exception_authority: not_applicable
432
+ write_scope: QA report/evidence paths only
433
+ read_scope: DEV evidence, changed files, validators, slice contract
434
+ prohibited_paths: product implementation, own lifecycle closure, hidden holdout, secrets
435
+ evidence_path: <qa evidence path declared by dispatch>
436
+ terminal_state_vocabulary: QA_INCOMPLETE, FROZEN, ACCEPT, REJECT
437
+ proof_source: qa-review; independent validator commands; git status
438
+ permission_mode: <declared mode>
439
+ ```
@@ -0,0 +1,118 @@
1
+ # Canonical SCP v3.5 Introduction Prompt For `EXEC PM`
2
+
3
+ Use this prompt to introduce SCP to the `EXEC PM` pane in any repository. It is intentionally explicit because the dangerous failures are premature activation, narrative closure, role blurring, stale QA, hidden capacity, and unsupported harness assumptions.
4
+
5
+ ```text
6
+ EXEC PM - SCP v3.5 generic policy introduction, repo preflight, adoption-gate bootstrap, and controlled dissemination.
7
+
8
+ You are the repo-capable pre-activation executive PM for this task. This is not an activation order unless the user explicitly says SCP is active. This is a governance-package landing, verification, and startup-planning task.
9
+
10
+ Use the `odin-scp` skill if available. Also read local project authority files when present:
11
+ - AGENTS.md
12
+ - CLAUDE.md
13
+ - config/constitutional/constitutional-agent.md
14
+ - project-local governance or constitution files declared by the repository
15
+ - .odin/handoffs/
16
+ - .odin/audit/
17
+
18
+ Authority boundary:
19
+ - SCP is not active until adoption/startup gates are branch-visible or explicitly acknowledged, adversarial QA accepts any governance/package mutation, and the user authority explicitly declares activation or asks you to operate under SCP.
20
+ - Until activation, the user's active directives, AGENTS.md, project-local lifecycle/governance rules, and task-specific scope remain controlling.
21
+ - Do not announce transition. Do not instruct panes to switch behavior under SCP until activation authority is explicit.
22
+ - Do not run a pilot wave unless the user explicitly asks for execution.
23
+
24
+ Hard no:
25
+ - No product code edits unless separately authorized.
26
+ - No lifecycle closure based only on SCP narration.
27
+ - No bare completion language. Use observed, branch-visible, QA-accepted, blocked, or pending labels.
28
+ - No self-acceptance. Governance or package changes require adversarial QA before adoption can clear.
29
+ - No secret output. Do not print tokens, API keys, OAuth tokens, or config secret values.
30
+ - No hidden subagents or off-ledger workers while SCP is active.
31
+
32
+ Core objective:
33
+ Load SCP v3.5, discover repo state and handoffs, bootstrap the executive office plus the requested number of development pods, and stop before product execution unless the user explicitly gave an execution task.
34
+
35
+ Phase 0 - live preflight:
36
+ 1. Confirm current repo and worktree:
37
+ - pwd
38
+ - git status --short --branch --untracked-files=all
39
+ - git branch --show-current
40
+ - git rev-parse HEAD
41
+ - git rev-parse @{u}, if upstream exists
42
+ 2. Discover handoffs and audit state:
43
+ - .odin/handoffs/
44
+ - .odin/audit/
45
+ 3. If no handoff exists, treat the repo as a fresh SCP bootstrap.
46
+ 4. Record exact assumptions before creating teams.
47
+
48
+ Phase 1 - default startup topology:
49
+ 1. Unless the user says otherwise, create the executive office and one development pod.
50
+ 2. If the user says "spin up N dev pods", create the executive office and N development pods.
51
+ 3. Required executive office roles:
52
+ - A/EXEC-PM
53
+ - A/EXEC-ODIN
54
+ - A/EXEC-ASST
55
+ - A/EXEC-RSCH
56
+ - A/EXEC-QA
57
+ 4. Required development pod roles per pod:
58
+ - <TEAM>/TEAM-PM
59
+ - <TEAM>/ODIN
60
+ - <TEAM>/DEV-1
61
+ - <TEAM>/QA-1
62
+ - <TEAM>/SHADOW-1
63
+
64
+ Phase 2 - default model/harness profile:
65
+ Use exact model names when available. When a named family version is unavailable, use the latest available same-family model and record the substitution.
66
+
67
+ - A/EXEC-PM: Codex CLI, GPT-5.5, high reasoning.
68
+ - A/EXEC-ODIN: Codex CLI, GPT-5.5, xhigh/max-equivalent reasoning.
69
+ - A/EXEC-ASST: Claude Code, latest available Claude Haiku.
70
+ - A/EXEC-RSCH: Droid, Kimi K2.6, high reasoning.
71
+ - A/EXEC-QA: Droid, Kimi K2.6, high reasoning.
72
+ - <TEAM>/TEAM-PM: Claude Code, Claude Opus 4.7 or latest available Opus, high reasoning when supported.
73
+ - <TEAM>/ODIN: Codex CLI, GPT-5.5, low reasoning.
74
+ - <TEAM>/DEV-1: Droid, Kimi K2.6, high reasoning.
75
+ - <TEAM>/QA-1: Crush, GLM-5.1, high reasoning.
76
+ - <TEAM>/SHADOW-1: Droid, Kimi K2.6, high reasoning.
77
+
78
+ Fallback:
79
+ - If Crush fails for a worker-style role, try Droid.
80
+ - If Crush and Droid both fail, use Claude Code with Claude Sonnet 4.6 or latest available Sonnet.
81
+ - Record every substitution in the team manifest and boot receipt.
82
+
83
+ Phase 3 - role interchangeability contract:
84
+ Record this in the startup artifact and dissemination text:
85
+ - Any supported agent can serve any SCP role when assigned that role and booted with the correct role contract.
86
+ - Role is per-assignment. Harness identity, model family, pane name, or vendor brand does not grant authority.
87
+ - Use generic role names in panes/tabs where possible: `EXEC PM`, `EXEC ODIN`, `EXEC ASST`, `EXEC RSCH`, `EXEC QA`, `TEAM PM`, `TEAM ODIN`, `DEV WORKER`, `QA WORKER`, and `SHADOW REVIEWER`.
88
+ - ODIN roles are meta-control roles accountable to user authority. They coordinate with PM roles but are not PM subordinates.
89
+ - Control-plane roles do not implement worker deliverables, author worker evidence, or perform QA acceptance by default.
90
+ - An agent may not QA and close the same deliverable.
91
+ - Text left in a terminal input bar is not delivery. Terminal delegation requires enter/send plus screen confirmation and later ack observation or follow-up.
92
+
93
+ Phase 4 - receipts:
94
+ 1. Create `SCP-TEAM-MANIFEST` before dispatching product work.
95
+ 2. Require `SCP_BOOT_RECEIPT` from every role before activation.
96
+ 3. Minimal parking receipts may be used during initial setup, but real work requires full receipt.
97
+ 4. Control/sentinel panes must emit `[SCP-POLL]`, `[SCP-DELEGATE]`, `[SCP-TERMINAL-DELIVERY]` or `[SCP-CMUX-DELIVERY]`, `[SCP-COORDINATION]`, `[SCP-IDLE]`, `[SCP-FREEZE]`, and `[SCP-FINISH]` receipts as applicable.
98
+
99
+ Phase 5 - ODIN mesh:
100
+ 1. At bootstrap, every ODIN sends every other ODIN a short identity and team-composition message.
101
+ 2. During active execution, run the default 10-minute ODIN round-robin health/status cadence unless the user changes it.
102
+ 3. The executive ODIN compiles the round-robin report and delivers it to EXEC PM after checking for outstanding dispatch/switchboard communications.
103
+
104
+ Phase 6 - closeout:
105
+ `$odin-scp --finish` starts controlled closeout, not product work.
106
+
107
+ Use one of two modes:
108
+ - `PARK_FOR_CONTINUITY`: keep CMUX role slots open, reset/park occupants, and preserve continuity for restart.
109
+ - `FULL_SESSION_SHUTDOWN`: after handoffs and snapshots, quit each live agent occupant with the correct harness/app exit path, verify exit, then close its CMUX surface/pane, leaving only the user-designated final surface.
110
+
111
+ Final report:
112
+ - State branch, HEAD, upstream, clean/dirty status.
113
+ - State handoffs discovered and which one controlled startup.
114
+ - State exact team topology and model/harness substitutions.
115
+ - State startup/activation status.
116
+ - State what was not touched.
117
+ - State what remains pending before product execution.
118
+ ```
@@ -0,0 +1,56 @@
1
+ # SCP Harness Skill Targets
2
+
3
+ This file records local skill/adapters for SCP policy access. Verify live paths before claiming a harness uses a native skill loader.
4
+
5
+ ## Source Of Truth And Sync Policy
6
+
7
+ Master editable source:
8
+
9
+ - `~/.agents/skills/odin-scp/`
10
+
11
+ Runtime copies are synchronized snapshots, not independent policy forks. Edit the master first, then run `scripts/sync-installations.sh` from the master directory to copy the full directory to each native `SKILL.md` target and verify hashes.
12
+
13
+ After every sync, verify all native `SKILL.md` files have the same SHA-256 hash and that adapters mention the current mandatory markers: `SCP_BOOT_RECEIPT`, `SCP-TEAM-MANIFEST`, `[SCP-DELEGATE]`, `[SCP-CMUX-DELIVERY]`, `[SCP-FINISH]`, `$odin-scp --finish`, `HOOK-EXCEPTION`, `BLOCKED_BY_LIMIT`, control-plane non-implementation, self-bootstrap, and post-run hygiene reset.
14
+
15
+ ## Native or Apparent SKILL.md Targets
16
+
17
+ Install the `odin-scp` skill directory into:
18
+
19
+ - Codex: `~/.codex/skills/odin-scp`
20
+ - Claude Code: `~/.claude/skills/odin-scp`
21
+ - Shared agent pool: `~/.agents/skills/odin-scp`
22
+ - Goose: `~/.config/goose/skills/odin-scp`
23
+ - KiloCode: `~/.kilocode/skills/odin-scp`
24
+ - Cursor shared skills: `~/.cursor/skills/odin-scp`
25
+ - Cursor-specific skills: `~/.cursor/skills-cursor/odin-scp`
26
+ - OpenHands: `~/.openhands/skills/odin-scp`
27
+ - Pi: `~/.pi/agent/skills/odin-scp`
28
+
29
+ ## Adapter Targets
30
+
31
+ These harnesses were present locally but do not expose the same verified native skill directory in the inspected configuration:
32
+
33
+ - OpenCode: install adapter prompt at `~/.config/opencode/skills/odin-scp/SKILL.md` and `~/.opencode/skills/odin-scp/SKILL.md`.
34
+ - Droid: use `--append-system-prompt-file` with the canonical prompt adapter, or paste the Boot Block plus role assignment into the pane.
35
+ - Crush: install a command adapter at `~/.crush/commands/odin-scp.md`.
36
+ - Zed: install a file adapter at `~/.zed/skills/odin-scp/SKILL.md`; Zed/ACP agents can also be started with the canonical prompt pasted into the agent panel.
37
+
38
+ ## Fallback Rule
39
+
40
+ If a harness cannot load SKILL.md directly, it is still eligible for any SCP role when the dispatch prompt embeds:
41
+
42
+ 1. The active role.
43
+ 2. The `SCP_BOOT_RECEIPT`.
44
+ 3. `authority_layer`, `may_implement`, `may_qa_accept`, `delegates_to`, `reports_to`, and `worker_exception_authority`.
45
+ 4. The exact write scope.
46
+ 5. The canonical repo path.
47
+ 6. The closure label rules.
48
+ 7. The adversarial QA requirement.
49
+ 8. Hook/validator exception rules.
50
+ 9. Branch-authority preclaim gates.
51
+ 10. `[SCP-POLL]`, `[SCP-DELEGATE]`, `[SCP-CMUX-DELIVERY]`, `[SCP-COORDINATION]`, `[SCP-IDLE]`, `[SCP-FREEZE]`, and `[SCP-FINISH]` receipt requirements.
52
+ 11. The control-plane non-implementation rule.
53
+ 12. The self-bootstrap team lifecycle and `SCP-TEAM-MANIFEST` requirement when one `EXEC PM` pane is asked to create teams.
54
+ 13. A pointer to the branch-visible SCP package once adoption is active.
55
+
56
+ Interchangeability means any harness can occupy any role when given the same role contract and proof gates. It does not mean an agent may self-accept, self-close, or ignore separation of duties.