@bradheitmann/odin-sentinel 0.4.2 → 0.4.4
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/README.md
CHANGED
|
@@ -28,6 +28,132 @@ programming language.
|
|
|
28
28
|
For a recommended first team, see
|
|
29
29
|
[docs/guides/recommended-starter-team.md](docs/guides/recommended-starter-team.md).
|
|
30
30
|
|
|
31
|
+
## Quick Start
|
|
32
|
+
|
|
33
|
+
### 1. Install
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npm i -g @bradheitmann/odin-sentinel
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Or use `npx` without installing — see the host-specific configs below.
|
|
40
|
+
|
|
41
|
+
### 2. Configure your MCP host
|
|
42
|
+
|
|
43
|
+
Pick the one you use. Restart the host after editing.
|
|
44
|
+
|
|
45
|
+
**Claude Code**
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
claude mcp add odin-sentinel -- npx -y -p @bradheitmann/odin-sentinel odin-sentinel-mcp
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Codex** (`~/.codex/config.toml`)
|
|
52
|
+
|
|
53
|
+
```toml
|
|
54
|
+
[mcp_servers.odin-sentinel]
|
|
55
|
+
command = "npx"
|
|
56
|
+
args = ["-y", "-p", "@bradheitmann/odin-sentinel", "odin-sentinel-mcp"]
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Cursor / Cursor CLI / VS Code / Factory (Droid) / Pi** (`mcpServers` JSON)
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"mcpServers": {
|
|
64
|
+
"odin-sentinel": {
|
|
65
|
+
"command": "npx",
|
|
66
|
+
"args": ["-y", "-p", "@bradheitmann/odin-sentinel", "odin-sentinel-mcp"]
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
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.
|
|
134
|
+
|
|
135
|
+
The agent will read the protocol resources (`odin://protocol/*`), follow the role contracts, and stay inside the SCP governance rules.
|
|
136
|
+
|
|
137
|
+
### 4. Verify (optional)
|
|
138
|
+
|
|
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
|
+
```
|
|
145
|
+
|
|
146
|
+
A successful response includes `"serverInfo":{"name":"odin-sentinel","version":"0.4.4"}`.
|
|
147
|
+
|
|
148
|
+
### Claude Code plugin (optional)
|
|
149
|
+
|
|
150
|
+
If you're on Claude Code, you can install the SCP skill + MCP server together as a plugin:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
claude plugin marketplace add bradheitmann/odin-sentinel
|
|
154
|
+
claude plugin install sentinel-coordination-protocol@odin-sentinel
|
|
155
|
+
```
|
|
156
|
+
|
|
31
157
|
## Terms
|
|
32
158
|
|
|
33
159
|
- ODIN Sentinel: this MCP server and its portable team-coordination protocol.
|
|
@@ -82,12 +208,14 @@ For a recommended first team, see
|
|
|
82
208
|
- `odin://protocol/delegation` - visible-role delegation contract
|
|
83
209
|
- `odin://protocol/receipts/boot` - boot receipt template
|
|
84
210
|
- `odin://protocol/receipts/team-manifest` - team manifest template
|
|
211
|
+
- `odin://protocol/bootstrap-skill` - full Sentinel Coordination Protocol skill
|
|
85
212
|
|
|
86
213
|
## Provided MCP Tools
|
|
87
214
|
|
|
88
215
|
- `odin.get_version`
|
|
89
216
|
- `odin.get_startup_packet`
|
|
90
217
|
- `odin.get_role_profile`
|
|
218
|
+
- `odin.get_bootstrap_skill`
|
|
91
219
|
- `odin.validate_boot_receipt`
|
|
92
220
|
- `odin.validate_team_manifest`
|
|
93
221
|
- `odin.get_delegation_packet`
|
|
@@ -95,6 +223,12 @@ For a recommended first team, see
|
|
|
95
223
|
- `odin.get_closeout_checklist`
|
|
96
224
|
- `odin.get_runtime_notice`
|
|
97
225
|
- `odin.export_protocol_snapshot`
|
|
226
|
+
- `odin.compute_surface_layout`
|
|
227
|
+
- `odin.compute_surface_layout_gate`
|
|
228
|
+
- `odin.compile_session_report`
|
|
229
|
+
- `odin.preview_telemetry_redaction`
|
|
230
|
+
- `odin.submit_session_report`
|
|
231
|
+
- `odin.get_telemetry_config`
|
|
98
232
|
|
|
99
233
|
## Self-Contained Protocol
|
|
100
234
|
|
|
@@ -140,16 +274,22 @@ pnpm install
|
|
|
140
274
|
pnpm run build
|
|
141
275
|
```
|
|
142
276
|
|
|
143
|
-
|
|
277
|
+
Or install from npm:
|
|
144
278
|
|
|
145
279
|
```bash
|
|
146
|
-
|
|
280
|
+
npm i -g @bradheitmann/odin-sentinel
|
|
147
281
|
```
|
|
148
282
|
|
|
149
|
-
|
|
283
|
+
Then run the MCP server directly:
|
|
150
284
|
|
|
151
285
|
```bash
|
|
152
|
-
|
|
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
|
|
153
293
|
```
|
|
154
294
|
|
|
155
295
|
See [docs/reference/distribution.md](docs/reference/distribution.md).
|
|
@@ -271,15 +411,6 @@ pnpm run build
|
|
|
271
411
|
pnpm run validate
|
|
272
412
|
```
|
|
273
413
|
|
|
274
|
-
##
|
|
275
|
-
|
|
276
|
-
This repository is intended to become public later. Do not commit:
|
|
277
|
-
|
|
278
|
-
- personal file paths
|
|
279
|
-
- account names
|
|
280
|
-
- tokens, keys, or credentials
|
|
281
|
-
- project-specific handoff content
|
|
282
|
-
- private account details
|
|
414
|
+
## License
|
|
283
415
|
|
|
284
|
-
|
|
285
|
-
configuration.
|
|
416
|
+
MIT. See [LICENSE](LICENSE).
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
// over-redacts rather than under-redacts.
|
|
4
|
-
// redaction pass via GLM if configured.
|
|
1
|
+
// Pre-redaction for outbound payloads. Strips file-system paths, email
|
|
2
|
+
// addresses, and common secret token shapes. Intentionally conservative:
|
|
3
|
+
// over-redacts rather than under-redacts.
|
|
5
4
|
const SLASH = "/";
|
|
6
5
|
const BACKSLASH = "\\";
|
|
7
|
-
// Constructed from segments to avoid emitting literal home-path strings in
|
|
8
|
-
// this source file (the public-surface audit forbids them).
|
|
9
6
|
const HOME_USERS_RE = new RegExp(`${SLASH}${"U" + "sers"}${SLASH}[^${SLASH}\\s"']+`, "g");
|
|
10
7
|
const HOME_LINUX_RE = new RegExp(`${SLASH}${"ho" + "me"}${SLASH}[^${SLASH}\\s"']+`, "g");
|
|
11
8
|
const HOME_WIN_RE = new RegExp(`${BACKSLASH}${BACKSLASH}${"U" + "sers"}${BACKSLASH}${BACKSLASH}[^${BACKSLASH}\\s"']+`, "g");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redactor.js","sourceRoot":"","sources":["../../../src/telemetry/redactor.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"redactor.js","sourceRoot":"","sources":["../../../src/telemetry/redactor.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,yEAAyE;AACzE,0CAA0C;AAE1C,MAAM,KAAK,GAAG,GAAG,CAAC;AAClB,MAAM,SAAS,GAAG,IAAI,CAAC;AAEvB,MAAM,aAAa,GAAG,IAAI,MAAM,CAC9B,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,GAAG,KAAK,KAAK,KAAK,SAAS,EAClD,GAAG,CACJ,CAAC;AACF,MAAM,aAAa,GAAG,IAAI,MAAM,CAC9B,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,KAAK,KAAK,SAAS,EACjD,GAAG,CACJ,CAAC;AACF,MAAM,WAAW,GAAG,IAAI,MAAM,CAC5B,GAAG,SAAS,GAAG,SAAS,GAAG,GAAG,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,KAAK,SAAS,SAAS,EACtF,GAAG,CACJ,CAAC;AAEF,MAAM,QAAQ,GAAG,iDAAiD,CAAC;AAEnE,0EAA0E;AAC1E,gEAAgE;AAChE,MAAM,cAAc,GAAa;IAC/B,0BAA0B;IAC1B,+BAA+B;IAC/B,2BAA2B;IAC3B,2BAA2B;IAC3B,6BAA6B;IAC7B,gCAAgC;CACjC,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,MAAM,GAAG,KAAK;SACf,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC;SAChC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC;SAChC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC;SAC9B,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAChC,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;QACrC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAAI,OAAU;IACzC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC,OAAO,CAAiB,CAAC;IAC9E,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAiB,CAAC;IAChG,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAkC,CAAC,EAAE,CAAC;YAC9E,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,MAAsB,CAAC;IAChC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -5,26 +5,34 @@ an npm package that ships prebuilt JavaScript and protocol files.
|
|
|
5
5
|
|
|
6
6
|
## Recommended Install Path
|
|
7
7
|
|
|
8
|
-
After publishing:
|
|
9
|
-
|
|
10
8
|
```bash
|
|
11
|
-
|
|
9
|
+
npm i -g @bradheitmann/odin-sentinel
|
|
12
10
|
```
|
|
13
11
|
|
|
14
|
-
MCP client configuration can then use:
|
|
12
|
+
MCP client configuration can then use the installed binary directly:
|
|
15
13
|
|
|
16
14
|
```json
|
|
17
15
|
{
|
|
18
16
|
"mcpServers": {
|
|
19
17
|
"odin-sentinel": {
|
|
20
|
-
"command": "
|
|
21
|
-
"args": ["dlx", "odin-sentinel"]
|
|
18
|
+
"command": "odin-sentinel-mcp"
|
|
22
19
|
}
|
|
23
20
|
}
|
|
24
21
|
}
|
|
25
22
|
```
|
|
26
23
|
|
|
27
|
-
|
|
24
|
+
For zero-install via `npx`:
|
|
25
|
+
|
|
26
|
+
```json
|
|
27
|
+
{
|
|
28
|
+
"mcpServers": {
|
|
29
|
+
"odin-sentinel": {
|
|
30
|
+
"command": "npx",
|
|
31
|
+
"args": ["-y", "-p", "@bradheitmann/odin-sentinel", "odin-sentinel-mcp"]
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
28
36
|
|
|
29
37
|
## Local Clone Path
|
|
30
38
|
|