skills
AGENTS.md1 starsChanged 12 days agoMITView on GitHub
Guidance for AI coding agents (Claude Code, Cursor, Codex, etc.) working in this repo. A personal monorepo for agent skills authored by Zac Rosenbauer. Skills are agent-agnostic — they target the SKILL.md format and work with any agent that loads it (Claude Code, Cursor, Codex, custom agents, etc.). Skills live in skills/<skill-name>/. Shared utilities (if any) live as pnpm workspace packages in packages/. Two locations, two roles: All skills under skills/ are public by design — every skill ships through…
- Installs packages
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,542 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository17 other files it gives its agents.
- code-reviewerSkill
- npm-namerSkill
- skill-creatorSkill
- skill-portabilitySkill
- ts-best-practices-functionalSkill
- ts-best-practicesSkill
- code-reviewerSkill
- live-debugSkill
- npm-namerSkill
- orca-doctorSkill
- personaSkill
- skill-creatorSkill
- skill-portabilitySkill
- skill-reviewerSkill
- svg-creatorSkill
- ts-best-practices-functionalSkill
- ts-best-practicesSkill
The file
We split this AGENTS.md into the rules it gives an agent
5 rules. About 0 are common, 0 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 37
All skills under skills/ are public by design — every skill ships through npx skills add and gets audited by skills.sh.
- Very specific: line 114
All skills live in skills/<kebab-case>/.
- Very specific: line 115
Never hand-edit or rm anything under .agents/skills/ — that's the install destination managed by the skills CLI (tracked by …
- Very specific: line 117
Don't add a package.json to a skill directory unless it actually needs JS deps — most skills are pure markdown.
- Very specific: line 118
Prefer editing existing skills over forking.
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md 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
AGENTS.md
Guidance for AI coding agents (Claude Code, Cursor, Codex, etc.) working in this repo.
What this repo is
A personal monorepo for agent skills authored by Zac Rosenbauer. Skills are agent-agnostic — they target the SKILL.md format and work with any agent that loads it (Claude Code, Cursor, Codex, custom agents, etc.). Skills live in skills/<skill-name>/. Shared utilities (if any) live as pnpm workspace packages in packages/.
Layout
.
├── skills/ # AUTHORING SOURCE — skills authored here, published via `npx skills add`
│ └── <name>/
│ ├── SKILL.md # the skill
│ ├── LICENSE
│ └── README.md
├── .agents/skills/ # INSTALL DESTINATION — where `npx skills add` puts installed skills
├── skills-lock.json # tracks installed skills (source, sourceType, skillPath, hash)
├── skill-scripts/ # canonical source for shared scripts (e.g. prompt-shield)
│ └── <name>/ # vendored into `<skill>/scripts/<name>/` via `skill-toolkit sync`
├── packages/
│ └── skill-toolkit/ # CLI for linting skills
├── contributing/ # supplementary contributor docs (e.g. prompt-injection.md)
├── lefthook.yml # pre-commit hooks (sync, format, lint, drift check)
├── package.json # root, private, workspaces via pnpm-workspace.yaml
├── pnpm-workspace.yaml # workspace globs
├── turbo.json # turbo task pipeline
└── AGENTS.md # ← you are here (CLAUDE.md is a symlink to this file)Two locations, two roles:
skills/<name>/is the authoring source. Skills authored here are published vianpx skills add zrosenbauer/skills. Claude Code in this project also loads from here directly — no symlink needed..agents/skills/<name>/is the install destination managed by the skills CLI. When you runnpx skills add, installed skills land here andskills-lock.jsonrecords the source/hash. The same skill can appear in both paths (you can dogfood your own skills by installing them locally) — these are NOT duplicates and.agents/skills/should not be hand-edited orrm'd. Use the skills CLI to install/uninstall.
All skills under skills/ are public by design — every skill ships through npx skills add and gets audited by skills.sh. There are no local-only / internal skills in this repo.
Sharing scripts between skills
Helpers needed by more than one skill (e.g. prompt-shield for indirect-prompt-injection mitigation) live in skill-scripts/<name>/ as the canonical source. Each consuming skill declares the copy explicitly in <skill>/skill.json:
{
"$schema": "https://raw.githubusercontent.com/zrosenbauer/skills/main/schemas/skill.json",
"vendor": [{ "src": "skill-scripts/prompt-shield", "dest": "scripts/prompt-shield" }]
}pnpm skill-toolkit sync reads every vendor directive, copies src (repo-root-relative) to dest (skill-dir-relative) byte-identical, and re-stages the result. The first segment of dest (scripts, references, templates, ...) is surfaced as a tag in CLI output — adding a new kind is just a new entry, no toolkit code change. Vendored copies are committed so skills stay self-contained when shipped.
The $schema field points at the JSON Schema generated from the zod source via pnpm skill-toolkit schema --write and committed to schemas/skill.json. A raw-githubusercontent URL is used (not a relative path) so the same manifest resolves correctly both from skills/<name>/ and from .agents/skills/<name>/ (different relative depths). Editors that understand $schema (VS Code, JetBrains, Zed) autocomplete + validate inline. A pre-commit hook (schema-check) fails the commit if the committed schema drifts from zod.
Never edit a vendored copy. Edit skill-scripts/<name>/ and let the sync run (Lefthook does this automatically on pre-commit). The drift check (pnpm skill-toolkit sync --check, also pre-commit) fails if any vendored copy diverges from source. See contributing/prompt-injection.md for the threat model and the prompt-shield consumption examples.
Skill format
Each skill is a directory under skills/ with at minimum:
---
name: <skill-name>
description: >-
One paragraph describing when this skill should be used. Include common
triggers (verbatim phrases the user might say) so the dispatcher can match.
# --- Claude Code extensions (ignored by other agents) ---
argument-hint: '[<optional-arg>]'
user-invocable: true
---
# <skill-name>
Body of the skill — instructions for the agent when invoked.name and description are universally required. Other fields are Claude Code extensions; cross-agent skills include them defensively (other agents ignore unknown fields).
Optional companions: LICENSE, README.md, references/<topic>.md, templates/<thing>.template.
Tooling
- pnpm for installs (
packageManageris pinned in rootpackage.json) - turbo for running tasks across workspace packages
- Node ≥ 24
- Bun for Maltty's compiled CLI binaries; uv for the optional security scan
Common commands:
pnpm install # install all workspace deps + lefthook hooks (via prepare)
pnpm build # turbo run build (compiles skill-toolkit via Maltty)
pnpm bundle # turbo run bundle (build shipping assets)
pnpm lint # oxlint across the repository
pnpm typecheck # turbo run typecheck
pnpm test # turbo run test
pnpm test:scripts # node --test across skills/*/scripts and skill-scripts/*
pnpm skill-toolkit lint # lint every skill against the three-tier rule set
pnpm skill-toolkit lint <name> # lint one skill
pnpm skill-toolkit sync # vendor canonical scripts into each consuming skill
pnpm skill-toolkit sync --stage # sync and stage changed destinations (pre-commit)
pnpm skill-toolkit sync --check # fail if any vendored copy drifts from source
pnpm audit:skills # snyk-agent-scan on public skills (needs SNYK_TOKEN)Authoring skills:
/skill-creator <name>— author a new skill (interactive workflow: discover → name → frontmatter → body → lint → package).
Conventions for agents
- Never edit
CLAUDE.mddirectly — it's a symlink toAGENTS.md. EditAGENTS.md. - New skills go through
/skill-creator. It enforces naming and description quality. Hand-authoring skills is allowed but they must still passpnpm skill-toolkit lint --severity error. - All skills live in
skills/<kebab-case>/. Every skill is publicly distributed. - Never hand-edit or
rmanything under.agents/skills/— that's the install destination managed by the skills CLI (tracked byskills-lock.json). - Shared utilities go in
packages/<name>/with their ownpackage.jsonand follow the workspace name convention@zrosenbauer/<name>. - Don't add a
package.jsonto a skill directory unless it actually needs JS deps — most skills are pure markdown. - Prefer editing existing skills over forking. If forking from a third-party skill, keep the upstream
LICENSEalongside it.
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.

