Real dependency resolution
Skills depend on skills. skill-graph resolves the full transitive closure, detects cycles and dangling edges, and installs leaves-first — the npm model, for agents.
Publish, version, and install AI-agent skills with full transitive
dependency resolution. One command pulls a skill and its entire graph
into .claude/skills/ — flat, standard-conformant, and ready
for your agent.
$ skill-graph search tracker
@acme/run-tracker-app 1.0.0 Step-count run tracker — ties the graph together $ skill-graph install @acme/run-tracker-app installed @acme/run-tracker-app (7 skills) into .claude/skills/
$ skill-graph ls
@acme/[email protected] ├── @acme/[email protected] │ └── @acme/[email protected] │ └── @acme/[email protected] ├── @acme/[email protected] │ └── @acme/[email protected] (deduped) └── @acme/[email protected] // why skill-graph
Everything you expect from a modern registry — resolution, versioning, search, reproducibility — purpose-built for the way agents consume skills.
Skills depend on skills. skill-graph resolves the full transitive closure, detects cycles and dangling edges, and installs leaves-first — the npm model, for agents.
Every skill is a plain SKILL.md folder per the agentskills.io standard. skill-graph is strictly additive — it never rewrites your content or nests folders.
Skills are addressed by @scope/name coordinates. Your scope is stamped from your identity server-side — you can only ever publish as yourself. Versions never change.
The registry indexes the description from each skill’s frontmatter, so you find skills by what they do — not just what they’re called.
Skills land flat in .claude/skills/. Hand-written or private skills already there are left untouched — install only ever manages what it installed.
A manifest of intent and a lockfile of the resolved graph live at your project root. Commit them and anyone rebuilds the exact same skills — like npm ci.
// the workflow
Three commands. The registry handles identity, versioning, and the graph.
Write a standard SKILL.md, then bring it under management with one command. skill-graph adds a small node.json sidecar — your content is never rewritten.
$ skill-graph init ./pdf-toolsinitialized skill-graph.node.json — now managed Push the whole directory. skill-graph validates the graph, publishes leaves-first, and stamps your @scope from your identity — no scope to type, nothing to spoof.
$ skill-graph publish ./skillspublished @you/[email protected] Anyone names the coordinate. skill-graph resolves the entire dependency closure and writes it flat into .claude/skills/, ready for the agent to discover.
$ skill-graph install @you/pdf-toolsinstalled @you/pdf-tools (3 skills) // under the hood
skill-graph runs as a Cloudflare Worker backed by D1 and R2 — anonymous reads, authenticated writes, immutable versions. The CLI is a small, self-contained binary that talks to it over a typed contract.
// the CLI
A scriptable, non-interactive surface — every command runs clean for humans and agents alike.
skill-graph search <kw> find skills by name or description skill-graph install @scope/name resolve the closure into .claude/skills/ skill-graph ls print the installed dependency tree skill-graph ls @scope/name inspect a coordinate before installing skill-graph init <dir> bring a SKILL.md under management skill-graph publish <dir> publish a graph of managed skills skill-graph whoami show the @scope you publish under skill-graph register create an account (password via stdin) skill-graph login sign in and store an API key skill-graph logout remove the stored key // get started
Point it at a registry, log in, and you’re publishing and installing in minutes. Works for humans at a terminal and agents in a loop.
# install the CLI $ npm i -g skill-graph # point at your registry $ export SKILL_GRAPH_REGISTRY=https://registry.example.dev
# sign in & publish $ skill-graph login --email [email protected]
$ skill-graph publish ./skills
published @you/[email protected]