Agent skills, on every machine.
shuhari links the skills you choose from git repositories into the directories your agents read. Each machine keeps its own config. Git carries the skills, and one command brings a machine up to date.
[targets] claude = { kind = "host", path = "~/.claude/skills" } agents = { kind = "host", path = "~/.agents/skills" } [sources.agent-skills] path = "~/Projects/agent-skills" git = "git@github.com:you/agent-skills.git" skills = ["personal/*"] [sources.superpowers] git = "https://github.com/obra/superpowers.git" skills = ["skills/*"] rev = "b55764852ac78870e65c6565fb585b6cd8b3c5c9" [[install]] skills = ["agent-skills:rust-style", "superpowers:brainstorming"] targets = ["claude"]
- Install
Prebuilt binaries for macOS and Linux, from the Homebrew tap.
brew installattilagyorffy/ shuhari/ shuhari - Init
Find your skills, propose sources and install choices, write the config after you confirm.
shuhari init - Apply
Link the chosen skills into each target.
shuhari apply - Sync
Later: update every source, then apply.
shuhari sync
It changes only what it owns.
A target directory often holds more than shuhari put there: a skill you are still writing, a link to another tool, a copy from an older setup. shuhari changes only symlinks that point into one of its sources and name one of its skills. It never overwrites or deletes a real directory, or a link that points somewhere else.
~/.claude/skills/ ├── rust-style → ~/Projects/agent-skills/personal/rust-style 1 ├── brainstorming → ~/.local/share/shuhari/sources/superpowers/… 1 ├── draft-skill/ 2 │ └── SKILL.md └── notes → ~/Dropbox/notes 3
Example targetThree kinds of entry
- 1Owned link. It points into a source and names one of its skills.
applycreates, replaces and removes these to match your install choices. - 2Real directory. shuhari reports it as
not importedand leaves it in place. You can import it into a source, or declare it local. - 3Link that points elsewhere. Not shuhari's. It is never touched.
The one exception is shuhari import, which you run on purpose. It copies an unmanaged skill directory into a source, replaces the original with a link, and then deletes the original.
Init shows every change first.
shuhari init asks where your skills are: a git URL or a local path. It searches the repository for SKILL.md directories and proposes one skill pattern per parent directory. It proposes each git submodule as a separate source, pinned to the commit the repository records.
It adds an install choice for each link that already exists in your targets, so the next apply removes nothing that works now. Then it shows every change and the plan of the next apply, and writes the config only after you confirm.
summary: 40 linked, 1 kept local, 31 need attention, 9 not managed sources: 148 skills in 4 sources pending: 12 link changes; run `shuhari apply`
Example outputThe summary init prints
After it writes the config, init prints this summary. When an entry needs attention, it offers shuhari doctor --fix, which asks about each problem it can fix.
Install
The Homebrew tap attilagyorffy/homebrew-shuhari ships prebuilt binaries for macOS (Apple silicon and Intel) and Linux (x86_64). Installing needs no credentials and no Rust toolchain.
brew install attilagyorffy/shuhari/shuhari
InstallHomebrew
Upgrade with brew upgrade shuhari. From a checkout of the source, run cargo install --path ..
Quick start
shuhari init # find your skills, propose sources and install choices, write the config shuhari apply # link the chosen skills shuhari doctor # check the whole setup; `doctor --fix` asks about each problem it can fix shuhari sync # later: update every source, then apply
Quick startFour commands
Every question that init asks has a flag, and --yes accepts every proposal. See init for the flags. Every command accepts --json.
The name
守破離 (shu-ha-ri) means “obey, break, leave”: the three stages of mastery in tea ceremony and the martial arts. A student first follows the form, then breaks from it, then leaves it behind. The tool keeps the skills you practice with on every machine. The name is a theme; shuhari does not track your progress.