{
  "markdown": "**English** | [한국어](README.ko.md)\n\n# skill-curator\n\nAgent Skills librarian for LLM coding agents.\n\nUse it with Claude Code, Codex, Cursor, Gemini CLI, OpenCode, Antigravity, or any harness that reads `SKILL.md` packages, to inventory what is installed, validate it, find duplicates, and archive dead weight **without losing anything**.\n\n**Landing page:** <https://cskwork.github.io/skill-curator/>\n\n## Why This Exists\n\nSkill libraries grow faster than anyone curates them. Copies drift across `~/.claude/skills`, `~/.agents/skills`, project checkouts, and harness-specific roots until nobody knows which package actually wins, which one is broken, and which one is a stale twin.\n\n`skill-curator` keeps the contract clear:\n\n- the engine reports **facts** — discovery, validation, hashes, collisions, lifecycle state\n- the model makes only **semantic judgments** — is this a true duplicate, a neighbour, or a merge candidate\n- every package mutation is a **dry run** until you pass `--apply`\n- nothing is deleted; archives and snapshots keep a full undo route\n\n## Features\n\n- Multi-root discovery across Claude Code, Codex, Cursor, Gemini CLI, OpenCode, and custom roots\n- Frontmatter and package validation with per-skill state: active, stale, unmanaged, pinned, protected, invalid, archived\n- Exact-duplicate detection by complete-package hash, plus name-collision and precedence reporting\n- Opt-in lifecycle: newly discovered skills are unmanaged and cannot be pruned until `adopt`\n- `pin` / `unpin` protection, plus soft protection for Git-tracked project skills\n- Dry-run-by-default `archive` and `prune`; `--apply` required to move anything\n- Full-package `archive` → `list-archived` → `restore` round trip, never overwriting an occupied path\n- `snapshot` / `rollback` with conflict preservation\n- Symlinked skill entries archived without touching their target\n- No network access, no telemetry, no invented usage counts\n\n## Install\n\nSee [INSTALL.md](INSTALL.md) for every harness. Quickest paths:\n\n```bash\n# Claude Code\nclaude plugin marketplace add cskwork/skill-curator\nclaude plugin install skill-curator@skill-curator\n\n# Cursor, OpenCode, Amp, and other agent-skills harnesses\nnpx skills add cskwork/skill-curator\n\n# Manual copy into any skills root\ncurl -fsSL https://raw.githubusercontent.com/cskwork/skill-curator/main/install.sh | bash\n```\n\n## Quick Start\n\nAsk your agent:\n\n```text\nUse skill-curator to review all installed coding-agent skills. Show invalid packages,\nname collisions, exact duplicates, semantic overlap candidates, protected skills,\nand a dry-run archive plan. Do not mutate anything.\n```\n\nOr drive the engine directly:\n\n```bash\ncd skills/skill-curator\n\npython3 scripts/curator.py review --cwd \"$PWD\"       # full inventory report\npython3 scripts/curator.py validate --cwd \"$PWD\"     # frontmatter and package checks\npython3 scripts/curator.py duplicates --cwd \"$PWD\"   # exact duplicates and collisions\n```\n\nLifecycle management is opt-in:\n\n```bash\npython3 scripts/curator.py adopt <skill-id> --cwd \"$PWD\"\npython3 scripts/curator.py pin <skill-id> --cwd \"$PWD\"\npython3 scripts/curator.py mark-used <skill-id> --cwd \"$PWD\"\npython3 scripts/curator.py prune --cwd \"$PWD\"           # dry run\npython3 scripts/curator.py prune --cwd \"$PWD\" --apply   # archive eligible packages\n```\n\nArchive and restore:\n\n```bash\npython3 scripts/curator.py archive <skill-id> --reason \"superseded\" --cwd \"$PWD\"\npython3 scripts/curator.py archive <skill-id> --reason \"superseded\" --cwd \"$PWD\" --apply\npython3 scripts/curator.py list-archived --cwd \"$PWD\"\npython3 scripts/curator.py restore <skill-id> --cwd \"$PWD\" --apply\n```\n\n## Commands\n\n| Command | Purpose |\n| --- | --- |\n| `review` | Full inventory with per-skill state and recommendations |\n| `status` | Compact summary of the current library |\n| `scan` | Raw discovery across all configured roots |\n| `validate` | Frontmatter and package structure checks |\n| `duplicates` | Exact duplicates, name collisions, precedence |\n| `pin` / `unpin` | Protect a skill from archive and prune |\n| `adopt` | Opt a skill into age-based lifecycle management |\n| `mark-used` | Record explicit usage evidence |\n| `archive` | Move a complete package into the archive (dry run by default) |\n| `prune` | Archive every eligible adopted skill (dry run by default) |\n| `list-archived` | List recoverable archived packages |\n| `restore` | Return an archived package to its original path |\n| `snapshot` | Copy packages before risky edits |\n| `rollback` | Restore a snapshot, preserving any changed occupant |\n\n## State\n\nCurator-owned state defaults to `~/.skill-curator/`:\n\n```text\nstate.json                 registry and lifecycle evidence\nconfig.json                optional custom roots and thresholds\narchive/<archive-id>/      complete moved packages and manifests\nbackups/<snapshot-id>/     complete copied snapshots and conflicts\nreports/                   optional command reports\n```\n\nSet `SKILL_CURATOR_HOME` to relocate it. Add unsupported roots through repeated `--root` flags or `config.json`; see [HARNESS-ROOTS.md](skills/skill-curator/references/HARNESS-ROOTS.md).\n\n## Agent Rule\n\nThe skill is `disable-model-invocation: true`. The agent must not curate on a hunch — it runs only when you explicitly ask, and it never applies a mutation your request did not authorize.\n\n## Important Limitation\n\nThis is an on-demand skill, not a background daemon. Coding harnesses do not expose one portable invocation-telemetry API, so the curator does not invent usage counts. It records explicit `mark-used`, first observation, observed content changes, and restores. Harness-specific hooks can call `mark-used` later without changing the archive model.\n\n## Layout\n\n```text\nskills/skill-curator/\n  SKILL.md                 the skill contract\n  scripts/curator.py       deterministic engine\n  references/POLICY.md     curation policy and safety rules\n  references/HARNESS-ROOTS.md  known skill roots per harness\n  agents/openai.yaml       OpenAI-style agent metadata\n  tests/test_curator.py    isolated test suite\ndocs/index.html            landing page (GitHub Pages, EN/KO switchable)\ninstall.sh                 copy the package into a skills root\nREADME.ko.md               Korean README\n```\n\n## Test\n\n```bash\ncd skills/skill-curator\npython3 -m unittest discover -s tests -v\n```\n\nThe isolated suite covers discovery, validation, duplicate detection, dry-run safety, full-package archive/restore, pinning, adoption-gated pruning, snapshot rollback, Git protection, and symlink handling.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n",
  "bytes": 6573,
  "sha": "0a1c47824b8ca8c3eba4a1780707b554183669b9cdb7b8155ae39171fa180abb",
  "repo_slug": "cskwork/skill-curator",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_cskwork_skill_curator_ef2a4797/readme"
}