BHODIN Sentinel · v0.6.0
OPEN SOURCE · MCP server · TypeScript / Node
Doc OS-MKT-01 · Rev 2026.08 · npm: @bradheitmann/odin-sentinel · Set in Geist Mono
MIT · self-contained · no hosted inference
Sentinel Coordination Protocol · v0.6.0

ODIN
Sentinel.

Give your agent teams an org chart.

$
pnpm dlx --package @bradheitmann/odin-sentinel@0.6.0 odin-sentinel-mcp
48
MCP tools
27
Protocol resources
10+
Harnesses
0$
Hosted cost
odin-sentinel · mcp · stdio
session · 01
$ claude mcp add odin-sentinel \ -- pnpm dlx --package @bradheitmann/odin-sentinel@0.6.0 \ odin-sentinel-mcp ✓ registered · stdio · serverInfo v0.6.0 odin.get_startup_packet ┌─ EXECUTIVE OFFICE ───────────────────┐ A/EXEC-PM orchestration · planning│ A/EXEC-ODIN topology · receipts │ A/EXEC-ASST scribe · summary │ A/EXEC-RSCH retrieval · context │ A/EXEC-QA verify · gates │ └──────────────────────────────────────┘ ┌─ POD · ALPHA ────────────────────────┐ TEAM-PM scope · delegation │ ODIN role contracts · closeout │ DEV-1 implement │ QA-1 test · verify │ SHADOW-1 observe · receipt │ └──────────────────────────────────────┘ 10 roles bound · manifest signed
One server · many harnesses
Same map, same names, same flame
01 · Problem

The problem is not building agents.
It is getting them on the same page.

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.

Failureincoherence
Answervisible roles
LayerMCP stdio
  REC · placeholder · drop video here
ODIN Sentinel · live bootOne server, three panes, one manifest
// replace .frame contents with <video> or <iframe>
00:00 / 02:14 · 16:9 · 1920×1080
MCP
harnesses
Claude Codeclaude mcp add
Codex~/.codex/config.toml
CursormcpServers
VS CodemcpServers
Droidfactory
Zedcontext_servers
Gooseextensions
Crushmcp.stdio
OpenCodemcp.local
OpenHandsstdio_servers
02 What ODIN Sentinel is
ODIN Sentinel is an open-source MCP server that provides a coordination protocol for visible multi-agent work. It does not run inference. It does not replace your planner. It does not replace your harness. It gives agents the shared operating surface real teams need.

The operating surface

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.

The watchers

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.

The governance layer

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.

03 What’s new · v0.6.0
Governance facts are now typed events, not prose to be re-read. Attempts, findings, verdicts, and receipts are recorded in an append-only registry that is the authority; the transcript becomes transport and history. On by default as of 0.6.0.

Event registry

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.

Circuit breakers

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.

Findings that bite

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.

Bounded proof

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.

Opting out

Set ODIN_GOVDISP_REGISTRY_MCP=0 to restore the pre-0.6.0 baseline: 46 tools, prose-only validation, no registry writes.

Previously · v0.5.0

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.

04 · How it works

One protocol. Many harnesses. Same map.

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.

  • 01ResourcesRead-only protocol contracts, role profiles and quick-start role cards, topology defaults, model profiles, receipt templates, governance contracts (authority chain, QA independence, commit gate, escalation ladder), and bootstrap skill text.
  • 02Tools48 deterministic tools for startup, readiness, roles, validation, delegation, watch, sentinels, the governance event registry, layout, closeout, report, privacy, and export.
  • 03ExportsSelf-contained protocol snapshots for clients without discoverable MCP or native skill support.
  • 04TopologyVisible role mesh: executive office, development pods, ODIN watchers, DEV, QA, and SHADOW roles.
                       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    
                  └──────────────────────────┘
Fig. 01 · Topology Boundary: MCP JSON-RPC over stdio
Requirements Designed for visible agent teams cmux is required for governed visible-team mode

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.

01 · Runtime surfacerequired
cmux
Required visible pane/session surface for governed team mode. Install: npm i -g cmux.
02 · Enginerequired
Node.js
Node.js >=22.13.0. Used for npx and the MCP server.
03 · Harnessrequired
MCP host
Claude Code, Codex, Cursor, Zed, Goose, Crush, OpenCode, OpenHands, Droid, or another MCP-capable host.
04 · Shell toolsrecommended
git · ripgrep
Recommended for file-aware workflows. git ≥ 2.40 · rg on PATH.
05 · Quickstart

