0xray 4.0.14 → 4.0.15

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 (68) hide show
  1. package/.grok-plugin/plugin.json +1 -1
  2. package/.opencode/skills/orchestrator/SKILL.md +19 -1
  3. package/.xray/features.json +2 -2
  4. package/AGENTS-consumer.md +10 -5
  5. package/AGENTS.md +10 -7
  6. package/README.md +8 -7
  7. package/SKILLS.md +3 -2
  8. package/dist/AGENTS.md +10 -7
  9. package/dist/CHANGELOG.md +48 -0
  10. package/dist/README.md +8 -7
  11. package/dist/SKILLS.md +3 -2
  12. package/dist/cli/commands/hermes-install.js +2 -1
  13. package/dist/cli/commands/openclaw-install.js +2 -1
  14. package/dist/cli/commands/opencode-install.js +2 -1
  15. package/dist/cli/index.js +2 -1
  16. package/dist/integrations/cursor/hooks/cursor-hook-utils.js +9 -0
  17. package/dist/integrations/grok/grok-cli.js +2 -1
  18. package/dist/integrations/openclaw/plugin/xray-pre-tool/package.json +1 -1
  19. package/dist/reporting/log-parser.js +2 -2
  20. package/dist/skills/orchestrator/SKILL.md +19 -1
  21. package/llms.txt +8 -7
  22. package/package.json +2 -1
  23. package/scripts/foundry/CHANGELOG.md +33 -1
  24. package/scripts/foundry/README.md +12 -5
  25. package/scripts/foundry/assert-packed-dist-cli.mjs +6 -0
  26. package/scripts/foundry/blip-kapow.cjs +2 -0
  27. package/scripts/foundry/blip-looker.cjs +2 -0
  28. package/scripts/foundry/blip-render.cjs +2 -1237
  29. package/scripts/foundry/blip-rippel-organs.cjs +2 -0
  30. package/scripts/foundry/blip-rippel.cjs +2 -1963
  31. package/scripts/foundry/blip-scene.cjs +2 -0
  32. package/scripts/foundry/blip-stroke.cjs +2 -0
  33. package/scripts/foundry/blip-vibe.cjs +2 -0
  34. package/scripts/foundry/blip.mjs +23 -97
  35. package/scripts/foundry/cli.mjs +2 -2
  36. package/scripts/foundry/inspect.mjs +62 -19
  37. package/scripts/foundry/mill-plant.cjs +598 -0
  38. package/scripts/foundry/mint-suit.cjs +189 -99
  39. package/scripts/foundry/package.json +12 -1
  40. package/scripts/foundry/plant/agents/blip-inspect.yml +1 -1
  41. package/scripts/foundry/plant/agents/blip-looker.yml +5 -0
  42. package/scripts/foundry/plant/agents/blip-vibe.yml +5 -0
  43. package/scripts/foundry/plant/agents/blip.yml +1 -1
  44. package/scripts/foundry/plant/agents/inspect.yml +1 -1
  45. package/scripts/foundry/plant/agents/mill.yml +1 -1
  46. package/scripts/foundry/plant/agents/sound-inspect.yml +1 -1
  47. package/scripts/foundry/plant/agents/sound-mixer.yml +5 -0
  48. package/scripts/foundry/plant/agents/sound.yml +1 -1
  49. package/scripts/foundry/plant/motions/MOTION-REGISTRY.md +15 -9
  50. package/scripts/foundry/plant/motions/registry.json +5 -4
  51. package/scripts/foundry/plant/skills/blip/SKILL.md +4 -4
  52. package/scripts/foundry/plant/skills/blip-inspect/SKILL.md +2 -2
  53. package/scripts/foundry/plant/skills/blip-looker/SKILL.md +30 -0
  54. package/scripts/foundry/plant/skills/blip-vibe/SKILL.md +30 -0
  55. package/scripts/foundry/plant/skills/inspect/SKILL.md +2 -2
  56. package/scripts/foundry/plant/skills/sound/SKILL.md +3 -1
  57. package/scripts/foundry/plant/skills/sound-inspect/SKILL.md +1 -1
  58. package/scripts/foundry/plant/skills/sound-mixer/SKILL.md +28 -0
  59. package/scripts/foundry/sound-bed.cjs +2 -454
  60. package/scripts/foundry/sound-mixer.cjs +2 -0
  61. package/scripts/foundry/sound-rippel.cjs +2 -1434
  62. package/scripts/foundry/sound-taste.cjs +2 -0
  63. package/scripts/foundry/sound-voice.cjs +2 -0
  64. package/scripts/foundry/sound.mjs +23 -81
  65. package/scripts/node/install-bridges.cjs +39 -4
  66. package/src/integrations/openclaw/plugin/xray-pre-tool/package.json +1 -1
  67. package/src/skills/orchestrator/SKILL.md +19 -1
  68. package/xray/features.json +2 -2
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "0xray",
3
- "version": "4.0.14",
3
+ "version": "4.0.15",
4
4
  "description": "0xRay suit for Grok, Hermes, OpenClaw, OpenCode: mill+inspect, Codex, 7 MCP servers. Costume 45/42 is opt-in foundry, not the default wear.",
