Open format for AI agent skills Β· v0.9.0 Β· stable spec (RFC 0002)
Write an agent skill once. Run it everywhere.
$ kitbash install gh:addyosmani/agent-skills/skills/code-review-and-quality β installed code-review-and-quality@0.0.0 budget 6000 tokens Β· standing 250 Β· mode skill Β· pinned in kitbash.lock β unmanifested (SKILL.md only) β defaults applied $ kitbash compile β .claude/skills/code-review-and-quality/SKILL.md β .cursor/rules/code-review-and-quality.mdc β AGENTS.md Β§code-review-and-quality β agentsmd can't lazy-load β this skill costs ~5,044 tokens standing compiled 1 skill for 3 agent targets
A real session β a third-party skills.sh skill compiled to three agents, its hidden token cost measured. npm install -g kitbash
Kitbash is an open format for agent skills and a compiler that turns one source folder into whatever each coding agent actually reads. Write the skill once and compile it to Claude Code, Cursor, Copilot, Codex, Gemini, and more β instead of hand-maintaining a copy per agent.
packages β npm Β· containers β Docker Β· lint rules β ESLint Β· agent skills β kitbash
#Every agent invented its own format
Your team runs several coding agents, and each reads its instructions from a different place. A skill written for one is dead weight for the rest β so people keep divergent rule files that quietly drift apart.
.claude/skills/*/SKILL.md.cursor/rules/*.mdc.github/skills/*/SKILL.mdAGENTS.md.devin/rules/*.md.clinerules/*.md.gemini/skills/*/SKILL.mdCONVENTIONS.md#One source folder, compiled everywhere
A Kitbash skill is a directory with a small manifest. It declares things no other format has a field for β an enforced token budget and tool permissions β and compiles to each agent's native layout.
# skill.toml [skill] name = "prereview" version = "0.1.0" [triggers] commands = ["/prereview"] [context] budget = 1500 # enforced at compile standing = 60 # cost while idle [permissions] tools = ["read", "grep", "bash:git diff *"] network = false [artifacts] produces = ["findings@1"] consumes = ["plan@1"]
Budgets, enforced
Every skill declares its token cost. compile measures the output and warns β or fails with --strict β when a skill goes over, instead of letting rules pile up unmeasured.
Review the diff
Installs pin a content hash in kitbash.lock. Drift is detected, and updates show up as an instruction diff you can read β not a silent change.
Honest degradation
An agent that can't run scripts gets an instruction-only build with a visible warning, never a quiet downgrade. Nine targets today, from Claude Code to the AGENTS.md fallback.
#Pick a target
This is kitbash preview, in your browser β the same skill compiled for each agent your team runs, with what it actually costs there. Lazy targets load on demand; eager targets pay the full token bill every session.
# .claude/skills/prereview/SKILL.md --- name: prereview description: "Review the diff against this repo's real standards" --- <!-- generated by kitbash β do not edit; source: .kitbash/skills/prereview @ 0.1.0 --> Review the working diff the way this repo's own reviewers doβ¦ # .claude/commands/prereview.md β compiled slash-command shim Load the "prereview" skill: read .claude/skills/prereview/SKILL.md and follow it exactly.
Native skills directory, plus declared trigger commands compiled to real slash commands. The body loads only when the skill is invoked, so it costs nothing standing.
--- description: "Review the diff against this repo's real standards" alwaysApply: false --- <!-- generated by kitbash β do not edit; source: .kitbash/skills/prereview @ 0.1.0 --> Review the working diff the way this repo's own reviewers doβ¦
alwaysApply: false makes this an agent-requested rule β Cursor pulls it in only when relevant, so it costs nothing while idle.
--- name: prereview description: "Review the diff against this repo's real standards" --- <!-- generated by kitbash β do not edit; source: .kitbash/skills/prereview @ 0.1.0 --> Review the working diff the way this repo's own reviewers doβ¦
The vendor-neutral Agent Skills path, detected from .agents/ or .codex/ β read by Codex, Cursor, Copilot, Gemini CLI, Roo, Amp, OpenCode, Zed and Antigravity. Only the metadata is preloaded, so the body costs nothing until it is needed.
--- name: prereview description: "Review the diff against this repo's real standards" --- <!-- generated by kitbash β do not edit; source: .kitbash/skills/prereview @ 0.1.0 --> Review the working diff the way this repo's own reviewers doβ¦
Copilot reads agentskills.io skills from .github/skills/, loading only the frontmatter until the skill is needed. Detected from .github/, which most repositories already have.
<!-- generated by kitbash β do not edit; source: .kitbash/skills/prereview @ 0.1.0 -->
Review the working diff the way this repo's own reviewers doβ¦
β prereview β cline: cline is eager and cannot lazy-load; this skill costs ~1,480 tokens standing every session (declared limit: 60)
--- trigger: model_decision description: "Review the diff against this repo's real standards" --- <!-- generated by kitbash β do not edit; source: .kitbash/skills/prereview @ 0.1.0 --> Review the working diff the way this repo's own reviewers doβ¦
Windsurf became Devin Desktop, so the rule lands in .devin/rules/ when that directory exists and falls back to .windsurf/rules/. trigger: model_decision keeps the description in context and loads the body only when the model judges it relevant.
--- name: prereview description: "Review the diff against this repo's real standards" --- <!-- generated by kitbash β do not edit; source: .kitbash/skills/prereview @ 0.1.0 --> Review the working diff the way this repo's own reviewers doβ¦
Gemini CLI injects only the name and description at session start and pulls the body in with its activate_skill tool. Detected from GEMINI.md or .gemini/.
<!-- kitbash:begin prereview --> <!-- generated by kitbash β do not edit; source: .kitbash/skills/prereview @ 0.1.0 --> ## Skill: prereview Review the working diff the way this repo's own reviewers doβ¦ <!-- kitbash:end prereview -->
β prereview β aider: aider is eager and cannot lazy-load; this skill costs ~1,480 tokens standing every session (declared limit: 60)
Aider's conventions file, wired via .aider.conf.yml or --read. Merged between markers β your own conventions stay untouched.
<!-- kitbash:begin prereview --> <!-- generated by kitbash β do not edit; source: .kitbash/skills/prereview @ 0.1.0 --> ## Skill: prereview Review the working diff the way this repo's own reviewers doβ¦ <!-- kitbash:end prereview -->
β prereview β agentsmd: agentsmd is eager and cannot lazy-load; this skill costs ~1,480 tokens standing every session (declared limit: 60)
The floor: Codex and everything else that reads AGENTS.md. Updates replace only the section between the markers β the rest of your file is untouched.
Run it yourself: kitbash preview prereview β with lint and explain, new in the CLI.
#Skills that feed each other
Typed artifacts are stdin/stdout for agents. A skill declares what it produces and consumes, so skills pipe into each other through data instead of prompt-chaining hope β with gates between steps that pass or fail on exit codes, not vibes.
#Start in one line
Install from npm, set Kitbash up in a repo, add a skill, and compile.
npm install -g kitbash # or: brew install singhharsh1708/tap/kitbash kitbash init && kitbash compile
#Skills
One skill ships today as a worked example. The rest are sketched in the catalog and land as the compiler earns them.
Reviews your diff against your team's actual standards β mined from what reviewers on this repo really flag, not a generic checklist.
Answers "why is this code like this?" with the commit, PR thread, and issue that made it so.
Turns a red CI run into a verdict: flake, environment, or real regression β with the decisive log line.
Issue to file-level implementation plan, with risks and a test plan, as an artifact later skills consume.
Drives the changed behavior end-to-end in the running app. Tests passing is evidence, not the verdict.
Checkpointed migration batches β resumable across sessions, every batch independently revertable.
#Read more
The core format is stable and everything is in the open. These are the pages worth starting with.
Quickstart
Install the CLI, add a skill, compile it for every agent in your repo. About two minutes.
The format (KSF)
Skill layout, the skill.toml manifest, budgets, permissions, and conformance.
CLI reference
Every command, flag, and exit code β compile, doctor, preview, lint, and the rest.
Trust & review
Read a skill before installing it, review what it declares, and gate your org with [policy].
Adapters & targets
All nine outputs, what each agent supports, and which ones pay a standing token tax.
Manifesto β
Why prompts deserve the same versioning, review, and budgets as the rest of your code.
Already have skills? A plain SKILL.md folder β the skills.sh / Claude Skills convention β installs directly with kitbash install owner/repo. No manifest, so it's marked unmanifested and defaults are applied. skills.sh distributes skills; Kitbash treats them like real engineering artifacts.