Pick your harness.
Paste. Restart. Begin.

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.

Claude Code · plugin marketplace (recommended) · ~/.claude/plugins
# option a — install as a Claude Code plugin (recommended)
claude plugin marketplace add bradheitmann/odin-sentinel
claude plugin install odin-scp@odin-sentinel
Claude Code · one-shot MCP registration · ~/.config/claude
# option b — register the bare MCP server
claude mcp add odin-sentinel -- pnpm dlx --package @bradheitmann/odin-sentinel@0.6.0 odin-sentinel-mcp
Codex · TOML · ~/.codex/config.toml
[mcp_servers.odin-sentinel]
command = "pnpm"
args    = ["dlx", "--package", "@bradheitmann/odin-sentinel@0.6.0", "odin-sentinel-mcp"]
Cursor / VS Code / Droid / Crush · JSON · mcpServers
{
  "mcpServers": {
    "odin-sentinel": {
      "command": "pnpm",
      "args": ["dlx", "--package", "@bradheitmann/odin-sentinel@0.6.0", "odin-sentinel-mcp"]
    }
  }
}
Run

Restart the host. Then command it.

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.

Use the `odin-sentinel` MCP server. Call `odin.get_startup_packet`, then bootstrap an executive office and one development pod.
06 · MCP Resources27 + 1 template

Resources
protocol contracts

URIKind
odin://protocol/maincore
odin://protocol/rolescontract
odin://protocol/topologytopology
odin://protocol/model-profilesdefaults
odin://protocol/closeoutchecklist
odin://protocol/delegationcontract
odin://protocol/receipts/boottemplate
odin://protocol/receipts/team-manifesttemplate
odin://protocol/bootstrap-skillskill
odin://protocol/skill-references/boot-receipt-examplesreference
odin://protocol/skill-references/canonical-introduction-promptreference
odin://protocol/skill-references/harness-skill-targetsreference
odin://protocol/skill-references/team-bootstrap-runbookreference
odin://protocol/authority-chaincontract
odin://protocol/qa-independencecontract
odin://protocol/commit-gatecontract
odin://protocol/step-up-laddercontract
odin://protocol/blocked-pod-rollovercontract
odin://protocol/pod-bringupcontract
odin://protocol/slice-health-sentinelssentinels
odin://protocol/harness-control-matrixdefaults
odin://protocol/recipe-capturedefaults
odin://protocol/role-cards/exec-pmrole card
odin://protocol/role-cards/team-pmrole card
odin://protocol/role-cards/dev-workerrole card
odin://protocol/role-cards/qa-workerrole card
odin://protocol/role-cards/exec-asstrole card
odin://registry/{scope}/eventstemplate
07 · MCP Tools48

Tools
callable surface

