Skip to content

Managing Skills

The daily loop: see (status/scan) → absorb what's loose → dedup/clean → switch things on and off with enable/disable and packs.

Taking over loose skills (接管技能)

ipman absorb --user            # inventory: absorbable / git clone / suite / not-a-skill
ipman absorb --user my-notes   # take one over
ipman absorb --user --all      # every plain skill directory

Absorbing moves the directory into the store (as a fresh git repo, so changes are tracked from that point on) and leaves a symlink in its place — your agent sees exactly the same skill. The link points at a read-only pinned snapshot; pass --live to link the writable working copy instead (for skills you edit constantly).

What --all deliberately leaves alone: git clones (prefer their upstream), suite wrappers whose files are symlinks into a toolkit (e.g. gstack — its own updater owns them), marketplace plugins (your agent owns them), and anything without a SKILL.md.

Absorb is idempotent and resumable, and same-name absorbs across projects are content-compared: identical → deduplicated onto one store copy; different → refused with both versions preserved (--as <new-name> keeps both).

Off and on without loss (停用/启用)

ipman disable my-notes --scope user
ipman enable  my-notes --scope user

disable removes only the symlink — the original stays in the store and the exact version pin stays in the ledger, so enable restores precisely what you had. The TUI's 归档区 lists everything enable-able in the current scope, including skills other scopes are using (enabling shares the same original — no copying).

Packs (功能包)

ipman pack create writing-kit my-notes baoyu-comic
ipman enable  --pack writing-kit --scope .      # into the current project
ipman disable --pack writing-kit --scope user

Packs are additive named sets: several can be active in one scope, they can overlap, and they work on native and custody scopes alike. Members must be store-managed (absorb first — pack creation tells you which ones aren't). In the TUI: Space to multi-select, p to create a pack from the selection.

Dedup and clean

ipman dedup && ipman dedup --apply
ipman clean && ipman clean --apply     # quarantines; --empty-trash purges

Dedup merges only semantically-compatible copies (loose dirs and unremoted absorbed skills); anything with its own upstream identity is reported, never merged. Clean never deletes — findings move to ~/.ipman/trash/<timestamp>/ and can be moved back.

Contributing fixes upstream

Absorbed skills are real git repos in the store. Edit there, commit, add a remote, PR — ipman doctor reminds you when a live working copy has uncommitted changes.