0xray 4.0.14 → 4.0.16

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 (73) hide show
  1. package/.grok-plugin/plugin.json +1 -1
  2. package/.opencode/init.sh +14 -4
  3. package/.opencode/skills/orchestrator/SKILL.md +20 -1
  4. package/.xray/features.json +2 -2
  5. package/AGENTS-consumer.md +10 -5
  6. package/AGENTS.md +10 -7
  7. package/README.md +8 -7
  8. package/SKILLS.md +3 -2
  9. package/dist/AGENTS.md +10 -7
  10. package/dist/CHANGELOG.md +71 -0
  11. package/dist/README.md +8 -7
  12. package/dist/SKILLS.md +3 -2
  13. package/dist/cli/commands/hermes-install.js +2 -1
  14. package/dist/cli/commands/openclaw-install.js +2 -1
  15. package/dist/cli/commands/opencode-install.js +2 -1
  16. package/dist/cli/commands/validate.d.ts +26 -0
  17. package/dist/cli/commands/validate.js +164 -0
  18. package/dist/cli/index.js +6 -13
  19. package/dist/integrations/cursor/hooks/cursor-hook-utils.js +11 -0
  20. package/dist/integrations/grok/grok-cli.js +2 -1
  21. package/dist/integrations/hooks/station-hook-runtime.cjs +23 -2
  22. package/dist/integrations/hooks/station-hook-runtime.mjs +2 -0
  23. package/dist/integrations/openclaw/plugin/xray-pre-tool/package.json +1 -1
  24. package/dist/reporting/log-parser.js +2 -2
  25. package/dist/skills/orchestrator/SKILL.md +20 -1
  26. package/llms.txt +8 -7
  27. package/package.json +2 -1
  28. package/scripts/foundry/CHANGELOG.md +33 -1
  29. package/scripts/foundry/README.md +12 -5
  30. package/scripts/foundry/assert-packed-dist-cli.mjs +6 -0
  31. package/scripts/foundry/blip-kapow.cjs +2 -0
  32. package/scripts/foundry/blip-looker.cjs +2 -0
  33. package/scripts/foundry/blip-render.cjs +2 -1237
  34. package/scripts/foundry/blip-rippel-organs.cjs +2 -0
  35. package/scripts/foundry/blip-rippel.cjs +2 -1963
  36. package/scripts/foundry/blip-scene.cjs +2 -0
  37. package/scripts/foundry/blip-stroke.cjs +2 -0
  38. package/scripts/foundry/blip-vibe.cjs +2 -0
  39. package/scripts/foundry/blip.mjs +23 -97
  40. package/scripts/foundry/cli.mjs +2 -2
  41. package/scripts/foundry/inspect.mjs +62 -19
  42. package/scripts/foundry/mill-plant.cjs +598 -0
  43. package/scripts/foundry/mint-suit.cjs +189 -99
  44. package/scripts/foundry/package.json +12 -1
  45. package/scripts/foundry/plant/agents/blip-inspect.yml +1 -1
  46. package/scripts/foundry/plant/agents/blip-looker.yml +5 -0
  47. package/scripts/foundry/plant/agents/blip-vibe.yml +5 -0
  48. package/scripts/foundry/plant/agents/blip.yml +1 -1
  49. package/scripts/foundry/plant/agents/inspect.yml +1 -1
  50. package/scripts/foundry/plant/agents/mill.yml +1 -1
  51. package/scripts/foundry/plant/agents/sound-inspect.yml +1 -1
  52. package/scripts/foundry/plant/agents/sound-mixer.yml +5 -0
  53. package/scripts/foundry/plant/agents/sound.yml +1 -1
  54. package/scripts/foundry/plant/motions/MOTION-REGISTRY.md +15 -9
  55. package/scripts/foundry/plant/motions/registry.json +5 -4
  56. package/scripts/foundry/plant/skills/blip/SKILL.md +4 -4
  57. package/scripts/foundry/plant/skills/blip-inspect/SKILL.md +2 -2
  58. package/scripts/foundry/plant/skills/blip-looker/SKILL.md +30 -0
  59. package/scripts/foundry/plant/skills/blip-vibe/SKILL.md +30 -0
  60. package/scripts/foundry/plant/skills/inspect/SKILL.md +2 -2
  61. package/scripts/foundry/plant/skills/sound/SKILL.md +3 -1
  62. package/scripts/foundry/plant/skills/sound-inspect/SKILL.md +1 -1
  63. package/scripts/foundry/plant/skills/sound-mixer/SKILL.md +28 -0
  64. package/scripts/foundry/sound-bed.cjs +2 -454
  65. package/scripts/foundry/sound-mixer.cjs +2 -0
  66. package/scripts/foundry/sound-rippel.cjs +2 -1434
  67. package/scripts/foundry/sound-taste.cjs +2 -0
  68. package/scripts/foundry/sound-voice.cjs +2 -0
  69. package/scripts/foundry/sound.mjs +23 -81
  70. package/scripts/node/install-bridges.cjs +39 -4
  71. package/src/integrations/openclaw/plugin/xray-pre-tool/package.json +1 -1
  72. package/src/skills/orchestrator/SKILL.md +20 -1
  73. 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.16",
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",
package/.opencode/init.sh CHANGED
@@ -35,8 +35,15 @@ XRAY_VERSION=$(node -e "console.log(require('$FRAMEWORK_ROOT/package.json').vers
35
35
  # Dedup guard — prevent duplicate runs during startup
36
36
  # Uses a TTL lockfile (10s window) since OpenCode may trigger config hook
37
37
  # from multiple plugin copies in quick succession
38
- # Key by PROJECT_ROOT (md5) so all invocations in the same project share one lock
39
- LOCK_KEY=$(echo -n "$PROJECT_ROOT" | md5 | cut -c1-16)
38
+ # Key by PROJECT_ROOT so all invocations in the same project share one lock.
39
+ # md5 is macOS; Linux has md5sum. Do not fail the boot on a leftover Mac tool.
40
+ if command -v md5 >/dev/null 2>&1; then
41
+ LOCK_KEY=$(echo -n "$PROJECT_ROOT" | md5 | cut -c1-16)
42
+ elif command -v md5sum >/dev/null 2>&1; then
43
+ LOCK_KEY=$(echo -n "$PROJECT_ROOT" | md5sum | awk '{print $1}' | cut -c1-16)
44
+ else
45
+ LOCK_KEY=$(echo -n "$PROJECT_ROOT" | cksum | awk '{print $1}')
46
+ fi
40
47
  LOCK_FILE="/tmp/xray-init-${LOCK_KEY}.lock"
41
48
  LOCK_TTL=10
42
49
  if [ -f "$LOCK_FILE" ]; then
@@ -123,8 +130,11 @@ else
123
130
  PLUGIN_STATUS="❌"
124
131
  fi
125
132
 
126
- # Framework config check
127
- if [ ! -f "$PROJECT_ROOT/.opencode/enforcer-config.json" ]; then
133
+ # Framework config check — consumer wear is .xray/codex.json, not leftover enforcer-config.json
134
+ if [ ! -f "$PROJECT_ROOT/.opencode/enforcer-config.json" ] \
135
+ && [ ! -f "$PROJECT_ROOT/.xray/codex.json" ] \
136
+ && [ ! -f "$PROJECT_ROOT/node_modules/0xray/.xray/codex.json" ] \
137
+ && [ ! -f "$PROJECT_ROOT/.mcp.json" ]; then
128
138
  echo -e "${PURPLE}// ❌ Framework configuration not found //${NC}"
129
139
  exit 1
130
140
  fi
@@ -58,4 +58,23 @@ 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:** stay logged in (do not `npm logout`). Every time run `npm publish --access public` in the live TTY. Paste the clickable `auth/cli` URL. No Enter, no VM browser, no subagent, no 6-digit code in chat. Poll `npm view` until live. Then prove **fresh** and **upgrade** registry installs. `npx 0xray validate` is the wear check (not leftover init.sh). `npm view` is not an install.
72
+ - **Peer boot:** four-line dispatch. They Read Station + this cadence and install without a command novel. Not a twin critic.
73
+ - **Live tick, not pacer:** `/loop` runs work now. Keep workstreams moving. Do not idle-wait 12 minutes.
74
+ - **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`.
75
+ - **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.
76
+ - **Close:** loop until Station is done. Compact: Station survives the cut. Repertoire keeps names.
77
+ - **Board:** critic Strict comments; forge implements; lead stays main thread.
78
+ - **Codex 69:** rewire this skill and existing ops. Do not add a new `SKILL.md` to hold the cadence.
79
+ - **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.
80
+ - **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.16",
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,82 @@ 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
+ - **Publish OTP latch** — stay logged in (do not `npm logout`). Every time run `npm publish --access public` in the live TTY (no `--auth-type=web`, no `--otp=` from chat, no `tee`). Paste the clickable `auth/cli` URL. Do not ask for a 6-digit authenticator code in chat. Do not press Enter. Do not hand publish to a browser subagent. Poll `npm view` until the version is live. Then prove **fresh** and **upgrade** registry installs. `npm view` is not an install.
21
+ - **`npx 0xray validate` cleansed** — no longer shells leftover `.opencode/init.sh` (macOS `md5` + `enforcer-config.json`). Wear check: `REQUIRED_PACK_PATHS`, Cursor hooks, mill+inspect, repertoire. `init.sh` still boots OpenCode but accepts Linux `md5sum` and consumer `.xray/codex.json`.
22
+ - **Swamp reflection (new arch)** — `docs/reflections/swamp-new-arch-reflection-2026-09-20.md`. Card, organ, hook. Lying metal. Live tarball lag.
23
+
24
+ ### 🔄 Changes
25
+ - **Durable Hold npm** — heat + `cursorBootNeedsRefresh` + `npx 0xray validate` drop/fail `Hold npm` on Station. Identity stays. Mill-gate holds the ship latch. Not a new skill.
26
+ - **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.
27
+ - **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.
28
+ - **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.
29
+
30
+ ---
31
+
32
+ ## [4.0.16] - 2026-09-20
33
+
34
+ ### 🔄 Changes
35
+
36
+ ### 🐛 Bug Fixes
37
+ - fix: type validate pack paths — no untyped mjs import in src/cli (ff936b276)
38
+ - fix: cleanse npx 0xray validate — wear check, not leftover init.sh (741cca410)
39
+
40
+ ### 📚 Documentation
41
+ - docs: new-arch reflection after wading part of the swamp (12d1fff69)
42
+ - docs: persist peer-boot seat bc-49e17122 after four-line wear (5c8be98bb)
43
+ - docs: encode registry install as live-verify after npm view (bd32bd1c4)
44
+ - docs: encode npm CLI OTP latch — lead publishes, no subagent (d600d12a2)
45
+
46
+ ### 🔎 Other Changes
47
+ - Merge branch 'cursor/npm-cli-otp-fbe0' — OTP latch, two-path live-verify, cleanse leftover validate (568797952)
48
+
49
+ ---
50
+
51
+ ## [4.0.15] - 2026-09-17
52
+
53
+ ### ✨ Features
54
+ - **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.
55
+ - **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.
56
+ - **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.
57
+
58
+ ### 🐛 Bug Fixes
59
+ - **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.
60
+
61
+ ### 🔄 Changes
62
+
63
+ ### 📚 Documentation
64
+ - docs: Claim C compact 8 — quiz-first no restates (e66ffe11f)
65
+ - docs: mention blip render on the consumer agents card (9cd6662bc)
66
+ - docs: Claim C compact 7 — quiz-first still summarizer keep (931547be6)
67
+ - docs: Claim C compact 6 — summarizer kept canaries, not the old window (a3a6a83a8)
68
+ - docs: Claim C memory protocol — quiz-first, no canary values (b38dcd5d4)
69
+ - docs: Station guide also denies mind-survival overclaim (af7b686ca)
70
+ - docs: compact scores disk, not conversation memory (6cf1d5d2f)
71
+ - docs: Station is survive-the-cut; Repertoire 0.1 is judgment (d87a39d37)
72
+
73
+ ### 🧪 Tests
74
+ - test: Claim C quiz printer and canary leak scan for compact 7 (d1cff2de4)
75
+
9
76
  ---
10
77
 
11
78
  ## [4.0.14] - 2026-09-16
12
79
 
13
80
  ### ✨ Features
81
+ - **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.
82
+ - **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.
83
+ - **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.
84
+ - **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
85
  - **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
86
  - **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
87
  - **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) {