@bradheitmann/odin-sentinel 0.4.5 → 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.
Files changed (57) hide show
  1. package/AGENTS.md +64 -0
  2. package/CLAUDE.md +43 -0
  3. package/README.md +102 -339
  4. package/dist/src/mcp/server.js +43 -12
  5. package/dist/src/mcp/server.js.map +1 -1
  6. package/dist/src/protocol/schemas.d.ts +2529 -4
  7. package/dist/src/protocol/schemas.js +214 -18
  8. package/dist/src/protocol/schemas.js.map +1 -1
  9. package/dist/src/protocol/service.d.ts +96 -2
  10. package/dist/src/protocol/service.js +516 -4
  11. package/dist/src/protocol/service.js.map +1 -1
  12. package/dist/src/protocol/surface-layout.d.ts +40 -1
  13. package/dist/src/protocol/surface-layout.js +98 -1
  14. package/dist/src/protocol/surface-layout.js.map +1 -1
  15. package/dist/src/protocol/validators.d.ts +3 -0
  16. package/dist/src/protocol/validators.js +28 -0
  17. package/dist/src/protocol/validators.js.map +1 -1
  18. package/dist/src/protocol/version.d.ts +3 -0
  19. package/dist/src/protocol/version.js +3 -0
  20. package/dist/src/protocol/version.js.map +1 -1
  21. package/dist/src/telemetry/config.d.ts +8 -0
  22. package/dist/src/telemetry/config.js +24 -0
  23. package/dist/src/telemetry/config.js.map +1 -1
  24. package/dist/src/telemetry/index.d.ts +5 -5
  25. package/dist/src/telemetry/index.js +3 -3
  26. package/dist/src/telemetry/index.js.map +1 -1
  27. package/dist/src/telemetry/redactor.js +25 -7
  28. package/dist/src/telemetry/redactor.js.map +1 -1
  29. package/dist/src/telemetry/report.d.ts +108 -0
  30. package/dist/src/telemetry/report.js +83 -3
  31. package/dist/src/telemetry/report.js.map +1 -1
  32. package/dist/src/telemetry/submit.d.ts +2 -0
  33. package/dist/src/telemetry/submit.js +79 -6
  34. package/dist/src/telemetry/submit.js.map +1 -1
  35. package/docs/guides/quick-start.md +112 -44
  36. package/docs/guides/quickstart-prompts.md +46 -113
  37. package/docs/guides/recommended-starter-team.md +45 -27
  38. package/docs/reference/client-compatibility.md +20 -43
  39. package/docs/reference/cost-and-privacy.md +26 -23
  40. package/docs/reference/distribution.md +40 -55
  41. package/docs/reference/public-surface-audit.md +35 -114
  42. package/package.json +19 -4
  43. package/protocol/SCP.md +8 -1
  44. package/protocol/bootstrap-skill.md +16 -11
  45. package/protocol/closeout.yaml +7 -1
  46. package/protocol/delegation.yaml +1 -1
  47. package/protocol/model-profiles.yaml +55 -1
  48. package/protocol/receipts/boot-receipt.yaml +42 -0
  49. package/protocol/receipts/team-manifest.yaml +41 -0
  50. package/protocol/roles.yaml +69 -1
  51. package/protocol/topology.yaml +78 -36
  52. package/scripts/audit/public-surface.mjs +47 -19
  53. package/scripts/audit/verify-pack.mjs +293 -27
  54. package/templates/dev-slice-template.md +56 -0
  55. package/templates/pm-role-template.md +61 -0
  56. package/templates/qa-slice-template.md +46 -0
  57. 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,58 +1,83 @@
1
1
  # ODIN Sentinel
2
2
 
3
- **Multi-harness terminal-pane team builder and orchestrator.**
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
- ODIN Sentinel is a portable control layer for visible agent teams running across
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.
24
-
25
- The repository is named `odin-sentinel` to avoid confusion with the Odin
26
- programming language.
50
+ ## Install
27
51
 