NamePurposeGroup
odin.get_versionServer version and build identity.meta
odin.get_runtime_noticeRuntime advisories, privacy boundaries, and warnings.meta
odin.get_startup_packetInitial topology + role roster for a new session.bootstrap
odin.get_bootstrap_skillFull Sentinel Coordination Protocol skill.bootstrap
odin.get_role_profileRole contract, defaults, and verification gates.roles
odin.get_harness_probe_matrixHarness readiness probes before persistent launch.roles
odin.evaluate_readiness_gateClassify blockers, waivers, and launch readiness.roles
odin.get_boot_receipt_schemaCanonical boot receipt fields and lifecycle states.receipts
odin.get_boot_receipt_examplesValid receipt examples for PM, ODIN, DEV, QA, and SHADOW.receipts
odin.validate_boot_receiptVerify a session boot receipt against template.validate
odin.validate_team_manifestVerify a team manifest against template.validate
odin.validate_cmux_delivery_proofVerify CMUX delivery proof instead of trusting input-bar text.validate
odin.validate_instruction_read_proofVerify full-instruction-read proof for governed context uptake.validate
odin.get_activation_gatesReturn fail-closed activation gates and verifier script paths.readiness
odin.get_delegation_packetVisible-role delegation envelope.delegate
odin.validate_delegation_packetVerify a delegation envelope is well-formed.validate
odin.get_active_watch_packetODIN watch cadence, escalation states, and stall rules.watch
odin.get_onboarding_planGenerate a harness onboarding and governed-readiness plan.readiness
odin.get_closeout_checklistPark-for-continuity or full-shutdown checklist.closeout
odin.export_protocol_snapshotSelf-contained snapshot for non-MCP clients.export
odin.compute_surface_layoutCompute pane-surface layout from inputs.layout
odin.compute_surface_layout_gateGate layout decisions against current state.layout
odin.compute_human_cmux_quad_layoutHuman-readable CMUX quadrant/pod layout.layout
odin.compile_session_reportCompile end-of-session report from receipts.report
odin.submit_session_reportSubmit a compiled session report.report
odin.preview_telemetry_redactionPreview redaction before submission.privacy
odin.get_telemetry_configActive telemetry configuration and consent.privacy
odin_append_eventAppend a typed governance event to the append-only registry.registry
odin_query_eventsQuery typed governance events by scope from the registry.registry
odin.get_role_cardQuick-start role card with content hash for any SCP role.roles
odin.get_mission_frontrun_packFactory Mission governance contract pack with launch template.delegate
odin.evaluate_escalation_gateStep-up remediation ladder: done, remediate, or escalate.watch
odin.evaluate_blocked_pod_rolloverDecide next-team rollover for a blocked-terminal pod.watch
odin.evaluate_slice_healthRun the slice-health sentinels over run events; signals PM.sentinels
odin.evaluate_oversized_slice_sentinelSurface slices that DNF two or more independent agents.sentinels
odin.evaluate_qa_timeout_sentinelSurface QA windows that do not scale with review size.sentinels
odin.evaluate_spec_defect_sentinelSurface convergent write-prohibited-path spec defects.sentinels
odin.validate_authority_actionCheck staffing actions against the standing authority chain.validate
odin.validate_commit_gateVerify an exec-gated commit record before landing.validate
odin.validate_closure_independenceDetect QA-independence breaches at closure.validate
odin.validate_delivery_verificationVerify a delivery-verification method fits the surface type.validate
odin.validate_bring_up_planVerify a pod bring-up plan and its stop triggers.validate
odin.validate_control_recipeVerify a control recipe is nav-token-free and version-pinned.validate
odin.validate_harness_control_recipeVerify a harness control recipe in the field shape.validate
odin.validate_fallback_contractVerify a pre-staged dev-pod fallback contract.validate
odin.validate_outage_handoffVerify a pre-dark outage handoff receipt.validate
odin.validate_successor_contractVerify an exec-team successor contract.validate
odin.validate_remediation_packetVerify a step-up remediation packet before re-dispatch.validate

08 · Smoke test

One line.
No host required.

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.

$ · smoke probe · stdio
v0.6.0
# 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"}}  
09 Operator-first
ODIN Sentinel assumes the operator is in command, not at fault.

If a harness needs sign-in, the protocol says so plainly.

If a model stalls on hidden reasoning, the watcher names the stall.

If a permission prompt is waiting, the watch layer classifies it as blocked instead of pretending the agent crashed.

If an agent lacks MCP context, native skill context, or account credentials, the readiness gate classifies the blocker.

If a local model is not ready, the gate catches that too.

No secret paste

Secrets stay outside the chat. ODIN verifies provider readiness by account, environment, secret manager, or local config status.

Plain blockers

KiloCode needs sign-in. Crush is waiting for permission. Goose is producing hidden reasoning. The label protects the operator.

Spec, not disclaimer

This is not a disclaimer. It is part of the spec.

10 · Machine-readable spec

For humans and agents.

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.

Name
ODIN Sentinel
Package
@bradheitmann/odin-sentinel
Version
0.6.0
License
MIT
Category
MCP server · Agent coordination
Runtime
Node.js · stdio
Language
TypeScript
Pricing
$0 · no hosted inference
MCP tools
48
MCP resources
27
Protocol
MCP 2024-11-05
Transport
JSON-RPC over stdio
Executables
odin-sentinel-mcp · odin-sentinel · odin-watch
Engine
Node.js >=22.13.0
Dependencies
3
Registry mode
on by default · opt out with ODIN_GOVDISP_REGISTRY_MCP=0
Repository
github.com/bradheitmann/odin-sentinel
Install
npm · npx
Author

ODIN
Sentinel. begin.

Same map.
Same names.
Same flame.

Watchers stay on duty.
odin-sentinel · MIT · open source Branded with the VHX design system · proprietary © 2026 Brad Heitmann