Agent skills
2026 · open source · claude code + codex
A skill is a markdown file that tells a coding agent when to do something and how. I had the same eight copied into several repos, and every copy drifted. Now the ones I can share live in one public repo, ong6/skills, and a small command links them into every repo I work in and sends my edits back.
Figure 01 · Link and publish · skills
One checkout per machine, linked into every repo
- fast-forward + link
- guard · lint · push
Editing skills where I use them
You can install the repo as a plugin, which is fine if you only want to use the skills. I also wanted to fix them while I work. Before the shared repo, a fix made in one repo stayed there and the other copies fell behind. So each machine keeps one clone, every repo links into it, and an edit made from anywhere lands in the same files. Publishing sends it upstream, and my other machines pick it up the next time a session starts.
One command, run by a hook
skills up runs when a session starts. It looks the machine up in machines.json, links the skills that machine should have and removes the ones it shouldn't. It never prompts, only updates a clean checkout, and finishes in well under a second when nothing has changed. skills publish goes the other way: it runs a safety check, lints what changed, then commits and pushes.
a session start
$ skills up --repo . --machines machines.jsonskills: 24 linked (Laptop, project) · fetched just now$ skills doctor --repo . --machines machines.jsonmachine Laptop (skills profile)scope project · root ~/src · private noskills 24 selected of 24 availablelinks ~/src/notes/.agents/skills: 24 oklinks ~/src/notes/.claude/skills: 24 okdoctor: ok
a home path in a public skill
$ skills guard skills/skills/handoff/SKILL.md:19: home-pathguard: 1 hit(s) in 1 file(s); fix them or mark a deliberate line with `public-guard: allow`$ echo $?2
The tests build throwaway home folders and git remotes and run without a network, on Python 3.12 and on 3.7, the oldest machine I link skills into.
The catalog
A catalog file puts each skill in one category and also lists other people's skills I rate, so the README is useful even where I haven't written one myself. The README tables are generated from it, and the build fails if the catalog and the folders disagree.
- skills
- 24 · one SKILL.md each
- catalog
- 7 categories · 18 links out
- install paths
- 3 · one folder, bin/skills, plugin
- agents
- Claude Code, Codex
- bin/skills
- one file · stdlib Python 3.7+
- cli tests
- 22 · CI on Python 3.12 and 3.7
- catalog build
- exits 1 when tree and catalog disagree
- status
- MIT · github.com/ong6/skills
What stays out
Only skills I can share go in. Anything with my paths, accounts or writing voice lives in a private repo. Before anything is published, skills guard blocks things like home-directory paths, personal email addresses, keys and tokens. The 24 public ones cover research, writing, design, trips and shopping, interview practice, and making and testing skills.
// AI TOOLING
All four layers
01 · Memory
Workbase (opens in a new tab)
A notes folder per job that the agent keeps up to date.
02 · Context
Agent skills
The reusable instructions my agents load.
03 · Evaluation
Skillsmith
Drafts a skill, then a blind test decides whether it stays.
04 · Runtime checks
Groundplane
Checks agent output against recorded tool results.
// NEXT
Skillsmith
Drafts a skill from the repo, then a blind test decides whether it stays