28
- For a recommended first team, see
29
- [docs/guides/recommended-starter-team.md](docs/guides/recommended-starter-team.md).
52
+ ```bash
53
+ npm i -g @bradheitmann/odin-sentinel
54
+ ```
30
55
 
31
- For copy-paste setup and team-bootstrap prompts you can hand to Claude Code or
32
- Codex on a fresh machine, see
33
- [docs/guides/quickstart-prompts.md](docs/guides/quickstart-prompts.md).
56
+ Zero-install MCP host config can use:
34
57
 
35
- ## Quick Start
58
+ ```bash
59
+ npx -y -p @bradheitmann/odin-sentinel odin-sentinel-mcp
60
+ ```
36
61
 
37
- ### 1. Install
62
+ A stdio smoke test that does not require an MCP host:
38
63
 
39
64
  ```bash
40
- npm i -g @bradheitmann/odin-sentinel
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
41
67
  ```
42
68
 
43
- Or use `npx` without installing — see the host-specific configs below.
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`.
44
71
 
45
- ### 2. Configure your MCP host
72
+ ## MCP Host Examples
46
73
 
47
- Pick the one you use. Restart the host after editing.
48
-
49
- **Claude Code**
74
+ Claude Code:
50
75
 
51
76
  ```bash
52
77
  claude mcp add odin-sentinel -- npx -y -p @bradheitmann/odin-sentinel odin-sentinel-mcp
53
78
  ```
54
79
 
55
- **Codex** (`~/.codex/config.toml`)
80
+ Codex (`~/.codex/config.toml`):
56
81
 
57
82
  ```toml
58
83
  [mcp_servers.odin-sentinel]
@@ -60,7 +85,7 @@ command = "npx"
60
85
  args = ["-y", "-p", "@bradheitmann/odin-sentinel", "odin-sentinel-mcp"]
61
86
  ```
62
87
 
63
- **Cursor / Cursor CLI / VS Code / Factory (Droid) / Pi** (`mcpServers` JSON)
88
+ Generic `mcpServers` JSON:
64
89
 
65
90
  ```json
66
91
  {
@@ -73,146 +98,49 @@ args = ["-y", "-p", "@bradheitmann/odin-sentinel", "odin-sentinel-mcp"]
73
98
  }
74
99
  ```
75
100
 
76
- **Zed** (`~/.config/zed/settings.json` `context_servers`)
77
-
78
- ```json
79
- "odin-sentinel": {
80
- "source": "custom",
81
- "command": "npx",
82
- "args": ["-y", "-p", "@bradheitmann/odin-sentinel", "odin-sentinel-mcp"]
83
- }
84
- ```
85
-
86
- **Goose** (`~/.config/goose/config.yaml` → `extensions`)
87
-
88
- ```yaml
89
- odin-sentinel:
90
- type: stdio
91
- cmd: npx
92
- args: ["-y", "-p", "@bradheitmann/odin-sentinel", "odin-sentinel-mcp"]
93
- enabled: true
94
- ```
95
-
96
- **Crush** (`~/.config/crush/crush.json` → `mcp`)
97
-
98
- ```json
99
- {
100
- "mcp": {
101
- "odin-sentinel": {
102
- "type": "stdio",
103
- "command": "npx",
104
- "args": ["-y", "-p", "@bradheitmann/odin-sentinel", "odin-sentinel-mcp"]
105
- }
106
- }
107
- }
108
- ```
109
-
110
- **OpenCode** (`~/.config/opencode/opencode.json` → `mcp`)
111
-
112
- ```json
113
- {
114
- "mcp": {
115
- "odin-sentinel": {
116
- "type": "local",
117
- "command": ["npx", "-y", "-p", "@bradheitmann/odin-sentinel", "odin-sentinel-mcp"],
118
- "enabled": true
119
- }
120
- }
121
- }
122
- ```
123
-
124
- **OpenHands** (`~/.openhands/config.toml`)
125
-
126
- ```toml
127
- [mcp.stdio_servers.odin-sentinel]
128
- name = "odin-sentinel"
129
- command = "npx"
130
- args = ["-y", "-p", "@bradheitmann/odin-sentinel", "odin-sentinel-mcp"]
131
- ```
132
-
133
- ### 3. Use it
134
-
135
- After restarting the host, give the agent an instruction like:
101
+ ## MCP, Skill, Plugin, Prompt Fallback
136
102
 
137
- > Use the `odin-sentinel` MCP server. Call `odin.get_startup_packet`, then bootstrap an executive office and one development pod.
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.
138
109
 
139
- The agent will read the protocol resources (`odin://protocol/*`), follow the role contracts, and stay inside the SCP governance rules.
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.
140
112
 
