blun-king-cli 9.1.509 → 9.1.511
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/CHANGELOG.md +12 -0
- package/LIESMICH.txt +12 -1
- package/README.md +12 -1
- package/agent-spine-plugin/.claude-plugin/marketplace.json +1 -1
- package/agent-spine-plugin/.claude-plugin/plugin.json +1 -1
- package/agent-spine-plugin/.codex-plugin/plugin.json +2 -1
- package/agent-spine-plugin/CHANGELOG.md +70 -8
- package/agent-spine-plugin/README.md +1 -1
- package/agent-spine-plugin/blun.plugin.json +33 -33
- package/agent-spine-plugin/docs/acceptance.md +2 -2
- package/agent-spine-plugin/docs/gateway-runtime.md +8 -1
- package/agent-spine-plugin/docs/host-integration.md +34 -34
- package/agent-spine-plugin/docs/preflight-recall.md +69 -0
- package/agent-spine-plugin/docs/relationships.md +6 -0
- package/agent-spine-plugin/hooks/codex.json +47 -0
- package/agent-spine-plugin/hooks/hooks.json +11 -0
- package/agent-spine-plugin/hooks/version.json +2 -2
- package/agent-spine-plugin/package.json +4 -4
- package/agent-spine-plugin/scripts/check-hosts.js +53 -51
- package/agent-spine-plugin/scripts/check-install.js +53 -35
- package/agent-spine-plugin/scripts/release-check.js +11 -10
- package/agent-spine-plugin/skills/agent-spine/SKILL.md +1 -1
- package/agent-spine-plugin/src/cli.js +46 -1
- package/agent-spine-plugin/src/hook.js +168 -90
- package/agent-spine-plugin/src/index.js +6 -0
- package/agent-spine-plugin/src/lib/acceptance.js +40 -0
- package/agent-spine-plugin/src/lib/audit.js +9 -2
- package/agent-spine-plugin/src/lib/graph.js +22 -4
- package/agent-spine-plugin/src/lib/persona-runtime.js +103 -31
- package/agent-spine-plugin/src/lib/preflight.js +678 -0
- package/agent-spine-plugin/src/lib/source-roots.js +32 -32
- package/agent-spine-plugin/src/version.js +1 -1
- package/agent-spine-plugin/src/worker.js +20 -3
- package/bin/read-batch-policy.cjs +32 -0
- package/bin/turn-tool-performance-policy.cjs +1 -0
- package/blun.mjs +58 -2
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 9.1.511 - 2026-08-31
|
|
4
|
+
|
|
5
|
+
- Upgrades the managed core plugin from AgentSpine 0.8.0 to the cache-distinct 0.10.1 bundle with mandatory pre-answer receipts, Must-Remember, self-healing authenticated persona and relationship graph reconciliation, and a five-second local relationship deadline.
|
|
6
|
+
- Race-safely verifies and identity-binds every active host instruction file without duplicating its already host-loaded text into the injected briefing; the real 15,519-byte user `CLAUDE.md` produced a 5,667-byte total injected context with no instruction content field.
|
|
7
|
+
- Preserves the King-specific bounded Telegram-to-Mnemo recall rule, keeps all plugin state external to the package, and adds a package regression for compact BLUN delivery plus descriptor-only Codex delivery.
|
|
8
|
+
|
|
9
|
+
## 9.1.510 - 2026-08-31
|
|
10
|
+
|
|
11
|
+
- Adds `ReadBatch` for two to twelve independent known UTF-8 files or ranges in one concurrent tool call, reducing repeated model round trips over a large working context.
|
|
12
|
+
- Reuses the exact `Read` path resolution, sensitive-file checks, permissions, UTF-8 validation, paging, and byte limits while preserving request order and reporting partial failures individually.
|
|
13
|
+
- Keeps `ReadBatch` in the bounded core tool catalogue for main, coder, explore, and plan profiles, with focused concurrency, access, partial-failure, registration, and full-package regressions.
|
|
14
|
+
|
|
3
15
|
## 9.1.509 - 2026-08-30
|
|
4
16
|
|
|
5
17
|
- Requires every authorized bot-to-bot Telegram work message to mention its intended King explicitly.
|
package/LIESMICH.txt
CHANGED
|
@@ -9,7 +9,18 @@ Installation
|
|
|
9
9
|
------------
|
|
10
10
|
Die geprüfte Version exakt global installieren:
|
|
11
11
|
|
|
12
|
-
npm install -g blun-king-cli@9.1.
|
|
12
|
+
npm install -g blun-king-cli@9.1.511
|
|
13
|
+
|
|
14
|
+
AgentSpine 0.10.1
|
|
15
|
+
-----------------
|
|
16
|
+
Version 9.1.511 liefert AgentSpine 0.10.1 als neue inhaltsadressierte
|
|
17
|
+
Pluginfassung. Der Preflight prueft weiterhin jede aktive Host-Anweisungsdatei
|
|
18
|
+
race-sicher und bindet SHA-256 sowie Dateiidentitaet an den Zug, dupliziert den
|
|
19
|
+
bereits vom Host geladenen Volltext aber nicht mehr in den Laufzeitkontext.
|
|
20
|
+
Die reale 15.519-Byte-CLAUDE.md-Probe blieb dadurch bei 5.667 injizierten Byte.
|
|
21
|
+
Der Stand enthaelt ausserdem den selbstheilenden Persona- und Beziehungsgraphen,
|
|
22
|
+
die begrenzte Telegram-Mnemo-Abfrage und eine sichtbare Fuenf-Sekunden-Grenze
|
|
23
|
+
fuer lokale Beziehungsabfragen.
|
|
13
24
|
|
|
14
25
|
Start
|
|
15
26
|
-----
|
package/README.md
CHANGED
|
@@ -9,9 +9,20 @@ Voraussetzung ist Node.js 24.15 oder neuer. Die geprüfte Version wird exakt
|
|
|
9
9
|
installiert:
|
|
10
10
|
|
|
11
11
|
```powershell
|
|
12
|
-
npm install -g blun-king-cli@9.1.
|
|
12
|
+
npm install -g blun-king-cli@9.1.511
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
+
## AgentSpine 0.10.1
|
|
16
|
+
|
|
17
|
+
Version 9.1.511 liefert AgentSpine 0.10.1 als neue inhaltsadressierte
|
|
18
|
+
Pluginfassung. Der Preflight prueft weiterhin jede aktive Host-Anweisungsdatei
|
|
19
|
+
race-sicher und bindet SHA-256 sowie Dateiidentitaet an den Zug, dupliziert den
|
|
20
|
+
bereits vom Host geladenen Volltext aber nicht mehr in den Laufzeitkontext.
|
|
21
|
+
Die reale 15.519-Byte-`CLAUDE.md`-Probe blieb dadurch bei 5.667 injizierten Byte.
|
|
22
|
+
Der Stand enthaelt ausserdem den selbstheilenden Persona- und Beziehungsgraphen,
|
|
23
|
+
die begrenzte Telegram-Mnemo-Abfrage und eine sichtbare Fuenf-Sekunden-Grenze
|
|
24
|
+
fuer lokale Beziehungsabfragen.
|
|
25
|
+
|
|
15
26
|
## Reproduzierbares Staging und Packen
|
|
16
27
|
|
|
17
28
|
Der Schritt baut nichts, installiert nichts und veröffentlicht nichts. Vorher müssen
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-spine",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"description": "A non-destructive identity and memory spine for Codex agents.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Mayk Biletti",
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
"license": "Apache-2.0",
|
|
12
12
|
"keywords": ["identity", "memory", "mcp", "agents"],
|
|
13
13
|
"skills": "./skills/",
|
|
14
|
+
"hooks": "./hooks/codex.json",
|
|
14
15
|
"mcpServers": {
|
|
15
16
|
"agent-spine": {
|
|
16
17
|
"command": "node",
|
|
@@ -4,19 +4,78 @@ All notable changes to AgentSpine will be documented here. The project follows [
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
- BLUN King can now install AgentSpine as a native plugin with the same lifecycle hooks, MCP server, isolated app-home source resolution, and explicit plugin-install trust step as the existing Claude Code and Codex hosts
|
|
7
|
+
## [0.10.1] - 2026-08-31
|
|
10
8
|
|
|
11
9
|
### Fixed
|
|
12
10
|
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
- Mandatory host-instruction files are still race-safely reread, hashed, identity-bound, and verified for each exact turn, but their already host-loaded bytes are no longer duplicated into the injected preflight briefing.
|
|
12
|
+
- Large native `CLAUDE.md` and `AGENTS.md` hierarchies no longer fail merely because their instruction text exceeds the runtime context budget; only bounded descriptors enter the hook context.
|
|
13
|
+
|
|
14
|
+
### Security
|
|
15
|
+
|
|
16
|
+
- Unreadable, changed, replaced, symlinked, out-of-scope, individually oversized, or descriptor-overflowing mandatory instruction files continue to fail closed.
|
|
17
|
+
|
|
18
|
+
## [0.10.0] - 2026-08-30
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- Self-healing authenticated persona-to-graph reconciliation on every roster sync, including unchanged replays after partial graph failure
|
|
23
|
+
- Automatic context-only group materialization for exact locally approved roster group IDs
|
|
24
|
+
- Exact group-scoped team neighborhoods so a persona briefing can include current visible co-members without explicit pairwise edges
|
|
25
|
+
- Separate roster-change and graph-repair diagnostics with deterministic counts for created groups, updated entities, and added or removed memberships
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
|
|
29
|
+
- Active `person`, `agent`, and `bot` bindings now retain user-authored non-authority graph attributes while authenticated display name, status, source binding, privacy, and membership are reconciled
|
|
30
|
+
- Package, lockfile, Claude Code, Codex, marketplace, BLUN and hook-bundle versions advance together to `0.10.0`
|
|
31
|
+
|
|
32
|
+
### Fixed
|
|
33
|
+
|
|
34
|
+
- An unchanged roster now repairs missing persona entities, groups, and membership edges instead of remaining permanently classified as a duplicate
|
|
35
|
+
- Left and deactivated personas retain append-only identity history but no longer appear in current relationship neighborhoods
|
|
36
|
+
- Missing roster groups no longer cause membership edges to be silently skipped
|
|
37
|
+
- Relationship reads now fail visibly after a five-second local state deadline instead of waiting indefinitely
|
|
38
|
+
|
|
39
|
+
### Security
|
|
40
|
+
|
|
41
|
+
- Group peer expansion requires one exact group audience and filters inactive, private, and other-group entities before returning context
|
|
42
|
+
- Conflicting non-group IDs and private groups fail visibly instead of weakening group-scope isolation
|
|
43
|
+
- Persona, group, and relationship context remains incapable of granting rights, delegation, tools, execution, access, or policy changes
|
|
44
|
+
|
|
45
|
+
## [0.9.0] - 2026-08-30
|
|
46
|
+
|
|
47
|
+
### Added
|
|
48
|
+
|
|
49
|
+
- Mandatory `agentspine.preflight/v2` before-answer receipts bound to the exact prompt, hook delivery, host, agent, user, tenant, profile, session, project, working directory, task, group, instruction identities, retrieval queries, and briefing
|
|
50
|
+
- Provider-neutral `agentspine.retrieval-query/v1` and `agentspine.retrieval-result/v1` contracts with a bounded shell-free `mnemo-command/v1` reference adapter and environment-only credential names
|
|
51
|
+
- Explicitly confirmed, scoped Must-Remember candidates with append-only activation, supersession, rollback, permanent local-user purge, checksums, retention, and reserved briefing priority
|
|
52
|
+
- Local preflight policy, status, Must-Remember CLI and Doctor/Audit diagnostics; none of these administration surfaces are exposed through MCP
|
|
53
|
+
- Claude Code `InstructionsLoaded` observability alongside the blocking `UserPromptSubmit` gate
|
|
54
|
+
- BLUN King can now install AgentSpine as a native plugin with the same lifecycle hooks, MCP server, isolated app-home source resolution, and explicit plugin-install trust step as the existing Claude Code and Codex hosts
|
|
55
|
+
|
|
56
|
+
### Changed
|
|
57
|
+
|
|
58
|
+
- Prompt turns now carry a compact ordinary briefing plus a separately budgeted mandatory instruction and recall section, avoiding silent source truncation
|
|
59
|
+
- Package, lockfile, Claude Code, Codex, marketplace, BLUN, hook-bundle, worker and preflight versions advance together to `0.9.0`
|
|
60
|
+
|
|
61
|
+
### Fixed
|
|
62
|
+
|
|
63
|
+
- Routine BLUN hook results now render as one short human-readable status line instead of exposing compact internal JSON in the TUI, while actionable attention, self-starter, channel, and failure details remain available immediately
|
|
64
|
+
- BLUN hooks now inject a compact runtime status instead of the complete session briefing on every prompt; detailed continuity remains available on demand while active attention, self-starter, and authenticated channel signals remain immediate
|
|
65
|
+
- BLUN lifecycle hooks now index large real workspaces without absorbing embedded test profiles or failing at the smaller host-rule limit
|
|
66
|
+
- Windows Node 24 state writes now treat transient lock access errors as contention across every lock-backed store, retry atomic replacements with a bounded backoff, and tolerate briefly retained handles during hermetic cleanup
|
|
17
67
|
- The gateway worker now canonicalizes its state directory before opening the native file watcher, avoiding the Windows libuv path assertion on differently cased or short paths
|
|
18
68
|
- CI now identifies the failing check phase and annotates the exact hermetic test file or runner error, so public Windows failures can be diagnosed without access to private job logs
|
|
19
69
|
|
|
70
|
+
### Security
|
|
71
|
+
|
|
72
|
+
- Controlled preflight failures return the host's blocking decision and exit code 2 instead of the previous fail-open informational packet
|
|
73
|
+
- Mandatory instructions are reopened without following symlinks, checked through one filehandle before and after reading, SHA-256 bound, fully injected, and rejected on replacement, deletion, scope escape, size overflow, stale identity or second receipt consumption
|
|
74
|
+
- Required recall distinguishes a verified empty result from no invocation or failure; provider output is scope-bound, content-filtered and incapable of changing policy or authority
|
|
75
|
+
- Receipts are short-lived, HMAC-authenticated in private external state, one-time consumable, and contain no prompt text, rule content, memory claims, credentials or transcripts
|
|
76
|
+
- Receipt consumption revalidates the current instruction set, local policy revision, active critical-memory checksums and exact turn scope; aborted prepared turns are invalidated for safe retry while consumed deliveries remain replay-blocked
|
|
77
|
+
- Claude-only `InstructionsLoaded` registration is physically separated from Codex's documented lifecycle event set
|
|
78
|
+
|
|
20
79
|
## [0.8.0] - 2026-08-29
|
|
21
80
|
|
|
22
81
|
### Added
|
|
@@ -266,7 +325,10 @@ All notable changes to AgentSpine will be documented here. The project follows [
|
|
|
266
325
|
- Dual Claude Code and Codex plugin manifests
|
|
267
326
|
- Cross-platform preservation, hook, graph, and MCP tests
|
|
268
327
|
|
|
269
|
-
[Unreleased]: https://github.com/Maykbiletti/AgentSpine/compare/v0.
|
|
328
|
+
[Unreleased]: https://github.com/Maykbiletti/AgentSpine/compare/v0.10.1...HEAD
|
|
329
|
+
[0.10.1]: https://github.com/Maykbiletti/AgentSpine/compare/v0.10.0...v0.10.1
|
|
330
|
+
[0.10.0]: https://github.com/Maykbiletti/AgentSpine/compare/v0.9.0...v0.10.0
|
|
331
|
+
[0.9.0]: https://github.com/Maykbiletti/AgentSpine/compare/v0.8.0...v0.9.0
|
|
270
332
|
[0.8.0]: https://github.com/Maykbiletti/AgentSpine/compare/v0.7.0...v0.8.0
|
|
271
333
|
[0.7.0]: https://github.com/Maykbiletti/AgentSpine/compare/v0.6.0...v0.7.0
|
|
272
334
|
[0.6.0]: https://github.com/Maykbiletti/AgentSpine/compare/v0.5.0...v0.6.0
|
|
@@ -91,7 +91,7 @@ claude --plugin-dir .
|
|
|
91
91
|
```
|
|
92
92
|
|
|
93
93
|
Claude Code discovers the bundled skill, hooks, and MCP server. Review and trust executable components when the host asks.
|
|
94
|
-
Version `0.
|
|
94
|
+
Version `0.10.1` retains the `agentspine.preflight/v2` pre-answer contract, removes duplicate host-instruction injection, and includes self-healing authenticated persona-to-graph reconciliation. Exact roster groups are materialized as context-only entities, stale membership edges are repaired, inactive personas disappear from current relationship reads, and an exact group-scoped briefing includes visible team peers without exposing another group. Claude uses `hooks/hooks.json`; Codex selects `hooks/codex.json` so Claude-only events never enter Codex configuration. Fresh-install and upgrade checks prove package containment and entrypoint behavior; actual hook discovery and trust remain host-controlled and must be inspected in the live host. Claude project memory remains `MEMORY.md`-indexed, lazy, race-safe, persistently cached outside the project, and independent of unrelated file count. See [pre-answer recall gate](docs/preflight-recall.md) and [durable gateway worker](docs/gateway-runtime.md).
|
|
95
95
|
|
|
96
96
|
Verify the installed registration from a checkout with:
|
|
97
97
|
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "agent-spine",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "A non-destructive identity and memory spine for BLUN King agents.",
|
|
5
|
-
"license": "Apache-2.0",
|
|
6
|
-
"author": {
|
|
7
|
-
"name": "Mayk Biletti"
|
|
8
|
-
},
|
|
9
|
-
"skills": "./skills/",
|
|
10
|
-
"mcpServers": {
|
|
11
|
-
"agent-spine": {
|
|
12
|
-
"transport": "stdio",
|
|
13
|
-
"command": "node",
|
|
14
|
-
"args": ["./src/mcp.js"]
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
"hooks": [
|
|
18
|
-
{ "event": "SessionStart", "command": "node \"./src/hook.js\"", "timeout": 15 },
|
|
19
|
-
{ "event": "UserPromptSubmit", "command": "node \"./src/hook.js\"", "timeout": 15 },
|
|
20
|
-
{ "event": "PreToolUse", "matcher": "Edit|Write|apply_patch|Bash|exec_command", "command": "node \"./src/hook.js\"", "timeout": 15 },
|
|
21
|
-
{ "event": "PostToolUse", "command": "node \"./src/hook.js\"", "timeout": 15 },
|
|
22
|
-
{ "event": "PreCompact", "command": "node \"./src/hook.js\"", "timeout": 15 },
|
|
23
|
-
{ "event": "PostCompact", "command": "node \"./src/hook.js\"", "timeout": 15 },
|
|
24
|
-
{ "event": "Stop", "command": "node \"./src/hook.js\"", "timeout": 15 },
|
|
25
|
-
{ "event": "SubagentStop", "command": "node \"./src/hook.js\"", "timeout": 15 }
|
|
26
|
-
],
|
|
27
|
-
"interface": {
|
|
28
|
-
"displayName": "AgentSpine",
|
|
29
|
-
"shortDescription": "Identity, memory, attention, and resumable context without rewriting source files.",
|
|
30
|
-
"developerName": "Mayk Biletti",
|
|
31
|
-
"websiteURL": "https://github.com/Maykbiletti/AgentSpine"
|
|
32
|
-
}
|
|
33
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "agent-spine",
|
|
3
|
+
"version": "0.10.1",
|
|
4
|
+
"description": "A non-destructive identity and memory spine for BLUN King agents.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"author": {
|
|
7
|
+
"name": "Mayk Biletti"
|
|
8
|
+
},
|
|
9
|
+
"skills": "./skills/",
|
|
10
|
+
"mcpServers": {
|
|
11
|
+
"agent-spine": {
|
|
12
|
+
"transport": "stdio",
|
|
13
|
+
"command": "node",
|
|
14
|
+
"args": ["./src/mcp.js"]
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"hooks": [
|
|
18
|
+
{ "event": "SessionStart", "command": "node \"./src/hook.js\"", "timeout": 15 },
|
|
19
|
+
{ "event": "UserPromptSubmit", "command": "node \"./src/hook.js\"", "timeout": 15 },
|
|
20
|
+
{ "event": "PreToolUse", "matcher": "Edit|Write|apply_patch|Bash|exec_command", "command": "node \"./src/hook.js\"", "timeout": 15 },
|
|
21
|
+
{ "event": "PostToolUse", "command": "node \"./src/hook.js\"", "timeout": 15 },
|
|
22
|
+
{ "event": "PreCompact", "command": "node \"./src/hook.js\"", "timeout": 15 },
|
|
23
|
+
{ "event": "PostCompact", "command": "node \"./src/hook.js\"", "timeout": 15 },
|
|
24
|
+
{ "event": "Stop", "command": "node \"./src/hook.js\"", "timeout": 15 },
|
|
25
|
+
{ "event": "SubagentStop", "command": "node \"./src/hook.js\"", "timeout": 15 }
|
|
26
|
+
],
|
|
27
|
+
"interface": {
|
|
28
|
+
"displayName": "AgentSpine",
|
|
29
|
+
"shortDescription": "Identity, memory, attention, and resumable context without rewriting source files.",
|
|
30
|
+
"developerName": "Mayk Biletti",
|
|
31
|
+
"websiteURL": "https://github.com/Maykbiletti/AgentSpine"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Visible cross-host acceptance
|
|
2
2
|
|
|
3
|
-
AgentSpine `0.
|
|
3
|
+
AgentSpine `0.10.1` runs a visible, reproducible 15-gate acceptance scenario for the lifecycle adapter, including exact host-instruction identity verification without duplicate context injection, required provider recall and a fail-closed missing-provider probe. Staged installed-entrypoint source-root and indexed-memory scaling smoke tests execute the same bundled adapter used by Claude Code and Codex and never select an MCP tool, but they do not substitute for the hosts' own plugin discovery and hook-trust UI.
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
agentspine acceptance
|
|
@@ -52,7 +52,7 @@ Every line includes a SHA-256 receipt derived from the acceptance schema, gate I
|
|
|
52
52
|
|
|
53
53
|
## Installation proof
|
|
54
54
|
|
|
55
|
-
`npm run host:install-check` stages both a fresh installation and an upgrade from `0.7.0`. Each installed `0.
|
|
55
|
+
`npm run host:install-check` stages both a fresh installation and an upgrade from `0.7.0`. Each installed `0.10.1` bundle must contain exactly one MCP server, one hook set, and one worker entrypoint, then pass the complete visible acceptance run with `mcpCalls: 0`. It directly invokes the packaged hook entrypoint from an AgentSpine checkout and a foreign `cwd` with sources only in a custom Claude profile, and repeats the Codex-shaped event path with a custom home, two Git projects, a fallback name, and a nested override. Uninstall removes only staged plugin and generated state; all synthetic source hashes remain unchanged. A real Codex session must separately show the plugin source in `/hooks`, record trust for the current definition hash, and inject the briefing after a new session starts.
|
|
56
56
|
|
|
57
57
|
## Deliberate trust boundaries
|
|
58
58
|
|
|
@@ -31,7 +31,11 @@ Set `AGENTSPINE_PERSONA_ROSTER_FILE` or pass `--persona-roster` to the worker. T
|
|
|
31
31
|
}
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
Every tick synchronizes authenticated identities before any work is reconciled. New bindings append `join` events; renames retain the stable persona ID; omitted members in the same explicit roster scope become `left`; `"deactivated": true` records a distinct deactivation; reappearance appends `rejoin`. Names, Markdown, memory, and chat text cannot create identity or rights. Existing source files are never changed.
|
|
34
|
+
Every tick synchronizes authenticated identities before any work is reconciled. New bindings append `join` events; renames retain the stable persona ID; omitted members in the same explicit roster scope become `left`; `"deactivated": true` records a distinct deactivation; reappearance appends `rejoin`. A binding may describe a `person`, `agent`, or `bot`; equal display names never merge identities. Names, Markdown, memory, and chat text cannot create identity or rights. Existing source files are never changed.
|
|
35
|
+
|
|
36
|
+
Version `0.10.0` reconciles the authenticated roster into the relationship graph on every sync, including an otherwise unchanged replay. An exact `groupId` creates a missing group-scoped, context-only group entity; a conflicting non-group or private group fails visibly. Missing persona entities and membership edges are recreated, stale memberships are removed, and left or deactivated personas remain in append-only identity history but disappear from current relationship context. Reconciliation reports whether the roster changed separately from graph repair, so a previously partial installation can self-heal instead of remaining a permanent duplicate.
|
|
37
|
+
|
|
38
|
+
When a hook supplies the same exact `groupId`, `relationship_context` and `session_briefing` include current visible co-members reached through authenticated `member-of` edges. They do not infer friendships, merge names, cross tenants, expose another group, or turn membership into delegation. A direct session without an exact group scope does not receive group-private peers. Relationship reads have a five-second local state deadline and return a clear error instead of waiting indefinitely on a stalled read.
|
|
35
39
|
|
|
36
40
|
The same approved envelope may contain `nativeDiscovery` scopes. AgentSpine then checks only the officially documented direct agent-manifest directories: Claude Code `~/.claude/agents/` or `<project>/.claude/agents/`, and Codex `~/.codex/agents/` or `<project>/.codex/agents/`. `CLAUDE_CONFIG_DIR` and `CODEX_HOME` replace only their matching user scope. Each scope fixes issuer, tenant, profile, agent/bot kind, and optional group; those authenticated scope fields plus the exact source binding form the stable identity. The manifest contributes only its declared display name and an exact source descriptor; its instructions remain host-native context. Direct regular `.md` or `.toml` files are bounded to 128 entries and 256 KiB each; symlinks and files exchanged during a read fail closed. No other home or project directory is enumerated. See the official [Claude Code custom subagent locations](https://code.claude.com/docs/en/sub-agents) and [Codex custom agent locations](https://developers.openai.com/codex/agent-configuration/subagents).
|
|
37
41
|
|
|
@@ -58,6 +62,9 @@ A one-shot manual validation is available through:
|
|
|
58
62
|
agentspine persona-sync /path/to/project \
|
|
59
63
|
--roster /absolute/path/to/roster.json \
|
|
60
64
|
--confirm-local-persona
|
|
65
|
+
|
|
66
|
+
agentspine personas /path/to/project --json
|
|
67
|
+
agentspine relationships group:engineering --group group:engineering --json
|
|
61
68
|
```
|
|
62
69
|
|
|
63
70
|
## Telegram and host runner
|
|
@@ -21,7 +21,7 @@ claude plugin install agent-spine@agent-spine
|
|
|
21
21
|
|
|
22
22
|
Use `claude plugin validate .` in a checkout to validate the manifest and marketplace. Claude Code asks the user to approve executable plugin components according to its trust model.
|
|
23
23
|
|
|
24
|
-
The Claude manifest explicitly references `./.mcp.json`. The hook bundle remains at Claude Code's native auto-discovery path `hooks/hooks.json`; it is deliberately not registered a second time through the manifest. Version `0.
|
|
24
|
+
The Claude manifest explicitly references `./.mcp.json`. The hook bundle remains at Claude Code's native auto-discovery path `hooks/hooks.json`; it is deliberately not registered a second time through the manifest. Version `0.10.1` replaces the `0.10.0` plugin cache identity. The hook definition contains only portable documented hook fields; `hooks/version.json` carries the separately validated bundle release and preflight contract. The repository checks resolve installed-root variables, perform a real MCP `initialize` handshake, validate exactly one native hook command per event, and exercise staged clean install, previous-version cache rejection, upgrade, host-native source resolution, indexed and lazy Claude memory, automatic multilingual briefing, pre-answer recall, authenticated persona graph reconciliation, attention, exact job start, tool checkpoint, new-session resume, purge, and uninstall preservation:
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
27
|
npm run host:check
|
|
@@ -43,44 +43,44 @@ claude mcp list
|
|
|
43
43
|
|
|
44
44
|
Open `/mcp` in the new interactive session and approve or reconnect `agent-spine`. `Pending approval` means discovery succeeded but Claude Code still needs the user's trust decision. A missing entry after reinstall should be diagnosed from `claude plugin validate .`, `npm run host:check`, and Claude Code's plugin diagnostics; AgentSpine does not write to Claude's user configuration or silently approve itself.
|
|
45
45
|
|
|
46
|
-
## Codex
|
|
46
|
+
## Codex
|
|
47
47
|
|
|
48
48
|
| Component | Path | Purpose |
|
|
49
49
|
|---|---|---|
|
|
50
50
|
| Manifest | `.codex-plugin/plugin.json` | Package identity plus explicit skill and MCP registration |
|
|
51
51
|
| Skill | `skills/agent-spine/SKILL.md` | Context rules and preservation invariants |
|
|
52
52
|
| MCP | Manifest `mcpServers` | Read-only source tools plus external overlay workflows |
|
|
53
|
-
| Hooks | `hooks/
|
|
54
|
-
|
|
55
|
-
Open `/plugins` in Codex CLI after configuring a marketplace that contains AgentSpine, then start a new session. Codex presents a startup review when a new or changed hook definition needs trust; there is no `/hooks` slash command. Codex records trust against the exact hook-definition hash, so an installed, updated, or previously untrusted bundle is skipped until that current definition is reviewed and trusted. This follows the official [Codex hooks trust and plugin discovery contract](https://developers.openai.com/codex/hooks).
|
|
56
|
-
|
|
57
|
-
Codex
|
|
58
|
-
|
|
59
|
-
Verify the live host in a newly started Codex CLI session:
|
|
60
|
-
|
|
61
|
-
```text
|
|
62
|
-
/plugins
|
|
63
|
-
Trust all and continue
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
`npm run host:check` proves manifest shape, package containment, and a real MCP handshake. `npm run host:install-check` stages the installed bundle and executes its hook entrypoint with native event JSON. Neither command can manufacture Codex's user-controlled trust receipt; only the startup review in the actual host proves that final boundary.
|
|
67
|
-
|
|
68
|
-
## BLUN King
|
|
69
|
-
|
|
70
|
-
| Component | Path | Purpose |
|
|
71
|
-
|---|---|---|
|
|
72
|
-
| Manifest | `blun.plugin.json` | Native BLUN plugin identity plus skill, MCP, and lifecycle-hook registration |
|
|
73
|
-
| Skill | `skills/agent-spine/SKILL.md` | Context rules and preservation invariants |
|
|
74
|
-
| MCP | Manifest `mcpServers` | Read-only source tools plus external overlay workflows |
|
|
75
|
-
| Hooks | Manifest `hooks` | Automatic briefing, attention, protected-source guard, and checkpoints |
|
|
76
|
-
|
|
77
|
-
Install the local checkout from Fredrik's TUI:
|
|
78
|
-
|
|
79
|
-
```text
|
|
80
|
-
/plugins install C:\path\to\AgentSpine
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
BLUN asks the user to trust a third-party plugin before installation because its MCP server and hooks execute local code. Accept that visible install decision, then use `/reload` or `/new`; BLUN has no separate `/hooks` command. The BLUN adapter maps its isolated `BLUN_HOME` to AgentSpine's Codex-compatible `AGENTS.md` source hierarchy, so user state remains under the BLUN app home instead of leaking into `.codex` or a scanned project.
|
|
53
|
+
| Hooks | `hooks/codex.json` | Manifest-selected lifecycle guardrails |
|
|
54
|
+
|
|
55
|
+
Open `/plugins` in Codex CLI after configuring a marketplace that contains AgentSpine, then start a new session. Codex presents a startup review when a new or changed hook definition needs trust; there is no `/hooks` slash command. Codex records trust against the exact hook-definition hash, so an installed, updated, or previously untrusted bundle is skipped until that current definition is reviewed and trusted. This follows the official [Codex hooks trust and plugin discovery contract](https://developers.openai.com/codex/hooks).
|
|
56
|
+
|
|
57
|
+
Codex loads `hooks/codex.json` through the explicit plugin-manifest entry. It contains only Codex-documented lifecycle events; Claude Code's additional `InstructionsLoaded` event remains confined to `hooks/hooks.json`. Both files deliberately contain only the documented top-level `description` and `hooks` fields. Cache identity remains in `.codex-plugin/plugin.json`, while Codex records hook trust against the current definition hash. The Codex hook and MCP registrations use the host-native `PLUGIN_ROOT` expansion.
|
|
58
|
+
|
|
59
|
+
Verify the live host in a newly started Codex CLI session:
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
/plugins
|
|
63
|
+
Trust all and continue
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
`npm run host:check` proves manifest shape, package containment, and a real MCP handshake. `npm run host:install-check` stages the installed bundle and executes its hook entrypoint with native event JSON. Neither command can manufacture Codex's user-controlled trust receipt; only the startup review in the actual host proves that final boundary.
|
|
67
|
+
|
|
68
|
+
## BLUN King
|
|
69
|
+
|
|
70
|
+
| Component | Path | Purpose |
|
|
71
|
+
|---|---|---|
|
|
72
|
+
| Manifest | `blun.plugin.json` | Native BLUN plugin identity plus skill, MCP, and lifecycle-hook registration |
|
|
73
|
+
| Skill | `skills/agent-spine/SKILL.md` | Context rules and preservation invariants |
|
|
74
|
+
| MCP | Manifest `mcpServers` | Read-only source tools plus external overlay workflows |
|
|
75
|
+
| Hooks | Manifest `hooks` | Automatic briefing, attention, protected-source guard, and checkpoints |
|
|
76
|
+
|
|
77
|
+
Install the local checkout from Fredrik's TUI:
|
|
78
|
+
|
|
79
|
+
```text
|
|
80
|
+
/plugins install C:\path\to\AgentSpine
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
BLUN asks the user to trust a third-party plugin before installation because its MCP server and hooks execute local code. Accept that visible install decision, then use `/reload` or `/new`; BLUN has no separate `/hooks` command. The BLUN adapter maps its isolated `BLUN_HOME` to AgentSpine's Codex-compatible `AGENTS.md` source hierarchy, so user state remains under the BLUN app home instead of leaking into `.codex` or a scanned project.
|
|
84
84
|
|
|
85
85
|
## Direct MCP use
|
|
86
86
|
|
|
@@ -110,7 +110,7 @@ The audit exits non-zero when a required gate fails, making it suitable for inst
|
|
|
110
110
|
|
|
111
111
|
Use `agentspine doctor --host claude|codex --cwd /active/project --json` or `agentspine source-status --host claude|codex --cwd /active/project --json` to see the checked scope counts and a concrete empty/fail-closed reason. The lifecycle adapter never substitutes the installation directory for the active host hierarchy. Details and official host references are in [host-native source roots](source-roots.md).
|
|
112
112
|
|
|
113
|
-
The provider-neutral lifecycle adapter covers `SessionStart` (including resume and compact starts), `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `PreCompact`, `PostCompact`, `Stop`, and `SubagentStop`.
|
|
113
|
+
The provider-neutral lifecycle adapter covers `SessionStart` (including resume and compact starts), `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `PreCompact`, `PostCompact`, `Stop`, and `SubagentStop`. Claude Code additionally registers its documented `InstructionsLoaded` observability event; Codex does not. `UserPromptSubmit` is the blocking boundary. Before a prompt can proceed, `agentspine.preflight/v2` verifies the complete mandatory host-instruction hierarchy without reinjecting its bytes, loads confirmed Must-Remember entries and every locally required retrieval provider, then consumes one exact-turn receipt. Start and compaction boundaries retain the scoped `session_briefing`; no model-side MCP selection is required. Full behavior and the documented command-hook timeout limitation are in [pre-answer recall gate](preflight-recall.md).
|
|
114
114
|
|
|
115
115
|
When an exact locally registered job is waiting, `SessionStart` acquires its lease and injects its real checkpoint automatically. Subsequent tool and stop hooks resolve that job from the native host session; the model does not need to repeat a job envelope. `PreToolUse` first retains the protected-source guard, then rechecks the current execution grant, assignment, scope, capability, lease, and workspace. `PostToolUse` checkpoints exactly one matching result. A new session resumes only after the same checks. Grant and job administration remain local CLI operations and are absent from MCP. No hook creates permissions.
|
|
116
116
|
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Pre-answer recall gate
|
|
2
|
+
|
|
3
|
+
AgentSpine 0.9 adds `agentspine.preflight/v2`, a provider-neutral pre-answer contract. On `UserPromptSubmit`, the lifecycle adapter resolves and race-safely rereads the active host instruction hierarchy, loads confirmed Must-Remember context, runs every locally required retrieval provider, creates a short-lived HMAC receipt bound to the exact turn, consumes it once, and only then injects the resulting context. The model does not call MCP for any part of this path.
|
|
4
|
+
|
|
5
|
+
The receipt binds agent and optional persona, user, tenant, host, instruction host, profile, session, project, task, group, working-directory digest, hook delivery, prompt digest, every mandatory instruction file and file identity, the current local policy revision and profile digest, active Must-Remember checksums, provider query status, loaded item IDs and revisions, rejection count, briefing digest, creation time, and expiry. A different prompt, session, scope, working directory, source set, policy, critical-memory revision, hook delivery, or second consumption is rejected. Receipts contain no prompt text, source content, retrieval claims, credentials, or full transcripts.
|
|
6
|
+
|
|
7
|
+
## Host instructions
|
|
8
|
+
|
|
9
|
+
Claude Code uses its resolved user and project `CLAUDE.md` hierarchy. Codex uses the corresponding `AGENTS.override.md`/`AGENTS.md` hierarchy. A generic host must explicitly bind `instruction_host` to `claude` or `codex`; AgentSpine does not guess. The preflight race-safely rereads and hashes every active host instruction document, binds its exact file identity into the receipt, and emits only bounded `host-native` descriptors. It never duplicates the already host-loaded instruction bytes into hook context. An unreadable, replaced, deleted, oversized, out-of-scope, or symlinked mandatory file still blocks the turn.
|
|
10
|
+
|
|
11
|
+
Claude Code's `InstructionsLoaded` lifecycle event is registered as an additional observability signal, while `UserPromptSubmit` remains the blocking and injection boundary. Codex uses its own manifest-selected hook set without that unsupported Claude-only event. The preflight does not rely on the model remembering to read a file or call a tool.
|
|
12
|
+
|
|
13
|
+
## Required retrieval providers
|
|
14
|
+
|
|
15
|
+
Retrieval policy is a separate local policy file outside every project. Configure it only through the local CLI:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
agentspine preflight-policy ./dieter-preflight.json --confirm-local-policy
|
|
19
|
+
agentspine preflight-status --json
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The initial reference adapter is `mnemo-command/v1`: an absolute, regular executable receives one `agentspine.retrieval-query/v1` JSON object on stdin and must return one `agentspine.retrieval-result/v1` object on stdout. It may talk to a local or remote Mnemo deployment. Credentials are passed only through environment-variable names explicitly listed in local policy; values never enter repository files, state, context, receipts, logs, or MCP. Required providers must be fail-closed. A successful query with no matches produces status `empty`; a missing invocation, timeout, invalid scope, malformed response, or adapter failure blocks the turn.
|
|
23
|
+
|
|
24
|
+
Example local policy profile:
|
|
25
|
+
|
|
26
|
+
```json
|
|
27
|
+
{
|
|
28
|
+
"id": "preflight-policy:dieter:claude",
|
|
29
|
+
"agentId": "agent:dieter",
|
|
30
|
+
"host": "claude",
|
|
31
|
+
"profileId": "profile:dieter",
|
|
32
|
+
"tenantId": "tenant:company",
|
|
33
|
+
"enabled": true,
|
|
34
|
+
"providers": [
|
|
35
|
+
{
|
|
36
|
+
"schema": "agentspine.retrieval-provider/v1",
|
|
37
|
+
"id": "mnemo:primary",
|
|
38
|
+
"adapter": "mnemo-command/v1",
|
|
39
|
+
"required": true,
|
|
40
|
+
"failClosed": true,
|
|
41
|
+
"timeoutMs": 5000,
|
|
42
|
+
"command": "/absolute/path/to/mnemo-adapter",
|
|
43
|
+
"args": [],
|
|
44
|
+
"credentialEnv": ["MNEMO_TOKEN"]
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Policy, identity and authorization remain independent. Prompt, Markdown, memory, persona, team metadata and provider output cannot configure a provider, relax fail-closed behavior, grant a capability, or authorize an action.
|
|
51
|
+
|
|
52
|
+
## Must-Remember
|
|
53
|
+
|
|
54
|
+
Conversation wording such as “Merk dir das” may create only a pending candidate. Activation requires a separate explicit local user confirmation:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
agentspine remember-propose --claim "Keine halbfertigen Commits veröffentlichen." --user person:papa --tenant tenant:company --project project:agent-spine
|
|
58
|
+
agentspine remember-confirm remember-candidate:… --confirm-local-user
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Confirmed entries are scoped, checksummed, append-only and versioned. A new version supersedes rather than overwrites; rollback is explicit. Permanent deletion requires `remember-purge … --confirm-local-purge`. Secret-shaped and authority-shaped claims are rejected. Must-Remember remains context-only.
|
|
62
|
+
|
|
63
|
+
## Enforcement modes and host limits
|
|
64
|
+
|
|
65
|
+
`preflight-status` and Doctor distinguish `instructions-only-no-required-provider`, `wrapper-hard-required`, the last provider result (`loaded`, verified `empty`, or failure), a consumed receipt, and a blocked turn with a privacy-safe failure code. Host inventory reports hook trust as unverified until the real host confirms it. The bundled command hook returns the documented blocking status and exit code 2 for controlled failures. Host trust remains a one-time user decision. A prepared turn that aborts before model injection is invalidated and may retry; a consumed delivery remains replay-blocked.
|
|
66
|
+
|
|
67
|
+
Claude Code documents that a command hook killed by the host timeout is fail-open, even though an explicit exit code 2 blocks. Therefore an absolute guarantee against process termination requires the host or TUI to invoke the same preflight contract as a wrapper-hard gate immediately before its model API call. AgentSpine does not mislabel a merely installed command hook as proof against host-enforced timeout. A release is only live-proven after the target host shows fresh consumed receipts across consecutive turns, restart, and compaction.
|
|
68
|
+
|
|
69
|
+
Host hierarchy and lifecycle behavior were checked on 2026-08-30 against the official [Claude Code hook reference](https://code.claude.com/docs/en/hooks) and [Codex AGENTS.md reference](https://developers.openai.com/codex/agent-configuration/agents-md).
|
|
@@ -18,6 +18,8 @@ flowchart TB
|
|
|
18
18
|
|
|
19
19
|
Entities have stable IDs, a kind, optional display name and aliases, attributes, provenance, confidence, and privacy. Relationships connect two known IDs with a typed relation. Name similarity never merges identities.
|
|
20
20
|
|
|
21
|
+
Authenticated persona roster synchronization reconciles active `person`, `agent`, and `bot` identities into this graph. An exact roster `groupId` creates a missing group-scoped entity and an authenticated `member-of` edge. Replaying an unchanged roster repairs missing graph records without rewriting source Markdown or appending duplicate persona events.
|
|
22
|
+
|
|
21
23
|
Supported privacy scopes are:
|
|
22
24
|
|
|
23
25
|
| Scope | Default visibility |
|
|
@@ -59,9 +61,13 @@ agentspine relationships agent:builder --json
|
|
|
59
61
|
|
|
60
62
|
The MCP tools expose additional attributes, aliases, source-document provenance, confidence, and explicit private reads.
|
|
61
63
|
|
|
64
|
+
With an exact `groupId`, a relationship read returns the requested entity's direct visible edges plus current visible co-members of that group. This is a bounded team neighborhood, not an inferred friendship graph. Another group's members, inactive roster personas and private records remain excluded. Without an exact group audience, group-private peers are not returned.
|
|
65
|
+
|
|
62
66
|
## Limits
|
|
63
67
|
|
|
64
68
|
- The graph is local user state and is not synchronized automatically.
|
|
69
|
+
- Authenticated roster state is synchronized only when an owner-configured roster or native manifest scope is active; chat names never create entities.
|
|
70
|
+
- Relationship reads stop with a visible error after a five-second local state deadline.
|
|
65
71
|
- A 5 MiB graph ceiling stops unbounded growth instead of discarding history.
|
|
66
72
|
- Attribute-key rejection cannot determine whether innocent-looking prose contains a secret.
|
|
67
73
|
- Group-specific recipient policy and notification delivery are not implemented.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Resolves host-native user and project instructions before injecting scoped context, persisting attention and checkpoints, rechecking rights, and protecting sources.",
|
|
3
|
+
"hooks": {
|
|
4
|
+
"SessionStart": [
|
|
5
|
+
{
|
|
6
|
+
"matcher": "startup|resume|clear|compact",
|
|
7
|
+
"hooks": [{ "type": "command", "command": "node \"${PLUGIN_ROOT}/src/hook.js\"", "timeout": 15 }]
|
|
8
|
+
}
|
|
9
|
+
],
|
|
10
|
+
"UserPromptSubmit": [
|
|
11
|
+
{
|
|
12
|
+
"hooks": [{ "type": "command", "command": "node \"${PLUGIN_ROOT}/src/hook.js\"", "timeout": 15 }]
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"PreToolUse": [
|
|
16
|
+
{
|
|
17
|
+
"matcher": "Edit|Write|apply_patch|Bash",
|
|
18
|
+
"hooks": [{ "type": "command", "command": "node \"${PLUGIN_ROOT}/src/hook.js\"", "timeout": 15 }]
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"PostToolUse": [
|
|
22
|
+
{
|
|
23
|
+
"hooks": [{ "type": "command", "command": "node \"${PLUGIN_ROOT}/src/hook.js\"", "timeout": 15 }]
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"PreCompact": [
|
|
27
|
+
{
|
|
28
|
+
"hooks": [{ "type": "command", "command": "node \"${PLUGIN_ROOT}/src/hook.js\"", "timeout": 15 }]
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"PostCompact": [
|
|
32
|
+
{
|
|
33
|
+
"hooks": [{ "type": "command", "command": "node \"${PLUGIN_ROOT}/src/hook.js\"", "timeout": 15 }]
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"Stop": [
|
|
37
|
+
{
|
|
38
|
+
"hooks": [{ "type": "command", "command": "node \"${PLUGIN_ROOT}/src/hook.js\"", "timeout": 15 }]
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
"SubagentStop": [
|
|
42
|
+
{
|
|
43
|
+
"hooks": [{ "type": "command", "command": "node \"${PLUGIN_ROOT}/src/hook.js\"", "timeout": 15 }]
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -24,6 +24,17 @@
|
|
|
24
24
|
]
|
|
25
25
|
}
|
|
26
26
|
],
|
|
27
|
+
"InstructionsLoaded": [
|
|
28
|
+
{
|
|
29
|
+
"hooks": [
|
|
30
|
+
{
|
|
31
|
+
"type": "command",
|
|
32
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT}/src/hook.js\"",
|
|
33
|
+
"timeout": 15
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
],
|
|
27
38
|
"PreToolUse": [
|
|
28
39
|
{
|
|
29
40
|
"matcher": "Edit|Write|apply_patch|Bash",
|