zymposium logo zymposium
zymposium logo

zymposium

Agent skills for Zig projects and CLI tools. A package declares skills/<name>/SKILL.md; zymposium links it into every agent that should see it — and never touches the ones you wrote yourself. Install it with zest, or build it yourself.

Zig 0.16 MIT Linux · macOS · Windows Claude Code · Codex · .agent CI release

I’m building a small ecosystem of focused Zig tools: zest builds and updates CLI tools; zymposium provisions the agent skills those tools and Zig packages provide. Each works on its own; the integration is optional.

01Install

One command, via zest

Recommended
zest install JustinWoodring/zymposium
zest builds it in ReleaseSafe with your own toolchain, puts it on PATH, and upgrades it with zest update zymposium — the same as every other tool you manage.
Or build it yourself
git clone https://github.com/JustinWoodring/zymposium cd zymposium && zig build
zymposium is a single self-contained binary and works fully standalone: no root, no package manager, no zest. Project dependency skills and zymposium add both work without it.

With zest you get one extra source — the tools it manages — whose skills refresh automatically whenever you update the tool. Config lives in $XDG_CONFIG_HOME/zymposium/config.json, state and clones in $XDG_DATA_HOME/zymposium.

02Use

init, sync, look

Run zymposium sync from anywhere. Inside a Zig project it walks that project's dependency graph; outside one it still provisions packages you added with zymposium add.

$ zymposium init
$ zymposium sync
linked 6, updated 0, unchanged 0, removed 0
$ zymposium list
# SKILL        PROVIDER  VERSION  AGENTS             DESCRIPTION
# dep-a-skill  dep-a    1220-000  claude,codex,agent  Skill shipped by dep-a
$ zymposium doctor
all provisioned skills are healthy
03How it works

A skills directory is the whole contract

Every immediate subdirectory of a package's skills/ that contains a SKILL.md is one skill, named after the directory. Nothing else is required, so any repository can ship skills by adding one directory.

my-package/
├── build.zig.zon
└── skills/
    ├── deploy/
    │   └── SKILL.md      → linked as ~/.claude/skills/my-package/deploy
    └── review/
        └── SKILL.md      → linked as ~/.claude/skills/my-package/review
    

Three sources, in this order

SourceWhere it comes from
project_depDependencies of the current build.zig.zon graph, followed transitively. Git dependencies are cloned into the cache; path dependencies are read in place. No zest needed.
packageAnything you registered yourself with zymposium add <path|url>. No zest needed.
zest_toolA CLI tool managed by zest whose staged clone ships a skills/ directory. The only source that requires zest: there is no manifest of installed CLI tools without a tool manager.

zymposium works on its own. Project dependencies and added packages are the whole job, and neither involves another tool. Installing zest adds one more source: the tools it manages, whose skills refresh automatically when you update them. Everything else behaves the same either way.

Commands

CommandWhat it does
zymposium initWrites a default config.json and prepares the global skill directories.
zymposium syncDiscovers every source and reconciles the links. --tool scopes a run to one provider, --force takes over a path zymposium does not own, --offline uses only what is cached.
zymposium listEvery provisioned skill, where it came from, and the command that refreshes it.
zymposium sourcesEvery package that ships skills, how many it offers, and how many are already provisioned.
zymposium add / removeRegister a package, or unlink one provisioned skill.
zymposium update [skill]Re-fetch the sources zymposium owns and sync again.
zymposium doctorCheck every recorded link against the filesystem. Exits non-zero when something needs repair.
zymposium agentsList the known agents and their skill directories.

Every command takes --json where it makes sense (list, sources, doctor, sync), so a package manager can consume the result instead of scraping text.

04Agents

Three boundaries, enabled by default

An agent is just a directory that holds skills. Narrow the set in config.json, or run zymposium agents to see what is enabled right now.

AgentWhere its skills live
Claude Code~/.claude/skills and <project>/.claude/skills
Codex (OpenAI)~/.codex/skills and <project>/.codex/skills
Generic .agent~/.agent/skills and <project>/.agent/skills

Project scope is only used when there is a project: run sync from a directory with a build.zig.zon, or point at one with --project <dir>. Pruning is scoped too, so a run that touches one project leaves every other project's links alone.

05Safety

It only ever removes what it created

Ownership
zymposium records every path it writes in state.json and deletes nothing that is not in there. A hand-written skill beside a provisioned one is never touched.
Symlinks
Skills are linked, not copied, so a change to SKILL.md is visible to the agent immediately. Where symlinks are refused, it falls back to a copy.
Namespaces
Every target is <skills>/<provider>/<skill>. Two packages may ship the same skill name without colliding; use provider/skill to update or remove one when a bare name is ambiguous.
--force
Explicit opt-in to taking over a path zymposium does not own. Without it, a conflict is a message, not a deletion.

Never deletes a path it did not create. If a link goes missing or points at the wrong place, zymposium doctor names it and zymposium sync repairs it.

06More

Read the code

The repository has the README with the full command reference, a CONTRIBUTING guide, and an end-to-end harness (scripts/mock-e2e.sh) that runs with no network at all. MIT licensed.

zymposium is a separate project from zest, by the same author, and depends on nothing. zymposium provisions the skills your dependencies and added packages ship; if you also use zest, it provisions the skills of the CLI tools zest manages, straight from that tool's staged clone.

The dependency-aware agent-skills idea was inspired by Symposium, which matches agent extensions to Rust workspace dependencies. zymposium adapts that idea to Zig packages and zest-managed tools.