141
- ### 4. Verify (optional)
142
-
143
- A one-line smoke test that works without any host:
144
-
145
- ```bash
146
- printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"probe","version":"0"}}}\n' \
147
- | npx -y -p @bradheitmann/odin-sentinel odin-sentinel-mcp
148
- ```
113
+ ## CMUX Requirement
149
114
 
150
- A successful response includes `"serverInfo":{"name":"odin-sentinel","version":"0.4.5"}`.
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.
151
119
 
152
- ### Claude Code plugin (optional)
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.
153
123
 
154
- If you're on Claude Code, you can install the SCP skill + MCP server together as a plugin:
124
+ ## Public Starter Templates
155
125
 
156
- ```bash
157
- claude plugin marketplace add bradheitmann/odin-sentinel
158
- claude plugin install sentinel-coordination-protocol@odin-sentinel
159
- ```
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.
160
129
 
161
- ## Terms
162
-
163
- - ODIN Sentinel: this MCP server and its portable team-coordination protocol.
164
- - SCP: Sentinel Coordination Protocol, the ODIN startup, delegation, receipt,
165
- manifest, and closeout contract. It is not Secure Copy.
166
- - CMUX: a compatible terminal-pane control surface. ODIN can support CMUX-style
167
- teams, but CMUX is not required by this repository.
168
- - Harness: a local agent runtime, CLI, editor integration, or MCP client.
169
-
170
- ## How It Works
171
-
172
- ```text
173
- MCP-capable clients
174
- ┌─────────────────────────────────────┐
175
- │ Codex │ Claude │ Droid │ Crush │ UI │
176
- └───┬──────┬────────┬───────┬─────┬───┘
177
- │ │ │ │ │
178
- └──────┴────────┴───────┴─────┘
179
-
180
-
181
- ┌───────────────────┐
182
- │ odin-sentinel │
183
- │ MCP server │
184
- └─────────┬─────────┘
185
-
186
- ┌───────────────────┼───────────────────┐
187
- ▼ ▼ ▼
188
- ┌───────────┐ ┌───────────┐ ┌────────────┐
189
- │ Resources │ │ Tools │ │ Exports │
190
- │ protocol │ │ validate │ │ standalone │
191
- │ roles │ │ startup │ │ protocol │
192
- │ topology │ │ closeout │ │ snapshots │
193
- └───────────┘ └───────────┘ └────────────┘
194
- │ │ │
195
- └───────────────────┼───────────────────┘
196
-
197
- ┌─────────────────────────┐
198
- │ Visible role topology │
199
- │ EXEC PM, EXEC ODIN, │
200
- │ TEAM PM, TEAM ODIN, │
201
- │ DEV, QA, SHADOW │
202
- └─────────────────────────┘
203
- ```
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.
204
132
 
205
133
  ## Provided MCP Resources
206
134
 
