Loadout — recommend and apply
Your job: look at THIS project, figure out what it is, and hand the user a short, ranked
loadout of agent extensions worth adding — then apply exactly the ones they choose.
You are a recommender and installer, not a list-dumper. Never paste the whole catalog.
Step 0 — Load the catalog (3 tiers)
Resolve the plugin root first from the directory two levels above this SKILL.md. A host-provided
PLUGIN_ROOT or CLAUDE_PLUGIN_ROOT may be used when available, but the workflow must not depend on
either variable. Refer to the resolved directory as <plugin-root> below.
Read the curated (Tier 1) files fully — they're small and hand-verified:
<plugin-root>/catalog/mcp.json
<plugin-root>/catalog/skills.json
<plugin-root>/catalog/hooks.json
<plugin-root>/catalog/domains.json
<plugin-root>/catalog/community.json (Tier 3, small)
Each item has id, name, description, domains, signals. MCP items carry a config, hook/setting
items a settings object, skill items an install block.
Tier 2 (official marketplace) is large (catalog/ecosystem.json, ~280 entries) — do NOT read it whole.
After you know the project's signals (Step 1), Grep ecosystem.json for those signal tokens to pull only
the handful of official plugins that match. Each is a tier: "official", verified Anthropic-marketplace
plugin installed with the /plugin install <name>@claude-plugins-official command in its install.commands.
Tier meaning: curated = auto-apply safe; official = trusted, install via /plugin; community
(Tier 3) = UNVERIFIED — only surface if the user asks to "discover"/see more, label it clearly, and never
auto-apply it. Items with "optIn": "token-saver" are never in discover or the domain loadout — offer
them only in the separate token-saver step (Step 3).
Step 1 — Profile the project
Detect what the repo is. Be fast and evidence-based — do not ask the user things you can read:
- Languages / frameworks / package managers: look for
package.json (and its deps — react, next,
vue, svelte, express, nestjs, prisma…), requirements.txt, pyproject.toml, go.mod, Cargo.toml,
pom.xml, Gemfile, pubspec.yaml, *.xcodeproj, build.gradle.
- Infra / CI:
Dockerfile, docker-compose*, .github/workflows, *.tf, k8s/helm.
- Data/ML:
*.ipynb, numpy/pandas/torch/tensorflow in deps, wandb/mlflow.
- Research / academic:
*.tex, *.bib, papers/ dir, arxiv in deps.
- Security surface: auth/payment/crypto libs, presence of
.env.
- What's already set up: read existing
.mcp.json, .claude/settings.json,
.claude/settings.local.json, .codex/config.toml, .codex/hooks.json, CLAUDE.md, and AGENTS.md.
Never recommend something already installed.
Use Glob/Grep/Read. Keep it to a handful of targeted checks. Summarize the profile in 2–3 lines.
Step 2 — Match domains and build the loadout
- Score each domain in
domains.json by how many of its signals appear in the profile. A domain
whose signal is "always" (i.e. general) is always in play as the baseline.
- Pick the 1–2 best-matching domains plus
general.
- Union their
loadout id lists. Rank items by: (a) strength of signal match against the project,
(b) curated (Tier 1) over official marketplace (Tier 2), (c) whether the item is broadly useful
(signals includes "always"), (d) not already installed.
- For Tier 2 official plugins: only include when signals are specific (e.g.
react, postgres) —
never flood the list with generic python/package.json matches. Cap official picks at ~2 in the shortlist.
- Drop anything already present in the repo's config. Cap the recommendation at ~6–8 items so the
choice stays easy. Note (don't hide) anything you cut for length.
Step 3 — Present the loadout for selection
First show a tight table so the user can decide informed — one row per item with these columns:
| Item |
Kind |
What it does |
Needs |
| name |
MCP · official/community, hook, or skill |
one plain-language line |
a token / login, or "—" |
Group by kind (MCP / Hooks & settings / Skills). Then use the host's available user-input UI with
multi-select. If it has no multi-select UI, present a numbered list and ask for comma-separated numbers.
Every option must be self-explanatory — a user should never have to guess what a checkbox means:
- label = the item name.
- description =
[kind · official/community] <one-line what it does>. <auth note>. Source: <homepage> —
e.g. [MCP · community] Drives a real browser to test/verify web UIs. No auth. Source: github.com/microsoft/playwright-mcp,
or [MCP · official] Read/write your Notion pages. Needs a Notion integration token. Source: ….
Put the strongest 2–3 picks first and mark the top one "(Recommended)". Always spell out auth/token needs
in the option itself (e.g. "needs a Figma token", "needs a Stripe secret key", "OAuth on first use") so no
one installs something and then hits a wall.
Token-saver opt-in (separate from the stack loadout)
After the main loadout question, always offer token-saver skills in a second, separate
user-input step — never mix them into the domain loadout table or the first multi-select.
- Read
community.json for items with "optIn": "token-saver" (currently caveman).
- These are not stack recommendations — they change how verbose the agent is, not what tools the
project needs. Label them clearly: optional, unverified community, reduces output tokens.
- Use a single-select or yes/no question, e.g. "Add a token-saver skill (terser replies)?" with caveman
as the option. Default is no — user must opt in.
- Never auto-apply token-savers with the main loadout; never include them when the user says "apply all"
unless they explicitly pick the token-saver step.
If a project signal is ambiguous (e.g. no clear framework), ask one short clarifying question about the
project's domain before recommending — don't guess wildly.
Step 4 — Apply what they picked
Apply each selected item by its kind. Always show the exact change and confirm before writing. Determine
the active host from the plugin environment and configuration; if it is ambiguous, ask one concise question.
Merge; never overwrite an existing file wholesale. Prefer project scope unless the user says otherwise.
- MCP items → for Claude Code, merge
config into ./.mcp.json under mcpServers.<id>. For Codex,
merge into ./.codex/config.toml under [mcp_servers.<id>]: use command/args/env for stdio and
url for Streamable HTTP. Create the file if absent.
If the item has "auth": true or an env placeholder like <your-...-token>, tell the user exactly
which token to fill in and where to get it — write the entry but flag the placeholder.
- Hook / setting items → in Claude Code, deep-merge
settings into ./.claude/settings.json. In
Codex, merge hook entries into ./.codex/hooks.json; skip Claude-only settings such as statusLine.
For hooks, append to the matching event array rather than replacing it. Surface each item's note
(dependencies like jq, or platform caveats) so the user isn't surprised.
- Skill items: catalog install commands are Claude Code-specific unless the entry explicitly says
otherwise. Do not offer or run them in Codex merely because the Loadout plugin itself works there.
install.type: "builtin" → nothing to install; tell the user the command to run (e.g. /init,
/code-review) and what it does.
install.type: "plugin" → show the install.commands (e.g. /plugin marketplace add … then
/plugin install …) for the user to run. If the active host is Claude Code and the user explicitly
asks you to install them, use claude plugin marketplace add <repo> then
claude plugin install <name>@<mp> — but only for curated/official items, never for community
(unverified) ones. In other hosts, explain that the catalog command is not portable.
install.type: "manual" / reference → give the homepage link.
After applying, print a short receipt: what was written to which file, what tokens still need filling,
and the exact next commands to run. Suggest npx claude-loadout doctor if any auth placeholders were
written. Remind the user to restart the active host so new MCP servers and hooks load.
Other agents (Cursor, opencode, Gemini, OpenClaw)
MCP servers are portable to these agents; skills and hooks are not currently applied to them.
If the user wants the same MCP servers set up for another agent, tell them to run
npx claude-loadout --target <cursor|opencode|gemini|openclaw|all> in the project — or, if asked,
write that agent's config directly from the catalog's MCP config fields, using the correct file and shape:
Cursor .cursor/mcp.json (mcpServers), Gemini
.gemini/settings.json (mcpServers), opencode opencode.json (mcp.NAME, type: local, command array,
environment), OpenClaw ~/.openclaw/openclaw.json (mcp.servers.NAME). Never write skills/hooks to these.
Guardrails
- Read config before writing it; produce a minimal, valid merge. If you can't safely merge, show the
snippet and let the user paste it.
- Every install command you output must come from the catalog's
install/config fields or official
Claude Code syntax — never invent package names or endpoints.
- Recommend fewer, better. A 6-item loadout the user actually applies beats a 30-item dump they ignore.
1---2name: recommend3description: Profile the current project and recommend a focused, domain-matched loadout of MCP servers, hooks, and skills, then apply only compatible items the user selects. Use when the user wants to set up or optimize a coding agent for a repository.4---56# Loadout — recommend and apply78Your job: look at THIS project, figure out what it is, and hand the user a short, ranked9**loadout** of agent extensions worth adding — then apply exactly the ones they choose.10You are a recommender and installer, not a list-dumper. Never paste the whole catalog.1112## Step 0 — Load the catalog (3 tiers)1314Resolve the plugin root first from the directory two levels above this `SKILL.md`. A host-provided15`PLUGIN_ROOT` or `CLAUDE_PLUGIN_ROOT` may be used when available, but the workflow must not depend on16either variable. Refer to the resolved directory as `<plugin-root>` below.1718Read the curated (Tier 1) files fully — they're small and hand-verified:1920- `<plugin-root>/catalog/mcp.json`21- `<plugin-root>/catalog/skills.json`22- `<plugin-root>/catalog/hooks.json`23- `<plugin-root>/catalog/domains.json`24- `<plugin-root>/catalog/community.json` (Tier 3, small)2526Each item has `id`, `name`, `description`, `domains`, `signals`. MCP items carry a `config`, hook/setting27items a `settings` object, skill items an `install` block.2829**Tier 2 (official marketplace) is large (`catalog/ecosystem.json`, ~280 entries) — do NOT read it whole.**30After you know the project's signals (Step 1), `Grep` `ecosystem.json` for those signal tokens to pull only31the handful of official plugins that match. Each is a `tier: "official"`, verified Anthropic-marketplace32plugin installed with the `/plugin install <name>@claude-plugins-official` command in its `install.commands`.3334Tier meaning: **curated** = auto-apply safe; **official** = trusted, install via `/plugin`; **community**35(Tier 3) = UNVERIFIED — only surface if the user asks to "discover"/see more, label it clearly, and never36auto-apply it. Items with `"optIn": "token-saver"` are **never** in discover or the domain loadout — offer37them only in the separate token-saver step (Step 3).3839## Step 1 — Profile the project4041Detect what the repo is. Be fast and evidence-based — do not ask the user things you can read:4243- **Languages / frameworks / package managers**: look for `package.json` (and its deps — react, next,44 vue, svelte, express, nestjs, prisma…), `requirements.txt`, `pyproject.toml`, `go.mod`, `Cargo.toml`,45 `pom.xml`, `Gemfile`, `pubspec.yaml`, `*.xcodeproj`, `build.gradle`.46- **Infra / CI**: `Dockerfile`, `docker-compose*`, `.github/workflows`, `*.tf`, `k8s`/`helm`.47- **Data/ML**: `*.ipynb`, `numpy`/`pandas`/`torch`/`tensorflow` in deps, `wandb`/`mlflow`.48- **Research / academic**: `*.tex`, `*.bib`, `papers/` dir, `arxiv` in deps.49- **Security surface**: auth/payment/crypto libs, presence of `.env`.50- **What's already set up**: read existing `.mcp.json`, `.claude/settings.json`,51 `.claude/settings.local.json`, `.codex/config.toml`, `.codex/hooks.json`, `CLAUDE.md`, and `AGENTS.md`.52 **Never recommend something already installed.**5354Use Glob/Grep/Read. Keep it to a handful of targeted checks. Summarize the profile in 2–3 lines.5556## Step 2 — Match domains and build the loadout57581. Score each domain in `domains.json` by how many of its `signals` appear in the profile. A domain59 whose signal is `"always"` (i.e. `general`) is always in play as the baseline.602. Pick the 1–2 best-matching domains plus `general`.613. Union their `loadout` id lists. Rank items by: (a) strength of signal match against the project,62 (b) curated (Tier 1) over official marketplace (Tier 2), (c) whether the item is broadly useful63 (`signals` includes `"always"`), (d) not already installed.644. For Tier 2 official plugins: only include when signals are **specific** (e.g. `react`, `postgres`) —65 never flood the list with generic `python`/`package.json` matches. Cap official picks at ~2 in the shortlist.665. Drop anything already present in the repo's config. Cap the recommendation at ~6–8 items so the67 choice stays easy. Note (don't hide) anything you cut for length.6869## Step 3 — Present the loadout for selection7071First show a tight table so the user can decide informed — one row per item with these columns:7273| Item | Kind | What it does | Needs |74| :-- | :-- | :-- | :-- |75| name | MCP · official/community, hook, or skill | one plain-language line | a token / login, or "—" |7677Group by kind (MCP / Hooks & settings / Skills). Then use the host's available user-input UI with78multi-select. If it has no multi-select UI, present a numbered list and ask for comma-separated numbers.79**Every option must be self-explanatory** — a user should never have to guess what a checkbox means:8081- **label** = the item name.82- **description** = `[kind · official/community] <one-line what it does>. <auth note>. Source: <homepage>` —83 e.g. `[MCP · community] Drives a real browser to test/verify web UIs. No auth. Source: github.com/microsoft/playwright-mcp`,84 or `[MCP · official] Read/write your Notion pages. Needs a Notion integration token. Source: …`.8586Put the strongest 2–3 picks first and mark the top one "(Recommended)". Always spell out auth/token needs87in the option itself (e.g. "needs a Figma token", "needs a Stripe secret key", "OAuth on first use") so no88one installs something and then hits a wall.8990### Token-saver opt-in (separate from the stack loadout)9192After the main loadout question, **always** offer token-saver skills in a **second**, separate93user-input step — never mix them into the domain loadout table or the first multi-select.94951. Read `community.json` for items with `"optIn": "token-saver"` (currently caveman).962. These are **not** stack recommendations — they change how verbose the agent is, not what tools the97 project needs. Label them clearly: optional, unverified community, reduces output tokens.983. Use a single-select or yes/no question, e.g. "Add a token-saver skill (terser replies)?" with caveman99 as the option. Default is **no** — user must opt in.1004. Never auto-apply token-savers with the main loadout; never include them when the user says "apply all"101 unless they explicitly pick the token-saver step.102103If a project signal is ambiguous (e.g. no clear framework), ask one short clarifying question about the104project's domain before recommending — don't guess wildly.105106## Step 4 — Apply what they picked107108Apply each selected item by its kind. **Always show the exact change and confirm before writing.** Determine109the active host from the plugin environment and configuration; if it is ambiguous, ask one concise question.110Merge; never overwrite an existing file wholesale. Prefer project scope unless the user says otherwise.111112- **MCP items** → for Claude Code, merge `config` into `./.mcp.json` under `mcpServers.<id>`. For Codex,113 merge into `./.codex/config.toml` under `[mcp_servers.<id>]`: use `command`/`args`/`env` for stdio and114 `url` for Streamable HTTP. Create the file if absent.115 If the item has `"auth": true` or an `env` placeholder like `<your-...-token>`, tell the user exactly116 which token to fill in and where to get it — write the entry but flag the placeholder.117- **Hook / setting items** → in Claude Code, deep-merge `settings` into `./.claude/settings.json`. In118 Codex, merge hook entries into `./.codex/hooks.json`; skip Claude-only settings such as `statusLine`.119 For hooks, append to the matching event array rather than replacing it. Surface each item's `note`120 (dependencies like `jq`, or platform caveats) so the user isn't surprised.121- **Skill items**: catalog install commands are Claude Code-specific unless the entry explicitly says122 otherwise. Do not offer or run them in Codex merely because the Loadout plugin itself works there.123 - `install.type: "builtin"` → nothing to install; tell the user the command to run (e.g. `/init`,124 `/code-review`) and what it does.125 - `install.type: "plugin"` → show the `install.commands` (e.g. `/plugin marketplace add …` then126 `/plugin install …`) for the user to run. **If the active host is Claude Code and the user explicitly127 asks you to install them**, use `claude plugin marketplace add <repo>` then128 `claude plugin install <name>@<mp>` — but only for curated/official items, **never for community129 (unverified) ones**. In other hosts, explain that the catalog command is not portable.130 - `install.type: "manual"` / `reference` → give the `homepage` link.131132After applying, print a short receipt: what was written to which file, what tokens still need filling,133and the exact next commands to run. Suggest `npx claude-loadout doctor` if any auth placeholders were134written. Remind the user to restart the active host so new MCP servers and hooks load.135136## Other agents (Cursor, opencode, Gemini, OpenClaw)137138MCP servers are portable to these agents; skills and hooks are not currently applied to them.139If the user wants the same MCP servers set up for another agent, tell them to run140`npx claude-loadout --target <cursor|opencode|gemini|openclaw|all>` in the project — or, if asked,141write that agent's config directly from the catalog's MCP `config` fields, using the correct file and shape:142Cursor `.cursor/mcp.json` (`mcpServers`), Gemini143`.gemini/settings.json` (`mcpServers`), opencode `opencode.json` (`mcp.NAME`, `type: local`, `command` array,144`environment`), OpenClaw `~/.openclaw/openclaw.json` (`mcp.servers.NAME`). Never write skills/hooks to these.145146## Guardrails147148- Read config before writing it; produce a minimal, valid merge. If you can't safely merge, show the149 snippet and let the user paste it.150- Every install command you output must come from the catalog's `install`/`config` fields or official151 Claude Code syntax — never invent package names or endpoints.152- Recommend fewer, better. A 6-item loadout the user actually applies beats a 30-item dump they ignore.