Capabilities Manager logo

Capabilities Manager

Organization
infragate
capabilities-manager

Manage capa CLI configuration — `capabilities.yaml` / `capabilities.json`, skills, MCP servers, tools, hooks, sub-agents, rules, plugins, AGENTS.md / CLAUDE.md, security options, tool exposure modes, `capa wrap` shadow workspaces, `--passthrough` native writes, registries (including Claude marketplaces), activity traces, and the local Web UI. Use whenever the user edits the capabilities file, runs any `capa` command (init, install, add, wrap, clean, sh, start/stop/restart/status, auth, upgrade, cache, registry), wires up an MCP server, adds a skill from GitHub / GitLab / a registry / a remote URL / a local path, configures secrets via `${VarName}` placeholders, installs lifecycle hooks, defines sub-agents, or troubleshoots a failed install. Use even when the user only names a fragment ("add a skill", "wire up brave search", "wrap cursor", "block this phrase in skills") without saying "capa" — if a `capabilities.yaml` or `capabilities.json` lives at the project root, this is almost certainly the right skill. If the project does NOT yet have a capabilities file, point at the `bootstrap` skill instead.

Overview

Publisherinfragate
Repositorycapa
Skill namecapabilities-manager
Stars
724
Forks
96
Bundled files
5
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 5 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by infragate on GitHub. Read the source before you install it.

Installation

Install the Capabilities Manager AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/infragate/capa/tree/main/skills/capabilities-manager
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/infragate/capa.git /tmp/capa
mkdir -p .claude/skills
cp -r /tmp/capa/skills/capabilities-manager .claude/skills/capabilities-manager
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Capabilities Manager in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Capabilities Manager on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Capabilities Manager is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Capabilities Manager

The capa CLI keeps a single source-of-truth file — capabilities.yaml (or .json) — that describes everything an agent can do in this project: skills, MCP servers, tools, hooks, sub-agents, rules, plugins, and per-provider files (AGENTS.md, CLAUDE.md). Editing that file and running the right capa command is the whole loop.

This skill is the routing layer for that loop. The actual command reference, schema, full YAML examples, and troubleshooting tables live in references/. Load the one you need rather than re-deriving its contents — they are kept up to date and are the authoritative source.