207
- - `odin://protocol/main` - core coordination protocol
208
- - `odin://protocol/roles` - generic role contracts
209
- - `odin://protocol/topology` - executive office, pod, and ODIN mesh defaults
210
- - `odin://protocol/model-profiles` - recommended starter model/harness profiles
211
- - `odin://protocol/closeout` - continuity parking and full shutdown checklists
212
- - `odin://protocol/delegation` - visible-role delegation contract
213
- - `odin://protocol/receipts/boot` - boot receipt template
214
- - `odin://protocol/receipts/team-manifest` - team manifest template
215
- - `odin://protocol/bootstrap-skill` - full Sentinel Coordination Protocol 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`
216
144
 
217
145
  ## Provided MCP Tools
218
146
 
@@ -220,6 +148,11 @@ claude plugin install sentinel-coordination-protocol@odin-sentinel
220
148
  - `odin.get_startup_packet`
221
149
  - `odin.get_role_profile`
222
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`
223
156
  - `odin.validate_boot_receipt`
224
157
  - `odin.validate_team_manifest`
225
158
  - `odin.get_delegation_packet`
@@ -229,186 +162,16 @@ claude plugin install sentinel-coordination-protocol@odin-sentinel
229
162
  - `odin.export_protocol_snapshot`
230
163
  - `odin.compute_surface_layout`
231
164
  - `odin.compute_surface_layout_gate`
165
+ - `odin.compute_human_cmux_quad_layout`
232
166
  - `odin.compile_session_report`
233
167
  - `odin.preview_telemetry_redaction`
234
168
  - `odin.submit_session_report`
235
169
  - `odin.get_telemetry_config`
236
170
 
237
- ## Self-Contained Protocol
238
-
239
- ODIN Sentinel must not depend on external local extensions. Concepts such as
240
- delegation, handoff discovery, startup topology, model/harness profiles, receipt
241
- validation, and closeout are implemented as MCP resources and tools inside this
242
- server.
243
-
244
- A client may have other local extensions installed, but those extensions are optional
245
- and cannot be required for the ODIN Sentinel protocol to work.
246
-
247
- ## Client Compatibility
248
-
249
- ODIN Sentinel is implemented in TypeScript and runs on Node.js, but MCP clients
250
- can be written in Rust, Zig, Go, WebAssembly, Python, or any other environment
251
- that can speak MCP over stdio.
252
-
253
- The boundary is plain MCP JSON-RPC:
254
-
255
- ```text
256
- native / WASM / CLI client
257
-
258
- │ MCP over stdio
259
-
260
- node dist/src/bin/index.js
261
- ```
262
-
263
- For clients that cannot spawn stdio subprocesses, use a host bridge or consume
264
- the fallback files returned by `odin.export_protocol_snapshot`.
265
-
266
- See [docs/reference/client-compatibility.md](docs/reference/client-compatibility.md).
267
- For the current release-surface inventory, see
268
- [docs/reference/public-surface-audit.md](docs/reference/public-surface-audit.md).
269
-
270
- ## Install
271
-
272
- For a step-by-step setup, see [docs/guides/quick-start.md](docs/guides/quick-start.md).
273
-
274
- For local source builds:
275
-
276
- ```bash
277
- pnpm install
278
- pnpm run build
279
- ```
280
-
281
- Or install from npm:
282
-
283
- ```bash
284
- npm i -g @bradheitmann/odin-sentinel
285
- ```
286
-
287
- Then run the MCP server directly:
288
-
289
- ```bash
290
- odin-sentinel-mcp
291
- ```
292
-
293
- For zero-install use from any MCP host config:
294
-
295
- ```bash
296
- npx -y -p @bradheitmann/odin-sentinel odin-sentinel-mcp
297
- ```
298
-
299
- See [docs/reference/distribution.md](docs/reference/distribution.md).
300
-
301
- ## Run Over stdio
302
-
303
- ```bash
304
- pnpm run dev
305
- ```
306
-
307
- After building:
308
-
309
- ```bash
310
- node dist/src/bin/index.js
311
- ```
312
-
313
- When installed from a package, the executable names are:
314
-
315
- ```bash
316
- odin-sentinel
317
- odin-sentinel-mcp
318
- ```
319
-
320
- ## Example MCP Client Configuration
321
-
322
- ```json
323
- {
324
- "mcpServers": {
325
- "odin-sentinel": {
326
- "command": "node",
327
- "args": ["/absolute/path/to/odin-sentinel/dist/src/bin/index.js"]
328
- }
329
- }
330
- }
331
- ```
332
-
333
- For local development, clients that support direct command execution can use:
334
-
335
- ```json
336
- {
337
- "mcpServers": {
338
- "odin-sentinel": {
339
- "command": "pnpm",
340
- "args": ["exec", "tsx", "/absolute/path/to/odin-sentinel/src/bin/index.ts"]
341
- }
342
- }
343
- }
344
- ```
345
-
346
- ## Harness Setup Notes
347
-
348
- MCP-capable harnesses should point at the built stdio server:
349
-
350
- ```text
351
- node /absolute/path/to/odin-sentinel/dist/src/bin/index.js
352
- ```
353
-
354
- Common config shapes:
355
-
356
- - Claude/Cursor-style: add `odin-sentinel` under `mcpServers`.
357
- - Codex CLI: use `codex mcp add odin-sentinel -- node /path/to/dist/src/bin/index.js`.
358
- - Droid CLI: use `droid mcp add odin-sentinel node /path/to/dist/src/bin/index.js --type stdio`.
359
- - OpenCode-style: add a local `mcp.odin-sentinel` command entry.
360
- - Goose-style: add an enabled `type: mcp` extension entry.
361
- - Zed-style: add an enabled custom `context_servers.odin-sentinel` entry.
362
-
363
- These are MCP client patterns, not a compatibility certification for every
364
- release of every harness. For harnesses without discoverable MCP configuration,
365
- use the self-contained protocol snapshot from `odin.export_protocol_snapshot`
366
- or a thin prompt that directs the agent to an MCP-capable host bridge.
367
-
368
- ODIN Sentinel does not provide hosted inference and should not cost the
369
- maintainer money when users run it locally. See
370
- [docs/reference/cost-and-privacy.md](docs/reference/cost-and-privacy.md).
371
-
372
- ## Startup Defaults
373
-
374
- Fresh startup returns an executive office plus one development pod unless the
375
- user or a handoff overrides it.
376
-
377
- Executive office:
378
-
379
- - `A/EXEC-PM`
380
- - `A/EXEC-ODIN`
381
- - `A/EXEC-ASST`
382
- - `A/EXEC-RSCH`
383
- - `A/EXEC-QA`
384
-
385
- Development pod:
386
-
387
- - `<TEAM>/TEAM-PM`
388
- - `<TEAM>/ODIN`
389
- - `<TEAM>/DEV-1`
390
- - `<TEAM>/QA-1`
391
- - `<TEAM>/SHADOW-1`
392
-
393
- ## Closeout Modes
394
-
395
- - `PARK_FOR_CONTINUITY`: keep role slots open and park occupants.
396
- - `FULL_SESSION_SHUTDOWN`: quit occupants, verify exit, and close panes except
397
- the final user-designated surface.
398
-
399
171
  ## Development
400
172
 
401
- Source layout:
402
-
403
- - `src/bin/` - stdio entry point
404
- - `src/mcp/` - MCP resource and tool adapter
405
- - `src/protocol/` - ODIN protocol loading, packet construction, and validation
406
- - `protocol/` - portable protocol data
407
- - `docs/guides/` - onboarding and starter team guidance
408
- - `docs/reference/` - compatibility, distribution, cost, and privacy notes
409
- - `scripts/audit/` - package and public-surface release checks
410
-
411
173
  ```bash
174
+ pnpm install
412
175
  pnpm run typecheck
413
176
  pnpm test
414
177
  pnpm run build