|
| 1 | +# Bundles: mostly the same directory, twice |
| 2 | + |
| 3 | +A Claude Code plugin and a Gemini CLI extension turn out to be nearly the same thing |
| 4 | +underneath two different manifests: |
| 5 | + |
| 6 | +| part | Claude Code plugin | Gemini CLI extension | | |
| 7 | +|---|---|---|---| |
| 8 | +| skill | `skills/<name>/SKILL.md` | `skills/<name>/SKILL.md` | identical | |
| 9 | +| subagent | `agents/<name>.md` | `agents/<name>.md` | identical | |
| 10 | +| hooks | `hooks/hooks.json` | `hooks/hooks.json` | identical | |
| 11 | +| command | `commands/<name>.md` | `commands/<name>.toml` | same folder, different format | |
| 12 | +| manifest | `.claude-plugin/plugin.json` | `gemini-extension.json` | different | |
| 13 | + |
| 14 | +So one directory serves both, and the real work is the second manifest and writing the |
| 15 | +commands twice. VS Code has no bundle format at all — parts are found by location, so |
| 16 | +committing the file *is* the install — and it reads several of Claude Code's own folders |
| 17 | +natively: `.claude/skills`, `.claude/agents`, `.claude/rules`, and hooks straight out of |
| 18 | +`.claude/settings.json`. |
| 19 | + |
| 20 | +```bash |
| 21 | +agentseam packaging |
| 22 | +``` |
| 23 | + |
| 24 | +...prints each layout, the templates shared by more than one agent, and which folders an |
| 25 | +agent reads that belong to somebody else. That last line matters in both directions: a |
| 26 | +repo shipping `.claude/skills` is already shipping skills to VS Code, intended or not. |
| 27 | + |
| 28 | +`plan(agent, bundle)` renders a bundle into the exact files an agent expects, and — as |
| 29 | +with permissions — hands back what the format cannot hold, with a reason specific to that |
| 30 | +agent. Gemini can't take a `.mcp.json`, but not because it lacks MCP: it declares servers |
| 31 | +in the manifest instead, and saying "no MCP support" would be as wrong as saying nothing. |
0 commit comments