feat: close CLI/plugin parity gap (Caveman, STE, sub-agent, benchmark toggle, credential scoping) - #51
Draft
keval6b wants to merge 2 commits into
Draft
feat: close CLI/plugin parity gap (Caveman, STE, sub-agent, benchmark toggle, credential scoping)#51keval6b wants to merge 2 commits into
keval6b wants to merge 2 commits into
Conversation
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
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
force-pushed
the
feature/plugin-parity-caveman-ste-subagent-benchmark
branch
from
September 15, 2026 14:37
8ff7745 to
2a8cd6c
Compare
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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Base branch is #50 (not main) — this depends on that PR's
.claude-plugin/plugin.jsonversion fix and the marketplace README section it added, plus #48's Kiro/mcpServers work already merged into that chain. Rebase ontomainonce #48 and #50 land.skills/(generated from the same installer source constants via newscripts/generate-static-skills.ts) — since Claude Code, Codex, and Cursor all point their plugin manifests at the sharedskills/dir, no manifest changes needed.agents/miru-code.md, Claude Code only — noagentsfield in Codex's/Cursor's plugin schema)userConfig+/plugin configure(Claude Code only —userConfiginterpolation is Claude-specific syntax). Required splitting Claude onto its own.claude-plugin/mcp.jsonso this doesn't leak into Codex's sharedmcp.json.src/cli.tsnow also accepts--benchmark=true/--benchmark=false, not just the bare flag.${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:
plugin.jsonhas nomcpServersfield at all; flagged in the README comparison table, not fixed hereFull per-IDE breakdown in the updated README section: "What you get from a plugin install vs the CLI".
Test plan
bun test— 436 pass (addedtests/cli-benchmark-flag.test.ts, spawns the real CLI and confirms--benchmark=true/false/bare all parse correctly viaread_benchmarktool presence; extendedtests/plugin-manifest.test.tsfor the newagents/userConfig/split-mcp.jsonfields)bun run lint/bun run typecheckcleanclaude plugin marketplace add <path>test marketplace, installed, confirmed via the on-disk plugin cache thatagents/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 writtenclaude plugin validate .claude-plugin/plugin.json --strictpasses (including path-existence checks foragents)