Shpigford/chops
GitHub: Shpigford/chops
一款 macOS 原生应用,用于统一浏览、编辑和管理跨 Claude Code、Cursor、Codex 等多种 AI 编程工具的技能与 Agent 配置文件。
Stars: 1511 | Forks: 98
Chops
你的 AI 技能与 agents,终于被井井有条地管理起来了。
下载 ·
官网 ·
@Shpigford
一款 macOS 应用,用于发现、组织和编辑跨 Claude Code、Cursor、Codex、Windsurf 和 Amp 的 coding agent 技能与 agents。告别在 dotfiles 中翻找的烦恼。
## 功能
- **多工具支持** — Claude Code、Cursor、Codex、Windsurf、Copilot、Aider、Amp
- **Skills + Agents** — 从每个工具的目录中发现 skills 和 agents
- **内置编辑器** — 等宽字体编辑器,支持 Cmd+S 保存与 frontmatter 解析
- **集合** — 无需修改源文件即可组织 skills 和 agents
- **实时文件监控** — 基于 FSEvents,磁盘更改即时更新
- **全文搜索** — 跨名称、描述和内容进行搜索
- **创建新 skills 与 agents** — 为每个工具生成正确的样板代码
- **远程服务器** — 连接到运行 [OpenClaw](https://openclaw.ai)、[Hermes](https://github.com/NousResearch/hermes-agent) 或其他布局的服务器,以发现、浏览和安装 skills
## 前置条件
- **macOS 15** (Sequoia) 或更高版本
- **Xcode** 及其命令行工具 (`xcode-select --install`)
- **Homebrew** ([brew.sh](https://brew.sh))
- **xcodegen** — `brew install xcodegen`
Sparkle(自动更新框架)是唯一的外部依赖,Xcode 会通过 Swift Package Manager 自动拉取。无需手动设置。
## 快速开始
```
git clone https://github.com/Shpigford/chops.git
cd chops
brew install xcodegen # skip if already installed
xcodegen generate # generates Chops.xcodeproj from project.yml
open Chops.xcodeproj # opens in Xcode
```
然后按下 **Cmd+R** 构建并运行。
### CLI 构建(无需 Xcode GUI)
```
xcodebuild -scheme Chops -configuration Debug build
```
## 项目结构
```
Chops/
├── App/
│ ├── ChopsApp.swift # @main entry — SwiftData ModelContainer + Sparkle
│ ├── AppState.swift # @Observable singleton — filters, selection, search
│ └── ContentView.swift # Three-column NavigationSplitView, kicks off scanning
├── Models/
│ ├── Skill.swift # @Model — a discovered skill or agent file
│ ├── Collection.swift # @Model — user-created skill groupings
│ └── ToolSource.swift # Enum of supported tools, their paths and icons
├── Services/
│ ├── SkillScanner.swift # Probes tool directories, upserts skills into SwiftData
│ ├── SkillParser.swift # Dispatches to FrontmatterParser or MDCParser
│ ├── FileWatcher.swift # FSEvents listener, triggers re-scan on changes
│ └── SearchService.swift # In-memory full-text search
├── Utilities/
│ ├── FrontmatterParser.swift # Extracts YAML frontmatter from .md files
│ └── MDCParser.swift # Parses Cursor .mdc files
├── Views/
│ ├── Sidebar/ # Tool filters, skills/agents lists, collections
│ ├── Detail/ # Skill editor, metadata display
│ ├── Settings/ # Preferences & update UI
│ └── Shared/ # Reusable components (ToolBadge, NewSkillSheet)
├── Resources/ # Asset catalog (tool icons, colors)
└── Chops.entitlements # Disables sandbox (intentional)
project.yml # xcodegen config — source of truth for Xcode project settings
scripts/ # Release pipeline (release.sh)
site/ # Marketing website (Astro 6)
```
## 架构
**SwiftUI + SwiftData**,原生 macOS 应用,零 web views。
### App 生命周期
1. `ChopsApp` 初始化一个 SwiftData `ModelContainer`(持久化 `Skill` 和 `SkillCollection`)
2. Sparkle 更新程序在后台启动
3. 创建 `AppState` 并将其注入 SwiftUI 环境
4. `ContentView` 渲染并调用 `startScanning()`
5. `SkillScanner` 探测所有工具目录并 upsert 发现的 skills
6. `FileWatcher` 附加 FSEvents 监听器 — 发生任何更改时,扫描器都会自动重新运行
### 关键设计决策
- **无沙盒。** 该应用需要不受限制的文件系统访问权限,以读取 `~/` 下的 dotfiles。这是有意为之,也是核心功能所必需的。entitlements 文件明确禁用了 app sandbox。
- **通过 symlink 去重。** Skills 通过其解析后的 symlink 路径进行唯一标识。如果同一个文件被 symlink 到多个工具目录中,它将显示为带有多个工具徽章的一个 skill。
- **无测试套件。** 手动验证更改 — 构建、运行、触发你修改的功能、观察结果。
### 状态管理
`AppState` 是一个 `@Observable` 类,包含所有 UI 状态:选定的工具过滤器、选定的 skill、搜索文本、侧边栏过滤模式。它通过 `@Environment` 注入,可从任何视图访问。
### UI 布局
三栏式 `NavigationSplitView`:
- **侧边栏** — 工具过滤器和集合
- **列表** — 过滤/搜索后的 skill 列表
- **详情** — skill 编辑器(封装了 `NSTextView`,用于支持 Cmd+S 保存的原生文本编辑)
## 支持的工具
Chops 扫描以下目录以查找 skills 和 agents:
| 工具 | Skills | Agents |
|------|--------|--------|
| Claude Code | `~/.claude/skills/` | `~/.claude/agents/` |
| Cursor | `~/.cursor/skills/`, `~/.cursor/rules` | `~/.cursor/agents/` |
| Windsurf | `~/.codeium/windsurf/memories/`, `~/.windsurf/rules` | — |
| Codex | `~/.codex/skills/` | `~/.codex/agents/` |
| Amp | `~/.config/amp/skills/` | — |
| Global | `~/.agents/skills/` | — |
Copilot 和 Aider 也受支持,但仅检测项目级别的 skills 和 agents(无全局路径)。可以为任何工具添加自定义扫描路径。
工具定义位于 `Chops/Models/ToolSource.swift` 中 — 每个 enum case 都知道其显示名称、图标、颜色和文件系统路径。
## 常见开发任务
### 为新工具添加支持
1. 在 `Chops/Models/ToolSource.swift` 中的 `ToolSource` enum 添加一个新 case
2. 填充 `displayName`、`iconName`、`color` 和 `globalPaths`
3. 可选地,将 logo 添加到 asset catalog 并从 `logoAssetName` 返回它
4. 如果新工具使用非标准文件布局,请更新 `SkillScanner`
### 修改 skill 解析
- **Frontmatter (`.md`)** — 编辑 `Chops/Utilities/FrontmatterParser.swift`
- **Cursor `.mdc` 文件** — 编辑 `Chops/Utilities/MDCParser.swift`
- **调度逻辑** — 编辑 `Chops/Services/SkillParser.swift`(决定使用哪个解析器)
### 更改 UI
视图位于 `Chops/Views/`,按列(侧边栏、详情)和共享组件进行组织。主布局位于 `Chops/App/ContentView.swift`。
## 测试
无自动化测试套件。手动验证:
1. 构建并运行 app (Cmd+R)
2. 触发你更改的确切功能
3. 观察结果 — 检查行为和错误消息是否正确
4. 测试边缘情况(空状态、缺失目录、格式错误的文件)
## 网站
营销网站位于 `site/`,使用 [Astro](https://astro.build/) 构建。
```
cd site
npm install # first time only
npm run dev # local dev server
npm run build # production build → site/dist/
```
## AI Agent 设置
此代码仓库包含一个 Claude Code skill,位于 `.claude/skills/setup.md`,它为 AI coding agents 提供了有关项目的完整上下文 — 架构、关键文件和常见任务。如果你使用的是 Claude Code,它会自动获取这些信息。
## 许可证
FSL-1.1-MIT — 详见 [LICENSE](LICENSE)。
标签:AI代理, LLM, macOS应用, SOC Prime, Swift, Unmanaged PE, 开发工具, 效率工具