Skip to content

How capa works

capa’s loop is small: edit one capabilities file, apply it, and let the local server handle MCP and credentials. Everything else is fan-out to providers — either into your repo or into a wrap workspace.

capabilities.yaml (or capabilities.json) is the only declaration capa trusts. If a skill, server, rule, hook, or plugin isn’t in the file, capa won’t manage it. Leftover files under .cursor/, .claude/, and similar folders are ignored unless you put them in the file (or use passthrough / bootstrap flows that intentionally write native files).

Secrets stay out of the file: use ${VarName} placeholders. capa resolves them at install time from its credential store or a .env file.

capa install reads the file and writes provider-facing artifacts: skill directories, MCP client entries, rules, hooks, agent instruction blocks, and plugins. Managed entries capa owns are labeled so a later capa clean can remove them without touching hand-authored config.

In the default managed path, install also starts the capa server.

The local server (around localhost:5912) is the runtime hub:

  • MCP endpoints providers connect to
  • Credential prompts via the web UI
  • capa sh tool execution

Lifecycle commands: capa start, capa stop, capa restart, capa status. capa stop also stops active wrap sessions, not just the server process.

flowchart LR
  A[capabilities.yaml] --> B{How do you apply it?}
  B -->|capa install| C[In-repo provider configs]
  B -->|capa wrap| D[Shadow workspace under ~/.capa/workspaces]
  C --> E[capa server :5912]
  D --> E
  B -->|--passthrough| F[Native provider files only]
PathConfig locationcapa proxy / server
Managed installWritten into the real projectYes — server started, MCP managed
WrapShadow workspace; real repo stays cleanYes — wrap session uses capa’s layout
PassthroughNative provider files in the projectNo — skips capa proxy management
  1. Edit capabilities.yaml.
  2. Run capa install (or capa wrap <provider>).
  3. Verify with capa status / capa sh.
  4. Use capa stop when you’re done with the server and any wrap sessions.