[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-82098":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":14,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":15,"rankGlobal":9,"rankLanguage":9,"license":16,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":19,"hasPages":17,"topics":20,"createdAt":9,"pushedAt":9,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":14,"starSnapshotCount":14,"syncStatus":12,"lastSyncTime":24,"discoverSource":25},82098,"skills-manager","EfanWang\u002Fskills-manager","EfanWang","Manage, install, update, and trace agent skills (Claude Code, Cursor, Codex CLI)",null,"Python",30,2,1,0,41.43,"MIT License",false,"main",true,[],"2026-06-12 04:01:37","# skills-manager\n\nEnglish | [简体中文](README.zh-CN.md)\n\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-blue.svg)](LICENSE)\n[![Python](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython-3.9%2B-3776AB.svg)](https:\u002F\u002Fwww.python.org\u002F)\n[![GitHub](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGitHub-EfanWang%2Fskills--manager-181717.svg)](https:\u002F\u002Fgithub.com\u002FEfanWang\u002Fskills-manager)\n\n`skills-manager` is a simple, practical skill manager for the `SKILL.md` ecosystem. It scans sibling skills under the current skills root, records where each skill came from, and helps agents list skills, trace sources, check updates, update skills, install skills, and delete skills.\n\nIt works with any agent that supports `SKILL.md`:\n\n| Agent | Support |\n|---|---|\n| [Claude Code](https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fskills) | Supports skills directories |\n| [Cursor](https:\u002F\u002Fcursor.com\u002Fchangelog\u002F2-4) | Supports skills in 2.4+ |\n| [Codex CLI](https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fskills) | Supports Codex skills |\n\n## Why use it\n\nOnce you install multiple skills in the same environment, a few common questions appear quickly:\n\n- Which skills are currently installed?\n- Which GitHub repository did a skill come from?\n- Are there upstream updates available?\n- Will a manual update overwrite local files?\n- How should an unknown-source skill be maintained?\n\n`skills-manager` solves these problems with a lightweight `sources.json` registry. It manages only sibling skills under its own parent directory and does not aggregate inventories across Claude Code, Cursor, Codex CLI, or other tools. This keeps its behavior explicit and its scope controlled.\n\n## Features\n\n| Feature | Description |\n|---|---|\n| Skill inventory | Scan sibling skill directories and list name, type, description, and status |\n| Source tracing | Analyze local evidence for unknown-source skills and hand unresolved cases to the agent for web search |\n| Update checks | Check registered GitHub-backed skills against upstream |\n| Skill updates | Pull the latest upstream version and create a backup before replacement |\n| Skill installation | Clone a skill from a GitHub URL, place it atomically, and register its source |\n| Skill deletion | Create an automatic backup before removal for manual recovery |\n\n## Installation\n\nClone this repository into your skills root:\n\n```bash\ncd ~\u002F.claude\u002Fskills          # or your agent's skills root\ngit clone https:\u002F\u002Fgithub.com\u002FEfanWang\u002Fskills-manager.git\n```\n\nCommon skills roots:\n\n| Agent | Typical skills root |\n|---|---|\n| Claude Code | `~\u002F.claude\u002Fskills\u002F` or project `.claude\u002Fskills\u002F` |\n| Cursor | `~\u002F.cursor\u002Fskills\u002F` or project `.cursor\u002Fskills\u002F` |\n| Codex CLI | `~\u002F.codex\u002Fskills\u002F` or `~\u002F.agents\u002Fskills\u002F` |\n\nThe skill is ready immediately. Runtime requirements:\n\n- Python 3.9+\n- `git` available in PATH\n\n## Quick start\n\nList all skills and check whether remote skills have updates:\n\n```powershell\npython scripts\u002Finventory.py --check-remote --audit-unclaimed\n```\n\nCheck a single remote skill against upstream:\n\n```powershell\npython scripts\u002Fcheck_remote.py my-skill\n```\n\nUpdate an outdated skill:\n\n```powershell\npython scripts\u002Fupdate_skill.py my-skill\n```\n\nInstall a skill from GitHub:\n\n```powershell\npython scripts\u002Finstall_skill.py https:\u002F\u002Fgithub.com\u002Fuser\u002Frepo\u002Ftree\u002Fmain\u002Fskills\u002Fmy-skill\n```\n\n## Runtime notes\n\nThe first full inventory and source audit may take longer because `skills-manager` traverses every sibling skill under the current skills root and attempts to create or complete source records in `sources.json`. After those records are established, later inventory scans and update checks are usually faster.\n\n## Command reference\n\nAll scripts live in `scripts\u002F` and output JSON to stdout. Errors go to stderr and use structured exit codes:\n\n| Exit code | Meaning |\n|---|---|\n| 2 | Bad input |\n| 3 | Corrupted `sources.json` |\n| 4 | Remote operation failed |\n| 5 | Filesystem replacement failed |\n\n| Script | Purpose |\n|---|---|\n| `inventory.py [--check-remote] [--audit-unclaimed]` | Scan and classify all sibling skills |\n| `audit_unclaimed.py [--dry-run]` | Batch-identify unclaimed skill sources |\n| `check_remote.py \u003Cname>` | Check a single remote skill against upstream |\n| `update_skill.py \u003Cname> [--dry-run]` | Pull the latest upstream version via clone and atomic swap |\n| `install_skill.py \u003Curl> [--name N] [--branch B]` | Clone, install atomically, and register source |\n| `sources.py list\\|remove\\|claim-local\\|claim-remote` | Manage `sources.json` entries |\n| `similarity.py \u003Clocal.md> \u003Cremote.md>` | Compare two `SKILL.md` files for similarity |\n\n## Status model\n\nEach skill is classified into one of three types:\n\n| Type | Meaning | Update-checkable |\n|---|---|---|\n| `remote` | Has a GitHub source registered in `sources.json` | Yes |\n| `local` | Marked by the user as private or self-authored | No, always treated as current |\n| `unclaimed` | Source is unknown and not yet traced | No |\n\nInventory statuses include:\n\n| Status | Meaning |\n|---|---|\n| `up_to_date` | Local revision matches upstream HEAD |\n| `update_available` | Upstream has newer commits |\n| `unknown` | Cannot determine, usually because the skill is unclaimed or a network error occurred |\n\n## Source tracing workflow\n\n`skills-manager` uses layered evidence to determine where a skill came from:\n\n1. **Read `.git\u002Fconfig`**: If the skill directory is itself a Git checkout, read its remote URL directly.\n2. **Inspect GitHub URLs in `SKILL.md`**: If the file contains a GitHub link, treat it as an explicit source hint and verify it with a similarity check.\n3. **Hand off to agent web search**: For unresolved skills, the script emits a `search_query_hint` so the agent can use web search to evaluate candidate sources. This step requires network access.\n\nAfter identifying a source, register it manually:\n\n```powershell\n# Remote skill from GitHub\npython scripts\u002Fsources.py claim-remote my-skill --url https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo --branch main --subpath skills\u002Fmy-skill\n\n# Local or private skill\npython scripts\u002Fsources.py claim-local my-skill\n```\n\n## Safety design\n\n- **Non-destructive by default**: `audit_unclaimed.py` only writes to `sources.json`; it does not modify skill files.\n- **Automatic backups**: Install, update, delete, and other replacement operations create backups under `.backup\u002F`.\n- **Atomic replacement**: Directory replacement uses rename-based swaps to reduce the risk of broken partial state.\n- **Manual recovery**: Backup paths look like `.backup\u002F\u003Cname>-\u003Ctimestamp>-\u003Cuuid>\u002F` and can be moved back manually.\n- **No telemetry**: No analytics and no telemetry. Network access is limited to `git ls-remote` and raw file fetches used for verification.\n- **Minimal scope**: Only sibling skill directories are managed. Plugin caches, Cursor built-in skills, and files outside the skills root are untouched.\n\n## Limitations\n\n- Only GitHub is supported as a remote source; GitLab, zip URLs, npm, and other sources are not supported\n- Local edits are not detected or merged; updates replace the directory with the upstream version after creating a backup\n- Cursor's built-in `skills-cursor\u002F` directory is not managed\n- Plugin-managed skills such as `~\u002F.claude\u002Fplugins\u002Fcache\u002F...` are not managed\n\n## Development\n\nRun tests:\n\n```powershell\npython -m unittest tests.test_contract\n```\n\nProject structure:\n\n```text\nskills-manager\u002F\n|-- SKILL.md               # Agent-facing skill instructions\n|-- sources.json           # Registry of known skill sources\n|-- scripts\u002F\n|   |-- _common.py         # Shared utilities\n|   |-- inventory.py       # List and classify skills\n|   |-- audit_unclaimed.py # Batch source identification\n|   |-- check_remote.py    # Check single skill against upstream\n|   |-- update_skill.py    # Update to latest upstream\n|   |-- install_skill.py   # Install from GitHub\n|   |-- sources.py         # sources.json CRUD\n|   `-- similarity.py      # SKILL.md file comparison\n|-- tests\u002F\n|   `-- test_contract.py\n|-- .backup\u002F               # Auto-created backups, gitignored\n`-- .tmp\u002F                  # Temporary files, gitignored\n```\n\n## Getting help\n\nIf source identification is incorrect, an update fails, or script output is unexpected, open an issue at [EfanWang\u002Fskills-manager](https:\u002F\u002Fgithub.com\u002FEfanWang\u002Fskills-manager) with the relevant command, JSON output, and error message.\n\n## License\n\nMIT\n","skills-manager 是一个用于管理、安装、更新和追踪代理技能（如 Claude Code、Cursor 和 Codex CLI）的工具。其核心功能包括扫描同级技能目录、记录每个技能的来源、列出已安装技能、追踪来源、检查更新、更新技能、安装新技能以及删除技能。通过轻量级的 `sources.json` 注册表，它能够有效解决多技能环境下的常见问题，如识别技能来源和自动备份等。适用于需要在同一个环境中管理和维护多个技能的场景，特别是支持 `SKILL.md` 生态系统的代理工具用户。该工具要求 Python 3.9 及以上版本，并且系统中需安装有 git。","2026-06-11 04:07:44","CREATED_QUERY"]