@bradheitmann/odin-sentinel 0.2.1
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/LICENSE +21 -0
- package/README.md +285 -0
- package/dist/src/bin/index.d.ts +2 -0
- package/dist/src/bin/index.js +17 -0
- package/dist/src/bin/index.js.map +1 -0
- package/dist/src/mcp/server.d.ts +2 -0
- package/dist/src/mcp/server.js +159 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/dist/src/protocol/index.d.ts +2 -0
- package/dist/src/protocol/index.js +2 -0
- package/dist/src/protocol/index.js.map +1 -0
- package/dist/src/protocol/repository.d.ts +16 -0
- package/dist/src/protocol/repository.js +103 -0
- package/dist/src/protocol/repository.js.map +1 -0
- package/dist/src/protocol/schemas.d.ts +64 -0
- package/dist/src/protocol/schemas.js +39 -0
- package/dist/src/protocol/schemas.js.map +1 -0
- package/dist/src/protocol/service.d.ts +52 -0
- package/dist/src/protocol/service.js +322 -0
- package/dist/src/protocol/service.js.map +1 -0
- package/dist/src/protocol/validators.d.ts +16 -0
- package/dist/src/protocol/validators.js +56 -0
- package/dist/src/protocol/validators.js.map +1 -0
- package/dist/src/protocol/version.d.ts +1 -0
- package/dist/src/protocol/version.js +26 -0
- package/dist/src/protocol/version.js.map +1 -0
- package/docs/guides/quick-start.md +74 -0
- package/docs/guides/recommended-starter-team.md +35 -0
- package/docs/reference/client-compatibility.md +59 -0
- package/docs/reference/cost-and-privacy.md +35 -0
- package/docs/reference/distribution.md +74 -0
- package/docs/reference/public-surface-audit.md +133 -0
- package/package.json +69 -0
- package/protocol/SCP.md +34 -0
- package/protocol/closeout.yaml +20 -0
- package/protocol/delegation.yaml +38 -0
- package/protocol/model-profiles.yaml +63 -0
- package/protocol/receipts/boot-receipt.yaml +23 -0
- package/protocol/receipts/team-manifest.yaml +9 -0
- package/protocol/roles.yaml +62 -0
- package/protocol/topology.yaml +22 -0
- package/scripts/audit/public-surface.mjs +67 -0
- package/scripts/audit/verify-pack.mjs +71 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Quick Start
|
|
2
|
+
|
|
3
|
+
ODIN Sentinel runs as a local MCP server over stdio.
|
|
4
|
+
|
|
5
|
+
It does not provide model inference. It does not host a backend. Your MCP client
|
|
6
|
+
starts the process, calls ODIN tools, and reads ODIN protocol resources.
|
|
7
|
+
|
|
8
|
+
## From Source
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
pnpm install
|
|
12
|
+
pnpm run build
|
|
13
|
+
node dist/src/bin/index.js
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Client Configuration
|
|
17
|
+
|
|
18
|
+
Use the built server as a stdio command:
|
|
19
|
+
|
|
20
|
+
```json
|
|
21
|
+
{
|
|
22
|
+
"mcpServers": {
|
|
23
|
+
"odin-sentinel": {
|
|
24
|
+
"command": "node",
|
|
25
|
+
"args": ["/absolute/path/to/odin-sentinel/dist/src/bin/index.js"]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
For local development:
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"mcpServers": {
|
|
36
|
+
"odin-sentinel": {
|
|
37
|
+
"command": "pnpm",
|
|
38
|
+
"args": ["exec", "tsx", "/absolute/path/to/odin-sentinel/src/bin/index.ts"]
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## First Calls
|
|
45
|
+
|
|
46
|
+
Ask the client to call:
|
|
47
|
+
|
|
48
|
+
1. `odin.get_version`
|
|
49
|
+
2. `odin.get_runtime_notice`
|
|
50
|
+
3. `odin.get_startup_packet`
|
|
51
|
+
|
|
52
|
+
Then read:
|
|
53
|
+
|
|
54
|
+
1. `odin://protocol/main`
|
|
55
|
+
2. `odin://protocol/roles`
|
|
56
|
+
3. `odin://protocol/topology`
|
|
57
|
+
4. `odin://protocol/delegation`
|
|
58
|
+
|
|
59
|
+
That is enough for a client to understand the default team shape and how to
|
|
60
|
+
start cleanly.
|
|
61
|
+
|
|
62
|
+
For a suggested starter team, see
|
|
63
|
+
[recommended-starter-team.md](recommended-starter-team.md).
|
|
64
|
+
|
|
65
|
+
## Local State
|
|
66
|
+
|
|
67
|
+
ODIN may point agents at these project-local locations:
|
|
68
|
+
|
|
69
|
+
- `docs/handoffs/`
|
|
70
|
+
- `.odin/handoffs/`
|
|
71
|
+
- `.odin/audit/`
|
|
72
|
+
|
|
73
|
+
They are not bundled state. Create them in the project where your agents are
|
|
74
|
+
working if you want persistent handoffs or audit notes.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Recommended Starter Team
|
|
2
|
+
|
|
3
|
+
ODIN is opinionated, but not rigid.
|
|
4
|
+
|
|
5
|
+
The profiles below are a good starting point for a visible multi-agent session.
|
|
6
|
+
They are not bundled dependencies. Install and configure the harnesses you want,
|
|
7
|
+
then point them at ODIN Sentinel through MCP.
|
|
8
|
+
|
|
9
|
+
## Executive Office
|
|
10
|
+
|
|
11
|
+
| Role | Suggested Harness | Suggested Model Class | Why |
|
|
12
|
+
| --- | --- | --- | --- |
|
|
13
|
+
| `A/EXEC-PM` | Codex CLI | GPT-5.5-class frontier reasoning model | Stable coordination, claim-bound reporting, and careful instruction handling. |
|
|
14
|
+
| `A/EXEC-ODIN` | Codex CLI | GPT-5.5-class frontier reasoning model | Sentinel work: staying awake, polling, quality control, and closeout hygiene. |
|
|
15
|
+
| `A/EXEC-ASST` | Claude Code | Claude Haiku-class fast assistant model | Low-latency ledger work, reminders, artifact indexing, and simple checks. |
|
|
16
|
+
| `A/EXEC-RSCH` | Droid | Kimi K2.6-class orchestration model | Research, alternatives, synthesis, and context recovery. |
|
|
17
|
+
| `A/EXEC-QA` | Droid | Kimi K2.6-class review model | Independent process review, evidence checks, and drift detection. |
|
|
18
|
+
|
|
19
|
+
## Development Pod
|
|
20
|
+
|
|
21
|
+
| Role | Suggested Harness | Suggested Model Class | Why |
|
|
22
|
+
| --- | --- | --- | --- |
|
|
23
|
+
| `<TEAM>/TEAM-PM` | Claude Code | Claude Opus/Sonnet-class coding model | Pod orchestration, task decomposition, dispatch, and worker follow-up. |
|
|
24
|
+
| `<TEAM>/ODIN` | Codex CLI | GPT-5.5-class frontier reasoning model | Lightweight pod sentinel duties, blocker detection, and quality reminders. |
|
|
25
|
+
| `<TEAM>/DEV-1` | Droid | Kimi K2.6-class coding model | Bounded implementation work. |
|
|
26
|
+
| `<TEAM>/QA-1` | Crush | GLM-5.1-class independent review model | Independent QA with a different review style from the implementer. |
|
|
27
|
+
| `<TEAM>/SHADOW-1` | Droid | Kimi K2.6-class review model | Second-pass critique, architectural concerns, and risk surfacing. |
|
|
28
|
+
|
|
29
|
+
## Notes
|
|
30
|
+
|
|
31
|
+
Use faster models for ledger work, routine research, and low-risk monitoring.
|
|
32
|
+
Use stronger models for coordination, implementation, QA, and places where the
|
|
33
|
+
cost of a missed detail is high.
|
|
34
|
+
|
|
35
|
+
The defaults live in `protocol/model-profiles.yaml`. Change them freely.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Client Compatibility
|
|
2
|
+
|
|
3
|
+
ODIN Sentinel is implemented in TypeScript and runs on Node.js, but MCP clients
|
|
4
|
+
do not need to be TypeScript or JavaScript. Clients interact with the server
|
|
5
|
+
through MCP over stdio, which is JSON-RPC framed over standard input/output.
|
|
6
|
+
|
|
7
|
+
## Compatibility Contract
|
|
8
|
+
|
|
9
|
+
The server keeps the MCP boundary language-neutral:
|
|
10
|
+
|
|
11
|
+
- tools accept and return JSON-compatible values
|
|
12
|
+
- resources return text, JSON, Markdown, or YAML content
|
|
13
|
+
- no tool requires a JavaScript object prototype, class instance, or local Node-specific object
|
|
14
|
+
- no tool requires filesystem access from the client
|
|
15
|
+
- fallback protocol snapshots are returned as plain filename-to-text maps
|
|
16
|
+
|
|
17
|
+
## Rust, Zig, Go, And Native Clients
|
|
18
|
+
|
|
19
|
+
Native clients that can spawn stdio subprocesses should launch the server as a
|
|
20
|
+
subprocess:
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
command: node
|
|
24
|
+
args: [/path/to/odin-sentinel/dist/src/bin/index.js]
|
|
25
|
+
transport: stdio
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Then call normal MCP methods:
|
|
29
|
+
|
|
30
|
+
- `tools/list`
|
|
31
|
+
- `tools/call`
|
|
32
|
+
- `resources/list`
|
|
33
|
+
- `resources/read`
|
|
34
|
+
|
|
35
|
+
## WebAssembly Clients
|
|
36
|
+
|
|
37
|
+
WASM runtimes vary. Some can spawn subprocesses through a host capability; many
|
|
38
|
+
cannot. If the WASM client cannot spawn a stdio process, use one of these
|
|
39
|
+
patterns:
|
|
40
|
+
|
|
41
|
+
1. Host bridge: native host process runs `odin-sentinel` and exposes MCP calls
|
|
42
|
+
to the WASM guest.
|
|
43
|
+
2. Sidecar bridge: an external local process runs `odin-sentinel` and the WASM
|
|
44
|
+
client talks to the host through its supported bridge channel.
|
|
45
|
+
3. Snapshot fallback: call `odin.export_protocol_snapshot` from a capable host and
|
|
46
|
+
provide the generated text files to the WASM agent as static context.
|
|
47
|
+
|
|
48
|
+
## Portability Limits
|
|
49
|
+
|
|
50
|
+
The current server runtime requires Node.js 20 or newer. This does not restrict
|
|
51
|
+
the client implementation language; it only means the machine hosting the MCP
|
|
52
|
+
server needs Node available.
|
|
53
|
+
|
|
54
|
+
Future options if a pure native server is needed:
|
|
55
|
+
|
|
56
|
+
- Rust MCP server using the same `protocol/` data files.
|
|
57
|
+
- Go MCP server using the same `protocol/` data files.
|
|
58
|
+
- Single-file generated JSON protocol bundle for embedded clients.
|
|
59
|
+
- WASI-compatible read-only server if the target runtime supports stdio.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Cost And Privacy
|
|
2
|
+
|
|
3
|
+
ODIN Sentinel does not provide inference.
|
|
4
|
+
|
|
5
|
+
It does not proxy model calls, host a backend, phone home, collect telemetry, or
|
|
6
|
+
ship credentials. It is a local MCP server that returns protocol resources,
|
|
7
|
+
startup packets, validation results, delegation envelopes, closeout checklists,
|
|
8
|
+
and fallback text snapshots.
|
|
9
|
+
|
|
10
|
+
## Who Pays For What
|
|
11
|
+
|
|
12
|
+
The maintainer does not pay when another person runs ODIN Sentinel locally.
|
|
13
|
+
|
|
14
|
+
Users are responsible for their own harness setup and any model calls those
|
|
15
|
+
harnesses make. ODIN Sentinel only returns coordination data over MCP.
|
|
16
|
+
|
|
17
|
+
ODIN Sentinel only names preferred harness slots and model capability profiles.
|
|
18
|
+
Those are dispatch preferences, not hosted compute.
|
|
19
|
+
|
|
20
|
+
## Network Boundary
|
|
21
|
+
|
|
22
|
+
The server is stdio-only by default:
|
|
23
|
+
|
|
24
|
+
```text
|
|
25
|
+
MCP client <-> local stdio process <-> protocol files
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
No network call is required for normal operation.
|
|
29
|
+
|
|
30
|
+
## Standalone Boundary
|
|
31
|
+
|
|
32
|
+
ODIN Sentinel is standalone.
|
|
33
|
+
|
|
34
|
+
The default handoff search list uses `.odin/` paths. A fresh repo does not need
|
|
35
|
+
any separate orchestration system installed for ODIN Sentinel to work.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Distribution
|
|
2
|
+
|
|
3
|
+
ODIN Sentinel is a local stdio MCP server. The simplest public distribution is
|
|
4
|
+
an npm package that ships prebuilt JavaScript and protocol files.
|
|
5
|
+
|
|
6
|
+
## Recommended Install Path
|
|
7
|
+
|
|
8
|
+
After publishing:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
pnpm dlx odin-sentinel
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
MCP client configuration can then use:
|
|
15
|
+
|
|
16
|
+
```json
|
|
17
|
+
{
|
|
18
|
+
"mcpServers": {
|
|
19
|
+
"odin-sentinel": {
|
|
20
|
+
"command": "pnpm",
|
|
21
|
+
"args": ["dlx", "odin-sentinel"]
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
`npx -y odin-sentinel` is also viable for npm-first clients.
|
|
28
|
+
|
|
29
|
+
## Local Clone Path
|
|
30
|
+
|
|
31
|
+
For source builds:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pnpm install
|
|
35
|
+
pnpm run build
|
|
36
|
+
node dist/src/bin/index.js
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Then point the client at the built file:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"mcpServers": {
|
|
44
|
+
"odin-sentinel": {
|
|
45
|
+
"command": "node",
|
|
46
|
+
"args": ["/absolute/path/to/odin-sentinel/dist/src/bin/index.js"]
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Advanced Root Override
|
|
53
|
+
|
|
54
|
+
The server normally finds its bundled `protocol/` directory automatically.
|
|
55
|
+
|
|
56
|
+
Advanced deployments can set `ODIN_SENTINEL_ROOT` to point at another checked-out
|
|
57
|
+
ODIN Sentinel root that contains the full `protocol/` tree. Most users do not
|
|
58
|
+
need this.
|
|
59
|
+
|
|
60
|
+
## Binary Strategy
|
|
61
|
+
|
|
62
|
+
A native binary is possible, but it should not be the first distribution path.
|
|
63
|
+
The server is small, stdio-only, and already fits the package manager workflow
|
|
64
|
+
most MCP clients expect.
|
|
65
|
+
|
|
66
|
+
Good future binary routes:
|
|
67
|
+
|
|
68
|
+
- Rust or Go implementation over the same `protocol/` files.
|
|
69
|
+
- Generated single-file protocol bundle for embedded clients.
|
|
70
|
+
- Homebrew formula once the public package name and release cadence are stable.
|
|
71
|
+
|
|
72
|
+
Avoid a bundled Node executable unless users ask for it. Those bundles tend to
|
|
73
|
+
make asset paths, source maps, and platform support more awkward than the code
|
|
74
|
+
deserves.
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Public Surface Audit
|
|
2
|
+
|
|
3
|
+
This document records the current public-release audit scope for ODIN Sentinel.
|
|
4
|
+
|
|
5
|
+
## Current Tree Result
|
|
6
|
+
|
|
7
|
+
Current tracked source, docs, protocol files, tests, and package metadata pass
|
|
8
|
+
the public-surface audit:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
pnpm run audit:public
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The audit checks for:
|
|
15
|
+
|
|
16
|
+
- local home-directory paths
|
|
17
|
+
- local agent configuration paths
|
|
18
|
+
- legacy extension terminology from adjacent agent systems
|
|
19
|
+
- secret-looking assignments
|
|
20
|
+
|
|
21
|
+
## Named External Concepts
|
|
22
|
+
|
|
23
|
+
ODIN Sentinel intentionally names these external concepts:
|
|
24
|
+
|
|
25
|
+
- MCP / Model Context Protocol
|
|
26
|
+
- stdio
|
|
27
|
+
- Node.js
|
|
28
|
+
- TypeScript / JavaScript
|
|
29
|
+
- pnpm / npm / npx
|
|
30
|
+
- Codex CLI
|
|
31
|
+
- Claude Code
|
|
32
|
+
- Droid
|
|
33
|
+
- Crush
|
|
34
|
+
- Goose
|
|
35
|
+
- Zed
|
|
36
|
+
- OpenCode
|
|
37
|
+
- Cursor
|
|
38
|
+
- Rust
|
|
39
|
+
- Go
|
|
40
|
+
- Zig
|
|
41
|
+
- WebAssembly / WASM
|
|
42
|
+
- Homebrew
|
|
43
|
+
|
|
44
|
+
These are examples, runtimes, package managers, languages, or harnesses. They
|
|
45
|
+
are not bundled dependencies unless listed in `package.json`.
|
|
46
|
+
|
|
47
|
+
## Named ODIN Concepts
|
|
48
|
+
|
|
49
|
+
- ODIN Sentinel
|
|
50
|
+
- ODIN
|
|
51
|
+
- SCP / Sentinel Coordination Protocol
|
|
52
|
+
- CMUX-compatible terminal-pane teams
|
|
53
|
+
- EXEC PM
|
|
54
|
+
- EXEC ODIN
|
|
55
|
+
- EXEC ASST
|
|
56
|
+
- EXEC RSCH
|
|
57
|
+
- EXEC QA
|
|
58
|
+
- TEAM PM
|
|
59
|
+
- TEAM ODIN
|
|
60
|
+
- DEV WORKER
|
|
61
|
+
- QA WORKER
|
|
62
|
+
- SHADOW REVIEWER
|
|
63
|
+
|
|
64
|
+
## Local Paths
|
|
65
|
+
|
|
66
|
+
ODIN Sentinel intentionally mentions these project-local paths:
|
|
67
|
+
|
|
68
|
+
- `docs/handoffs/`
|
|
69
|
+
- `.odin/handoffs/`
|
|
70
|
+
- `.odin/audit/`
|
|
71
|
+
|
|
72
|
+
These are caller-created paths for projects that use ODIN. They are not bundled
|
|
73
|
+
private state.
|
|
74
|
+
|
|
75
|
+
Docs also use placeholder install paths such as:
|
|
76
|
+
|
|
77
|
+
- `/absolute/path/to/odin-sentinel/dist/src/bin/index.js`
|
|
78
|
+
- `/path/to/odin-sentinel/dist/src/bin/index.js`
|
|
79
|
+
|
|
80
|
+
These are examples, not real local paths.
|
|
81
|
+
|
|
82
|
+
## Scripts Mentioned
|
|
83
|
+
|
|
84
|
+
Repo scripts in `package.json`:
|
|
85
|
+
|
|
86
|
+
- `pnpm run clean`
|
|
87
|
+
- `pnpm run build`
|
|
88
|
+
- `pnpm run dev`
|
|
89
|
+
- `pnpm run audit:public`
|
|
90
|
+
- `pnpm run test:package`
|
|
91
|
+
- `pnpm test`
|
|
92
|
+
- `pnpm run typecheck`
|
|
93
|
+
- `pnpm run validate`
|
|
94
|
+
|
|
95
|
+
Referenced local script files:
|
|
96
|
+
|
|
97
|
+
- `scripts/audit/public-surface.mjs`
|
|
98
|
+
- `scripts/audit/verify-pack.mjs`
|
|
99
|
+
|
|
100
|
+
No missing repo-local scripts are known.
|
|
101
|
+
|
|
102
|
+
External commands mentioned in docs:
|
|
103
|
+
|
|
104
|
+
- `node`
|
|
105
|
+
- `pnpm`
|
|
106
|
+
- `npm`
|
|
107
|
+
- `npx`
|
|
108
|
+
- `codex mcp add`
|
|
109
|
+
- `droid mcp add`
|
|
110
|
+
|
|
111
|
+
These are external user-installed tools, not files this repository must provide.
|
|
112
|
+
|
|
113
|
+
## Snapshot Tools
|
|
114
|
+
|
|
115
|
+
Current MCP snapshot tool:
|
|
116
|
+
|
|
117
|
+
- `odin.export_protocol_snapshot`
|
|
118
|
+
|
|
119
|
+
No external local extension is required for ODIN Sentinel to work.
|
|
120
|
+
|
|
121
|
+
## Git History Warning
|
|
122
|
+
|
|
123
|
+
The current tree is sanitized, but this private development repository has older
|
|
124
|
+
commits that contain removed terminology and experimental paths.
|
|
125
|
+
|
|
126
|
+
Do not make this private development history public as-is. For an open-source
|
|
127
|
+
release, publish from a fresh repository, a squashed root commit, or a sanitized
|
|
128
|
+
history rewrite after re-running:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
pnpm run validate
|
|
132
|
+
pnpm run audit:public
|
|
133
|
+
```
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@bradheitmann/odin-sentinel",
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"publishConfig": {
|
|
5
|
+
"access": "public"
|
|
6
|
+
},
|
|
7
|
+
"description": "Multi-harness terminal-pane team builder and orchestrator over MCP.",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"main": "./dist/src/protocol/index.js",
|
|
10
|
+
"types": "./dist/src/protocol/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/src/protocol/index.d.ts",
|
|
14
|
+
"import": "./dist/src/protocol/index.js"
|
|
15
|
+
},
|
|
16
|
+
"./mcp": {
|
|
17
|
+
"types": "./dist/src/mcp/server.d.ts",
|
|
18
|
+
"import": "./dist/src/mcp/server.js"
|
|
19
|
+
},
|
|
20
|
+
"./package.json": "./package.json"
|
|
21
|
+
},
|
|
22
|
+
"bin": {
|
|
23
|
+
"odin-sentinel": "./dist/src/bin/index.js",
|
|
24
|
+
"odin-sentinel-mcp": "./dist/src/bin/index.js"
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"dist",
|
|
28
|
+
"docs",
|
|
29
|
+
"protocol",
|
|
30
|
+
"scripts",
|
|
31
|
+
"README.md",
|
|
32
|
+
"LICENSE"
|
|
33
|
+
],
|
|
34
|
+
"keywords": [
|
|
35
|
+
"mcp",
|
|
36
|
+
"model-context-protocol",
|
|
37
|
+
"agent-orchestration",
|
|
38
|
+
"multi-agent",
|
|
39
|
+
"sentinel"
|
|
40
|
+
],
|
|
41
|
+
"author": "ODIN Sentinel contributors",
|
|
42
|
+
"license": "MIT",
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
45
|
+
"yaml": "^2.8.2",
|
|
46
|
+
"zod": "^4.1.12"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/node": "^24.10.1",
|
|
50
|
+
"@vitest/coverage-v8": "4.1.5",
|
|
51
|
+
"tsx": "^4.20.6",
|
|
52
|
+
"typescript": "^5.9.3",
|
|
53
|
+
"vitest": "4.1.5"
|
|
54
|
+
},
|
|
55
|
+
"engines": {
|
|
56
|
+
"node": ">=22.13.0"
|
|
57
|
+
},
|
|
58
|
+
"scripts": {
|
|
59
|
+
"clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
|
|
60
|
+
"build": "pnpm run clean && tsc -p tsconfig.build.json",
|
|
61
|
+
"dev": "tsx src/bin/index.ts",
|
|
62
|
+
"audit:public": "node scripts/audit/public-surface.mjs",
|
|
63
|
+
"test:package": "node scripts/audit/verify-pack.mjs",
|
|
64
|
+
"test": "vitest run",
|
|
65
|
+
"test:coverage": "vitest run --coverage",
|
|
66
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
67
|
+
"validate": "pnpm run audit:public && pnpm run typecheck && pnpm test && pnpm run build && pnpm run test:package"
|
|
68
|
+
}
|
|
69
|
+
}
|
package/protocol/SCP.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# ODIN Sentinel Coordination Protocol
|
|
2
|
+
|
|
3
|
+
Version: 0.2.1
|
|
4
|
+
|
|
5
|
+
ODIN Sentinel is a portable coordination layer for visible multi-agent teams.
|
|
6
|
+
SCP means Sentinel Coordination Protocol in this repository. It is not Secure
|
|
7
|
+
Copy.
|
|
8
|
+
It provides generic role contracts, startup packets, receipt validation, team
|
|
9
|
+
manifest validation, native visible-role delegation packets, closeout
|
|
10
|
+
checklists, and fallback protocol snapshots through an MCP server.
|
|
11
|
+
|
|
12
|
+
## Principles
|
|
13
|
+
|
|
14
|
+
- Visible role slots are the audit surface.
|
|
15
|
+
- ODIN roles are meta-control roles accountable to user authority.
|
|
16
|
+
- PM roles coordinate delivery but do not own ODIN oversight.
|
|
17
|
+
- Worker roles implement bounded scope and produce evidence.
|
|
18
|
+
- QA roles verify independently and do not accept their own work.
|
|
19
|
+
- Handoffs, closeout, and restart packets must be explicit.
|
|
20
|
+
- Secrets are never printed or embedded in receipts.
|
|
21
|
+
- Delegation is native to the server and must not require an external extension.
|
|
22
|
+
|
|
23
|
+
## Startup Defaults
|
|
24
|
+
|
|
25
|
+
Fresh startup creates an executive office and one development pod unless the
|
|
26
|
+
user or a handoff requests another topology.
|
|
27
|
+
|
|
28
|
+
## Closeout Defaults
|
|
29
|
+
|
|
30
|
+
Closeout supports two modes:
|
|
31
|
+
|
|
32
|
+
- `PARK_FOR_CONTINUITY`: keep role slots open and park occupants.
|
|
33
|
+
- `FULL_SESSION_SHUTDOWN`: quit occupants, verify exit, and close panes except
|
|
34
|
+
the final user-designated surface.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
version: 0.2.1
|
|
2
|
+
modes:
|
|
3
|
+
PARK_FOR_CONTINUITY:
|
|
4
|
+
description: Keep role slots open, park occupants, save handoffs, and preserve continuity.
|
|
5
|
+
required_steps:
|
|
6
|
+
- collect_handoffs
|
|
7
|
+
- classify_worktree
|
|
8
|
+
- record_metrics
|
|
9
|
+
- park_or_reset_occupants
|
|
10
|
+
- verify_restart_path
|
|
11
|
+
FULL_SESSION_SHUTDOWN:
|
|
12
|
+
description: Save handoffs, quit occupants, verify exit, close panes, and leave only the final user-designated surface.
|
|
13
|
+
required_steps:
|
|
14
|
+
- collect_handoffs
|
|
15
|
+
- classify_worktree
|
|
16
|
+
- record_metrics
|
|
17
|
+
- quit_each_agent_occupant
|
|
18
|
+
- verify_agent_exit
|
|
19
|
+
- close_agent_panes
|
|
20
|
+
- deliver_final_report
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
version: 0.2.1
|
|
2
|
+
delegation_contract:
|
|
3
|
+
required_fields:
|
|
4
|
+
- receipt_type
|
|
5
|
+
- source_role
|
|
6
|
+
- target_role_slot
|
|
7
|
+
- task
|
|
8
|
+
- scope
|
|
9
|
+
- authority
|
|
10
|
+
- report_back
|
|
11
|
+
- visibility
|
|
12
|
+
authority_fields:
|
|
13
|
+
- may_implement
|
|
14
|
+
- may_qa_accept
|
|
15
|
+
- write_scope
|
|
16
|
+
- read_scope
|
|
17
|
+
- prohibited_paths
|
|
18
|
+
visibility_fields:
|
|
19
|
+
- requires_visible_role_slot
|
|
20
|
+
- hidden_agents_allowed
|
|
21
|
+
- delivery_proof_required
|
|
22
|
+
receipt_types:
|
|
23
|
+
- SCP-DELEGATE
|
|
24
|
+
- SCP-TERMINAL-DELIVERY
|
|
25
|
+
- SCP-CMUX-DELIVERY
|
|
26
|
+
- SCP-COORDINATION
|
|
27
|
+
delivery_states:
|
|
28
|
+
- DELIVERED_ACKED
|
|
29
|
+
- DELIVERED_NO_ACK
|
|
30
|
+
- INPUT_BAR_ONLY
|
|
31
|
+
- PANE_BLOCKED_ON_PERMISSION
|
|
32
|
+
- PANE_STILL_THINKING
|
|
33
|
+
rules:
|
|
34
|
+
- Delegation must target a visible role slot.
|
|
35
|
+
- Delegation must not create hidden agents or off-ledger workers.
|
|
36
|
+
- Delegation must include exact authority and scope.
|
|
37
|
+
- Terminal text left in an input bar is not delivery.
|
|
38
|
+
- QA acceptance cannot be delegated to the same role that implemented the deliverable.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
version: 0.2.1
|
|
2
|
+
policy:
|
|
3
|
+
semantics: Recommended starter profiles, not bundled dependencies or availability guarantees.
|
|
4
|
+
runtime_requirement: Users must install and configure their own harnesses. Launchers must verify local harness/model availability before dispatch and apply fallbacks when unavailable.
|
|
5
|
+
profiles:
|
|
6
|
+
A/EXEC-PM:
|
|
7
|
+
model: GPT-5.5-class frontier reasoning model
|
|
8
|
+
harness: Codex CLI
|
|
9
|
+
reasoning: high
|
|
10
|
+
rationale: "Use for steady executive coordination, careful instruction following, and claim-bound status control."
|
|
11
|
+
A/EXEC-ODIN:
|
|
12
|
+
model: GPT-5.5-class frontier reasoning model
|
|
13
|
+
harness: Codex CLI
|
|
14
|
+
reasoning: xhigh
|
|
15
|
+
rationale: "Use for sentinel work: staying awake, polling, quality control, closeout hygiene, and follow-up."
|
|
16
|
+
A/EXEC-ASST:
|
|
17
|
+
model: Claude Haiku-class fast assistant model
|
|
18
|
+
harness: Claude Code
|
|
19
|
+
reasoning: default_or_high_if_supported
|
|
20
|
+
rationale: "Use for low-latency ledger, reminders, artifact indexing, and assistant chores."
|
|
21
|
+
A/EXEC-RSCH:
|
|
22
|
+
model: Kimi K2.6-class orchestration model
|
|
23
|
+
harness: Droid
|
|
24
|
+
reasoning: high
|
|
25
|
+
rationale: "Use for broad research, alternatives, synthesis, and context recovery."
|
|
26
|
+
A/EXEC-QA:
|
|
27
|
+
model: Kimi K2.6-class review model
|
|
28
|
+
harness: Droid
|
|
29
|
+
reasoning: high
|
|
30
|
+
rationale: "Use for independent process review, evidence checks, and drift detection."
|
|
31
|
+
TEAM_PM:
|
|
32
|
+
model: Claude Opus/Sonnet-class coding model
|
|
33
|
+
harness: Claude Code
|
|
34
|
+
reasoning: high_if_supported
|
|
35
|
+
rationale: "Use for pod orchestration, task decomposition, dispatch, and worker follow-up."
|
|
36
|
+
TEAM_ODIN:
|
|
37
|
+
model: GPT-5.5-class frontier reasoning model
|
|
38
|
+
harness: Codex CLI
|
|
39
|
+
reasoning: low
|
|
40
|
+
rationale: "Use for lightweight pod sentinel duties, polling, blocker detection, and quality reminders."
|
|
41
|
+
DEV_WORKER:
|
|
42
|
+
model: Kimi K2.6-class coding model
|
|
43
|
+
harness: Droid
|
|
44
|
+
reasoning: high
|
|
45
|
+
rationale: "Use for bounded implementation work when the task benefits from strong local execution."
|
|
46
|
+
QA_WORKER:
|
|
47
|
+
model: GLM-5.1-class independent review model
|
|
48
|
+
harness: Crush
|
|
49
|
+
reasoning: high
|
|
50
|
+
rationale: "Use for independent QA so the reviewer differs from the implementer."
|
|
51
|
+
SHADOW_REVIEWER:
|
|
52
|
+
model: Kimi K2.6-class review model
|
|
53
|
+
harness: Droid
|
|
54
|
+
reasoning: high
|
|
55
|
+
rationale: "Use for second-pass critique, architectural concerns, and risk surfacing."
|
|
56
|
+
fallbacks:
|
|
57
|
+
worker:
|
|
58
|
+
- harness: Droid
|
|
59
|
+
model: Kimi K2.6-class coding model
|
|
60
|
+
reasoning: high
|
|
61
|
+
- harness: Claude Code
|
|
62
|
+
model: Claude Sonnet-class balanced coding model
|
|
63
|
+
reasoning: high_if_supported
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
required_fields:
|
|
2
|
+
- role
|
|
3
|
+
- authority_layer
|
|
4
|
+
- team
|
|
5
|
+
- terminal_locator
|
|
6
|
+
- branch
|
|
7
|
+
- cwd
|
|
8
|
+
- model_harness
|
|
9
|
+
- permission_mode
|
|
10
|
+
- may_implement
|
|
11
|
+
- may_qa_accept
|
|
12
|
+
- reports_to
|
|
13
|
+
- write_scope
|
|
14
|
+
- evidence_path
|
|
15
|
+
- current_task
|
|
16
|
+
recommended_fields:
|
|
17
|
+
- upstream
|
|
18
|
+
- head_sha
|
|
19
|
+
- cost_tier
|
|
20
|
+
- capability_profile
|
|
21
|
+
- delegates_to
|
|
22
|
+
- prohibited_paths
|
|
23
|
+
- proof_source
|