Skip to content

feat: close CLI/plugin parity gap (Caveman, STE, sub-agent, benchmark toggle, credential scoping) - #51

Draft
keval6b wants to merge 2 commits into
mainfrom
feature/plugin-parity-caveman-ste-subagent-benchmark
Draft

keval6b wants to merge 2 commits into
mainfrom
feature/plugin-parity-caveman-ste-subagent-benchmark

Conversation

@keval6b

@keval6b keval6b commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

Summary

Base branch is #50 (not main) — this depends on that PR's .claude-plugin/plugin.json version fix and the marketplace README section it added, plus #48's Kiro/mcpServers work already merged into that chain. Rebase onto main once #48 and #50 land.

  • Caveman + STE skills, for all three plugins for free: materialized as static files under skills/ (generated from the same installer source constants via new scripts/generate-static-skills.ts) — since Claude Code, Codex, and Cursor all point their plugin manifests at the shared skills/ dir, no manifest changes needed.
  • Dedicated sub-agent (agents/miru-code.md, Claude Code only — no agents field in Codex's/Cursor's plugin schema)
  • Benchmark on/off toggle via userConfig + /plugin configure (Claude Code only — userConfig interpolation is Claude-specific syntax). Required splitting Claude onto its own .claude-plugin/mcp.json so this doesn't leak into Codex's shared mcp.json. src/cli.ts now also accepts --benchmark=true/--benchmark=false, not just the bare flag.
  • Plugin-scoped credentials: Claude and Codex plugins now store auth in their own IDE-managed data directory (${CLAUDE_PLUGIN_DATA} / ${PLUGIN_DATA}) instead of the global per-OS state dir every CLI/IDE install shares today. Deliberate behavior change — plugin installs no longer share auth with a CLI install on the same machine. Documented in the README, not hidden.

Explicitly not done, documented as out of scope:

  • Search hooks — not ported to any plugin, already slated for removal from Miru entirely
  • Cursor MCP wiring — pre-existing gap, Cursor's plugin.json has no mcpServers field at all; flagged in the README comparison table, not fixed here

Full per-IDE breakdown in the updated README section: "What you get from a plugin install vs the CLI".

Test plan

  • bun test — 436 pass (added tests/cli-benchmark-flag.test.ts, spawns the real CLI and confirms --benchmark=true/false/bare all parse correctly via read_benchmark tool presence; extended tests/plugin-manifest.test.ts for the new agents/userConfig/split-mcp.json fields)
  • bun run lint / bun run typecheck clean
  • Local end-to-end: added this checkout as a claude plugin marketplace add <path> test marketplace, installed, confirmed via the on-disk plugin cache that agents/miru-code.md, the new .claude-plugin/mcp.json (with ${user_config.benchmark} interpolation and ${CLAUDE_PLUGIN_DATA} env), and the repointed manifest all resolved exactly as written
  • claude plugin validate .claude-plugin/plugin.json --strict passes (including path-existence checks for agents)

keval6b added a commit that referenced this pull request Sep 10, 2026
If a plugin host fails to expand \${CLAUDE_PLUGIN_DATA}/\${PLUGIN_DATA}
in mcp.json's env block, MIRU_CREDENTIALS_DIR would previously be used
verbatim as a literal directory name off cwd, silently breaking
credential persistence. Fall back to the normal per-OS default in that
case instead. Also adds the missing default:false on the benchmark
userConfig field, per code review on #51.
@404missinglink
404missinglink added this pull request to stack #53 September 15, 2026 14:36
Base automatically changed from docs/plugin-marketplace-install-readme-fixes to main September 15, 2026 14:37
…ark, and credential scoping

Materializes Caveman and STE (previously installer-only, dynamically
generated at `miru install` time) as static skill files under skills/,
generated from the same source constants via a new
scripts/generate-static-skills.ts. Since Claude Code, Codex, and Cursor
all point their plugin manifests at the shared skills/ directory, this
gets all three plugins Caveman + STE for free, no manifest changes
needed.

Also generates a static Claude Code sub-agent (agents/miru-code.md,
reusing the existing per-agent template system) and wires it into
.claude-plugin/plugin.json via the `agents` field — Claude-only, since
neither Codex's nor Cursor's plugin schema (agent-plugins.org) has an
equivalent field.

Gives Claude Code a benchmark on/off toggle via `userConfig` +
`/plugin configure`, which required splitting Claude onto its own
.claude-plugin/mcp.json (userConfig interpolation syntax is
Claude-specific; putting it in the mcp.json shared with Codex would
have broken Codex's invocation). src/cli.ts now also accepts
--benchmark=true/--benchmark=false (userConfig always emits the flag
with a literal value, never omits it), not just the bare flag.

Scopes plugin-installed credentials to each plugin's own persistent
data directory (${PLUGIN_DATA} in the shared root mcp.json for Codex,
${CLAUDE_PLUGIN_DATA} in Claude's own copy) instead of the global
per-OS state dir every CLI/IDE install shares today — plugin installs
now authenticate independently of a CLI install on the same machine.
Documented as a deliberate behavior change in the README, not hidden.

Search hooks intentionally not ported to any plugin — already slated
for removal from Miru entirely, not worth packaging. Cursor's plugin
still has no MCP entry at all (pre-existing gap, documented, not
fixed here — out of scope).
If a plugin host fails to expand \${CLAUDE_PLUGIN_DATA}/\${PLUGIN_DATA}
in mcp.json's env block, MIRU_CREDENTIALS_DIR would previously be used
verbatim as a literal directory name off cwd, silently breaking
credential persistence. Fall back to the normal per-OS default in that
case instead. Also adds the missing default:false on the benchmark
userConfig field, per code review on #51.
@404missinglink
404missinglink force-pushed the feature/plugin-parity-caveman-ste-subagent-benchmark branch from 8ff7745 to 2a8cd6c Compare September 15, 2026 14:37

Copy link
Copy Markdown
Contributor

I think this is worth doing, I don't want the agent calling the CLI because it may flag security prompts in codex and other IDE's

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.

2 participants