Docs
Skills
A skill library you manage once, from any device, and materialize into ~/.claude/skills/ with a single command. There are two kinds: reference skills, backed by a public git repo, and private skills, a local directory that’s end-to-end encrypted before it ever leaves your machine.
Reference skills
caddi skills add <git-url> adds a skill backed by a public git repository. Its name defaults to the last path segment of the URL (with a trailing .git stripped), overridable with --name.
Unless you pass --ref, add resolves the remote’s current HEAD commit via git ls-remote and pins the skill to that exact commit from the moment it’s added, not just from the next sync. This is deliberate: a moving ref (a branch name that keeps changing) is a prompt-injection vector, since it would let a skill’s instructions change silently underneath you on some later sync. If the remote can’t be resolved, the skill is added unpinned with a warning, and you can pin it explicitly with --ref.
--path <subdir> is for a monorepo of skills: it clones the whole repo into a cache directory, then copies only that subdirectory into ~/.claude/skills/<name>, so the materialized skill never contains the rest of the repo or its .git.
Private skills
caddi skills add <local-dir> (any argument that resolves to an existing directory) adds a private skill. The directory is packed into a deterministic byte archive, sealed to your account’s vault public key with the same sealed-box primitive used for connections, and uploaded to a presigned URL. The server only ever receives and stores the ciphertext; the skill’s actual contents never transit it in plaintext.
Packing is deterministic on purpose: entries are sorted by relative path before writing, so packing the same directory twice, even from different machines with different filesystem orderings, produces byte-identical output.
caddi skills sync
caddi skills sync materializes your whole library into ~/.claude/skills/, the only sync target today (Cursor and Codex are planned fast-follows). For each skill in the library:
- Reference skills are cloned (or fetched, if already cloned) and checked out at their pinned ref. If the pinned ref changed since the last sync, a
git diff --statsummary is printed before checking it out, so an upstream change is never silent. - Private skills are downloaded as ciphertext from a presigned URL, unsealed locally with your vault keypair, and unpacked to disk.
A skill removed from your library is removed from disk on the next sync. This is tracked with a local manifest, specifically so a directory you dropped into ~/.claude/skills/ by hand, one Caddi never created, is never touched or deleted by a sync.
caddi skills sync
Next
- CLI reference: the full
skills add/list/remove/syncoption list. - Security model: the sealed-box encryption private skills go through.