@bradheitmann/odin-sentinel 0.4.4 → 0.4.6
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.
- package/AGENTS.md +64 -0
- package/CLAUDE.md +43 -0
- package/README.md +102 -335
- package/dist/src/mcp/server.js +43 -12
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/protocol/schemas.d.ts +2529 -4
- package/dist/src/protocol/schemas.js +214 -18
- package/dist/src/protocol/schemas.js.map +1 -1
- package/dist/src/protocol/service.d.ts +96 -2
- package/dist/src/protocol/service.js +516 -4
- package/dist/src/protocol/service.js.map +1 -1
- package/dist/src/protocol/surface-layout.d.ts +40 -1
- package/dist/src/protocol/surface-layout.js +98 -1
- package/dist/src/protocol/surface-layout.js.map +1 -1
- package/dist/src/protocol/validators.d.ts +3 -0
- package/dist/src/protocol/validators.js +28 -0
- package/dist/src/protocol/validators.js.map +1 -1
- package/dist/src/protocol/version.d.ts +3 -0
- package/dist/src/protocol/version.js +3 -0
- package/dist/src/protocol/version.js.map +1 -1
- package/dist/src/telemetry/config.d.ts +8 -0
- package/dist/src/telemetry/config.js +24 -0
- package/dist/src/telemetry/config.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +5 -5
- package/dist/src/telemetry/index.js +3 -3
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/redactor.js +25 -7
- package/dist/src/telemetry/redactor.js.map +1 -1
- package/dist/src/telemetry/report.d.ts +108 -0
- package/dist/src/telemetry/report.js +83 -3
- package/dist/src/telemetry/report.js.map +1 -1
- package/dist/src/telemetry/submit.d.ts +2 -0
- package/dist/src/telemetry/submit.js +79 -6
- package/dist/src/telemetry/submit.js.map +1 -1
- package/docs/guides/quick-start.md +112 -44
- package/docs/guides/quickstart-prompts.md +65 -0
- package/docs/guides/recommended-starter-team.md +45 -27
- package/docs/reference/client-compatibility.md +20 -43
- package/docs/reference/cost-and-privacy.md +26 -23
- package/docs/reference/distribution.md +40 -55
- package/docs/reference/public-surface-audit.md +35 -114
- package/package.json +19 -4
- package/protocol/SCP.md +8 -1
- package/protocol/bootstrap-skill.md +16 -11
- package/protocol/closeout.yaml +7 -1
- package/protocol/delegation.yaml +1 -1
- package/protocol/model-profiles.yaml +55 -1
- package/protocol/receipts/boot-receipt.yaml +42 -0
- package/protocol/receipts/team-manifest.yaml +41 -0
- package/protocol/roles.yaml +69 -1
- package/protocol/topology.yaml +78 -36
- package/scripts/audit/public-surface.mjs +48 -19
- package/scripts/audit/verify-pack.mjs +294 -27
- package/templates/dev-slice-template.md +56 -0
- package/templates/pm-role-template.md +61 -0
- package/templates/qa-slice-template.md +46 -0
- package/templates/team-manifest-template.yaml +163 -0
package/AGENTS.md
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# ODIN Sentinel Agent Instructions
|
|
2
|
+
|
|
3
|
+
These instructions are for public repo-local agents working with ODIN Sentinel.
|
|
4
|
+
They are intentionally lightweight starter guidance, not a replacement for a
|
|
5
|
+
user's own development process.
|
|
6
|
+
|
|
7
|
+
## Role Pattern
|
|
8
|
+
|
|
9
|
+
ODIN uses a simple PM/DEV/QA pattern for visible multi-agent work.
|
|
10
|
+
|
|
11
|
+
- EXEC PM owns launch and activation decisions, readiness waivers or
|
|
12
|
+
substitutions, CMUX topology, staffing, final claim framing, and escalation to
|
|
13
|
+
the human operator.
|
|
14
|
+
- TEAM PM owns local routing, worker activation, and status inside an assigned
|
|
15
|
+
team after EXEC PM activation. TEAM PM does not create staff, waive readiness,
|
|
16
|
+
mutate CMUX topology, or close lifecycle unless EXEC PM explicitly delegates
|
|
17
|
+
that authority.
|
|
18
|
+
- DEV implements only the assigned write scope. DEV cannot QA-accept its own
|
|
19
|
+
work and must report changed files plus verification commands and results.
|
|
20
|
+
- QA starts fresh, reviews adversarially, verifies DEV work independently,
|
|
21
|
+
does not fix code during QA, and reports PASS or FAIL with evidence.
|
|
22
|
+
- ODIN monitors health, scope, readiness, delivery, and drift. ODIN may prod,
|
|
23
|
+
halt, or escalate, but is not a DEV, not a QA acceptor, and not the PM launch
|
|
24
|
+
authority.
|
|
25
|
+
|
|
26
|
+
## Operating Rules
|
|
27
|
+
|
|
28
|
+
- Stay inside the assigned files and task scope.
|
|
29
|
+
- Do not print secrets. Report secret status by provider/name only.
|
|
30
|
+
- Do not assume MCP alone is enough for governed team mode. Confirm MCP,
|
|
31
|
+
native skill or prompt fallback, CMUX layout, auth readiness, and model smoke
|
|
32
|
+
tests before launch.
|
|
33
|
+
- Use CMUX for governed team mode. Without CMUX, ODIN can still provide protocol
|
|
34
|
+
resources and validation tools, but the visible governed-team experience is not
|
|
35
|
+
active.
|
|
36
|
+
- Treat local operator planning folders as optional private workspace, not
|
|
37
|
+
required product internals.
|
|
38
|
+
- Use `templates/` as starter material. Replace placeholders with project-owned
|
|
39
|
+
criteria before dispatching work.
|
|
40
|
+
|
|
41
|
+
## Operator Ergonomics
|
|
42
|
+
|
|
43
|
+
- Assume the operator may be new to terminals, agent harnesses, and API-key
|
|
44
|
+
setup. Explain blockers in plain language before using protocol labels.
|
|
45
|
+
- Never frame setup gaps as user failure. Say what is blocked, what is safe, and
|
|
46
|
+
what choice the operator has next.
|
|
47
|
+
- Treat prod, halt, freeze, warn, and stalled language as safety language. Pair
|
|
48
|
+
it with the reason and the next human choice so the operator feels protected,
|
|
49
|
+
not punished.
|
|
50
|
+
- Prefer short status lines: "KiloCode needs sign-in", "Crush is waiting for
|
|
51
|
+
permission", "Goose is still producing hidden reasoning", or "OpenHands needs
|
|
52
|
+
provider credentials".
|
|
53
|
+
- Do not ask the operator to paste secrets. Ask whether each harness is already
|
|
54
|
+
provisioned through an account, environment, secret manager, or local config.
|
|
55
|
+
|
|
56
|
+
## Completion Report
|
|
57
|
+
|
|
58
|
+
Every agent handoff should include:
|
|
59
|
+
|
|
60
|
+
- role and assigned scope
|
|
61
|
+
- files changed
|
|
62
|
+
- commands run and results
|
|
63
|
+
- blocked or waived readiness checks
|
|
64
|
+
- risks or integration notes
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# ODIN Sentinel Guidance For Claude
|
|
2
|
+
|
|
3
|
+
Use this public role contract when Claude Code or another Claude surface is part
|
|
4
|
+
of an ODIN Sentinel run.
|
|
5
|
+
|
|
6
|
+
## Public Role Contract
|
|
7
|
+
|
|
8
|
+
- EXEC PM: choose launch timing, approve readiness waivers or substitutions,
|
|
9
|
+
own staffing and CMUX topology, assign scope, define acceptance criteria, and
|
|
10
|
+
escalate to the human operator.
|
|
11
|
+
- TEAM PM: route work and activate workers inside an already launched team.
|
|
12
|
+
TEAM PM does not staff new occupants, waive launch readiness, mutate CMUX
|
|
13
|
+
topology, or close lifecycle unless EXEC PM explicitly delegates that authority.
|
|
14
|
+
- DEV: implement only assigned files, avoid unrelated edits, never accept own
|
|
15
|
+
work as QA, and report changed files plus verification commands.
|
|
16
|
+
- QA: start from a fresh review posture, verify independently, do not fix during
|
|
17
|
+
QA, and return PASS or FAIL with concrete evidence.
|
|
18
|
+
- ODIN: monitor readiness, health, scope, delivery, and drift. ODIN can intervene
|
|
19
|
+
or escalate, but does not implement, QA-accept, or launch teams without PM
|
|
20
|
+
authority.
|
|
21
|
+
|
|
22
|
+
## Claude-Specific Notes
|
|
23
|
+
|
|
24
|
+
- If a native SCP skill is installed, use it. If not, ask the PM for the full
|
|
25
|
+
prompt or call the ODIN MCP server for `odin.get_bootstrap_skill`.
|
|
26
|
+
- Do not ask users to paste API keys, tokens, or OAuth values into chat. Ask
|
|
27
|
+
whether providers are configured through Doppler, 1Password CLI, environment
|
|
28
|
+
variables, direnv, mise, or dotenv-style files, then verify status without
|
|
29
|
+
printing secret values.
|
|
30
|
+
- Governed team mode requires visible CMUX role slots. A tab-only chat layout is
|
|
31
|
+
degraded and should be treated as a fallback, not the canonical mode.
|
|
32
|
+
- If MCP, skill context, auth, permissions, or local inference are missing, report
|
|
33
|
+
the blocker and wait for PM/user direction instead of guessing.
|
|
34
|
+
- When the operator appears new to agents or terminals, use plain-language status
|
|
35
|
+
before protocol labels. Make the next safe choice obvious and avoid implying
|
|
36
|
+
the operator did something wrong.
|
|
37
|
+
- If you use terms like halt, warn, freeze, or stalled, immediately explain that
|
|
38
|
+
the pause is a safety rail for the operator and name the next safe choice.
|
|
39
|
+
|
|
40
|
+
## Output Shape
|
|
41
|
+
|
|
42
|
+
End work with changed files, commands run, command results, unmet criteria, and
|
|
43
|
+
integration risks.
|
package/README.md
CHANGED
|
@@ -1,54 +1,83 @@
|
|
|
1
1
|
# ODIN Sentinel
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**Visible multi-agent team coordination over MCP.**
|
|
4
|
+
|
|
5
|
+
ODIN Sentinel is a local stdio MCP server plus a portable coordination protocol
|
|
6
|
+
for visible agent teams. It gives agents a shared roster, startup packet,
|
|
7
|
+
delegation contract, receipt shape, layout rule, and closeout checklist. It does
|
|
8
|
+
not provide model inference, host a backend, or replace your development process.
|
|
9
|
+
|
|
10
|
+
Plain version: ODIN Sentinel helps you put coding agents into named visible
|
|
11
|
+
roles, check whether they are ready, and keep a human operator in control. If a
|
|
12
|
+
tool asks you to sign in, approve a permission prompt, or configure an account,
|
|
13
|
+
that is a normal setup blocker, not a personal failure. You can pause, choose a
|
|
14
|
+
different harness, keep a role slot empty, or ask for help.
|
|
15
|
+
|
|
16
|
+
For the fastest path, read [docs/guides/quick-start.md](docs/guides/quick-start.md).
|
|
17
|
+
For copy-paste prompts, read [docs/guides/quickstart-prompts.md](docs/guides/quickstart-prompts.md).
|
|
18
|
+
For a starter team shape, read [docs/guides/recommended-starter-team.md](docs/guides/recommended-starter-team.md).
|
|
19
|
+
|
|
20
|
+
## Terms In Plain Language
|
|
21
|
+
|
|
22
|
+
- MCP server: a local tool bridge that lets an agent ask ODIN Sentinel for
|
|
23
|
+
protocol documents and validation checks.
|
|
24
|
+
- Harness: the app or CLI running an agent, such as Claude Code, Codex, Goose,
|
|
25
|
+
Crush, OpenHands, Cursor, Zed, or another MCP-capable host.
|
|
26
|
+
- CMUX: the visible terminal workspace where the human can see named role slots.
|
|
27
|
+
- Governed team mode: the stricter mode where persistent agents must be visible,
|
|
28
|
+
assigned to roles, and monitored.
|
|
29
|
+
- Native skill or prompt fallback: the instructions that teach an agent how to
|
|
30
|
+
behave in this system.
|
|
31
|
+
|
|
32
|
+
## Minimum Governed-Team Checklist
|
|
33
|
+
|
|
34
|
+
Before launching persistent governed roles, confirm:
|
|
35
|
+
|
|
36
|
+
- Node.js satisfies `package.json` (`>=22.13.0`).
|
|
37
|
+
- `@bradheitmann/odin-sentinel` is installed or available through `npx`.
|
|
38
|
+
- The ODIN MCP server is configured in each selected harness.
|
|
39
|
+
- The SCP native skill is installed where supported, or the full prompt/resource
|
|
40
|
+
fallback is available.
|
|
41
|
+
- CMUX is installed and the team will run in one visible CMUX workspace.
|
|
42
|
+
- Harnesses and accounts are selected and authenticated.
|
|
43
|
+
- Local inference is smoke-tested if used: endpoint reachable, content returned
|
|
44
|
+
within timeout, and not only `reasoning_content`.
|
|
45
|
+
- Role-compatibility smoke test passes for each persistent role.
|
|
46
|
+
|
|
47
|
+
Role slots may be prepared before readiness is complete, but occupants should
|
|
48
|
+
not be launched until readiness passes or the PM records a waiver/substitution.
|
|
4
49
|
|
|
5
|
-
|
|
6
|
-
terminal panes, local CLIs, editors, and MCP-capable harnesses. It does not try
|
|
7
|
-
to be another agent. It gives the agents a room, a roster, and a way to work
|
|
8
|
-
without dissolving into chatter.
|
|
9
|
-
|
|
10
|
-
The questions are practical. Who is here? What role do they hold? Who may
|
|
11
|
-
delegate? Who may verify? What changed, what passed, what failed, and how does
|
|
12
|
-
the session end without leaving a pane stack full of unfinished business?
|
|
13
|
-
|
|
14
|
-
ODIN starts with shape: an executive office, development pods, and ODIN
|
|
15
|
-
roles across the mesh. Then it provides the protocol pieces that keep the shape
|
|
16
|
-
honest: startup packets, role contracts, model and harness defaults, delegation
|
|
17
|
-
envelopes, receipts, manifests, and closeout checklists.
|
|
18
|
-
|
|
19
|
-
No hand-copied ritual. No private lore. Any MCP-capable harness can ask. Codex,
|
|
20
|
-
Claude, Droid, Crush, Goose, Zed, OpenCode, or a client written in Rust, Go,
|
|
21
|
-
Zig, or WebAssembly all fit the same boundary when they can launch or bridge
|
|
22
|
-
stdio MCP. These are examples, not bundled dependencies. One server. Many
|
|
23
|
-
harnesses. Same map, same names, same flame.
|
|
50
|
+
## Install
|
|
24
51
|
|
|
25
|
-
|
|
26
|
-
|
|
52
|
+
```bash
|
|
53
|
+
npm i -g @bradheitmann/odin-sentinel
|
|
54
|
+
```
|
|
27
55
|
|
|
28
|
-
|
|
29
|
-
[docs/guides/recommended-starter-team.md](docs/guides/recommended-starter-team.md).
|
|
56
|
+
Zero-install MCP host config can use:
|
|
30
57
|
|
|
31
|
-
|
|
58
|
+
```bash
|
|
59
|
+
npx -y -p @bradheitmann/odin-sentinel odin-sentinel-mcp
|
|
60
|
+
```
|
|
32
61
|
|
|
33
|
-
|
|
62
|
+
A stdio smoke test that does not require an MCP host:
|
|
34
63
|
|
|
35
64
|
```bash
|
|
36
|
-
|
|
65
|
+
printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"probe","version":"0"}}}\n' \
|
|
66
|
+
| npx -y -p @bradheitmann/odin-sentinel odin-sentinel-mcp
|
|
37
67
|
```
|
|
38
68
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
### 2. Configure your MCP host
|
|
69
|
+
A successful response includes `"serverInfo":{"name":"odin-sentinel","version":"0.4.6"}`.
|
|
70
|
+
Minimum compatible child MCP version for governed-team docs is `0.4.5`.
|
|
42
71
|
|
|
43
|
-
|
|
72
|
+
## MCP Host Examples
|
|
44
73
|
|
|
45
|
-
|
|
74
|
+
Claude Code:
|
|
46
75
|
|
|
47
76
|
```bash
|
|
48
77
|
claude mcp add odin-sentinel -- npx -y -p @bradheitmann/odin-sentinel odin-sentinel-mcp
|
|
49
78
|
```
|
|
50
79
|
|
|
51
|
-
|
|
80
|
+
Codex (`~/.codex/config.toml`):
|
|
52
81
|
|
|
53
82
|
```toml
|
|
54
83
|
[mcp_servers.odin-sentinel]
|
|
@@ -56,7 +85,7 @@ command = "npx"
|
|
|
56
85
|
args = ["-y", "-p", "@bradheitmann/odin-sentinel", "odin-sentinel-mcp"]
|
|
57
86
|
```
|
|
58
87
|
|
|
59
|
-
|
|
88
|
+
Generic `mcpServers` JSON:
|
|
60
89
|
|
|
61
90
|
```json
|
|
62
91
|
{
|
|
@@ -69,146 +98,49 @@ args = ["-y", "-p", "@bradheitmann/odin-sentinel", "odin-sentinel-mcp"]
|
|
|
69
98
|
}
|
|
70
99
|
```
|
|
71
100
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
```json
|
|
75
|
-
"odin-sentinel": {
|
|
76
|
-
"source": "custom",
|
|
77
|
-
"command": "npx",
|
|
78
|
-
"args": ["-y", "-p", "@bradheitmann/odin-sentinel", "odin-sentinel-mcp"]
|
|
79
|
-
}
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
**Goose** (`~/.config/goose/config.yaml` → `extensions`)
|
|
83
|
-
|
|
84
|
-
```yaml
|
|
85
|
-
odin-sentinel:
|
|
86
|
-
type: stdio
|
|
87
|
-
cmd: npx
|
|
88
|
-
args: ["-y", "-p", "@bradheitmann/odin-sentinel", "odin-sentinel-mcp"]
|
|
89
|
-
enabled: true
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
**Crush** (`~/.config/crush/crush.json` → `mcp`)
|
|
93
|
-
|
|
94
|
-
```json
|
|
95
|
-
{
|
|
96
|
-
"mcp": {
|
|
97
|
-
"odin-sentinel": {
|
|
98
|
-
"type": "stdio",
|
|
99
|
-
"command": "npx",
|
|
100
|
-
"args": ["-y", "-p", "@bradheitmann/odin-sentinel", "odin-sentinel-mcp"]
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
**OpenCode** (`~/.config/opencode/opencode.json` → `mcp`)
|
|
107
|
-
|
|
108
|
-
```json
|
|
109
|
-
{
|
|
110
|
-
"mcp": {
|
|
111
|
-
"odin-sentinel": {
|
|
112
|
-
"type": "local",
|
|
113
|
-
"command": ["npx", "-y", "-p", "@bradheitmann/odin-sentinel", "odin-sentinel-mcp"],
|
|
114
|
-
"enabled": true
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
**OpenHands** (`~/.openhands/config.toml`)
|
|
121
|
-
|
|
122
|
-
```toml
|
|
123
|
-
[mcp.stdio_servers.odin-sentinel]
|
|
124
|
-
name = "odin-sentinel"
|
|
125
|
-
command = "npx"
|
|
126
|
-
args = ["-y", "-p", "@bradheitmann/odin-sentinel", "odin-sentinel-mcp"]
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### 3. Use it
|
|
130
|
-
|
|
131
|
-
After restarting the host, give the agent an instruction like:
|
|
132
|
-
|
|
133
|
-
> Use the `odin-sentinel` MCP server. Call `odin.get_startup_packet`, then bootstrap an executive office and one development pod.
|
|
101
|
+
## MCP, Skill, Plugin, Prompt Fallback
|
|
134
102
|
|
|
135
|
-
|
|
103
|
+
- MCP server: supplies protocol resources and validation tools.
|
|
104
|
+
- Native skill: improves discoverability and automatic invocation in supported
|
|
105
|
+
harnesses.
|
|
106
|
+
- Plugin: may package the MCP server and native skill together for a host.
|
|
107
|
+
- Full prompt injection: fallback only when MCP/native skill/plugin support is
|
|
108
|
+
unavailable.
|
|
136
109
|
|
|
137
|
-
|
|
110
|
+
MCP alone is useful, but governed team mode is strongest when the persistent
|
|
111
|
+
roles also have native skill context or the full bootstrap prompt.
|
|
138
112
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
```bash
|
|
142
|
-
printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"probe","version":"0"}}}\n' \
|
|
143
|
-
| npx -y -p @bradheitmann/odin-sentinel odin-sentinel-mcp
|
|
144
|
-
```
|
|
113
|
+
## CMUX Requirement
|
|
145
114
|
|
|
146
|
-
|
|
115
|
+
Governed team mode requires CMUX or a compatible visible terminal-pane surface.
|
|
116
|
+
The EXEC PM should remain in the same CMUX workspace as the rest of the team by
|
|
117
|
+
default. Tab-only layouts are degraded; the canonical layout is human-readable
|
|
118
|
+
spatial/pod organization.
|
|
147
119
|
|
|
148
|
-
|
|
120
|
+
Without CMUX, ODIN can still expose MCP resources, validation tools, and protocol
|
|
121
|
+
snapshots, but the visible team-management experience is not active governed
|
|
122
|
+
mode.
|
|
149
123
|
|
|
150
|
-
|
|
124
|
+
## Public Starter Templates
|
|
151
125
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
```
|
|
126
|
+
The `templates/` directory contains intentionally basic PM, DEV, QA, and team
|
|
127
|
+
manifest templates. They are starter material only. Add your own criteria before
|
|
128
|
+
using them for real work.
|
|
156
129
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
- ODIN Sentinel: this MCP server and its portable team-coordination protocol.
|
|
160
|
-
- SCP: Sentinel Coordination Protocol, the ODIN startup, delegation, receipt,
|
|
161
|
-
manifest, and closeout contract. It is not Secure Copy.
|
|
162
|
-
- CMUX: a compatible terminal-pane control surface. ODIN can support CMUX-style
|
|
163
|
-
teams, but CMUX is not required by this repository.
|
|
164
|
-
- Harness: a local agent runtime, CLI, editor integration, or MCP client.
|
|
165
|
-
|
|
166
|
-
## How It Works
|
|
167
|
-
|
|
168
|
-
```text
|
|
169
|
-
MCP-capable clients
|
|
170
|
-
┌─────────────────────────────────────┐
|
|
171
|
-
│ Codex │ Claude │ Droid │ Crush │ UI │
|
|
172
|
-
└───┬──────┬────────┬───────┬─────┬───┘
|
|
173
|
-
│ │ │ │ │
|
|
174
|
-
└──────┴────────┴───────┴─────┘
|
|
175
|
-
│
|
|
176
|
-
▼
|
|
177
|
-
┌───────────────────┐
|
|
178
|
-
│ odin-sentinel │
|
|
179
|
-
│ MCP server │
|
|
180
|
-
└─────────┬─────────┘
|
|
181
|
-
│
|
|
182
|
-
┌───────────────────┼───────────────────┐
|
|
183
|
-
▼ ▼ ▼
|
|
184
|
-
┌───────────┐ ┌───────────┐ ┌────────────┐
|
|
185
|
-
│ Resources │ │ Tools │ │ Exports │
|
|
186
|
-
│ protocol │ │ validate │ │ standalone │
|
|
187
|
-
│ roles │ │ startup │ │ protocol │
|
|
188
|
-
│ topology │ │ closeout │ │ snapshots │
|
|
189
|
-
└───────────┘ └───────────┘ └────────────┘
|
|
190
|
-
│ │ │
|
|
191
|
-
└───────────────────┼───────────────────┘
|
|
192
|
-
▼
|
|
193
|
-
┌─────────────────────────┐
|
|
194
|
-
│ Visible role topology │
|
|
195
|
-
│ EXEC PM, EXEC ODIN, │
|
|
196
|
-
│ TEAM PM, TEAM ODIN, │
|
|
197
|
-
│ DEV, QA, SHADOW │
|
|
198
|
-
└─────────────────────────┘
|
|
199
|
-
```
|
|
130
|
+
Local operator planning folders may be useful private workspaces, but they are
|
|
131
|
+
not shipped product internals and are not required for public users.
|
|
200
132
|
|
|
201
133
|
## Provided MCP Resources
|
|
202
134
|
|
|
203
|
-
- `odin://protocol/main`
|
|
204
|
-
- `odin://protocol/roles`
|
|
205
|
-
- `odin://protocol/topology`
|
|
206
|
-
- `odin://protocol/model-profiles`
|
|
207
|
-
- `odin://protocol/closeout`
|
|
208
|
-
- `odin://protocol/delegation`
|
|
209
|
-
- `odin://protocol/receipts/boot`
|
|
210
|
-
- `odin://protocol/receipts/team-manifest`
|
|
211
|
-
- `odin://protocol/bootstrap-skill`
|
|
135
|
+
- `odin://protocol/main`
|
|
136
|
+
- `odin://protocol/roles`
|
|
137
|
+
- `odin://protocol/topology`
|
|
138
|
+
- `odin://protocol/model-profiles`
|
|
139
|
+
- `odin://protocol/closeout`
|
|
140
|
+
- `odin://protocol/delegation`
|
|
141
|
+
- `odin://protocol/receipts/boot`
|
|
142
|
+
- `odin://protocol/receipts/team-manifest`
|
|
143
|
+
- `odin://protocol/bootstrap-skill`
|
|
212
144
|
|
|
213
145
|
## Provided MCP Tools
|
|
214
146
|
|
|
@@ -216,6 +148,11 @@ claude plugin install sentinel-coordination-protocol@odin-sentinel
|
|
|
216
148
|
- `odin.get_startup_packet`
|
|
217
149
|
- `odin.get_role_profile`
|
|
218
150
|
- `odin.get_bootstrap_skill`
|
|
151
|
+
- `odin.get_boot_receipt_schema`
|
|
152
|
+
- `odin.get_boot_receipt_examples`
|
|
153
|
+
- `odin.get_active_watch_packet`
|
|
154
|
+
- `odin.get_harness_probe_matrix`
|
|
155
|
+
- `odin.evaluate_readiness_gate`
|
|
219
156
|
- `odin.validate_boot_receipt`
|
|
220
157
|
- `odin.validate_team_manifest`
|
|
221
158
|
- `odin.get_delegation_packet`
|
|
@@ -225,186 +162,16 @@ claude plugin install sentinel-coordination-protocol@odin-sentinel
|
|
|
225
162
|
- `odin.export_protocol_snapshot`
|
|
226
163
|
- `odin.compute_surface_layout`
|
|
227
164
|
- `odin.compute_surface_layout_gate`
|
|
165
|
+
- `odin.compute_human_cmux_quad_layout`
|
|
228
166
|
- `odin.compile_session_report`
|
|
229
167
|
- `odin.preview_telemetry_redaction`
|
|
230
168
|
- `odin.submit_session_report`
|
|
231
169
|
- `odin.get_telemetry_config`
|
|
232
170
|
|
|
233
|
-
## Self-Contained Protocol
|
|
234
|
-
|
|
235
|
-
ODIN Sentinel must not depend on external local extensions. Concepts such as
|
|
236
|
-
delegation, handoff discovery, startup topology, model/harness profiles, receipt
|
|
237
|
-
validation, and closeout are implemented as MCP resources and tools inside this
|
|
238
|
-
server.
|
|
239
|
-
|
|
240
|
-
A client may have other local extensions installed, but those extensions are optional
|
|
241
|
-
and cannot be required for the ODIN Sentinel protocol to work.
|
|
242
|
-
|
|
243
|
-
## Client Compatibility
|
|
244
|
-
|
|
245
|
-
ODIN Sentinel is implemented in TypeScript and runs on Node.js, but MCP clients
|
|
246
|
-
can be written in Rust, Zig, Go, WebAssembly, Python, or any other environment
|
|
247
|
-
that can speak MCP over stdio.
|
|
248
|
-
|
|
249
|
-
The boundary is plain MCP JSON-RPC:
|
|
250
|
-
|
|
251
|
-
```text
|
|
252
|
-
native / WASM / CLI client
|
|
253
|
-
│
|
|
254
|
-
│ MCP over stdio
|
|
255
|
-
▼
|
|
256
|
-
node dist/src/bin/index.js
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
For clients that cannot spawn stdio subprocesses, use a host bridge or consume
|
|
260
|
-
the fallback files returned by `odin.export_protocol_snapshot`.
|
|
261
|
-
|
|
262
|
-
See [docs/reference/client-compatibility.md](docs/reference/client-compatibility.md).
|
|
263
|
-
For the current release-surface inventory, see
|
|
264
|
-
[docs/reference/public-surface-audit.md](docs/reference/public-surface-audit.md).
|
|
265
|
-
|
|
266
|
-
## Install
|
|
267
|
-
|
|
268
|
-
For a step-by-step setup, see [docs/guides/quick-start.md](docs/guides/quick-start.md).
|
|
269
|
-
|
|
270
|
-
For local source builds:
|
|
271
|
-
|
|
272
|
-
```bash
|
|
273
|
-
pnpm install
|
|
274
|
-
pnpm run build
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
Or install from npm:
|
|
278
|
-
|
|
279
|
-
```bash
|
|
280
|
-
npm i -g @bradheitmann/odin-sentinel
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
Then run the MCP server directly:
|
|
284
|
-
|
|
285
|
-
```bash
|
|
286
|
-
odin-sentinel-mcp
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
For zero-install use from any MCP host config:
|
|
290
|
-
|
|
291
|
-
```bash
|
|
292
|
-
npx -y -p @bradheitmann/odin-sentinel odin-sentinel-mcp
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
See [docs/reference/distribution.md](docs/reference/distribution.md).
|
|
296
|
-
|
|
297
|
-
## Run Over stdio
|
|
298
|
-
|
|
299
|
-
```bash
|
|
300
|
-
pnpm run dev
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
After building:
|
|
304
|
-
|
|
305
|
-
```bash
|
|
306
|
-
node dist/src/bin/index.js
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
When installed from a package, the executable names are:
|
|
310
|
-
|
|
311
|
-
```bash
|
|
312
|
-
odin-sentinel
|
|
313
|
-
odin-sentinel-mcp
|
|
314
|
-
```
|
|
315
|
-
|
|
316
|
-
## Example MCP Client Configuration
|
|
317
|
-
|
|
318
|
-
```json
|
|
319
|
-
{
|
|
320
|
-
"mcpServers": {
|
|
321
|
-
"odin-sentinel": {
|
|
322
|
-
"command": "node",
|
|
323
|
-
"args": ["/absolute/path/to/odin-sentinel/dist/src/bin/index.js"]
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
For local development, clients that support direct command execution can use:
|
|
330
|
-
|
|
331
|
-
```json
|
|
332
|
-
{
|
|
333
|
-
"mcpServers": {
|
|
334
|
-
"odin-sentinel": {
|
|
335
|
-
"command": "pnpm",
|
|
336
|
-
"args": ["exec", "tsx", "/absolute/path/to/odin-sentinel/src/bin/index.ts"]
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
```
|
|
341
|
-
|
|
342
|
-
## Harness Setup Notes
|
|
343
|
-
|
|
344
|
-
MCP-capable harnesses should point at the built stdio server:
|
|
345
|
-
|
|
346
|
-
```text
|
|
347
|
-
node /absolute/path/to/odin-sentinel/dist/src/bin/index.js
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
Common config shapes:
|
|
351
|
-
|
|
352
|
-
- Claude/Cursor-style: add `odin-sentinel` under `mcpServers`.
|
|
353
|
-
- Codex CLI: use `codex mcp add odin-sentinel -- node /path/to/dist/src/bin/index.js`.
|
|
354
|
-
- Droid CLI: use `droid mcp add odin-sentinel node /path/to/dist/src/bin/index.js --type stdio`.
|
|
355
|
-
- OpenCode-style: add a local `mcp.odin-sentinel` command entry.
|
|
356
|
-
- Goose-style: add an enabled `type: mcp` extension entry.
|
|
357
|
-
- Zed-style: add an enabled custom `context_servers.odin-sentinel` entry.
|
|
358
|
-
|
|
359
|
-
These are MCP client patterns, not a compatibility certification for every
|
|
360
|
-
release of every harness. For harnesses without discoverable MCP configuration,
|
|
361
|
-
use the self-contained protocol snapshot from `odin.export_protocol_snapshot`
|
|
362
|
-
or a thin prompt that directs the agent to an MCP-capable host bridge.
|
|
363
|
-
|
|
364
|
-
ODIN Sentinel does not provide hosted inference and should not cost the
|
|
365
|
-
maintainer money when users run it locally. See
|
|
366
|
-
[docs/reference/cost-and-privacy.md](docs/reference/cost-and-privacy.md).
|
|
367
|
-
|
|
368
|
-
## Startup Defaults
|
|
369
|
-
|
|
370
|
-
Fresh startup returns an executive office plus one development pod unless the
|
|
371
|
-
user or a handoff overrides it.
|
|
372
|
-
|
|
373
|
-
Executive office:
|
|
374
|
-
|
|
375
|
-
- `A/EXEC-PM`
|
|
376
|
-
- `A/EXEC-ODIN`
|
|
377
|
-
- `A/EXEC-ASST`
|
|
378
|
-
- `A/EXEC-RSCH`
|
|
379
|
-
- `A/EXEC-QA`
|
|
380
|
-
|
|
381
|
-
Development pod:
|
|
382
|
-
|
|
383
|
-
- `<TEAM>/TEAM-PM`
|
|
384
|
-
- `<TEAM>/ODIN`
|
|
385
|
-
- `<TEAM>/DEV-1`
|
|
386
|
-
- `<TEAM>/QA-1`
|
|
387
|
-
- `<TEAM>/SHADOW-1`
|
|
388
|
-
|
|
389
|
-
## Closeout Modes
|
|
390
|
-
|
|
391
|
-
- `PARK_FOR_CONTINUITY`: keep role slots open and park occupants.
|
|
392
|
-
- `FULL_SESSION_SHUTDOWN`: quit occupants, verify exit, and close panes except
|
|
393
|
-
the final user-designated surface.
|
|
394
|
-
|
|
395
171
|
## Development
|
|
396
172
|
|
|
397
|
-
Source layout:
|
|
398
|
-
|
|
399
|
-
- `src/bin/` - stdio entry point
|
|
400
|
-
- `src/mcp/` - MCP resource and tool adapter
|
|
401
|
-
- `src/protocol/` - ODIN protocol loading, packet construction, and validation
|
|
402
|
-
- `protocol/` - portable protocol data
|
|
403
|
-
- `docs/guides/` - onboarding and starter team guidance
|
|
404
|
-
- `docs/reference/` - compatibility, distribution, cost, and privacy notes
|
|
405
|
-
- `scripts/audit/` - package and public-surface release checks
|
|
406
|
-
|
|
407
173
|
```bash
|
|
174
|
+
pnpm install
|
|
408
175
|
pnpm run typecheck
|
|
409
176
|
pnpm test
|
|
410
177
|
pnpm run build
|