5
5
  "author": {
6
6
  "name": "0xRay AI",
@@ -58,4 +58,22 @@ When `multi_agent_orchestration.lead_dev_mode` is true in `features.json` (defau
58
58
  - **SessionStart** → `session-start.js` boots lead_dev_mode
59
59
  - **PreToolUse** → hints `per_suite_triage_required` on full `npm test`
60
60
 
61
- Config: `features.json` → `multi_agent_orchestration.lead_dev_mode`
61
+ Config: `features.json` → `multi_agent_orchestration.lead_dev_mode`
62
+
63
+ ## Lead cadence (syncopation)
64
+
65
+ The seven rules are the engine. The cadence is the time signature. Disk SSOT: `grok-bot/ops/LEAD-CADENCE.md`.
66
+
67
+ - **Peer test:** another instance with only worn 0xRay continues the ticket. No command stream.
68
+ - **Wear first:** Read `.xray/state/STATION.md`. Same cloud. Same critic (resume only). Dummy Reads Station.
69
+ - **Dummy tests `SKILLS.md`:** a suited dummy proves the worn catalog. Same-sess bodies keep context and hold a Station card.
70
+ - **Ship track:** always branch + worktree/aside + PR. Docs as you go. Builds. Rollback = close the PR.
71
+ - **Publish:** spawn the OTP browser, watch success, poll `npm view` until the new version is live. Do not move on early. Railway same law.
72
+ - **Live tick, not pacer:** `/loop` runs work now. Keep workstreams moving. Do not idle-wait 12 minutes.
73
+ - **Board clock:** PR events + resume the same critic. Not two idle pacers. Merge after PASS+CI (gate A). Publish only after mill-gate D + `foundry gate`.
74
+ - **Dispatch:** ticket + PR URLs + “Wear, then review.” The critic Reads `SEATS.md` Reviewer. Do not paste a command novel. When a law is spoken twice, encode it this wake.
75
+ - **Close:** loop until Station is done. Compact: Station survives the cut. Repertoire keeps names.
76
+ - **Board:** critic Strict comments; forge implements; lead stays main thread.
77
+ - **Codex 69:** rewire this skill and existing ops. Do not add a new `SKILL.md` to hold the cadence.
78
+ - **Ship matrix:** `LEAD-CADENCE.md` Decision matrix — A PR+CI · B pack · C `release:docs-check` · D `foundry release --i-mean-it`. Green CI is not ship. Spend / credentials stay Ask-first.
79
+ - **Metamorphosis:** LLM → OP-PROC is in-context worn seats (same critic, same dummy, resume only). Not more bots.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "./features.schema.json",
3
- "version": "4.0.14",
3
+ "version": "4.0.15",
4
4
  "description": "0xRay Framework - Unified Feature Configuration",
5
5
  "suit_temperament": {
6
6
  "profile": "auto",
@@ -162,7 +162,7 @@
162
162
  "provider": "repertoire",
163
163
  "module_path": "node_modules/@0xray/repertoire/dist/provider/memory-routing-provider.js",
164
164
  "config": {
165
- "signalsPath": "node_modules/@0xray/repertoire/data/curated_signals.json",
165
+ "signalsPath": ".xray/state/repertoire/curated_signals.json",
166
166
  "statePath": ".xray/state/repertoire/inference-state.json",
167
167
  "feedbackDir": ".xray/state/repertoire/feedback"
168
168
  }
@@ -6,7 +6,7 @@ Quick reference for the 0xRay AI orchestration framework worn on **{{CONSUMER_NA
6
6
 
7
7
  **4.0** — a suit that survives the context window
8
8
 
9
- Same **three-subsystem OS** as v2 (Inference · External Governance · Autonomous Engine). Constitution always on. Temperament scales ceremony. Four platform bridges. Repertoire organ ships **on** (vendored 0.2); opt out with `"enabled": false, "provider": "repertoire"`. Trim fat, do not gut the design.
9
+ Same **three-subsystem OS** as v2 (Inference · External Governance · Autonomous Engine). Constitution always on. Temperament scales ceremony. Four chat bridges plus Cursor project hooks. Repertoire organ ships **on** (vendored 0.2); opt out with `"enabled": false, "provider": "repertoire"`. Trim fat, do not gut the design.
10
10
 
11
11
  **Governance always on** (Codex PreToolUse, no new surface, no `eval`). **Engine ceremony** (analyze-complexity before spawn, confer) is **guided** by default so free-model OpenCode/Hermes stay in check. Frontier hosts (Grok 4.6 class) with `suit_temperament.profile: auto` **warn** on spawn-without-plan instead of deny — the engine is still there. Existing `.xray/features.json` without `suit_temperament` stays **guided**. Docs: v3 from v2 · Suit temperament.
12
12
 
@@ -14,17 +14,19 @@ Same **three-subsystem OS** as v2 (Inference · External Governance · Autonomou
14
14
 
15
15
  Before other work, Read `.xray/state/STATION.md`. Compaction and host change are the same cut. Continue the card. Do not restart the job. Grok does not inject the card (OpenCode does) — this Read is the Grok contract. Do not thicken the Grok exo.
16
16
 
17
+ A peer lead continues from this card + Repertoire + the `orchestrator` skill. Dummy tests `SKILLS.md`. Same-sess bodies wear the suit. Branch + worktree + PR. Loop until Station is done. Live work ticks, not idle pacers. Same critic seat (resume only). Ship when mill-gate D + `foundry gate` PASS — green CI is not ship. Spend / credentials stay Ask-first. OTP in a browser, poll the new version before the next cut.
18
+
17
19
  ## Postinstall (automatic)
18
20
 
19
21
  `npm install 0xray` runs `install-bridges.cjs` and:
20
22
 
21
23
  - Copies this file → **`AGENTS.md`** in your project root
22
- - Fastens mill plant (`mill` + `inspect`) then overlays **your** `src/skills` (same name wins). Sound seats: `foundry.json` `"plant": "sound"` fastens `sound` + `sound-inspect` (mill off). Blip seats: `foundry.json` `"plant": "blip"` fastens `blip` + `blip-inspect` (mill off). `npx @0xray/foundry inspect` runs the mill checks; on a sound seat it also reports the last bed receipt; on a blip seat the last 4.44s receipt. Chat is not a receipt. Does **not** dump 45/42 costume unless `foundry.json` `"costume": true`. Does **not** write root **`SKILLS.md`**
24
+ - Fastens mill plant (`mill` + `inspect`) then overlays **your** `src/skills` (same name wins). Fasten is **foundry-plant/0**: builtin plant is mill+inspect only. `foundry.json` `"plant": "@0xray/blip"` (aliases `"plant": "blip"` / `"plant": "sound"`) fastens whatever that mill package declares (blip-inspect, blip-vibe, blip-looker, sound-inspect, sound-mixer live in the mill). `npx @0xray/foundry sound mix` / `sound render` / `blip render` are CLI shims (0.1.11+). `npx @0xray/foundry inspect` runs mill-exported inspect; on a sound seat the last bed receipt; on a blip seat the last 4.44s receipt. Chat is not a receipt. Does **not** dump 45/42 costume unless `foundry.json` `"costume": true`. Does **not** write root **`SKILLS.md`**
23
25
  - Factory shop plant (`shop-extract`, `shop-witness`, `shop-pin` from groover-hangar) is first-class with mill plant. Extra shops: `foundry.json` `"shopPlant"`. Not costume.
24
26
  - Seeds **`.gitignore`** (from template, if absent)
25
27
  - Deploys **`.xray/`** (`codex.json`, `features.json`, `config.json`) then overlays **your** mill SSOT (`xray/codex.json`, `xray/features.json`, `src/skills`, `src/opencode/agents`; remap with `foundry.json`)
26
28
  - Writes **`.mcp.json`** with 7 MCPs servers (`npx -y 0xray mcp …`)
27
- - Installs bridges: **OpenCode**, **Grok**, **Hermes**, **OpenClaw**
29
+ - Installs bridges: **OpenCode**, **Grok**, **Hermes**, **OpenClaw**, plus **Cursor** `.cursor/hooks.json`
28
30
 
29
31
  Optional extras: `npx 0xray setup`
30
32
 
@@ -61,7 +63,10 @@ Governance deliberation uses **code-review**, **security-audit** (via enforcer/s
61
63
  | `npx 0xray mcp <server>` | Start an MCP server (stdio) |
62
64
  | `npx @0xray/foundry inspect` | Mill inspect (nested mill). Sound seat: plant + last bed PASS/FAIL. Blip seat: last 4.44s PASS/FAIL. Chat is not a receipt. |
63
65
  | `npx @0xray/foundry sound render` | Factory-sound bed: brief → seed → genre → crystal mill wav → metrics receipt. |
64
- | `npx @0xray/foundry blip render` | Factory-blip plant: brief → seed → still\|motion:<id> → 4.44s mp4 + audio bed. Motions are Rippel v2 VisualConfig at ≥720p. Sparse seed mesh plus field accents (stars, grids, gradients, blinkers) are the NFT fingerprints. `still` is the Power Plant ident (plate dissolves, not a frozen poster). |
66
+ | `npx @0xray/foundry sound mix` | sound-mixer: level every genre × tempo × motif (hats / plate / glue). |
67
+ | `npx @0xray/foundry blip render` | Factory-blip mill (`@0xray/blip`): brief → seed → still\|motion:<id> → 4.44s mp4 + audio bed. Motions are Rippel v2 VisualConfig at ≥720p. `kapow` is a design opt (two-tier comic stamp). Sparse seed mesh plus field accents are the NFT fingerprints. `still` is the Power Plant ident (plate dissolves, not a frozen poster). Fasten is foundry-plant/0 (`@0xray/foundry@0.1.12`); CLI shims remain (0.1.11+). |
68
+ | `npx @0xray/foundry blip vibe` | Stamp density. Appeal 0–10. Ship bar is 8. |
69
+ | `npx @0xray/foundry blip look` | Friend hitting replay (looker). Appeal 0–10. Ship bar is 8. |
65
70
 
66
71
  ## Governance
67
72
 
@@ -90,7 +95,7 @@ Configure in `.xray/features.json`:
90
95
  "provider": "repertoire",
91
96
  "module_path": "node_modules/@0xray/repertoire/dist/provider/memory-routing-provider.js",
92
97
  "config": {
93
- "signalsPath": "node_modules/@0xray/repertoire/data/curated_signals.json",
98
+ "signalsPath": ".xray/state/repertoire/curated_signals.json",
94
99
  "statePath": ".xray/state/repertoire/inference-state.json",
95
100
  "feedbackDir": ".xray/state/repertoire/feedback"
96
101
  }
package/AGENTS.md CHANGED
@@ -12,6 +12,8 @@ Quick reference for the xray AI orchestration framework (**4.0**).
12
12
 
13
13
  Before other work, Read `.xray/state/STATION.md`. Compaction and host change are the same cut. Continue the card. Do not restart the job. Grok does not inject the card (OpenCode does) — this Read is the Grok contract. Do not thicken the Grok exo.
14
14
 
15
+ **Lead cadence:** a peer wearing this file + Station + Repertoire continues without a command stream. Dummy bodies test `SKILLS.md`. Same-sess bodies wear the suit and keep a Station card. Always branch + worktree + PR. Ship when mill-gate D + `foundry gate` PASS (`LEAD-CADENCE.md` Decision matrix) — green CI is not ship. npm OTP in a browser, then poll the new version before moving on. Loop until Station is done. Live ticks and moving workstreams — not idle pacers. Same critic (resume only). Disk SSOT: `grok-bot/ops/LEAD-CADENCE.md`. Playbook: `orchestrator` skill.
16
+
15
17
  ## What is xray?
16
18
 
17
19
  xray provides intelligent multi-agent orchestration with automatic delegation and Codex compliance validation under the pure v2 three-subsystem model:
@@ -43,22 +45,23 @@ Governance deliberation: **code-review**, **security-audit**, **researcher** wit
43
45
  `postinstall.cjs` → `installAllBridges()`:
44
46
 
45
47
  1. `AGENTS-consumer.md` → `AGENTS.md` (does **not** write consumer-root `SKILLS.md`)
46
- 2. Fasten mill plant (`mill` + `inspect`). Sound seats: `foundry.json` `"plant": "sound"` fastens `sound` + `sound-inspect` and turns mill off. Blip seats: `foundry.json` `"plant": "blip"` fastens `blip` + `blip-inspect` and turns mill off. Not a 45-skill costume dump unless `foundry.json` `"costume": true`
48
+ 2. Fasten mill plant (`mill` + `inspect`). Fasten is **foundry-plant/0**: builtin plant is mill+inspect only. `foundry.json` `"plant": "@0xray/blip"` (aliases `"plant": "blip"` / `"plant": "sound"`) fastens whatever that mill package declares (looker, vibe, mixer, blip-inspect, blip-vibe, blip-looker, sound-inspect, sound-mixer live in the mill). Not a 45-skill costume dump unless `foundry.json` `"costume": true`
47
49
  3. `.gitignore.default` → `.gitignore` (if absent)
48
50
  4. `.xray/` config (`codex.json`, `features.json`, `config.json`) then overlay their plant
49
51
  5. `.mcp.json` (7 servers)
50
- 6. Four bridges: OpenCode, Grok, Hermes, OpenClaw. Grok last-mile dest is project `.grok/plugins/0xray` (shared HOME does not last-wins clobber machine `~/.grok/plugins/0xray`)
51
- 7. Optional git hooks
52
+ 6. Four chat bridges: OpenCode, Grok, Hermes, OpenClaw. Grok last-mile dest is project `.grok/plugins/0xray` (shared HOME does not last-wins clobber machine `~/.grok/plugins/0xray`)
53
+ 7. Cursor fifth wear: fasten `.cursor/hooks.json` when absent (preToolUse / preCompact / afterFileEdit). Leaves an existing file alone. Not a fifth chat TUI.
54
+ 8. Optional git hooks
52
55
 
53
56
  **Shop plant:** `shop-extract`, `shop-witness`, `shop-pin` (groover-hangar) are first-class with mill plant. Extra shops: `foundry.json` `shopPlant`. Not `"costume": true`. `npx @0xray/foundry inspect --skip-live` is the receipt.
54
57
 
55
- **Sound plant:** Dist audio beds get a real plant like mill. `"plant": "sound"` + `npx @0xray/foundry sound render` writes a crystal-clear wav (Rippel membrane/metal/mixer, not a sine toy) and a bed receipt. Inspect checks loudness/smoothness gates — not fake code-mill skills on a sound seat.
58
+ **Sound plant:** Dist audio beds are a mill (`@0xray/blip`), not a foundry organ catalog. Alias `"plant": "sound"` + `npx @0xray/foundry sound render` writes a crystal-clear wav (Rippel membrane/metal/mixer, not a sine toy) and a bed receipt. `sound-mixer` (`npx @0xray/foundry sound mix`) lives in the mill and levels every genre × tempo × motif — hats, plate, glue — not just the last bed. CLI shim `foundry sound` remains (0.1.11+). Inspect is mill-exported — not fake code-mill skills on a sound seat.
56
59
 
57
- **Blip plant:** New factory plant sibling to mill + sound (not a mill copy). Hangar shop pair later. `"plant": "blip"` + `npx @0xray/foundry blip render --brief "..." --mode still|motion:orb` writes a 4.44s mp4 **with an audio bed**. Registry v0: still + Rippel five (`orb` `swirl` `snap` `waves` `spark`). Motions are Rippel v2 `VisualConfig.circles` at ≥720p — sharp look + tempo/frequency animation on all five (wireframe is `--engine wireframe` only). Auto bed syncopates to the motion grid. Each mint wears a sparse seed mesh plus field accents (stars, grids, gradients, blinkers); receipt `visualConfig.mesh` + `visualConfig.field` are the fingerprints. `kapow` is a growth stub. `still` is the Power Plant ident — plate dissolves over 4.44s at ≥720p (`#08090B` `#F5F7FA` `#3DE0E8` `#F5C518` `#4A7FD4`), not a frozen poster. Inspect checks duration / mode id / file / audio.
60
+ **Blip plant:** Product mill `@0xray/blip` (not a mill copy). Hangar shop pair later. Alias `"plant": "blip"` + `npx @0xray/foundry blip render --brief "..." --mode still|motion:orb` writes a 4.44s mp4 **with an audio bed**. Registry v0: still + Rippel five (`orb` `swirl` `snap` `waves` `spark`). Motions are Rippel v2 `VisualConfig.circles` at ≥720p — sharp look + tempo/frequency animation on all five (wireframe is `--engine wireframe` only). Auto bed syncopates to the motion grid. Each mint wears a sparse seed mesh plus field accents (stars, grids, gradients, blinkers); receipt `visualConfig.mesh` + `visualConfig.field` are the fingerprints. `kapow` is a design opt (`motion:kapow`) — two-tier comic stamp on the same stanza. Organs live in the mill: `blip-vibe` (`npx @0xray/foundry blip vibe`) scores stamp density; `blip-looker` (`npx @0xray/foundry blip look`) is the friend hitting replay; appeal 0–10; ship bar is **8**. `still` is the Power Plant ident — plate dissolves over 4.44s at ≥720p (`#08090B` `#F5F7FA` `#3DE0E8` `#F5C518` `#4A7FD4`), not a frozen poster. Adding an organ is a mill publish, not an xray catalog PR. CLI shim `foundry blip` remains (0.1.11+). Inspect checks duration / mode id / file / audio.
58
61
 
59
62
  ## Memory routing + Repertoire (v3.3+)
60
63
 
61
- **Station is the successor card** (Read `.xray/state/STATION.md`). Repertoire 0.2 is a thin routing seed (8 factory names). 0.1.0–0.1.8 were the same judgment organ; do not pin 0.1.8 for mill wear. Split: `docs-site/docs/guides/station-vs-repertoire.md`.
64
+ **Station is the successor card** (Read `.xray/state/STATION.md`). Repertoire 0.2 is a thin routing seed (8 factory names). The worn mill reads the **project copy** under `.xray/state/repertoire/`. 0.1.0–0.1.8 were the same judgment organ; do not pin 0.1.8 for mill wear. Split: `docs-site/docs/guides/station-vs-repertoire.md`.
62
65
 
63
66
  `xray/features.json` → `memory_routing` (schema: `features.schema.json`):
64
67
 
@@ -68,7 +71,7 @@ Governance deliberation: **code-review**, **security-audit**, **researcher** wit
68
71
  "provider": "repertoire",
69
72
  "module_path": "node_modules/@0xray/repertoire/dist/provider/memory-routing-provider.js",
70
73
  "config": {
71
- "signalsPath": "node_modules/@0xray/repertoire/data/curated_signals.json",
74
+ "signalsPath": ".xray/state/repertoire/curated_signals.json",
72
75
  "statePath": ".xray/state/repertoire/inference-state.json",
73
76
  "feedbackDir": ".xray/state/repertoire/feedback"
74
77
  }
package/README.md CHANGED
@@ -13,14 +13,14 @@ Not a catalog of agents. The product is the **skeleton you wear**.
13
13
  - **Bone** — three-subsystem OS: Inference · External Governance (Dynamo / Codex) · Autonomous Engine (thinDispatch)
14
14
  - **Always on** — Codex 11 / 29 / 69, destructive shell, no new MCP/skill/handler surface
15
15
  - **Temperament** — `frontier` | `guided` | `strict` | `auto` — how loud the engine is, not whether governance exists
16
- - **Wear** — Grok, OpenCode, Hermes, OpenClaw. One SSOT gate
16
+ - **Wear** — Grok, OpenCode, Hermes, OpenClaw, plus Cursor project hooks. One SSOT gate
17
17
  - **Muscle** — Repertoire: auto-enables when the module resolves; session-start writes a one-line resume so the next station is not born amnesiac
18
18
 
19
19
  ```bash
20
20
  npm install 0xray
21
21
  ```
22
22
 
23
- Consumer `npm install 0xray` auto-wires four platform bridges and seven MCP servers. Repertoire **0.2** is the factory memory organ (vendored): seed primitives, in-process routing, extra host MCP `repertoire`. Not an eighth `xray-*` server. Opt out with `"enabled": false, "provider": "repertoire"`.
23
+ Consumer `npm install 0xray` auto-wires four chat bridges, Cursor project hooks, and seven MCP servers. Repertoire **0.2** is the factory memory organ (vendored): seed primitives, in-process routing, extra host MCP `repertoire`. Not an eighth `xray-*` server. Opt out with `"enabled": false, "provider": "repertoire"`.
24
24
 
25
25
  ## Quick Start
26
26
 
@@ -51,7 +51,7 @@ Docs: [guides/autonomy-command](docs-site/docs/guides/autonomy-command.md) · Sk
51
51
 
52
52
  | Version | Highlights |
53
53
  |---------|------------|
54
- | **Unreleased** | Shop plant first-class (`shop-extract`, `shop-witness`, `shop-pin` + `foundry.json` `shopPlant`). Not `"costume": true`. Root `llms.txt`. Pack→tmp fasten proof. |
54
+ | **Unreleased** | Fasten is **foundry-plant/0**: builtin plant is mill+inspect only. `foundry.json` `"plant": "@0xray/blip"` (aliases `"plant": "blip"` / `"plant": "sound"`) fastens whatever that mill declares (looker / vibe / mixer live in the mill). Nested mill `@0xray/foundry@0.1.12`. CLI shims `foundry blip\|sound` remain (0.1.11+). Shop plant first-class (`shop-extract`, `shop-witness`, `shop-pin` + `foundry.json` `shopPlant`). 0xray stays 4.0.15. |
55
55
  | **4.0.9** | Mill target: postinstall does not mill npm global prefix or `_npx` as a consumer. Isolated HOME skips machine `~/.grok`. |
56
56
  | **4.0.0** | Exo + temperament. Constitution always on; ceremony by host. Repertoire organ on (vendored 0.2). Station card survives compact/host-swap. **On npm.** [vision](docs-site/docs/architecture/v4-vision.md) · [now](docs-site/docs/architecture/v4-now.md) |
57
57
  | **3.4.1** | Unified `install-bridges.cjs` on postinstall — OpenCode, Grok, Hermes, OpenClaw in one pass. All 7 MCPs servers via `npx -y 0xray mcp <cmd>` (no `dist/` paths). Canonical `release.mjs` pipeline. |
@@ -103,11 +103,11 @@ Docs: [guides/autonomy-command](docs-site/docs/guides/autonomy-command.md) · Sk
103
103
  On `npm install 0xray` in a consumer project, postinstall automatically:
104
104
 
105
105
  1. Copies **`AGENTS-consumer.md` → `AGENTS.md`**. Does **not** write consumer-root **`SKILLS.md`**.
106
- 2. Fastens **mill plant** (`mill` + `inspect`). Sound seats: `foundry.json` `"plant": "sound"` fastens the bed factory (`sound` + `sound-inspect`) and turns mill off. Blip seats: `foundry.json` `"plant": "blip"` fastens the tiny-video factory (`blip` + `blip-inspect`) and turns mill off. Not a 45-skill / 42-agent costume dump. `foundry.json` `"costume": true` is the opt-in dump.
106
+ 2. Fastens **mill plant** (`mill` + `inspect`). Fasten is **foundry-plant/0**: builtin plant is mill+inspect only. `foundry.json` `"plant": "@0xray/blip"` (aliases `"plant": "blip"` / `"plant": "sound"`) fastens whatever that mill package declares — organs (looker, vibe, mixer) live in the mill, not an xray catalog. Nested mill `@0xray/foundry@0.1.12`. CLI shims `foundry blip|sound` still exist on foundry 0.1.11+; fasten is the new cut. Not a 45-skill / 42-agent costume dump. `foundry.json` `"costume": true` is the opt-in dump.
107
107
  3. Seeds **`.gitignore`** from `.gitignore.default` (if absent)
108
108
  4. Deploys **`.xray/`** config (`codex.json`, `features.json`, `config.json`) then overlays **their** plant
109
109
  5. Writes project **`.mcp.json`** with 7 MCPs servers (`npx -y 0xray mcp …`)
110
- 6. Installs **4 bridges**: OpenCode, Grok, Hermes, OpenClaw (PPE + wiring; mill plant, not costume)
110
+ 6. Installs **4 chat bridges**: OpenCode, Grok, Hermes, OpenClaw, plus **Cursor** `.cursor/hooks.json` (PPE + wiring; mill plant, not costume)
111
111
  7. Factory shop plant (`shop-extract`, `shop-witness`, `shop-pin` from groover-hangar) may coexist when worn. Extra shops: `foundry.json` `shopPlant`. Not costume.
112
112
  8. Installs git pre-commit hook (non-blocking if not a git repo)
113
113
 
@@ -159,7 +159,7 @@ Pluggable `memory_routing` block in `features.json` (validated by `features.sche
159
159
  "provider": "repertoire",
160
160
  "module_path": "node_modules/@0xray/repertoire/dist/provider/memory-routing-provider.js",
161
161
  "config": {
162
- "signalsPath": "node_modules/@0xray/repertoire/data/curated_signals.json",
162
+ "signalsPath": ".xray/state/repertoire/curated_signals.json",
163
163
  "statePath": ".xray/state/repertoire/inference-state.json",
164
164
  "feedbackDir": ".xray/state/repertoire/feedback"
165
165
  }
@@ -188,6 +188,7 @@ Docs: [memory routing](docs-site/docs/guides/memory-routing.md) · [Repertoire](
188
188
  | **Grok CLI / Build** | `npx 0xray grok install` | Project `.grok/plugins/0xray` (shared HOME does not clobber machine plugin), 7 MCPs servers |
189
189
  | **Hermes Agent** | `npx 0xray hermes install` | `~/.hermes/plugins/xray-hermes`, consumer root marker |
190
190
  | **OpenClaw** | `npx 0xray openclaw install` | `.xray/config/openclaw.json`, skill sync |
191
+ | **Cursor** | postinstall (`installCursorBridge`) | Fastens `.cursor/hooks.json` (preToolUse / preCompact / afterFileEdit). Leaves an existing file alone. Not a fifth chat TUI. |
191
192
 
192
193
  ## Governance & Codex
193
194
 
@@ -202,7 +203,7 @@ Docs: [memory routing](docs-site/docs/guides/memory-routing.md) · [Repertoire](
202
203
  | Suite | Status (v4.0.1) |
203
204
  |-------|-----------------|
204
205
  | Four-floor consumer e2e | OpenCode 34/0 · Grok 63/0 · Hermes 39/0/2 · OpenClaw 96/0/1 (npm 4.0.0 pack) |
205
- | Consumer smoke | `npm run release:gate` — pack → clean install → 7 MCPs + 4 bridges + organ on |
206
+ | Consumer smoke | `npm run release:gate` — pack → clean install → 7 MCPs + 4 chat bridges + Cursor hooks + organ on |
206
207
  | Pack → tmp proof | `npm run pack:tmp-proof` — tgz install + `foundry mint --skip-live` + hangar shops + inspect (no costume dump). Playwright n/a (CLI). |
207
208
 
208
209
  ```bash
package/SKILLS.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  **4.0** — a suit that survives the context window
4
4
 
5
- **45 skills** in this exo catalog. Default consumer plant is **`mill` + `inspect`**, not this dump. `npm install 0xray` does **not** sync 45 skills unless `foundry.json` `"costume": true`. Factory shop plant (`shop-extract`, `shop-witness`, `shop-pin`) coexists with mill plant when a hangar wears those shops. Extra shops: `foundry.json` `shopPlant`. Sound seats: `foundry.json` `"plant": "sound"` (foundry plant, not this catalog). Blip seats: `foundry.json` `"plant": "blip"` (foundry plant, not this catalog). Agent map: [llms.txt](llms.txt).
5
+ **45 skills** in this exo catalog. Default consumer plant is **`mill` + `inspect`**, not this dump. `npm install 0xray` does **not** sync 45 skills unless `foundry.json` `"costume": true`. Factory shop plant (`shop-extract`, `shop-witness`, `shop-pin`) coexists with mill plant when a hangar wears those shops. Extra shops: `foundry.json` `shopPlant`. Fasten is **foundry-plant/0**: builtin plant is mill+inspect only. `foundry.json` `"plant": "@0xray/blip"` (aliases `"plant": "blip"` / `"plant": "sound"`) fastens whatever that mill package declares — organs (looker, vibe, mixer) live in the mill, not this catalog. Nested mill `@0xray/foundry@0.1.12`. CLI shims `foundry blip|sound` still exist on foundry 0.1.11+. Agent map: [llms.txt](llms.txt).
6
6
 
7
7
  xray ships 45 knowledge skills (`src/skills/<name>/SKILL.md`) as the **costume / self-plant catalog**. Lead-dev operating model lives in **`orchestrator`** skill + `multi_agent_orchestration.lead_dev_mode` in features.json. Skills load on demand via the **xray-skills** MCP server (`npx -y 0xray mcp skills`) or when you plant them. This file is the exo catalog — mill does **not** write it to the consumer root.
8
8
 
@@ -76,7 +76,7 @@ xray ships 45 knowledge skills (`src/skills/<name>/SKILL.md`) as the **costume /
76
76
 
77
77
  | Skill | Agent | Description |
78
78
  |-------|-------|-------------|
79
- | `orchestrator` | @orchestrator | Multi-agent coordination + **lead-dev mode** (codex 67–68) |
79
+ | `orchestrator` | @orchestrator | Multi-agent coordination + **lead-dev mode** (codex 67–68) + lead cadence (dispatch four lines; critic Reads SEATS; ship matrix A–D in `LEAD-CADENCE.md`) |
80
80
  | `xray-orchestrator` | — | xray orchestration skill (MCP orchestrator surface) |
81
81
  | `processor-pipeline` | — | Data processing pipeline management |
82
82
  | `boot-orchestrator` | — | Framework boot orchestration |
@@ -150,6 +150,7 @@ npx 0xray skill:install <source>
150
150
  | OpenCode (after setup) | `.opencode/skills/<name>/SKILL.md` |
151
151
  | Grok | project `.grok/plugins/0xray/skills/<name>/SKILL.md` (machine `~/.grok/plugins/0xray` is not last-wins) |
152
152
  | Hermes / OpenClaw | Platform skill dirs (postinstall sync) |
153
+ | Cursor | Project `.cursor/hooks.json` (PPE + Station heat). Not a skill dump. |
153
154
 
154
155
  ## Related features (since 3.1)
155
156
 
package/dist/AGENTS.md CHANGED
@@ -12,6 +12,8 @@ Quick reference for the xray AI orchestration framework (**4.0**).
12
12
 
13
13
  Before other work, Read `.xray/state/STATION.md`. Compaction and host change are the same cut. Continue the card. Do not restart the job. Grok does not inject the card (OpenCode does) — this Read is the Grok contract. Do not thicken the Grok exo.
14
14
 
15
+ **Lead cadence:** a peer wearing this file + Station + Repertoire continues without a command stream. Dummy bodies test `SKILLS.md`. Same-sess bodies wear the suit and keep a Station card. Always branch + worktree + PR. Ship when mill-gate D + `foundry gate` PASS (`LEAD-CADENCE.md` Decision matrix) — green CI is not ship. npm OTP in a browser, then poll the new version before moving on. Loop until Station is done. Live ticks and moving workstreams — not idle pacers. Same critic (resume only). Disk SSOT: `grok-bot/ops/LEAD-CADENCE.md`. Playbook: `orchestrator` skill.
16
+
15
17
  ## What is xray?
16
18
 
17
19
  xray provides intelligent multi-agent orchestration with automatic delegation and Codex compliance validation under the pure v2 three-subsystem model:
@@ -43,22 +45,23 @@ Governance deliberation: **code-review**, **security-audit**, **researcher** wit
43
45
  `postinstall.cjs` → `installAllBridges()`:
44
46
 
45
47
  1. `AGENTS-consumer.md` → `AGENTS.md` (does **not** write consumer-root `SKILLS.md`)
46
- 2. Fasten mill plant (`mill` + `inspect`). Sound seats: `foundry.json` `"plant": "sound"` fastens `sound` + `sound-inspect` and turns mill off. Blip seats: `foundry.json` `"plant": "blip"` fastens `blip` + `blip-inspect` and turns mill off. Not a 45-skill costume dump unless `foundry.json` `"costume": true`
48
+ 2. Fasten mill plant (`mill` + `inspect`). Fasten is **foundry-plant/0**: builtin plant is mill+inspect only. `foundry.json` `"plant": "@0xray/blip"` (aliases `"plant": "blip"` / `"plant": "sound"`) fastens whatever that mill package declares (looker, vibe, mixer, blip-inspect, blip-vibe, blip-looker, sound-inspect, sound-mixer live in the mill). Not a 45-skill costume dump unless `foundry.json` `"costume": true`
47
49
  3. `.gitignore.default` → `.gitignore` (if absent)
48
50
  4. `.xray/` config (`codex.json`, `features.json`, `config.json`) then overlay their plant
49
51
  5. `.mcp.json` (7 servers)
50
- 6. Four bridges: OpenCode, Grok, Hermes, OpenClaw. Grok last-mile dest is project `.grok/plugins/0xray` (shared HOME does not last-wins clobber machine `~/.grok/plugins/0xray`)
51
- 7. Optional git hooks
52
+ 6. Four chat bridges: OpenCode, Grok, Hermes, OpenClaw. Grok last-mile dest is project `.grok/plugins/0xray` (shared HOME does not last-wins clobber machine `~/.grok/plugins/0xray`)
53
+ 7. Cursor fifth wear: fasten `.cursor/hooks.json` when absent (preToolUse / preCompact / afterFileEdit). Leaves an existing file alone. Not a fifth chat TUI.
54
+ 8. Optional git hooks
52
55
 
53
56
  **Shop plant:** `shop-extract`, `shop-witness`, `shop-pin` (groover-hangar) are first-class with mill plant. Extra shops: `foundry.json` `shopPlant`. Not `"costume": true`. `npx @0xray/foundry inspect --skip-live` is the receipt.
54
57
 
55
- **Sound plant:** Dist audio beds get a real plant like mill. `"plant": "sound"` + `npx @0xray/foundry sound render` writes a crystal-clear wav (Rippel membrane/metal/mixer, not a sine toy) and a bed receipt. Inspect checks loudness/smoothness gates — not fake code-mill skills on a sound seat.
58
+ **Sound plant:** Dist audio beds are a mill (`@0xray/blip`), not a foundry organ catalog. Alias `"plant": "sound"` + `npx @0xray/foundry sound render` writes a crystal-clear wav (Rippel membrane/metal/mixer, not a sine toy) and a bed receipt. `sound-mixer` (`npx @0xray/foundry sound mix`) lives in the mill and levels every genre × tempo × motif — hats, plate, glue — not just the last bed. CLI shim `foundry sound` remains (0.1.11+). Inspect is mill-exported — not fake code-mill skills on a sound seat.
56
59
 
57
- **Blip plant:** New factory plant sibling to mill + sound (not a mill copy). Hangar shop pair later. `"plant": "blip"` + `npx @0xray/foundry blip render --brief "..." --mode still|motion:orb` writes a 4.44s mp4 **with an audio bed**. Registry v0: still + Rippel five (`orb` `swirl` `snap` `waves` `spark`). Motions are Rippel v2 `VisualConfig.circles` at ≥720p — sharp look + tempo/frequency animation on all five (wireframe is `--engine wireframe` only). Auto bed syncopates to the motion grid. Each mint wears a sparse seed mesh plus field accents (stars, grids, gradients, blinkers); receipt `visualConfig.mesh` + `visualConfig.field` are the fingerprints. `kapow` is a growth stub. `still` is the Power Plant ident — plate dissolves over 4.44s at ≥720p (`#08090B` `#F5F7FA` `#3DE0E8` `#F5C518` `#4A7FD4`), not a frozen poster. Inspect checks duration / mode id / file / audio.
60
+ **Blip plant:** Product mill `@0xray/blip` (not a mill copy). Hangar shop pair later. Alias `"plant": "blip"` + `npx @0xray/foundry blip render --brief "..." --mode still|motion:orb` writes a 4.44s mp4 **with an audio bed**. Registry v0: still + Rippel five (`orb` `swirl` `snap` `waves` `spark`). Motions are Rippel v2 `VisualConfig.circles` at ≥720p — sharp look + tempo/frequency animation on all five (wireframe is `--engine wireframe` only). Auto bed syncopates to the motion grid. Each mint wears a sparse seed mesh plus field accents (stars, grids, gradients, blinkers); receipt `visualConfig.mesh` + `visualConfig.field` are the fingerprints. `kapow` is a design opt (`motion:kapow`) — two-tier comic stamp on the same stanza. Organs live in the mill: `blip-vibe` (`npx @0xray/foundry blip vibe`) scores stamp density; `blip-looker` (`npx @0xray/foundry blip look`) is the friend hitting replay; appeal 0–10; ship bar is **8**. `still` is the Power Plant ident — plate dissolves over 4.44s at ≥720p (`#08090B` `#F5F7FA` `#3DE0E8` `#F5C518` `#4A7FD4`), not a frozen poster. Adding an organ is a mill publish, not an xray catalog PR. CLI shim `foundry blip` remains (0.1.11+). Inspect checks duration / mode id / file / audio.
58
61
 
59
62
  ## Memory routing + Repertoire (v3.3+)
60
63
 
61
- **Station is the successor card** (Read `.xray/state/STATION.md`). Repertoire 0.2 is a thin routing seed (8 factory names). 0.1.0–0.1.8 were the same judgment organ; do not pin 0.1.8 for mill wear. Split: `docs-site/docs/guides/station-vs-repertoire.md`.
64
+ **Station is the successor card** (Read `.xray/state/STATION.md`). Repertoire 0.2 is a thin routing seed (8 factory names). The worn mill reads the **project copy** under `.xray/state/repertoire/`. 0.1.0–0.1.8 were the same judgment organ; do not pin 0.1.8 for mill wear. Split: `docs-site/docs/guides/station-vs-repertoire.md`.
62
65
 
63
66
  `xray/features.json` → `memory_routing` (schema: `features.schema.json`):
64
67
 
@@ -68,7 +71,7 @@ Governance deliberation: **code-review**, **security-audit**, **researcher** wit
68
71
  "provider": "repertoire",
69
72
  "module_path": "node_modules/@0xray/repertoire/dist/provider/memory-routing-provider.js",
70
73
  "config": {
71
- "signalsPath": "node_modules/@0xray/repertoire/data/curated_signals.json",
74
+ "signalsPath": ".xray/state/repertoire/curated_signals.json",
72
75
  "statePath": ".xray/state/repertoire/inference-state.json",
73
76
  "feedbackDir": ".xray/state/repertoire/feedback"
74
77
  }
package/dist/CHANGELOG.md CHANGED
@@ -6,11 +6,59 @@ The format is based on [Conventional Commits](https://www.conventionalcommits.or
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ### ✨ Features
10
+ - **Cursor fifth wear** — `install-bridges.cjs` fastens project `.cursor/hooks.json` (preToolUse / preCompact / afterFileEdit) so Cursor Cloud heats Station and gates tools. Leaves an existing file alone. Not a fifth chat TUI. No new MCP/skill surface. Pack gate (`REQUIRED_PACK_PATHS`) now requires `dist/integrations/cursor/hooks/{hooks.json,pre-tool-use.js,pre-compact.js,after-file-edit.js,cursor-hook-utils.js,cursor-usage-receipt.js}` so a published tarball cannot ship a dead consumer command. `preToolUse` / `afterFileEdit` rewrite the card when git HEAD or Repertoire count diverges — Ticket / Durable / Seed stay. OP-PROC stays in the hook, not on Station.
11
+
12
+ ### 📚 Documentation
13
+ - Cursor fifth wear in README integrations table, AGENTS / AGENTS-consumer / SKILLS / llms.txt, and Docusaurus integrations / getting-started / consumer-migration.
14
+ - **Lead cadence (syncopation)** — `grok-bot/ops/LEAD-CADENCE.md` is the peer-lead OP-PROC: dummy `SKILLS.md` tests, same-sess wear + Station card, npm OTP+poll, always branch/worktree/PR, loop until Station is done, workstreams not idle pacers. Wired into `orchestrator` skill, AGENTS hot-swap, OPS-CATALOG. Not a new skill (Codex 69).
15
+ - **Repertoire project copy** — shipped `memory_routing.config.signalsPath` is `.xray/state/repertoire/curated_signals.json`. The factory tarball stays read-only. After compact the suit routes the living project names, not the 8-name seed.
16
+ - **Board clock** — critique board wakes on PR events and resumes the same critic. Two idle pacers (reviewer + lead-reader) are forbidden; they inflate context and cause compact. Merge after PASS+CI (gate A). Publish only after mill-gate D + `foundry gate`.
17
+ - **Dispatch encode** — lead cards ticket + PR URLs + “Wear, then review.” Critic OP-PROC lives on `SEATS.md` Reviewer. When a law is spoken twice, write it to disk this wake. No new skill.
18
+ - **Ship decision matrix** — lead-owned. A PR+CI · B pack (`assert-packed-dist-cli` + consumer smoke) · C `npm run release:docs-check` · D `npx @0xray/foundry release --i-mean-it`. Green CI is not ship. Spend / credentials stay Ask-first. Host Auto Review may still card npm/Railway; that is not the OS decision.
19
+ - **Metamorphosis** — an LLM becomes OP-PROC through in-context worn seats (same critic, same dummy, four-line dispatch). Spawning more bots is the old skin.
20
+
21
+ ### 🔄 Changes
22
+ - **Hangar catalog** — mill hangar docs use Clearing `GET /v1/catalog` as the directory (listed hangars: Groover DID + pin, plus solar + live shop), not a hardcoded extract/witness/pin route table. Groover MCP `list_hangars` reads that catalog. 0xray stays 4.0.15.
23
+ - **foundry-plant/0** — fasten is a protocol any mill implements, not a 0xray-owned catalog of plant kinds. Builtin plant is mill+inspect only. `foundry.json` `"plant": "@0xray/blip"` (alias `"blip"`) fastens whatever that mill package declares. Organs (looker, vibe, mixer) live in the mill; adding one is a mill publish, not an xray catalog PR. Nested mill `@0xray/foundry@0.1.12`. CLI shims `foundry blip|sound` still exist on foundry 0.1.11+. 0xray stays 4.0.15.
24
+ - **Blip/sound mills moved to `@0xray/blip`** — 4.44s drawers (render, kapow, vibe, wow-pass listen/cel, sound bed/mixer, looker) live in the blip product mill. `@0xray/foundry@0.1.11` shims `foundry blip|sound` including `blip look`. Railway plant consumes the product mill, not a hand-vendored copy. 0xray stays 4.0.15.
25
+
26
+ ---
27
+
28
+ ## [4.0.15] - 2026-09-17
29
+
30
+ ### ✨ Features
31
+ - **Factory-blip vibe seat** — `blip-vibe` plant agent scores still + Rippel five + kapow on the same aesthetic organ. Appeal 0–10. Ship bar is **8**. Shared fill / tint / contrast / outline / flash / differ; kapow extras stay kapow-only. Kapow is a comic burst: 8–10 outer points, 6–8 inner, some spikes longer than others. `npx @0xray/foundry blip vibe`. Inspect stays duration / mode / file. No `@0xray/foundry` bump.
32
+ - **Factory-sound mixer seat** — `sound-mixer` plant agent levels every genre × tempo × motif (hats, plate, glue, phrase). `npx @0xray/foundry sound mix`. Dries the plate, pulls hot hats, eases glue. Inspect stays the last-bed gate. No `@0xray/foundry` bump.
33
+ - **Factory-blip kapow opt** — `--mode motion:kapow` is a two-tier stamp on the same stanza (outer cyan burst winds, inner gold burst + `KAPOW!` hit the jewel cut). Not a third look. v0 five stay. No `@0xray/foundry` bump.
34
+
35
+ ### 🐛 Bug Fixes
36
+ - **Mixer matrix CI timeout** — the 60-seat `mixMatrix` mill test keeps the same gates; the `all` project 30s cap was killing a ~34s PASS on GitHub runners. Per-test timeout is 120s. No `@0xray/foundry` bump.
37
+
38
+ ### 🔄 Changes
39
+
40
+ ### 📚 Documentation
41
+ - docs: Claim C compact 8 — quiz-first no restates (e66ffe11f)
42
+ - docs: mention blip render on the consumer agents card (9cd6662bc)
43
+ - docs: Claim C compact 7 — quiz-first still summarizer keep (931547be6)
44
+ - docs: Claim C compact 6 — summarizer kept canaries, not the old window (a3a6a83a8)
45
+ - docs: Claim C memory protocol — quiz-first, no canary values (b38dcd5d4)
46
+ - docs: Station guide also denies mind-survival overclaim (af7b686ca)
47
+ - docs: compact scores disk, not conversation memory (6cf1d5d2f)
48
+ - docs: Station is survive-the-cut; Repertoire 0.1 is judgment (d87a39d37)
49
+
50
+ ### 🧪 Tests
51
+ - test: Claim C quiz printer and canary leak scan for compact 7 (d1cff2de4)
52
+
9
53
  ---
10
54
 
11
55
  ## [4.0.14] - 2026-09-16
12
56
 
13
57
  ### ✨ Features
58
+ - **Factory-blip music drop** — every genre bed hits on the jewel cut (shared crash + motif answer), stamps the hook cell on the tag, and keeps six tellable bodies. Not a sectionGain fader. Inspect still PASSes. No `@0xray/foundry` bump.
59
+ - **Factory-blip drop seats** — cage recoils then whips (shards off the lantern). Cameras read as different shots (top flattens, low hero-lifts, dutch slashes the floor). Snap still cracks. Looker still eclipses. No `@0xray/foundry` bump.
60
+ - **Factory-blip drop rupture** — orb-cage and snap crack on the turn (gold lantern / held slash through the noun), not a linear spin. Looker wears one large eclipse moon the noun eats. Floor still fades; the punch lives on the jewel. No `@0xray/foundry` bump.
61
+ - **Factory-blip camera seats** — six seed shots (`front` `three-quarter` `top` `low` `dutch` `side`) plus a phrase travel / turn push-in. Cube jewel keeps its faces (quads → tris). Large faces actually fill. Floor fades on the turn. Horizon wash stays cyan/blue (no olive). Inner moons graze the disc so the noun can occlude. Embers stay tethered after the burst. `--camera` overrides; seed picks if omitted. Receipt `visualConfig.mesh.camera`. No `@0xray/foundry` bump.
14
62
  - **Factory-blip prod-grade phrase** — hook/turn/tag now crossfade (`hookEase`/`turnEase`/`tagEase`). Still plates dissolve (~300ms) instead of hard-cutting. Focus orb wears field + mesh mass so two briefs do not clone. Ambient bed writes a 3-section score (turn crash, tag stab, walk on turn). Mill stays deterministic — no LLM in the render loop. No `@0xray/foundry` bump.
15
63
  - **Factory-blip Rippel v2** — 4.44s is a Short: hook → turn → tag on one motion grid for picture and bed. Two looks (`focus` disc-satellites | `cage` Wu+field). Stereo AAC bed with a written motif (not `pick()` soup), better voices, mix pocket. Missing stream or inaudible bed FAILs inspect. No `@0xray/foundry` bump.
16
64
  - **Factory-blip plant** — new factory plant sibling to mill + sound (not a mill copy). `foundry.json` `"plant": "blip"` fastens `blip` + `blip-inspect`. Dynamic motion registry (not a frozen Rippel enum). v0: still + Rippel five (`still` `orb` `swirl` `snap` `waves` `spark`). `kapow` is a growth stub. Still generator wears the Power Plant intro plate (void `#08090B` · ink `#F5F7FA` · cyan `#3DE0E8` · gold `#F5C518` · agent blue `#4A7FD4`). Hangar shop pair later. Brief → seed → still|motion:<id> → 4.44s mp4 → `.xray/blip/receipt.json`. Unknown id FAIL. No `@0xray/foundry` bump.
package/dist/README.md CHANGED
@@ -13,14 +13,14 @@ Not a catalog of agents. The product is the **skeleton you wear**.
13
13
  - **Bone** — three-subsystem OS: Inference · External Governance (Dynamo / Codex) · Autonomous Engine (thinDispatch)
14
14
  - **Always on** — Codex 11 / 29 / 69, destructive shell, no new MCP/skill/handler surface
15
15
  - **Temperament** — `frontier` | `guided` | `strict` | `auto` — how loud the engine is, not whether governance exists
16
- - **Wear** — Grok, OpenCode, Hermes, OpenClaw. One SSOT gate
16
+ - **Wear** — Grok, OpenCode, Hermes, OpenClaw, plus Cursor project hooks. One SSOT gate
17
17
  - **Muscle** — Repertoire: auto-enables when the module resolves; session-start writes a one-line resume so the next station is not born amnesiac
18
18
 
19
19
  ```bash
20
20
  npm install 0xray
21
21
  ```
22
22
 
23
- Consumer `npm install 0xray` auto-wires four platform bridges and seven MCP servers. Repertoire **0.2** is the factory memory organ (vendored): seed primitives, in-process routing, extra host MCP `repertoire`. Not an eighth `xray-*` server. Opt out with `"enabled": false, "provider": "repertoire"`.
23
+ Consumer `npm install 0xray` auto-wires four chat bridges, Cursor project hooks, and seven MCP servers. Repertoire **0.2** is the factory memory organ (vendored): seed primitives, in-process routing, extra host MCP `repertoire`. Not an eighth `xray-*` server. Opt out with `"enabled": false, "provider": "repertoire"`.
24
24
 
25
25
  ## Quick Start
26
26
 
@@ -51,7 +51,7 @@ Docs: [guides/autonomy-command](docs-site/docs/guides/autonomy-command.md) · Sk
51
51
 
52
52
  | Version | Highlights |
53
53
  |---------|------------|
54
- | **Unreleased** | Shop plant first-class (`shop-extract`, `shop-witness`, `shop-pin` + `foundry.json` `shopPlant`). Not `"costume": true`. Root `llms.txt`. Pack→tmp fasten proof. |
54
+ | **Unreleased** | Fasten is **foundry-plant/0**: builtin plant is mill+inspect only. `foundry.json` `"plant": "@0xray/blip"` (aliases `"plant": "blip"` / `"plant": "sound"`) fastens whatever that mill declares (looker / vibe / mixer live in the mill). Nested mill `@0xray/foundry@0.1.12`. CLI shims `foundry blip\|sound` remain (0.1.11+). Shop plant first-class (`shop-extract`, `shop-witness`, `shop-pin` + `foundry.json` `shopPlant`). 0xray stays 4.0.15. |
55
55
  | **4.0.9** | Mill target: postinstall does not mill npm global prefix or `_npx` as a consumer. Isolated HOME skips machine `~/.grok`. |
56
56
  | **4.0.0** | Exo + temperament. Constitution always on; ceremony by host. Repertoire organ on (vendored 0.2). Station card survives compact/host-swap. **On npm.** [vision](docs-site/docs/architecture/v4-vision.md) · [now](docs-site/docs/architecture/v4-now.md) |
57
57
  | **3.4.1** | Unified `install-bridges.cjs` on postinstall — OpenCode, Grok, Hermes, OpenClaw in one pass. All 7 MCPs servers via `npx -y 0xray mcp <cmd>` (no `dist/` paths). Canonical `release.mjs` pipeline. |
@@ -103,11 +103,11 @@ Docs: [guides/autonomy-command](docs-site/docs/guides/autonomy-command.md) · Sk
103
103
  On `npm install 0xray` in a consumer project, postinstall automatically:
104
104
 
105
105
  1. Copies **`AGENTS-consumer.md` → `AGENTS.md`**. Does **not** write consumer-root **`SKILLS.md`**.
106
- 2. Fastens **mill plant** (`mill` + `inspect`). Sound seats: `foundry.json` `"plant": "sound"` fastens the bed factory (`sound` + `sound-inspect`) and turns mill off. Blip seats: `foundry.json` `"plant": "blip"` fastens the tiny-video factory (`blip` + `blip-inspect`) and turns mill off. Not a 45-skill / 42-agent costume dump. `foundry.json` `"costume": true` is the opt-in dump.
106
+ 2. Fastens **mill plant** (`mill` + `inspect`). Fasten is **foundry-plant/0**: builtin plant is mill+inspect only. `foundry.json` `"plant": "@0xray/blip"` (aliases `"plant": "blip"` / `"plant": "sound"`) fastens whatever that mill package declares — organs (looker, vibe, mixer) live in the mill, not an xray catalog. Nested mill `@0xray/foundry@0.1.12`. CLI shims `foundry blip|sound` still exist on foundry 0.1.11+; fasten is the new cut. Not a 45-skill / 42-agent costume dump. `foundry.json` `"costume": true` is the opt-in dump.
107
107
  3. Seeds **`.gitignore`** from `.gitignore.default` (if absent)
108
108
  4. Deploys **`.xray/`** config (`codex.json`, `features.json`, `config.json`) then overlays **their** plant
109
109
  5. Writes project **`.mcp.json`** with 7 MCPs servers (`npx -y 0xray mcp …`)
110
- 6. Installs **4 bridges**: OpenCode, Grok, Hermes, OpenClaw (PPE + wiring; mill plant, not costume)
110
+ 6. Installs **4 chat bridges**: OpenCode, Grok, Hermes, OpenClaw, plus **Cursor** `.cursor/hooks.json` (PPE + wiring; mill plant, not costume)
111
111
  7. Factory shop plant (`shop-extract`, `shop-witness`, `shop-pin` from groover-hangar) may coexist when worn. Extra shops: `foundry.json` `shopPlant`. Not costume.
112
112
  8. Installs git pre-commit hook (non-blocking if not a git repo)
113
113
 
@@ -159,7 +159,7 @@ Pluggable `memory_routing` block in `features.json` (validated by `features.sche
159
159
  "provider": "repertoire",
160
160
  "module_path": "node_modules/@0xray/repertoire/dist/provider/memory-routing-provider.js",
161
161
  "config": {
162
- "signalsPath": "node_modules/@0xray/repertoire/data/curated_signals.json",
162
+ "signalsPath": ".xray/state/repertoire/curated_signals.json",
163
163
  "statePath": ".xray/state/repertoire/inference-state.json",
164
164
  "feedbackDir": ".xray/state/repertoire/feedback"
165
165
  }
@@ -188,6 +188,7 @@ Docs: [memory routing](docs-site/docs/guides/memory-routing.md) · [Repertoire](
188
188
  | **Grok CLI / Build** | `npx 0xray grok install` | Project `.grok/plugins/0xray` (shared HOME does not clobber machine plugin), 7 MCPs servers |
189
189
  | **Hermes Agent** | `npx 0xray hermes install` | `~/.hermes/plugins/xray-hermes`, consumer root marker |
190
190
  | **OpenClaw** | `npx 0xray openclaw install` | `.xray/config/openclaw.json`, skill sync |
191
+ | **Cursor** | postinstall (`installCursorBridge`) | Fastens `.cursor/hooks.json` (preToolUse / preCompact / afterFileEdit). Leaves an existing file alone. Not a fifth chat TUI. |
191
192
 
192
193
  ## Governance & Codex
193
194
 
@@ -202,7 +203,7 @@ Docs: [memory routing](docs-site/docs/guides/memory-routing.md) · [Repertoire](
202
203
  | Suite | Status (v4.0.1) |
203
204
  |-------|-----------------|
204
205
  | Four-floor consumer e2e | OpenCode 34/0 · Grok 63/0 · Hermes 39/0/2 · OpenClaw 96/0/1 (npm 4.0.0 pack) |
205
- | Consumer smoke | `npm run release:gate` — pack → clean install → 7 MCPs + 4 bridges + organ on |
206
+ | Consumer smoke | `npm run release:gate` — pack → clean install → 7 MCPs + 4 chat bridges + Cursor hooks + organ on |
206
207
  | Pack → tmp proof | `npm run pack:tmp-proof` — tgz install + `foundry mint --skip-live` + hangar shops + inspect (no costume dump). Playwright n/a (CLI). |
207
208
 
208
209
  ```bash
package/dist/SKILLS.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  **4.0** — a suit that survives the context window
4
4
 
5
- **45 skills** in this exo catalog. Default consumer plant is **`mill` + `inspect`**, not this dump. `npm install 0xray` does **not** sync 45 skills unless `foundry.json` `"costume": true`. Factory shop plant (`shop-extract`, `shop-witness`, `shop-pin`) coexists with mill plant when a hangar wears those shops. Extra shops: `foundry.json` `shopPlant`. Sound seats: `foundry.json` `"plant": "sound"` (foundry plant, not this catalog). Blip seats: `foundry.json` `"plant": "blip"` (foundry plant, not this catalog). Agent map: [llms.txt](llms.txt).
5
+ **45 skills** in this exo catalog. Default consumer plant is **`mill` + `inspect`**, not this dump. `npm install 0xray` does **not** sync 45 skills unless `foundry.json` `"costume": true`. Factory shop plant (`shop-extract`, `shop-witness`, `shop-pin`) coexists with mill plant when a hangar wears those shops. Extra shops: `foundry.json` `shopPlant`. Fasten is **foundry-plant/0**: builtin plant is mill+inspect only. `foundry.json` `"plant": "@0xray/blip"` (aliases `"plant": "blip"` / `"plant": "sound"`) fastens whatever that mill package declares — organs (looker, vibe, mixer) live in the mill, not this catalog. Nested mill `@0xray/foundry@0.1.12`. CLI shims `foundry blip|sound` still exist on foundry 0.1.11+. Agent map: [llms.txt](llms.txt).
6
6
 
7
7
  xray ships 45 knowledge skills (`src/skills/<name>/SKILL.md`) as the **costume / self-plant catalog**. Lead-dev operating model lives in **`orchestrator`** skill + `multi_agent_orchestration.lead_dev_mode` in features.json. Skills load on demand via the **xray-skills** MCP server (`npx -y 0xray mcp skills`) or when you plant them. This file is the exo catalog — mill does **not** write it to the consumer root.
8
8
 
@@ -76,7 +76,7 @@ xray ships 45 knowledge skills (`src/skills/<name>/SKILL.md`) as the **costume /
76
76
 
77
77
  | Skill | Agent | Description |
78
78
  |-------|-------|-------------|
79
- | `orchestrator` | @orchestrator | Multi-agent coordination + **lead-dev mode** (codex 67–68) |
79
+ | `orchestrator` | @orchestrator | Multi-agent coordination + **lead-dev mode** (codex 67–68) + lead cadence (dispatch four lines; critic Reads SEATS; ship matrix A–D in `LEAD-CADENCE.md`) |
80
80
  | `xray-orchestrator` | — | xray orchestration skill (MCP orchestrator surface) |
81
81
  | `processor-pipeline` | — | Data processing pipeline management |
82
82
  | `boot-orchestrator` | — | Framework boot orchestration |
@@ -150,6 +150,7 @@ npx 0xray skill:install <source>
150
150
  | OpenCode (after setup) | `.opencode/skills/<name>/SKILL.md` |
151
151
  | Grok | project `.grok/plugins/0xray/skills/<name>/SKILL.md` (machine `~/.grok/plugins/0xray` is not last-wins) |
152
152
  | Hermes / OpenClaw | Platform skill dirs (postinstall sync) |
153
+ | Cursor | Project `.cursor/hooks.json` (PPE + Station heat). Not a skill dump. |
153
154
 
154
155
  ## Related features (since 3.1)
155
156
 
@@ -1,10 +1,11 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
3
  import { createRequire } from 'module';
4
+ import { fileURLToPath } from 'node:url';
4
5
  import { frameworkLogger } from '../../core/framework-logger.js';
5
6
  import { syncBuiltinSkills } from './skill-install.js';
6
7
  import { mintAfterWear } from './foundry-mint-wear.js';
7
- const __dirname = path.dirname(new URL(import.meta.url).pathname);
8
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
8
9
  const require = createRequire(import.meta.url);
9
10
  const packageRoot = path.join(__dirname, '..', '..', '..');
10
11
  const millSuit = require(path.join(packageRoot, 'scripts', 'foundry', 'mint-suit.cjs'));
@@ -1,12 +1,13 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
3
  import { createRequire } from 'module';
4
+ import { fileURLToPath } from 'node:url';
4
5
  import { frameworkLogger } from '../../core/framework-logger.js';
5
6
  import { syncBuiltinSkills } from './skill-install.js';
6
7
  import { mintAfterWear } from './foundry-mint-wear.js';
7
8
  import { OpenClawConfigLoader } from '../../integrations/openclaw/config.js';
8
9
  import { writeSuitSessionBoot } from '../../nucleus/suit-temperament.js';
9
- const __dirname = path.dirname(new URL(import.meta.url).pathname);
10
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
10
11
  const require = createRequire(import.meta.url);
11
12
  const millSuit = require(path.join(__dirname, '..', '..', '..', 'scripts', 'foundry', 'mint-suit.cjs'));
12
13
  const wiring = require(path.join(__dirname, '..', '..', '..', 'scripts', 'node', 'bridge-mcp-wiring.cjs'));
@@ -1,10 +1,11 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
3
  import { createRequire } from 'module';
4
+ import { fileURLToPath } from 'node:url';
4
5
  import { frameworkLogger } from '../../core/framework-logger.js';
5
6
  import { syncBuiltinSkills } from './skill-install.js';
6
7
  import { mintAfterWear, wantsCostume } from './foundry-mint-wear.js';
7
- const __dirname = path.dirname(new URL(import.meta.url).pathname);
8
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
8
9
  const require = createRequire(import.meta.url);
9
10
  const wiring = require(path.join(__dirname, '..', '..', '..', 'scripts', 'node', 'bridge-mcp-wiring.cjs'));
10
11
  export function registerOpencodeCommands(opencodeCmd) {
package/dist/cli/index.js CHANGED
@@ -7,11 +7,12 @@
7
7
  import { Command } from "commander";
8
8
  import { execSync, spawn } from "child_process";
9
9
  import { join, resolve } from "path";
10
+ import { fileURLToPath } from "node:url";
10
11
  import { readFileSync, existsSync } from "fs";
11
12
  import { getConfigDir } from "../core/config-paths.js";
12
13
  import { frameworkLogger } from "../core/framework-logger.js";
13
14
  // Get package root relative to this script location
14
- const packageRoot = resolve(join(new URL(".", import.meta.url).pathname, "..", ".."));
15
+ const packageRoot = resolve(fileURLToPath(new URL("../..", import.meta.url)));
15
16
  // Read version dynamically from package.json
16
17
  const packageJsonPath = join(packageRoot, "package.json");
17
18
  const { version } = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
@@ -22,6 +22,10 @@ import {
22
22
  loadDelegationGateFeatures,
23
23
  } from '../../hooks/delegation-gate-runtime.mjs';
24
24
  import { appendHookActivity } from '../../grok/hooks/grok-hook-activity.js';
25
+ import {
26
+ buildRepertoireResume,
27
+ readGitBrief,
28
+ } from '../../hooks/station-hook-runtime.mjs';
25
29
 
26
30
  export const CURSOR_HOST = 'cursor';
27
31
  export const EVENT_CLASS_HOST = 'cursor-host-precompact';
@@ -138,6 +142,11 @@ export function cursorBootNeedsRefresh(existing, root) {
138
142
  if (!existing.suit_profile) return true;
139
143
  if (existing.workspaceRoot && existing.workspaceRoot !== root) return true;
140
144
  if (!existing.stationLine) return true;
145
+ const liveGit = readGitBrief(root);
146
+ const bootHead = existing.git && existing.git.head ? String(existing.git.head) : '';
147
+ if (liveGit && liveGit.head && bootHead !== liveGit.head) return true;
148
+ const liveResume = buildRepertoireResume(root);
149
+ if (liveResume && existing.repertoireResume && liveResume !== existing.repertoireResume) return true;
141
150
  return false;
142
151
  }
143
152
 
@@ -19,10 +19,11 @@ import fs from 'fs';
19
19
  import path from 'path';
20
20
  import { execSync } from 'child_process';
21
21
  import { createRequire } from 'module';
22
+ import { fileURLToPath } from 'node:url';
22
23
  import { syncBuiltinSkills } from '../../cli/commands/skill-install.js';
23
24
  import { mintAfterWear } from '../../cli/commands/foundry-mint-wear.js';
24
25
  // ESM-compatible __dirname (this file is compiled to ESM)
25
- const __dirname = path.dirname(new URL(import.meta.url).pathname);
26
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
26
27
  const packageRoot = path.resolve(__dirname, '..', '..', '..');
27
28
  const requireCjs = createRequire(import.meta.url);
28
29
  const { resolveConsumerTargetDir, patchGrokHooks } = requireCjs(path.join(packageRoot, 'scripts/node/install-bridges.cjs'));
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xray-pre-tool",
3
- "version": "4.0.14",
3
+ "version": "4.0.15",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "0xRay constitution + temperament PreToolUse for OpenClaw",