Give your agent teams an org chart.
pnpm dlx --package @bradheitmann/odin-sentinel@0.6.0 odin-sentinel-mcp
Every major editor and CLI now hosts an agent: Claude Code, Codex, Cursor, Goose, Zed, OpenHands, Crush, Droid. Each competent. Each isolated. Each speaks a slightly different dialect of intent.
Wire them together without structure and you do not get a team. You get a chatroom with commit rights.
That surface is made from startup packets, role contracts, readiness gates, delegation envelopes, boot receipts, team manifests, closeout checklists, and protocol snapshots for fallback clients.
ODIN agents are the watchers. Every team has one. They poll for stall, scope drift, missed delivery, and role-boundary breaches, then escalate in plain language and re-arm. The name is the function: a sentinel on every team.
ODIN Sentinel does not enforce policy by taking over the runtime. It makes policy inspectable, so weak assignments, blocked prompts, stale versions, and missing readiness proof become visible before they become chaos.
Six event classes keyed to a stable objective id that survives reset, restaff, rename, and rerun. Metadata only — hashes, never raw proof bodies. A single fact is never independently editable in two places.
Attempt ceiling of 3 per objective, and relabeling the trigger does not reset the count. Audit-of-audit is refused past depth 1 without a break-glass record naming a human. At 25 governance events an objective terminates instead of spawning more proof work.
A finding is not active until it is owned and delivered. Closing an unowned finding is refused by name, and unowned findings never count toward intervention duties.
Proof events older than 30 days compact into one terminal record carrying the ordered hashes of everything removed — deterministic and replay-verifiable. Dry-run first: odin-sentinel compact-registry --dry-run.
Set ODIN_GOVDISP_REGISTRY_MCP=0 to restore the pre-0.6.0 baseline: 46 tools, prose-only validation, no registry writes.
Role cards for five roles, cache-aligned packet ordering with hash-pinned re-arm, substrate capability tiers, and the odin-watch wake analyzer for cmux and tmux. 28 tools · 18 resources at that release.
The boundary is plain MCP JSON-RPC over stdio. Any MCP-capable host can ask ODIN Sentinel for the same role contracts, startup packets, validation schemas, watch packets, and closeout rules.
Claude Code · Codex · Cursor · VS Code · Zed · Goose · Crush · OpenCode · OpenHands · Droid can all share the same operating map. Custom clients can bridge the same server from Rust, Go, Zig, Python, or WebAssembly.
Full visible-team mode requires cmux. Without cmux, ODIN can still expose protocol resources and validation tools, but the governed visible-team surface is not active.
MCP-capable clients ┌─────────────────────────────────────────┐ │ Codex · Claude · Droid · Crush · UI │ └────────────────────┬────────────────────┘ ▼ ┌──────────────────────────┐ │ odin-sentinel │ │ mcp server · stdio │ └─────────────┬────────────┘ │ ┌───────────────────────┼───────────────────────┐ ▼ ▼ ▼ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │ Resources │ │ Tools │ │ Exports │ │ protocol │ │ validate │ │ standalone │ │ roles │ │ startup │ │ protocol │ │ topology │ │ closeout │ │ snapshots │ └───────────────┘ └───────────────┘ └───────────────┘ │ │ │ └───────────────────────┼───────────────────────┘ ▼ ┌──────────────────────────┐ │ Visible role mesh │ │ EXEC · TEAM · DEV │ │ QA · ODIN · SHADOW │ └──────────────────────────┘
ODIN Sentinel is designed for visible multi-pane agent teams. cmux is required for governed team mode. The MCP server can expose protocol tools anywhere MCP stdio is supported, but the full team-control surface depends on agents being visible in a shared pane/session surface.
npm i -g cmux.>=22.13.0. Used for npx and the MCP server.git ≥ 2.40 · rg on PATH.Zero install required. The landing page keeps the common paths inline. The README carries the full harness matrix. Each config below recommends pinned pnpm dlx to fetch the current package.
Prefer npm instead: npm i -g @bradheitmann/odin-sentinel@0.6.0 or npx -y -p @bradheitmann/odin-sentinel@0.6.0 odin-sentinel-mcp.
# option a — install as a Claude Code plugin (recommended) claude plugin marketplace add bradheitmann/odin-sentinel claude plugin install odin-scp@odin-sentinel
# option b — register the bare MCP server claude mcp add odin-sentinel -- pnpm dlx --package @bradheitmann/odin-sentinel@0.6.0 odin-sentinel-mcp
[mcp_servers.odin-sentinel] command = "pnpm" args = ["dlx", "--package", "@bradheitmann/odin-sentinel@0.6.0", "odin-sentinel-mcp"]
{ "mcpServers": { "odin-sentinel": { "command": "pnpm", "args": ["dlx", "--package", "@bradheitmann/odin-sentinel@0.6.0", "odin-sentinel-mcp"] } } }
After the harness picks up the new config, command the agent with the instruction below. It will read the protocol resources, follow the role contracts, and stay inside the SCP governance rules. More harness configs are in the README.
| URI | Kind |
|---|---|
| odin://protocol/main | core |
| odin://protocol/roles | contract |
| odin://protocol/topology | topology |
| odin://protocol/model-profiles | defaults |
| odin://protocol/closeout | checklist |
| odin://protocol/delegation | contract |
| odin://protocol/receipts/boot | template |
| odin://protocol/receipts/team-manifest | template |
| odin://protocol/bootstrap-skill | skill |
| odin://protocol/skill-references/boot-receipt-examples | reference |
| odin://protocol/skill-references/canonical-introduction-prompt | reference |
| odin://protocol/skill-references/harness-skill-targets | reference |
| odin://protocol/skill-references/team-bootstrap-runbook | reference |
| odin://protocol/authority-chain | contract |
| odin://protocol/qa-independence | contract |
| odin://protocol/commit-gate | contract |
| odin://protocol/step-up-ladder | contract |
| odin://protocol/blocked-pod-rollover | contract |
| odin://protocol/pod-bringup | contract |
| odin://protocol/slice-health-sentinels | sentinels |
| odin://protocol/harness-control-matrix | defaults |
| odin://protocol/recipe-capture | defaults |
| odin://protocol/role-cards/exec-pm | role card |
| odin://protocol/role-cards/team-pm | role card |
| odin://protocol/role-cards/dev-worker | role card |
| odin://protocol/role-cards/qa-worker | role card |
| odin://protocol/role-cards/exec-asst | role card |
| odin://registry/{scope}/events | template |
| Name | Purpose | Group |
|---|---|---|
| odin.get_version | Server version and build identity. | meta |
| odin.get_runtime_notice | Runtime advisories, privacy boundaries, and warnings. | meta |
| odin.get_startup_packet | Initial topology + role roster for a new session. | bootstrap |
| odin.get_bootstrap_skill | Full Sentinel Coordination Protocol skill. | bootstrap |
| odin.get_role_profile | Role contract, defaults, and verification gates. | roles |
| odin.get_harness_probe_matrix | Harness readiness probes before persistent launch. | roles |
| odin.evaluate_readiness_gate | Classify blockers, waivers, and launch readiness. | roles |
| odin.get_boot_receipt_schema | Canonical boot receipt fields and lifecycle states. | receipts |
| odin.get_boot_receipt_examples | Valid receipt examples for PM, ODIN, DEV, QA, and SHADOW. | receipts |
| odin.validate_boot_receipt | Verify a session boot receipt against template. | validate |
| odin.validate_team_manifest | Verify a team manifest against template. | validate |
| odin.validate_cmux_delivery_proof | Verify CMUX delivery proof instead of trusting input-bar text. | validate |
| odin.validate_instruction_read_proof | Verify full-instruction-read proof for governed context uptake. | validate |
| odin.get_activation_gates | Return fail-closed activation gates and verifier script paths. | readiness |
| odin.get_delegation_packet | Visible-role delegation envelope. | delegate |
| odin.validate_delegation_packet | Verify a delegation envelope is well-formed. | validate |
| odin.get_active_watch_packet | ODIN watch cadence, escalation states, and stall rules. | watch |
| odin.get_onboarding_plan | Generate a harness onboarding and governed-readiness plan. | readiness |
| odin.get_closeout_checklist | Park-for-continuity or full-shutdown checklist. | closeout |
| odin.export_protocol_snapshot | Self-contained snapshot for non-MCP clients. | export |
| odin.compute_surface_layout | Compute pane-surface layout from inputs. | layout |
| odin.compute_surface_layout_gate | Gate layout decisions against current state. | layout |
| odin.compute_human_cmux_quad_layout | Human-readable CMUX quadrant/pod layout. | layout |
| odin.compile_session_report | Compile end-of-session report from receipts. | report |
| odin.submit_session_report | Submit a compiled session report. | report |
| odin.preview_telemetry_redaction | Preview redaction before submission. | privacy |
| odin.get_telemetry_config | Active telemetry configuration and consent. | privacy |
| odin_append_event | Append a typed governance event to the append-only registry. | registry |
| odin_query_events | Query typed governance events by scope from the registry. | registry |
| odin.get_role_card | Quick-start role card with content hash for any SCP role. | roles |
| odin.get_mission_frontrun_pack | Factory Mission governance contract pack with launch template. | delegate |
| odin.evaluate_escalation_gate | Step-up remediation ladder: done, remediate, or escalate. | watch |
| odin.evaluate_blocked_pod_rollover | Decide next-team rollover for a blocked-terminal pod. | watch |
| odin.evaluate_slice_health | Run the slice-health sentinels over run events; signals PM. | sentinels |
| odin.evaluate_oversized_slice_sentinel | Surface slices that DNF two or more independent agents. | sentinels |
| odin.evaluate_qa_timeout_sentinel | Surface QA windows that do not scale with review size. | sentinels |
| odin.evaluate_spec_defect_sentinel | Surface convergent write-prohibited-path spec defects. | sentinels |
| odin.validate_authority_action | Check staffing actions against the standing authority chain. | validate |
| odin.validate_commit_gate | Verify an exec-gated commit record before landing. | validate |
| odin.validate_closure_independence | Detect QA-independence breaches at closure. | validate |
| odin.validate_delivery_verification | Verify a delivery-verification method fits the surface type. | validate |
| odin.validate_bring_up_plan | Verify a pod bring-up plan and its stop triggers. | validate |
| odin.validate_control_recipe | Verify a control recipe is nav-token-free and version-pinned. | validate |
| odin.validate_harness_control_recipe | Verify a harness control recipe in the field shape. | validate |
| odin.validate_fallback_contract | Verify a pre-staged dev-pod fallback contract. | validate |
| odin.validate_outage_handoff | Verify a pre-dark outage handoff receipt. | validate |
| odin.validate_successor_contract | Verify an exec-team successor contract. | validate |
| odin.validate_remediation_packet | Verify a step-up remediation packet before re-dispatch. | validate |
Pipe a raw MCP initialize request into the server. A successful response confirms the server is on PATH, the protocol shake works, and the published serverInfo matches the version you expect.
# initialize → handshake → serverInfo $ printf '{"jsonrpc":"2.0","id":1,"method":"initialize", "params":{"protocolVersion":"2024-11-05", "capabilities":{},"clientInfo":{"name":"probe","version":"0"}}}\n' \ | pnpm dlx --package @bradheitmann/odin-sentinel@0.6.0 odin-sentinel-mcp {"serverInfo":{"name":"odin-sentinel","version":"0.6.0"}} ✓
Secrets stay outside the chat. ODIN verifies provider readiness by account, environment, secret manager, or local config status.
KiloCode needs sign-in. Crush is waiting for permission. Goose is producing hidden reasoning. The label protects the operator.
This is not a disclaimer. It is part of the spec.
Every field below is also exposed in the JSON-LD block at the bottom of this document. Agents crawling this page can lift the same metadata without parsing prose.