Skip to content

kew skills

Install and maintain kew's shipped agent skills and the security-guard hook inside a target repo's .claude/ directory. Artifacts install from the wheel's package data only — no remote fetch, no registry. See Skills catalog for what's in the box.

kew skills list                          # state of every shipped artifact
kew skills install --all                 # install everything not yet installed
kew skills install plan-to-issues        # install one artifact by name
kew skills update                        # converge ALL installed + missing artifacts
kew skills update security-guard         # refresh one artifact
kew skills diff                          # show drift for every artifact
kew skills diff handoff                  # show drift for one artifact

State machine

kew skills list classifies each artifact's installed copy:

State Meaning
not-installed Nothing at the target path yet.
current Installed copy matches the shipped content exactly.
outdated Installed copy matches a prior shipped version — safe to auto-update. For the security-guard hook, this means the file still carries the # managed-by: kew header but its content no longer matches the current re-render (including a hand-edit that left the header in place); update overwrites it silently.
locally-modified Installed copy doesn't match any known shipped version — someone hand-edited it. For the security-guard hook specifically, this only fires once the # managed-by: kew header has been removed or the file replaced outright — kew still owns (and will overwrite) any file carrying that header.

Skills compare by sha256 against the manifest's current and historical hashes. The security-guard hook compares differently: it re-renders the template with your current kew.toml and checks for the # managed-by: kew header rather than matching against a fixed set of historical hashes — see Guard updates preserve your config for why that matters and where to put durable customizations.

kew skills install [names…] [--all] [--force]

Installs the named artifacts, or every artifact with --all. Refuses to overwrite a locally-modified copy unless --force is passed. Exits 1 if any artifact was refused, or if no names and no --all were given.

kew skills update [names…] [--force]

No names = converge everything, not just what's already installed: it refreshes every outdated artifact to the current shipped version and installs every not-installed one. Pass explicit names to scope the update to specific artifacts (still refusing local modifications without --force). This is the command kew setup --with-skills and kew setup's printed tip both point at.

--force overwrites locally-modified copies with the shipped version, discarding the local edits. kew skills diff first to see what you'd lose.

kew skills diff [names…]

Prints a unified diff of installed-vs-shipped for each artifact that has drifted (empty output for artifacts that are current or not-installed). Defaults to every artifact when no names are given.

Runner scope (v1)

Skills at .claude/skills/<name>/SKILL.md are read by Claude Code only — including headless (claude -p) dispatch runs. The opencode, pi, and lemonade runners do not read .claude/skills/ in v1; installed skills have no effect on dispatches routed through them. See Runners for routing.

Exit codes

Code Meaning
0 All selected artifacts applied (or already current) / diff printed cleanly.
1 One or more artifacts were refused (unknown name, or locally-modified without --force), or install was called with no names and no --all.