Capability Discovery
The pipeline should never invent tools. Before drafting a kit that references
GitHub Actions, Supabase, Codex, or any other external dependency, check what
actually exists.
What we detect
- CLI tools on $PATH:
gh, git, node, go, rustc, cargo,
python3, pip, docker, vercel, supabase, firebase, wrangler,
ffmpeg, playwright, codex, graphify.
- MCP servers: parsed from
.mcp.json in the project root and
~/.claude.json (user level).
- Claude Code plugins: parsed from
~/.claude/plugins/installed_plugins.json.
- Codex: presence of the
codex CLI (enables peer-review commands).
- Knowledge graph: presence of
graphify-out/graph.json (enables the
graphify-integration skill).
Running discovery
node "${CLAUDE_PLUGIN_ROOT}/scripts/cavekit-tools.cjs" discover
Writes .cavekit/capabilities.json:
{
"discovered_at": "2026-04-17T14:22Z",
"cli_tools": {
"gh": true, "git": true, "node": true, "codex": false
},
"mcp_servers": ["codex-reviewer", "graphify"],
"plugins": [],
"codex": { "available": false }
}
How other commands use it
/ck:sketch — reads capabilities before proposing integrations. If a
kit would need a missing tool, it either adds a "Setup" task to the build
site or asks the user whether to proceed without it.
/ck:map — flags tasks that depend on missing capabilities as
blocked: setup-required.
/ck:make — refuses to dispatch subagents that require a missing MCP
server.
/ck:check — includes a "Capability Coverage" section in the inspect
report.
When to re-run
- After installing a new CLI tool.
- After adding or removing an MCP server.
- At the start of every new project (via
/ck:init).
- Whenever a task fails with "command not found".
The file is cheap to regenerate — always discover, never guess.
What we deliberately do not detect
- Network-accessible APIs behind credentials. Availability is not reachability;
kits should record credentials as a separate concern (never committed).
- IDE extensions. They are not scriptable from the loop and would create false
assurances.
- Language versions. Version-pinning is the project's responsibility
(package.json / go.mod / pyproject.toml); discovery only confirms
executables exist.
Source: hashgraph-online/awesome-codex-plugins → plugins/JuliusBrussee/blueprint/skills/capability-discovery/SKILL.md
1---2name: capability-discovery3description: | Detect which MCP servers, Claude Code plugins, and CLI tools are available in the current environment, so kits and build sites can bind to real capabilities instead of imagined ones. Runs via /ck:init --tools-only or `cavekit-tools.cjs discover`. Writes .cavekit/capabilities.json. Trigger phrases: "what do we have available", "what's installed", "detect tools", "can we use X", "setup tools".4---567# Capability Discovery89The pipeline should never invent tools. Before drafting a kit that references10GitHub Actions, Supabase, Codex, or any other external dependency, check what11actually exists.1213## What we detect1415- **CLI tools on $PATH**: `gh`, `git`, `node`, `go`, `rustc`, `cargo`,16 `python3`, `pip`, `docker`, `vercel`, `supabase`, `firebase`, `wrangler`,17 `ffmpeg`, `playwright`, `codex`, `graphify`.18- **MCP servers**: parsed from `.mcp.json` in the project root and19 `~/.claude.json` (user level).20- **Claude Code plugins**: parsed from `~/.claude/plugins/installed_plugins.json`.21- **Codex**: presence of the `codex` CLI (enables peer-review commands).22- **Knowledge graph**: presence of `graphify-out/graph.json` (enables the23 `graphify-integration` skill).2425## Running discovery2627```bash28node "${CLAUDE_PLUGIN_ROOT}/scripts/cavekit-tools.cjs" discover29```3031Writes `.cavekit/capabilities.json`:3233```json34{35 "discovered_at": "2026-04-17T14:22Z",36 "cli_tools": {37 "gh": true, "git": true, "node": true, "codex": false38 },39 "mcp_servers": ["codex-reviewer", "graphify"],40 "plugins": [],41 "codex": { "available": false }42}43```4445## How other commands use it4647- **`/ck:sketch`** — reads capabilities before proposing integrations. If a48 kit would need a missing tool, it either adds a "Setup" task to the build49 site or asks the user whether to proceed without it.50- **`/ck:map`** — flags tasks that depend on missing capabilities as51 `blocked: setup-required`.52- **`/ck:make`** — refuses to dispatch subagents that require a missing MCP53 server.54- **`/ck:check`** — includes a "Capability Coverage" section in the inspect55 report.5657## When to re-run5859- After installing a new CLI tool.60- After adding or removing an MCP server.61- At the start of every new project (via `/ck:init`).62- Whenever a task fails with "command not found".6364The file is cheap to regenerate — always discover, never guess.6566## What we deliberately do not detect6768- Network-accessible APIs behind credentials. Availability is not reachability;69 kits should record credentials as a separate concern (never committed).70- IDE extensions. They are not scriptable from the loop and would create false71 assurances.72- Language versions. Version-pinning is the project's responsibility73 (package.json / go.mod / pyproject.toml); discovery only confirms74 executables exist.7576---7778**Source:** [`hashgraph-online/awesome-codex-plugins`](https://github.com/hashgraph-online/awesome-codex-plugins) → `plugins/JuliusBrussee/blueprint/skills/capability-discovery/SKILL.md`