Skip to content

I3300 — Majordomus installs into Claude Code as one generated plugin carrying its skills, hooks, mods and MCP server

Generate one plugin bundle from the registry (the skills editors/claude.rs projects, the capture and edit-guard hooks, the two mods under share/mods/claude-code, the MCP server entry), stamped with its source digest and the Claude Code version it was verified against, replacing hand-assembled pieces.

BLOCKED wave 1 · p2 · implementation profile · parallel safe

Part of a-provider-carries-the-contract-natively — Each agent client carries the contract through its own extension points, generated once and checked for drift.

Blocked. This issue cannot start until I3322 is done. The status is derived from that, not declared.

Objective

Generate one plugin bundle from the registry (the skills editors/claude.rs projects, the capture and edit-guard hooks, the two mods under share/mods/claude-code, the MCP server entry), stamped with its source digest and the Claude Code version it was verified against, replacing hand-assembled pieces.

Why

Today the Claude integration is four mechanisms installed three ways (.claude/skills by generate, .claude/hooks by capture install, mods copied into .claude/skills, .mcp.json); an adopter cannot install or update it as one thing, and the owner asked for zero-config Claude integration. Critique 2026-10-18: the install mechanism that loads a project plugin with no configuration by the person is unverified, and a plugin installed beside the hand-assembled pieces would capture every prompt twice and connect two MCP servers. The edit-guard wiring and its rollout, which the critique also put here, are split into I3322 and I3323 (one worker, one issue, one pull request); this issue packages the guard once it is wired. Proposed in ADR 0214 (A provider's native extension points carry the contract as generated projections; Majordomus neither embeds nor patches the worker's runtime) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c174#18, chatgpt-majordomus:c194#3, chatgpt-majordomus:c236#4, chatgpt-majordomus:c261#7, chatgpt-majordomus:c048#5, chatgpt-majordomus:c048#6.

Current state

share/mods/claude-code/{majordomus-brief,majordomus-handover} each carry .claude-plugin; editors/claude.rs is verified against Claude Code 2.1 by a constant, not by detection.

Desired state

majordomus generate writes one plugin; generate --check fails on drift; the detected client version is recorded.

Scope

  • apps/majordomus-cli/src/editors/claude.rs
  • share/mods/claude-code
  • apps/majordomus-cli/src/generate.rs
  • lib/capture.sh
  • lib/doctor.sh
  • .mcp.json
  • share/providers.yaml
  • docs/EDITORS.md

Out of scope

  • A marketplace
  • Personal settings or permission modes
  • Hosting or operating a marketplace (ADR 0214); a repo-local marketplace manifest that is generated and drift-gated is a projection, not a marketplace
  • Wiring the edit guard into .claude/settings.json and its rollout to refusal (I3322, I3323)

Dependencies

What waits on this

Acceptance criteria

  • Before any generation, share/providers.yaml records the Claude Code mechanism that loads a project plugin without the person configuring anything, with dated vendor evidence and the detected client version, which replaces the hard-coded VERIFIED_AGAINST constant; if no such mechanism exists, the work stops and the criterion is reworded
  • The plugin is generated deterministically from the registry
  • Installing it yields working skills, hooks and MCP in a fixture
  • A hand edit to a generated file fails the drift gate
  • Once the plugin is installed, capture install removes its own settings.json hooks, its .claude/skills mod copies and any duplicate majordomus MCP entry; doctor reports double wiring; and a fixture yields exactly one capture record and one episode per event
  • Proof is split into a CI-runnable structural case on the generated plugin and provider configuration, and an opt-in end-to-end case (gated like case 2980) run against a dated Claude Code version; both carry case numbers taken from scripts/case-numbers and announced on the board
  • docs/EDITORS.md documents the plugin, its install mechanism and the client version it was verified against

Validation

  • majordomus generate --check
  • cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test editors

Evidence required

  • case_the_claude_code_plugin_is_generated
  • case_the_plugin_loads_in_claude_code_opt_in

Evidence

None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.

Timeline

started
—
verified
—
completed
—

Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.

Canonical record: .ai/repo/project/issues/I3300.yaml. Read it back with majordomus plan show I3300.

Searches the titles and descriptions of every page this site publishes.