nomograph/rune

Skill registry manager for AI coding agents

Skills are inscribed knowledge -- reusable instructions that teach AI agents how to perform specific workflows. rune keeps them current across projects via git-based registries.

cargo install rune
sync
bidirectional
pull and push
registries
multi
public + private
detection
drift
via Claude Code hook
language
Rust
MIT licensed
The thesis

Skills should be managed like dependencies.

AI coding agents accumulate instructions in markdown files. These files encode hard-won workflow knowledge -- how to run CI, how to write in voice, how to handle upstream contributions. Without a registry, every project maintains its own copy. rune treats skills like packages: versioned, synced, with drift detection when local edits diverge from the registry.

How it works

One config file defines your registries. One manifest per project declares which skills to sync. rune handles the rest.

Registries

Git repositories containing skill directories. Public registries for shared workflows, private registries for proprietary methodology. Configured globally in ~/.config/rune/config.toml.

Manifests

Each project declares its skills in .claude/rune.toml. Maps skill names to registries. rune sync pulls the right version of each skill into .claude/skills/.

Drift detection

A Claude Code hook runs on session start. If local skill files have diverged from their registry source, the agent is told before it starts work. No silent staleness.

Bidirectional sync

rune push sends local edits back to the registry. Skills evolve where they're used, then propagate to every project that syncs from that registry.

Upstream imports

Import skills from upstream registries (community, vendor) into your own. Track upstream versions. Pull updates selectively. Fork when you need to diverge.

Platform-agnostic

Works with Claude Code, Cursor, Windsurf, Copilot, Gemini CLI. Skills are markdown files in a directory convention. The agent reads them. rune manages them.

Commands

rune setupone-time config + hook install
rune initcreate project manifest
rune add <skill> --from <reg>add a skill
rune syncpull latest from registries
rune checkshow drift
rune push <skill>push local changes back
rune browse <registry>discover available skills
rune import <skill>@<upstream>import from upstream