Portable skills and agents for AI coding agents.
git clone https://github.com/unvalley/agent-config.git
cd agent-config
just installjust install links this repository's assets, restores third-party skills from
the skills.sh lock, and installs the git hooks. On a new machine run
chezmoi init --apply unvalley first, so the dotfiles and that lock are in
place. just --list has the rest: status, uninstall, third-party,
validate, eval, and eval-all.
Assets are symlinked, so local edits apply immediately. Claude Code receives
skills/ and agents/; Codex receives skills/ through ~/.agents/skills.
The installer is a Rust CLI behind those recipes; cargo run -- install --help
covers its --copy, --force, and --dry-run flags.
Codex configuration (~/.codex/config.toml) and the global skills lock
(~/.agents/.skill-lock.json) belong in dotfiles, not here.
Third-party skills are managed by
skills.sh and restored by
just third-party. Run chezmoi add ~/.agents/.skill-lock.json after changing
them so the lock stays in dotfiles.
This repository's own skills can also be installed elsewhere:
npx skills add unvalley/agent-config
gh skill install unvalley/agent-config/skills/design-principles- Create
skills/<name>/SKILL.mdwithnameanddescriptionfrontmatter. - Add
agents/openai.yamlwithdisplay_name,short_description, and adefault_promptthat invokes$<name>. - Put optional detail in
references/, deterministic code inscripts/, and output resources inassets/. - Keep frontmatter ASCII-only and validate with
just validate <name>. - Add eval cases under
evals/<name>/, as described below.
Skills are evaluated with Claude Code's claude plugin eval. A case lives in
evals/<skill>/<case>/:
prompt.mdholds the prompt; itspluginsfrontmatter names the skills to load, so a routing case can load a sibling skill too.- Each file in
graders/is one check:regexon the reply,tool_usedfor whether a skill fired, orllmfor a rubric.
just eval git-commits # one skill
just eval-all # every skillEach case runs with and without its skills, so the report shows what the skill
adds. Flags pass through to claude plugin eval, such as --runs 1 or
--tag routing. Runs use your Claude Code login, and reports stay local in
evals/results/. The latest scores are in
skills/benchmark.md.