跨平台(Windows / Linux / macOS)原生桌面 + 命令行工具, 帮你统一收纳、版本化、同步散落在硬盘各处的 AI Skill 文件。
主窗口 + 文件夹树预览(左侧表格按类型上色 + 可排序,右侧上方树状预览所属目录、下方内容预览)
相似度 / 冲突检测(自动分组:完全重复 / 同名冲突 / 名字相似 / 内容相似)
Skill 编辑器(YAML frontmatter + Markdown 正文双面板,保存自动版本快照)
截图由
python scripts/screenshots.py在你机器上一键重新生成。
随着 Claude / Copilot / Cursor / Cline 等 AI 工具普及,你的电脑里很快就会散落各种 Skill 文件:
~/.agents/skills/*/SKILL.md
~/.claude/plugins/.../skills/*/SKILL.md
~/.vscode/extensions/.../prompts/skills/*/SKILL.md
~/.github/instructions/*.instructions.md
~/projects/foo/AGENTS.md
~/projects/bar/.github/copilot-instructions.md
…
它们格式各异、版本不一、还经常重名冲突。SkillsManager 提供:
| 痛点 | 解法 |
|---|---|
| 🔍 不知道电脑里有多少 Skill、在哪儿 | 0.5 秒内全盘扫描 → 一张表全列出 |
| 📝 频繁手改 Skill,没版本概念,改坏了找不回 | 每个 Skill 一个独立 Git 仓库,自动快照、可视化回滚 |
| 🪞 同一份 Skill 被复制了 N 份,名字差不多内容差一点 | 4 种相似度算法(哈希精确 / 名字模糊 / 内容 MinHash / 名字冲突)一键扫出 |
| 🗑️ 删错了找不回来 | 7 天回收站,过期自动清理 |
| ☁️ 想在多台电脑共用 Skill | 一键推送 / 拉取到统一的 GitHub 仓库 |
| 模块 | 说明 |
|---|---|
| 🔍 全盘扫描 | walk 用户目录(默认)+ 自定义路径,自动跳过 node_modules / .git / __pycache__ / venv / AppData 等噪音 |
| 🧠 多格式 Skill 识别 | 同时支持 SKILL.md、*.instructions.md、*.prompt.md、*.agent.md、AGENTS.md、copilot-instructions.md |
| 📚 元数据解析 | 自动提取 YAML frontmatter(name / description / applyTo / tools / model …) |
| 🌳 文件夹树预览 | 选中任意 Skill 即可展开它所在目录的完整文件树,点击预览每个文件 |
| ✏️ 内置编辑器 | 双面板编辑:YAML frontmatter(含格式校验) + Markdown 正文,保存自动快照 |
| 🪞 相似度/冲突检测 | 文件名模糊(RapidFuzz)+ 内容 MinHash(datasketch)+ 哈希精确匹配 + 同名冲突 |
| 🕒 版本管理 | 每个 Skill 独立 Git 仓库(无需用户装 git 知识),可视化提交历史 / diff / 回滚 |
| 🗑️ 7 天回收站 | 删除即归档为 zip,7 天内一键还原,过期自动清理 |
| ☁️ GitHub 同步 | 把所有 Skill 作为子目录同步到一个统一的 GitHub 仓库,多端共享 |
💻 CLI 工具 (smcli) |
不开 GUI 也能 scan / list / show / delete / similar / push 等 |
git clone https://github.com/daim2tsos/SkillsManager.git
cd SkillsManager
.\scripts\bootstrap.ps1 # 自动建 .venv 并装依赖
.\scripts\run.ps1 # 启动 GUIgit clone https://github.com/daim2tsos/SkillsManager.git
cd SkillsManager
./scripts/bootstrap.sh
./scripts/run.shpython -m venv .venv
.venv/Scripts/activate # Windows
source .venv/bin/activate # Linux/macOS
pip install -e . -i https://mirrors.aliyun.com/pypi/simple/
python -m skills_manager # 启动 GUI
smcli scan # 命令行扫描依赖:Python 3.10+、Git(系统级,子进程调用)、PySide6 6.6+。
启动后界面分为四块:
┌────────────────────────────────────────────────────────────────────┐
│ [🔍扫描] [🪞相似度] [🗑回收站] | [☁推送] [⬇拉取] | [⚙设置] │ ← 工具栏
├──────────────────────────┬─────────────────────────────────────────┤
│ 搜索框 类型筛选 … │ 📁 Skill 文件夹 │
│ ─────────────────────── │ └ skill-name/ │
│ ┌─名称─┬类型─┬描述─┬路径─┐│ ├ SKILL.md (粗体=入口文件) │ ← 文件夹树
│ │ │ │ │ ││ ├ references/ │ 预览
│ │ │ │ │ ││ └ scripts/ │
│ └──────┴─────┴─────┴──────┘├─────────────────────────────────────────┤
│ 共 63 个 Skill │ ### Skill 内容预览 │
│ │ │ ← 内容预览
│ │ Frontmatter / 正文… │
├──────────────────────────┴─────────────────────────────────────────┤
│ [📂打开位置] [✏️编辑] [🕒版本] [🗑删除] │ ← 操作按钮
└────────────────────────────────────────────────────────────────────┘
每种 Skill 在表格里有自己的图标和颜色,便于快速区分:
| 图标 | 类型 | 颜色 |
|---|---|---|
| ⚡ | claude_skill (SKILL.md) |
橙 |
| 📝 | instructions (*.instructions.md) |
蓝 |
| 💬 | prompt (*.prompt.md) |
紫 |
| 🤖 | agent_md (*.agent.md / AGENTS.md) |
绿 |
| 🖥️ | copilot_instructions (copilot-instructions.md) |
青 |
- 首次打开:点
🔍 扫描—— 0.5 秒左右扫完用户主目录,所有 Skill 入表。 - 筛选/搜索:右上角输入关键字,下拉框切换类型;表头点击可排序。
- 选中一行 → 右侧自动展示该 Skill 所在文件夹的全部内容,点树里任意文件可预览。
- 双击行(或点
✏️ 编辑)→ 打开编辑器,YAML + 正文分开编辑,保存时自动建立 Git 快照。 - 🕒 版本 → 浏览这个 Skill 的所有历史快照,可以一键回滚到任何版本。
- 🪞 相似度/冲突 → 自动给出 4 种类型的可疑分组,便于清理重复。
- 🗑 删除 → 移入
~/.skills_manager/recycle/,7 天内可还原。 - ☁ 推送 GitHub → 在
⚙ 设置里填owner/repo+ Token,即可一键同步到云端。
不想开 GUI、想跑脚本批处理?用 CLI:
smcli scan # 扫描
smcli scan --root ~/work --root ~/projects # 自定义根
smcli list # 列出全部
smcli list --type instructions # 按类型筛选
smcli list --keyword agent --json # JSON 输出
smcli show 35 # 查看某个 Skill 详情
smcli delete 35 # 移入回收站
smcli recycle list # 回收站列表
smcli recycle restore 1 # 还原
smcli recycle purge 1 # 彻底删除
smcli recycle cleanup # 清理过期项
smcli similar # 相似度/冲突
smcli similar --type duplicate # 只看完全重复
smcli versions 35 # 版本历史
smcli push # 推送 GitHub
smcli pull # 拉取 GitHub
smcli gui # 启动 GUI所有子命令都支持 -h 查看帮助。
为避免 Microsoft Store / UWP 沙箱化 Python 对 %APPDATA% 的重定向影响子进程(特别是 git),
统一放在用户主目录:
~/.skills_manager/
├── index.db # SQLite 索引(WAL 模式)
├── repos/ # 每个 Skill 的独立 Git 仓库
│ └── <skill_id>/.git
├── recycle/ # 7 天回收站归档(zip)
│ └── <skill_id>_<ts>.zip
├── cloud/ # GitHub 统一同步仓库的本地工作副本
├── logs/ # 滚动日志
└── config.toml # 用户配置
不会写到
%APPDATA%、/etc、Application Support等系统位置。删除~/.skills_manager/即等于卸载数据。
可以通过 GUI ⚙ 设置 面板修改,也可以直接编辑文件:
scan_roots = ["C:/Users/me", "D:/work"] # 扫描根目录
ignore_dirs = ["node_modules", ".git", "__pycache__", "venv",
".venv", "dist", "build", "AppData"]
recycle_keep_days = 7 # 回收站保留天数
similarity_name_threshold = 85 # 名字相似度阈值(0–100)
similarity_content_threshold = 0.85 # 内容 MinHash Jaccard 阈值
# GitHub 同步(可选)
github_repo = "your-name/your-skills" # owner/repo
github_token = "ghp_xxx" # PAT(写权限)
github_branch = "main"pip install -r requirements-dev.txt -i https://mirrors.aliyun.com/pypi/simple/
pytest # 11 个用例 / 11 通过
ruff check src tests # lint不想让用户装 Python?一键打出 SkillsManager.exe + smcli.exe:
pip install pyinstaller -i https://mirrors.aliyun.com/pypi/simple/
pyinstaller -y --clean SkillsManager.spec产物在 dist/SkillsManager/:
dist/SkillsManager/
├── SkillsManager.exe # GUI(双击启动,无控制台) ~4 MB
├── smcli.exe # CLI ~4 MB
└── _internal/ # 共享运行时(PySide6、Python 等) ~118 MB
总体积约 126 MB(已通过自实现 MinHash 移除 scipy/numpy 依赖、并排除大量 PySide6 可选模块瘦身近一半)。
把整个 dist/SkillsManager/ 文件夹拷给别人即可使用,无需安装 Python。
Mac / Linux 同样的 spec 文件可直接 pyinstaller -y --clean SkillsManager.spec 出对应平台产物。
src/skills_manager/
├── core/
│ ├── config.py # 配置 + 跨平台路径
│ ├── database.py # SQLite 索引
│ ├── identifier.py # Skill 文件识别
│ ├── scanner.py # 全盘扫描
│ ├── similarity.py # 相似度 / 冲突检测
│ ├── version.py # 每 Skill 独立 Git 仓库
│ ├── recycle.py # 7 天回收站
│ ├── github_sync.py # GitHub 推/拉
│ └── models.py # 数据模型
├── ui/
│ ├── main_window.py
│ ├── editor_dialog.py
│ ├── version_dialog.py
│ ├── recycle_dialog.py
│ ├── similarity_dialog.py
│ └── settings_dialog.py
├── cli.py # smcli 入口
└── __main__.py # GUI 入口
- subprocess git,而非 GitPython:GitPython 在长生命周期进程中会出现
Unable to read current working directory之类的状态丢失问题。直接subprocess.run(["git", ...], cwd=...)更稳。 Path.home() / ".skills_manager"而非 platformdirs:Microsoft Store 的 Python 会把%APPDATA%沙箱重定向,子进程(git)看到的 FS 视图和父进程不一致,导致谜之 IO 错误。- SQLite 不开
detect_types=PARSE_DECLTYPES:Python 3.13 移除了默认的timestamp转换器,会触发not enough values to unpack。 - 每 Skill 一个独立 Git 仓库:避免一个巨型 mono-repo 的克隆/提交开销,也方便单独回滚。
Q: 扫描会不会把我项目里的 README.md 也当 Skill?
A: 不会。识别规则严格匹配文件名(SKILL.md、*.instructions.md、*.prompt.md、*.agent.md、AGENTS.md、copilot-instructions.md),普通 Markdown 文件被忽略。
Q: 数据会上传到任何服务器吗?
A: 不会。除非你主动配置并点击 GitHub 推送/拉取,本程序所有数据都只存在本地 ~/.skills_manager/。
Q: 删除是真的删除吗?
A: GUI 的 "🗑 删除" 是移到回收站(zip 归档 7 天);只有手动在回收站里点 "彻底删除" 或用 smcli recycle purge 才会真正删。
Q: 如何完全卸载?
A: 删除项目目录 + 删除 ~/.skills_manager/。
MIT


