Thanks to visit codestin.com
Credit goes to github.com

Skip to content

daim2tsos/SkillsManager

Repository files navigation

SkillsManager · AI Skill 一站式管理器

跨平台(Windows / Linux / macOS)原生桌面 + 命令行工具, 帮你统一收纳、版本化、同步散落在硬盘各处的 AI Skill 文件。

python pyside6 license tests


�️ 界面预览

主窗口 + 文件夹树预览(左侧表格按类型上色 + 可排序,右侧上方树状预览所属目录、下方内容预览)

主界面

相似度 / 冲突检测(自动分组:完全重复 / 同名冲突 / 名字相似 / 内容相似)

相似度检测

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.mdAGENTS.mdcopilot-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 等

🚀 快速开始

Windows

git clone https://github.com/daim2tsos/SkillsManager.git
cd SkillsManager
.\scripts\bootstrap.ps1     # 自动建 .venv 并装依赖
.\scripts\run.ps1           # 启动 GUI

Linux / macOS

git clone https://github.com/daim2tsos/SkillsManager.git
cd SkillsManager
./scripts/bootstrap.sh
./scripts/run.sh

手动

python -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+。


🖼️ GUI 使用指南

启动后界面分为四块:

┌────────────────────────────────────────────────────────────────────┐
│ [🔍扫描] [🪞相似度] [🗑回收站] | [☁推送] [⬇拉取] | [⚙设置]              │  ← 工具栏
├──────────────────────────┬─────────────────────────────────────────┤
│ 搜索框  类型筛选 …        │ 📁 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)

典型操作流

  1. 首次打开:点 🔍 扫描 —— 0.5 秒左右扫完用户主目录,所有 Skill 入表。
  2. 筛选/搜索:右上角输入关键字,下拉框切换类型;表头点击可排序。
  3. 选中一行 → 右侧自动展示该 Skill 所在文件夹的全部内容,点树里任意文件可预览。
  4. 双击行(或点 ✏️ 编辑)→ 打开编辑器,YAML + 正文分开编辑,保存时自动建立 Git 快照。
  5. 🕒 版本 → 浏览这个 Skill 的所有历史快照,可以一键回滚到任何版本。
  6. 🪞 相似度/冲突 → 自动给出 4 种类型的可疑分组,便于清理重复。
  7. 🗑 删除 → 移入 ~/.skills_manager/recycle/,7 天内可还原。
  8. ☁ 推送 GitHub → 在 ⚙ 设置 里填 owner/repo + Token,即可一键同步到云端。

💻 CLI(smcli

不想开 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%/etcApplication Support 等系统位置。删除 ~/.skills_manager/ 即等于卸载数据。


🔧 配置(~/.skills_manager/config.toml

可以通过 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

打包独立可执行文件(PyInstaller)

不想让用户装 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 的克隆/提交开销,也方便单独回滚。

❓ FAQ

Q: 扫描会不会把我项目里的 README.md 也当 Skill? A: 不会。识别规则严格匹配文件名(SKILL.md*.instructions.md*.prompt.md*.agent.mdAGENTS.mdcopilot-instructions.md),普通 Markdown 文件被忽略。

Q: 数据会上传到任何服务器吗? A: 不会。除非你主动配置并点击 GitHub 推送/拉取,本程序所有数据都只存在本地 ~/.skills_manager/

Q: 删除是真的删除吗? A: GUI 的 "🗑 删除" 是移到回收站(zip 归档 7 天);只有手动在回收站里点 "彻底删除" 或用 smcli recycle purge 才会真正删。

Q: 如何完全卸载? A: 删除项目目录 + 删除 ~/.skills_manager/


📜 许可

MIT

About

Cross-platform desktop + CLI manager for AI Skill files (PySide6 + SQLite)

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages