@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.
Files changed (57) hide show
  1. package/AGENTS.md +64 -0
  2. package/CLAUDE.md +43 -0
  3. package/README.md +102 -335
  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 +65 -0
  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 +48 -19
  53. package/scripts/audit/verify-pack.mjs +294 -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,54 +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.
50
+ ## Install
24
51
 
25
- The repository is named `odin-sentinel` to avoid confusion with the Odin
26
- programming language.
52
+ ```bash
53
+ npm i -g @bradheitmann/odin-sentinel
54
+ ```
27
55
 
28
- For a recommended first team, see
29
- [docs/guides/recommended-starter-team.md](docs/guides/recommended-starter-team.md).
56
+ Zero-install MCP host config can use:
30
57
 
31
- ## Quick Start
58
+ ```bash
59
+ npx -y -p @bradheitmann/odin-sentinel odin-sentinel-mcp
60
+ ```
32
61
 
33
- ### 1. Install
62
+ A stdio smoke test that does not require an MCP host:
34
63
 
35
64
  ```bash
36
- 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
37
67
  ```
38
68
 
39
- Or use `npx` without installing — see the host-specific configs below.
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
- Pick the one you use. Restart the host after editing.
72
+ ## MCP Host Examples
44
73
 
45
- **Claude Code**
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
- **Codex** (`~/.codex/config.toml`)
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
- **Cursor / Cursor CLI / VS Code / Factory (Droid) / Pi** (`mcpServers` JSON)
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
- **Zed** (`~/.config/zed/settings.json` `context_servers`)
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
- The agent will read the protocol resources (`odin://protocol/*`), follow the role contracts, and stay inside the SCP governance rules.
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
- ### 4. Verify (optional)
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
- A one-line smoke test that works without any host:
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
- A successful response includes `"serverInfo":{"name":"odin-sentinel","version":"0.4.4"}`.
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
- ### 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.
149
123
 
150
- If you're on Claude Code, you can install the SCP skill + MCP server together as a plugin:
124
+ ## Public Starter Templates
151
125
 
152
- ```bash
153
- claude plugin marketplace add bradheitmann/odin-sentinel
154
- claude plugin install sentinel-coordination-protocol@odin-sentinel
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
- ## Terms
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` - core coordination protocol
204
- - `odin://protocol/roles` - generic role contracts
205
- - `odin://protocol/topology` - executive office, pod, and ODIN mesh defaults
206
- - `odin://protocol/model-profiles` - recommended starter model/harness profiles
207
- - `odin://protocol/closeout` - continuity parking and full shutdown checklists
208
- - `odin://protocol/delegation` - visible-role delegation contract
209
- - `odin://protocol/receipts/boot` - boot receipt template
210
- - `odin://protocol/receipts/team-manifest` - team manifest template
211
- - `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`
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