How capa works (one screen)

  1. The file is the source of truth. capabilities.yaml declares what gets installed. Capa never auto-discovers anything from .claude/, .cursor/, etc. — if it's not in the file, capa won't manage it. (Onboarding an already-configured project is the bootstrap skill's job.)
  2. capa install writes everything. Skill directories under each provider, MCP client config (.mcp.json, .cursor/mcp.json, etc.), AGENTS.md / CLAUDE.md blocks, hook entries, rules — all rewritten from the file. Anything labeled name: capa:<id> is capa's; entries the user authored by hand are left alone. Plugins unpack into the same primitives (skills, servers, rules, sub-agents, hooks).
  3. capa clean removes only what capa wrote. Safe to run; doesn't touch user-authored files or settings entries. Passthrough writes (capa add --passthrough / capa install --passthrough) are not managed — capa clean will not remove them.
  4. A background server at localhost:5912 handles credential prompts, tool execution (capa sh), MCP endpoints, the Web UI capabilities editor, registries, and the Activity feed. Started by capa init / capa install; lifecycle is capa start | stop | restart | status.
  5. Secrets are ${VarName} placeholders anywhere in the file. Capa prompts for them via web UI on install, or loads from .env with capa install -e.
  6. capa wrap <provider> runs the agent from a shadow workspace under ~/.capa/workspaces/ so provider dirs never pollute the real repo. Mutating commands refuse to run inside a wrap workspace — always edit/install from the real project path.

Routing — load the reference that matches the task

If the user is…Read firstThen
Running a CLI command (init/install/add/wrap/clean/sh/server/auth/cache/registry/upgrade) or asking what flags existreferences/commands.mdRun the command and report results
Editing the file — adding a skill, server, tool, hook, sub-agent, rule, plugin, agents block, security / activity settingreferences/capabilities-schema.mdEdit capabilities.yaml; run capa install
Asking how to wire up a common pattern (web search, wrap, passthrough, on-demand mode, plugins, registries, etc.)references/workflows-and-examples.mdAdapt the closest example
Hitting an install error, wrap failure, credential prompt issue, server crash, missing tools, stale cache, TLS error, blocked phrasereferences/troubleshooting.mdApply the diagnostic flow listed for that symptom

The references are sized for selective reads (each ≤ ~600 lines, with table-of-contents at the top of the larger ones). Don't load all four if only one applies.

Pitfalls worth heading off

These are the mistakes an agent makes when it improvises the YAML instead of consulting the schema. Skim them before writing or editing a capabilities file.

@ vs :: in def.repo

The repo string used by skills, rules, plugins, hook sources, and agent snippets has two grammars with different resolution semantics:

  • owner/repo@<basename> — capa searches the repo recursively for an entry matching <basename> (a directory containing SKILL.md for skills, a file with that basename for rules / snippets). The right-hand side must have no slashes.
  • owner/repo::<exact/path> — no search; the path must point exactly at the right thing from the repo root.

Use @ when the name is unique and stable. Use :: when the file location is part of what the user told you (e.g. "the file is at rules/typescript.md") or when collisions are possible. Both forms accept pinning: :v1.2.0 (tag/branch) or #abc1234 (commit SHA).

${VarName} is a capa placeholder, not a shell variable

${BraveApiKey} in capabilities.yaml is resolved by capa at install time from its credential store or a .env file. It has nothing to do with the runtime environment of any spawned process. In particular: providers do not export tool input as env vars to hooks — each fired hook receives a JSON payload on stdin. If a hook needs to inspect the command being run, write a local script that reads stdin with jq (see the hook example in references/capabilities-schema.md), not an inline command with ${...} placeholders expecting the command text to be interpolated.

Tool naming: @server.tool vs plain id

  • MCP tools are referenced from skills as @server-id.tool-id (e.g. @brave.search). The @ distinguishes them from command tools.
  • Command tools use the plain tool id (hello_world, deploy_service).
  • In capa sh, both are slugified to kebab-case (@gitlab.list_merge_requests → capa sh gitlab list-merge-requests).

When binding tools to skills via requires:, mismatching the @ prefix is the #1 cause of "tool not found" at install time.

Tool exposure mode shapes everything downstream

options.toolExposure has four values and they change what capa install writes:

  • expose-all: every tool any active skill requires shows up in the MCP tools/list. Simplest.
  • on-demand: only setup_tools and call_tool are exposed at startup; the agent activates skills on demand. Keeps the active toolset small for long contexts.
  • search (what capa init writes by default): only search and call_tool are exposed. The agent finds tools by keyword — search('open a pull request') — and calls what comes back. Discovery is by task rather than by skill id, which suits servers exposing many tools (expose: all), and skill requires: has no effect.
  • none: capa writes no project-local MCP config files at all. The agent is expected to invoke tools via capa sh <group> <tool> instead. Useful when policy forbids per-project .mcp.json edits.

Pick deliberately — switching modes later cleans up old entries on the next install but the choice colours the install output.

Activity traces are on by default

options.agentActivity defaults to enabled (omit or true). Capa injects system hooks that report tool calls and agent lifecycle events into the project Activity feed in the Web UI. Set options.agentActivity: false to opt out. System activity hooks are managed and hidden from the Hooks editor — don't try to declare them yourself.

Conventions that prevent surprises

  • Keep secrets out of the file. Always use ${VarName} placeholders; never paste literal API keys. Capa stores values per-project in ~/.capa/capa.db.
  • Set requires: on every skill. Skills without requires: get no tools exposed under on-demand and clutter the install warnings under expose-all. The requires: list is also how capa wires the dependency graph.
  • Prefer @ for skill repos, :: for rule / snippet paths. Skill basenames are usually unique inside a repo; rule files have known paths and you want the install to fail loudly if the file ever moves.
  • Don't repeat the server name in tool ids. A tool under @gitlab should be id: search_projects, not id: gitlab_search_projects — capa already groups by server, so the prefix becomes noise (capa sh gitlab gitlab-search-projects).
  • Test the install loop after every change. capa install is idempotent and surfaces every problem (missing CLI, blocked phrase, unreachable remote, OAuth probe failure). Run it; don't infer.

After making changes

Most edits follow the same cycle:

  1. Edit capabilities.yaml.
  2. capa install — installs/updates everything, prompts for any new credentials.
  3. capa restart — only needed if you changed server commands, server env vars, or tool exposure mode. Skill content, rule content, hook bodies, and agents-block content all take effect on the next install without a restart.
  4. Verify in the client (Cursor reloads; Claude Code reloads on next session start) or with capa sh <group> <tool> --help to confirm the tool is registered.

If an install fails or behaves unexpectedly, jump directly to references/troubleshooting.md — the symptoms there are indexed by what the user actually sees in the terminal.

References

NeedFileNotes
Every capa command and flag, with concrete invocationsreferences/commands.mdIncludes wrap, passthrough, .env flow, provider resolution, registry adapters + Claude marketplaces
Field-by-field schema for skills / servers / tools / hooks / sub-agents / rules / plugins / security / activity / agentsreferences/capabilities-schema.mdIncludes the @ vs :: table, tool exposure matrix, plugin unpack
End-to-end YAML examples for the most common patternsreferences/workflows-and-examples.mdWeb research, wrap, passthrough, on-demand loading, plugins, registries
Symptoms → diagnoses for install / wrap / server / credential / tool failuresreferences/troubleshooting.mdIndexed by the error message the user sees

External: CAPA on GitHub · skills.sh registry · MCP protocol

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Capabilities Manager AI skill do?

Manage capa CLI configuration — `capabilities.yaml` / `capabilities.json`, skills, MCP servers, tools, hooks, sub-agents, rules, plugins, AGENTS.md / CLAUDE.md, security options, tool exposure modes, `capa wrap` shadow workspaces, `--passthrough` native writes, registries (including Claude marketplaces), activity traces, and the local Web UI. Use whenever the user edits the capabilities file, runs any `capa` command (init, install, add, wrap, clean, sh, start/stop/restart/status, auth, upgrade, cache, registry), wires up an MCP server, adds a skill from GitHub / GitLab / a registry / a remo...

Why use Capabilities Manager on TypingMind?

Because you install it once and use it with any model. Capabilities Manager is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Capabilities Manager in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/infragate/capa/tree/main/skills/capabilities-manager. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Capabilities Manager?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Capabilities Manager?

As many as you like. As long as a model supports skills, you can use Capabilities Manager with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Capabilities Manager AI skill free?

Yes. It is published on GitHub by infragate under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