Skip to content

Commit bdde218

Browse files
refactor(plugin): collapse host bundles into one plugin/ tree
Merge the byte-duplicated claude-plugin/, codex-plugin/, and cursor-plugin/ trees into a single shared plugin/ tree with per-host manifest overlays, and route all three installers through a new composed embed registry (src/agents/plugin_bundle.rs). Each host still deploys a byte-for-byte identical tree to before — verified by installing every host from the new layout and diffing sha256 hashes against the pre-refactor deploy. Layout (plugin/): - skills/ 17 shared model-invocable skills + 13 canonical (claude/codex form) tracedecay-* workflow dispatchers - overlays/cursor/skills/ 13 Cursor dispatcher slugs (disable-model-invocation form) — deployed by Cursor in place of the canonical dispatchers at the same skills/ deploy path - overlays/cursor/agents/ Cursor-form subagents - agents/ Claude-form subagents - commands/ 13 Claude slash commands - rules/ 2 Cursor .mdc rules - hooks/hooks-<host>.json per-host hook wiring (each deploys as hooks/hooks.json) - .{claude,cursor,codex}-plugin/ host manifests (unchanged deploy contents) - .mcp.json shared Claude/Codex MCP config (byte-identical) - mcp-cursor.json Cursor MCP config (deploys as mcp.json) - README-<host>.md per-host README (deploys as README.md) src/agents/plugin_bundle.rs owns CANONICAL_PLUGIN_FILES plus the per-host manifest slices and composes each installer's deploy set as CANONICAL ∪ <HOST>_MANIFEST. Each PluginFile.relative is the deploy path (unchanged from the legacy bundles); contents are include_str!'d from the shared plugin/ source, whose path may differ (e.g. Cursor's hooks/hooks.json is sourced from plugin/hooks/hooks-cursor.json). cursor.rs/codex.rs/claude.rs drop their per-host EMBEDDED_PLUGIN_FILES tables and consume plugin_bundle::{cursor,codex,claude}_files(); deploy/render/ migrate/doctor logic is unchanged. steering.rs bootstrap include repoints to plugin/skills/using-tracedecay/SKILL.md. Track plugin/.mcp.json past .gitignore; add /plugin/** to the Cargo publish include list (replacing the cursor/codex bundle globs). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 1bd9587 commit bdde218

149 files changed

Lines changed: 1026 additions & 3715 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitattributes

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@ tests/fixtures/** text eol=lf
44
# Force LF for bundled plugin skill docs; the skill hygiene tests assert the
55
# canonical source files are LF-only, and Windows checkout otherwise rewrites
66
# them before the lint runs.
7-
codex-plugin/skills/** text eol=lf
8-
cursor-plugin/skills/** text eol=lf
9-
claude-plugin/** text eol=lf
7+
plugin/** text eol=lf
108
# Force LF for the retained agent source of truth; the bundle byte-identity
11-
# test compares claude-plugin agents against these files and Windows checkout
9+
# test compares plugin agents against these files and Windows checkout
1210
# otherwise rewrites them to CRLF.
1311
src/agents/claude_agents/** text eol=lf
1412
# Force LF for embedded Hermes plugin template assets — they are pulled into

.github/workflows/plugin-validation.yml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ name: Plugin Validation
1212
on:
1313
pull_request:
1414
paths:
15-
- "cursor-plugin/**"
16-
- "codex-plugin/**"
15+
- "plugin/**"
1716
- "tests/fixtures/cursor-schemas/**"
1817
# Plugin/skill test modules (e.g. plugin_manifest_schema_test.rs,
1918
# plugin_skill_contract_test.rs, the skill lint tests).
@@ -65,15 +64,15 @@ jobs:
6564
run: |
6665
npx --no-install ajv validate --spec=draft7 -c ajv-formats --errors=text \
6766
-s tests/fixtures/cursor-schemas/plugin.schema.json \
68-
-d cursor-plugin/.cursor-plugin/plugin.json
67+
-d plugin/.cursor-plugin/plugin.json
6968
7069
# The Codex manifest follows Codex's own layout (e.g. its `interface`
7170
# block), so the Cursor schema does not apply; keep it to a strict JSON
7271
# well-formedness check alongside the other bundle JSON files.
7372
- name: Check bundle JSON files parse
7473
run: |
7574
set -euo pipefail
76-
find cursor-plugin codex-plugin -name '*.json' -print0 |
75+
find plugin -name '*.json' -print0 |
7776
while IFS= read -r -d '' f; do
7877
python3 -c "import json,sys; json.load(open(sys.argv[1]))" "$f" \
7978
|| { echo "invalid JSON: $f" >&2; exit 1; }

.gitignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
.codegraph
44
.tracedecay
55
.mcp.json
6-
!codex-plugin/.mcp.json
7-
!claude-plugin/.mcp.json
6+
!plugin/.mcp.json
87
.claude/
98
.cursor/
109
docs/superpowers

Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@ include = [
2525
"/benches/**",
2626
"/examples/**",
2727
"/benchmarks/queries/default.toml",
28-
"/cursor-plugin/**",
29-
"/codex-plugin/**",
28+
"/plugin/**",
3029
"/vendor/**",
3130
"/dashboard/shell/dist/**",
3231
"/dashboard/holographic/dist/**",

codex-plugin/.mcp.json

Lines changed: 0 additions & 14 deletions
This file was deleted.

codex-plugin/skills/assessing-impact/SKILL.md

Lines changed: 0 additions & 71 deletions
This file was deleted.

codex-plugin/skills/code-health/SKILL.md

Lines changed: 0 additions & 100 deletions
This file was deleted.

0 commit comments

Comments
 (0)