AI agent skills and sub-agents shared across clients and machines. These are the common building blocks that get assembled into active skill sets for Claude, Codex, and other AI agents.
Two kinds of units are managed:
- Skills — folders with a
SKILL.md, linked into~/.claude/skills/(and~/.codex/skills/for Codex). - Agents — single
*.mdfiles defining Claude Code sub-agents, linked into~/.claude/agents/. Codex has no sub-agent concept, so agents are skipped for Codex targets.
-
Clone this repo.
git clone https://github.com/flurdy/agent-skills.git -
Apply the changes from the
agent-skills/folder.make applyFor Codex, use:
make apply-codex -
Verify units are in your active directories:
- Claude skills:
~/.claude/skills - Claude agents:
~/.claude/agents(skipped for Codex) - Codex skills:
~/.codex/skills
- Claude skills:
Units are symlinked directly into their active directories, coexisting with any skills or agents you already have there.
See skills/README.md for the full list of available skills.
skills/: each skill lives in its own folder with aSKILL.mdagents/: each sub-agent is a single*.mdfile with frontmatter- Optional:
assets/,scripts/, orreferences/inside a skill folder if needed
agent-skills/
skills/
common-skill/
SKILL.md
agents/
my-agent.md
assemble.sh
Makefile
If you have machine- or client-specific skills or overrides, you can create a
sibling repo named agent-skills-private/ alongside this agent-skills/ repo.
(You are free to name it something else, but you'll need to set the PRIVATE_REPO environment variable, see below).
This agent-skills-private/ repo is optional, and can be kept private and secure. With both repos the layout is this:
agent-skills/
skills/
common-skill/
SKILL.md
agents/
common-agent.md
assemble.sh
Makefile
agent-skills-private/
skills/
my-private-skill/
SKILL.md
agents/
my-private-agent.md
clients/
my-client/
skills/
my-private-skill/
SKILL.md
agents/
my-client-agent.md
machines/
my-machine/
skills/
my-machine-skill/
SKILL.md
agents/
my-machine-agent.md
profiles/
my-machine-profile.env
You can then specify machine or clients specific skills to use:
make apply MACHINE=my-machine CLIENTS="my-client my-other-client"
Or instead configure private/profiles/my-machine-profile.env with:
MACHINE=my-machine
CLIENTS="my-client my-other-client"make apply PROFILE=my-machine-profile to do the same
Skills and agents use the same layering. If a unit exists in multiple layers, later layers override earlier ones:
- Shared:
agent-skills/{skills,agents}/ - Private shared:
agent-skills-private/{skills,agents}/ - Private machine:
agent-skills-private/machines/<machine>/{skills,agents}/ - Private client(s):
agent-skills-private/clients/<client>/{skills,agents}/
Set these as environment variables, or accept the defaults.
Path to shared repo (this repo):
SHARED_REPO=/path/to/agent-skills
Path to optional private repo:
PRIVATE_REPO=/path/to/agent-skills-private
Path to skills directory:
- Claude:
SKILLS_DIR=$HOME/.claude/skills - Codex:
SKILLS_DIR=$HOME/.codex/skills
Path to agents directory (Claude only):
AGENTS_DIR=$HOME/.claude/agents
To skip the agents layer (e.g. for Codex targets), set SKIP_AGENTS=1.
There is an example in .env.example you can use,
and an example .envrc.example file if you use direnv.
- Create a folder under
skills/with a descriptive kebab-case name - Add a
SKILL.mdwith frontmatter and instructions (see below) - Add the skill to the table in
skills/README.md - Keep it focused and general-purpose
- Test by running
make applyormake apply-codexand verifying it appears in the target skills directory
Sub-agents are single markdown files with frontmatter — see the Claude Code sub-agents docs for the schema.
- Create
agents/<name>.mdwith YAML frontmatter (name,description, optionaltools,model,color) and the agent's system prompt below - Keep agents general-purpose; put machine- or client-specific ones in the private repo under
agents/,machines/<m>/agents/, orclients/<c>/agents/ - Run
make applyand confirm the symlink in~/.claude/agents/
Agents are not applied for Codex (make apply-codex sets SKIP_AGENTS=1).
Every skill needs a SKILL.md with YAML frontmatter:
---
name: my-skill
description: One-line description shown in skill listings
version: "1.0.0"
author: "yourname"
---
# My Skill
Instructions for the agent go here.If your skill runs shell commands (API calls, gh commands, build tools, etc.), wrap them in scripts under a scripts/ subfolder. This lets you grant auto-approval for specific commands via the allowed-tools frontmatter field, so the user isn't prompted on every invocation:
skills/
my-skill/
SKILL.md
scripts/
fetch-data.sh
---
name: my-skill
description: Fetch and display data from the API
allowed-tools: "Bash(~/.claude/skills/my-skill/scripts/fetch-data.sh:*)"
---Without allowed-tools, the user will be prompted to approve each tool call. Multiple patterns are comma-separated. Glob patterns match against the full command string.
skills/
my-skill/
SKILL.md # Required — instructions and frontmatter
scripts/ # Optional — shell scripts for auto-approval
fetch-data.sh
templates/ # Optional — text templates the skill reads at runtime
body.md
This tool is designed to coexist with skills and agents you already have:
- Apply creates symlinks directly in
SKILLS_DIRandAGENTS_DIR, alongside existing entries - Clean only removes symlinks that point to our repos, leaving your own skills and agents untouched
- Collision handling: If a skill or agent name already exists and isn't managed by us,
applywill error out and the pre-existing one wins. Remove it manually if you want to use the managed version instead.
After running make apply or make apply-codex, your skills folder might look like this:
~/.claude/skills/ # or ~/.codex/skills/
create-pr/ -> /path/to/agent-skills/skills/create-pr (managed symlink)
jira-ticket/ -> /path/to/agent-skills/skills/jira-ticket (managed symlink)
rebase-main/ -> /path/to/agent-skills/skills/rebase-main (managed symlink)
my-custom-skill/ (your own skill)
another-skill/ -> /some/other/path/skill (your own symlink)
Running make clean will only remove the symlinks pointing to agent-skills/ or agent-skills-private/ — in both ~/.claude/skills/ and ~/.claude/agents/ — leaving user-owned entries untouched.
- Please report bugs and issues at github.com/flurdy/agent-skills/issues.
- Pull requests are welcome at github.com/flurdy/agent-skills/pulls.
Created by flurdy (https://flurdy.com).
MIT License. See LICENSE file.