Skills registry
Store your skills once and serve them to any agent platform, from Claude and Cursor to an AGENTS.md file or a bare Grok bot, via list_skills and get_skill.
A skill is a procedure you want an AI to follow the same way every time: how you log a feature, how you draft a post, which checks run before you publish. Written as a file inside one AI product, that procedure belongs to that product. Switch tools and you re-author everything.
The skills registry stores each skill once, in your account, and compiles it on request into the shape the asking host expects.
How a skill is stored
A skill is an ordinary note with note_type: "skill". Give it a small frontmatter block and seven fixed sections:
---
name: feature-logger
description: Log a new feature request as a correctly structured note.
version: 1
platforms: [claude, cursor, agents-md, grok]
tags: [blackops, product]
---
## Purpose
## Triggers
## Inputs
## Procedure
## Tool bindings
## Output contract
## Failure modes
description is what an agent sees when it lists skills, so write it as "when to use this". version is a plain integer you bump by hand when you change the procedure — it comes back on every fetch, so you can tell which revision an agent actually ran.
Procedures reference capabilities, not tools
The one rule that makes a skill portable: the procedure never names a tool. It names a capability, and the binding table maps that capability to a tool.
## Procedure
3. Write the note with `capability:write_note`.
## Tool bindings
| Capability | Tool | Platform | Notes |
| --- | --- | --- | --- |
| write_note | post_notes | * | Creates the note. |
| write_note | log_feature | grok | Thin wrapper on the Grok bot. |
* is the default binding; a row naming a platform overrides it there. When a tool gets renamed, you edit one line in this table and every skill that binds to it keeps working. Compilation substitutes the capability for the bound tool, so what the agent reads is Write the note with \post_notes``.
If a capability has no binding for the requested platform, the reference is left in place and the response carries a warning — a step with no tool behind it is reported, never quietly dropped.
The two tools
list_skills returns slug, description, version, tags and platforms — no bodies. It is on the default tool surface and is meant to be called at the start of a task. Filter with tags and platform.
get_skill returns one skill compiled for a host:
format | Output |
|---|---|
claude | SKILL.md — YAML frontmatter (name, description, and version under metadata) plus the body |
cursor | .mdc rule — description, globs, alwaysApply: false |
agents-md | An AGENTS.md section, headings demoted one level |
grok | Plain prompt text, headings flattened to labels, no frontmatter |
raw | The stored markdown, untouched |
format also picks which column of the binding table is used; pass platform to override that independently.
Both are also plain REST: GET /api/v2/skills and GET /api/v2/skills/{slug}?format=grok.
Discovery
The MCP server's initialize response tells the host to call list_skills at the start of any task and to follow a matching skill instead of improvising. Hosts that surface server instructions pick this up with no setup.
For a host that ignores server instructions, paste one line into its own custom instructions:
At the start of every task, call
list_skills. If a skill matches the request, callget_skillwith its slug and follow the returned procedure as written.
Host support
| Host | Surfaces server instructions | Setup |
|---|---|---|
| Claude (claude.ai connector, Claude Code) | Yes | None — list_skills is on the default surface |
| Cursor | Not reliably | Add the bootstrap line to Rules, or paste a compiled .mdc |
| ChatGPT | Not reliably | Add the bootstrap line to custom instructions; list_skills/get_skill are callable directly (no use_tool needed) |
| Grok | Not reliably | Add the bootstrap line to the bot's system prompt |
The table records what each host does with the initialize instructions field; the bootstrap line is the documented fallback everywhere it is not honored.
Writing a skill
Create it like any other note — post_notes with note_type: "skill" and the markdown above, or update_brain with a Skills brain's brain_id if you want the skills compiled into a knowledge map as well. Editing a skill is patch_notes on the same note; bump version when the procedure changes.
Ready-made skills
The publishing pipeline (log an idea, build the drafts, proofread against your brand voice, launch on approval) is published as open source at github.com/BlackOpsCenter/skills. The skills are written in this exact format and compiled by the same compiler, and there are install steps for Claude Code, claude.ai, Codex, Cursor, AGENTS.md and plain-prompt hosts.
Related
Skills are one part of why your work moves between agents without loss. See One Knowledge Base, Every Agent.