Skip to content

feat(claude): proper Claude Code plugin bundle + 30-skill cross-surface sync - #248

Merged
ScriptedAlchemy merged 3 commits into
masterfrom
feat/claude-plugin-bundle
Jul 3, 2026
Merged

feat(claude): proper Claude Code plugin bundle + 30-skill cross-surface sync#248
ScriptedAlchemy merged 3 commits into
masterfrom
feat/claude-plugin-bundle

Conversation

@ScriptedAlchemy

Copy link
Copy Markdown
Owner

What

Replaces the config-managed Claude integration with a real Claude Code plugin bundle, and syncs the skill catalog across all three bundling surfaces (Claude / Codex / Cursor).

Claude plugin bundle (claude-plugin/)

Full native Claude Code plugin surface, installed via a local directory marketplace under ~/.claude/plugins/marketplaces/tracedecay/:

  • .claude-plugin/{plugin.json,marketplace.json}, .mcp.json, hooks/hooks.json (5 events), agents/ (3 subagents), commands/ (13 slash commands), skills/
  • installer deploys the embedded bundle, registers the marketplace, sets enabledPlugins["tracedecay@tracedecay"]
  • migrates existing installs off the old config-managed MCP entry / 5 hooks / loose subagents, while preserving the 98-tool permission allowlist, CLAUDE.md rules, and any foreign MCP servers/hooks/user subagents
  • doctor validates the deployed bundle and warns on stale config-managed leftovers

Cross-surface skill sync

All three surfaces now ship the same 30 skills: 13 foundational + 13 tracedecay-* workflow + 4 new memory skills (storing-project-memory, retrieving-project-memory, managing-session-context, retrieving-cached-context). Foundational + memory (17) are byte-identical across all three; workflow skills are byte-identical Claude↔Codex (Cursor keeps its native disable-model-invocation dispatcher form). CURSOR_PLUGIN_SKILLS updated to the 17 model-invocable set.

Verification

  • cargo fmt/clippy --all-targets -D warnings/build clean
  • Full cargo test: every suite green — lib 771, agent_suite 418, dashboard_api 53, automation_runner 131, mcp 307, storage 255, extraction 689, + others; all embedded-file-list/parity/lint/coverage invariants pass
  • Installer smoke-test 11/11: real install --agent claude against a seeded old config-managed HOME → marketplace registered, plugin enabled, 30 skills + 13 commands deployed, old tracedecay MCP/hook/loose-subagent migrated away, foreign MCP/hook/user-subagent preserved

Caught and fixed a real regression during reconcile (local_mcp_has_tracedecay local-export signal). One pre-existing parallel-test PATH flake (git-worktree hook tests) is out of scope and flagged separately.

🤖 Generated with Claude Code

@changeset-bot

changeset-bot Bot commented Jul 3, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 893d00d

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

ScriptedAlchemy and others added 3 commits July 3, 2026 19:15
Replace the config-managed Claude integration (hand-patched MCP entry,
5 hooks, loose subagents in ~/.claude/) with a real Claude Code plugin
bundle installed via a local `directory` marketplace under
~/.claude/plugins/marketplaces/tracedecay/.

- new claude-plugin/ bundle: .claude-plugin/{plugin.json,marketplace.json},
  .mcp.json, hooks/hooks.json (5 events), agents/ (3 subagents),
  commands/ (13 slash commands), and skills/
- full Claude Code surface: MCP + hooks + subagents + slash commands + skills
- installer deploys the embedded bundle, registers the directory marketplace,
  and sets enabledPlugins["tracedecay@tracedecay"]; migrates existing installs
  off the old config-managed MCP/hooks/loose-subagents while preserving the
  tool-permission allowlist, CLAUDE.md rules, and any foreign entries
- cross-surface skill sync: all three bundling surfaces (claude/codex/cursor)
  now ship the same 30 skills — 13 foundational + 13 tracedecay-* workflow +
  4 new memory skills (storing/retrieving-project-memory,
  managing-session-context, retrieving-cached-context), byte-identical where
  each host's format allows; CURSOR_PLUGIN_SKILLS updated to the 17
  model-invocable set
- doctor validates the deployed bundle + warns on stale config-managed leftovers

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
.gitignore ignores .mcp.json globally with a negation only for
codex-plugin; claude-plugin/.mcp.json was therefore untracked, so
include_str!("../../claude-plugin/.mcp.json") in src/agents/claude.rs
failed to compile on a fresh clone (CI). Add the negation and commit
the file (byte-identical to codex-plugin/.mcp.json).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The skill-hygiene test asserts the claude-plugin bundle files are
byte-identical to the codex source, but .gitattributes only forced LF
for codex-plugin/ and cursor-plugin/. On Windows the claude-plugin
tree checks out CRLF, so claude_bundle_skills_stay_byte_identical_to_the_codex_source
fails. Cover claude-plugin/** too.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ScriptedAlchemy
ScriptedAlchemy force-pushed the feat/claude-plugin-bundle branch from 7c537df to 893d00d Compare July 3, 2026 19:17
@ScriptedAlchemy
ScriptedAlchemy merged commit 21ba759 into master Jul 3, 2026
16 checks passed
@ScriptedAlchemy
ScriptedAlchemy deleted the feat/claude-plugin-bundle branch July 4, 2026 01:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant