dev-skills
Skill179 starsChanged 12 days agoApache-2.0View on GitHub
How agent skills work: discovery, loading, triggering, format. Use when building Capsem's skills system or changing how agents consume SKILL.md files.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- darthrater78/claude-vibe-skillstheir own version, first seen Oct 2, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- darthrater78/claude-vibe-skills★ 22same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository37 other files it gives its agents.
- AGENTS.mdAGENTS.md
- asset-pipelineSkill
- build-imagesSkill
- build-initrdSkill
- citadelSkill
- dev-benchmarkSkill
- dev-bug-reviewSkill
- dev-cacheSkill
- dev-capsem-doctorSkill
- dev-capsemSkill
- dev-ciSkill
- dev-debuggingSkill
- dev-gateSkill
- dev-installationSkill
- dev-justSkill
- dev-mcpSkill
- dev-mitm-proxySkill
- dev-rust-patternsSkill
- dev-session-debugSkill
- dev-setupSkill
- dev-sprintSkill
- dev-startSkill
- dev-testing-frontendSkill
- dev-testing-hypervisorSkill
- dev-testing-pythonSkill
- dev-testingSkill
- dev-testing-vmSkill
- frontend-designSkill
- ironbankSkill
- meta-find-skillsSkill
- meta-organize-skillsSkill
- meta-skill-creationSkill
- release-processSkill
- site-architectureSkill
- site-infraSkill
- site-marketingSkill
- use-capsemSkill
The file
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 4 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 41
Do not add alternate skill/bootstrap validation modes named fast, check, or dry-run behind separate flags.
- Distinctive: line 48
Every feature owes a pure black-box ledger test.
- Very specific: line 57
When image-build work touches config/docker/image/ or guest/artifacts/, load the build-images skill.
- Distinctive: line 189
When a rule keeps being broken, the first move is a function that makes the break unrepresentable -- not a lint that scolds.
- Distinctive: line 201
Before trusting a new guard: run it, read every hit, and confirm each is real.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
AI Agent Skills System
This documents everything we know about how skills work across Claude Code, Gemini CLI, Codex, and Cursor, learned from building and organizing this project's skills. This knowledge will inform Capsem's own skills system for guest AI agents.
Discovery
Claude Code
- Looks in
.claude/skills/(project) and~/.claude/skills/(global) - Discovers
<name>/SKILL.md-- one level of nesting only - Nested directories (e.g.,
category/skill/SKILL.md) are NOT discovered - Symlinks work -- we use
.claude/skills -> ../skillsto share with Gemini - Live reload on file change, no restart needed
Gemini CLI
- Looks in
.agents/skills/or.gemini/skills/ - Same
<name>/SKILL.mdformat as Claude Code - We use
.agents/skills -> ../skillsand.gemini/skills -> ../skillssymlinks
Codex and Cursor
- Project-local
.codex/skills/and.cursor/skills/point to the sharedskills/directory so those clients consume the same project skills. bootstrap.shcreates.claude,.agents,.gemini,.codex, and.cursorskill symlinks non-destructively.
What does NOT work
- Nested categories:
skills/dev/testing/SKILL.mdis not found by either CLI - Files named anything other than
SKILL.mdin a directory are not discovered as skills - Files directly in the skills root (not in a subdirectory) are not discovered
No Escape-Hatch Skill Paths
Do not add alternate skill/bootstrap validation modes named fast, check, or dry-run behind separate flags. Forked verification paths are how projects lose the real contract. The shared skill rail must be fast, hermetic, and complete enough to run every time; if it is not, fix the rail instead of adding a bypass.
Bank of Iron Feature Tribute
Every feature owes a pure black-box ledger test. The test must exercise the public path end to end and account for the exact input and output: client-visible result, parsed event facts, security decision, detection/enforcement records, protocol rows, structured logs, counters, and route/UI JSON when those surfaces exist. No feature is done with a single-entry proof. What goes in must come out exactly, and every transformation must be accounted for.
Runtime Image Memory
When image-build work touches config/docker/image/ or guest/artifacts/,
load the build-images skill. The VM runtime has no build hook: its package set is runtime_apt_packages in
config/docker/image/build.toml, reserved for Capsem's own guest machinery.
Tools a user or agent works with belong in an OCI image under images/. A
runtime change is only real in a VM after just build-assets rebuilds it; boot
a fresh VM and pay the Ironbank proof for the user-visible behavior.
config/skills is not a development skill location. Read config/README.md
before adding any product skill payload, and keep repository development
skills in top-level skills/.
SKILL.md format
---
name: skill-name
description: When to trigger and what it does. Be specific and pushy -- Claude undertriggers.
---
# Skill Title
Instructions the agent follows when triggered.Frontmatter fields
name(required) -- skill identifier, should match directory namedescription(required) -- this is the PRIMARY trigger mechanism. Claude sees name + description in its skill list and decides whether to load the full body. Everything about "when to use" goes here.user-invocable: true-- lets users invoke with/skill-nameallowed-tools-- restrict which tools the skill can usecontext: fork-- run in a subagent
Description is everything for triggering
Claude undertriggers skills by default. Descriptions must be:
- Specific about WHAT the skill does
- Explicit about WHEN to use it (list concrete contexts, phrases, file types)
- Slightly pushy -- "Use this whenever X, even if Y" style
Bad: "Frontend development guide" Good: "Capsem frontend design system. Use when building UI components, styling views, working with the design system, choosing colors, or understanding the component library."
Progressive disclosure
Three loading tiers:
- Metadata (~100 words) -- name + description, always in context for every conversation
- SKILL.md body (<500 lines ideal) -- loaded when skill triggers
- Bundled resources (unlimited) --
<skill>/references/,<skill>/scripts/, and<skill>/assets/, loaded on demand
This means: keep SKILL.md lean. Put detailed wire formats, API docs, and large references in references/ with clear pointers from the SKILL.md body.
Organization: prefix-based grouping
Flat directory structure with naming convention for categories:
skills/
dev-testing/SKILL.md dev category
dev-debugging/SKILL.md dev category
build-images/SKILL.md build category
release-process/SKILL.md release category
meta-find-skills/SKILL.md meta categoryCategories we use: meta-*, dev-*, build-*, release-*, site-*,
frontend-*.
Bundled resources pattern
skill-name/
SKILL.md Main instructions (<500 lines)
references/
wire-format.md Detailed protocol docs
community-skill.md Fetched from npx skills / GitHub
skill-name/scripts/
helper.sh Executable automation
assets/
template.html Templates, iconsReference from SKILL.md with a sentence naming the file, for example: Read
references/<topic>.md for the full protocol details.
Community skills
The npx skills CLI (skills.sh) discovers community skills. To use one:
npx skills find <query> # Search
# Then manually fetch and place:
curl -sL https://raw.githubusercontent.com/<owner>/<repo>/main/<path>/SKILL.md \
-o skills/<name>/references/<topic>.mdWe place community skills as references (not top-level SKILL.md) because:
- They're context for our skills, not standalone triggers
- Our SKILL.md provides the project-specific framing
- Community skills may have generic advice that conflicts with our conventions
Quality bar: prefer official sources (anthropics/, sveltejs/, google-gemini/) or 1K+ installs. Verify content before bundling.
Global skills
Skills in ~/.claude/skills/ are available across all projects. We install meta skills globally:
meta-find-skills-- discover community skillsmeta-organize-skills-- skill conventionsmeta-skill-creation-- create/iterate skills
Lessons learned
- Nested directories don't work for skill discovery. Use prefix naming instead.
- Description quality drives triggering accuracy. Vague descriptions = skill never loads.
- Wire format docs belong in references/, not in the main SKILL.md. Keep the body actionable.
- Write references from source code, not from memory. API wire formats drift and memory gets stale.
- One skill per concern. MCP and MITM proxy are separate skills even though both handle network traffic -- they have different trigger conditions.
- Cross-reference between skills using "See dev-testing-vm for..." style pointers in the body.
- Skills load on demand -- having 18 skills costs nothing when they're not triggered. Don't try to merge skills to save space.
- Agent clients read the same format. SKILL.md with YAML frontmatter works for Claude Code, Gemini CLI, Codex, and Cursor. No duplication needed.
- Treat local/CI parity as a tested contract. A Linux asset workflow once
failed only in CI because the doctor required
x86_64-linux-musl-gccon an arm64 runner even though the nativemusl-gccinstalled bymusl-toolswas the real build contract. The local Docker rail had tested package installation but not that exact doctor predicate. Whenever CI exposes a missing dependency or runner assumption, execute the same production entrypoint or shared predicate locally in Docker when possible, add a regression, and audit sibling workflows before retrying CI. Record any unavoidable platform boundary explicitly.
Guards encode a rule; they do not replace it
When a rule keeps being broken, the first move is a function that makes the break unrepresentable -- not a lint that scolds. Add the guard to stop regressions after the wrapper exists, and point it at the wrapper.
A guard must be precise before it is useful. Ours needed four iterations, each
failing the same way: too coarse. It flagged prose for containing a retired
term inside a current one; it flagged whole files for containing two shapes
that never met; it flagged a variable named path in one function because
another function had a parameter of that name. A guard with false positives
teaches people to add exemptions, and the pressure is always to narrow its
scope to fit the code rather than fix the code.
Before trusting a new guard: run it, read every hit, and confirm each is real. Then break the rule deliberately and confirm it fails. A guard that has never been red is a guard you have not tested.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

