Shpigford/chops

GitHub: Shpigford/chops

一款 macOS 原生应用,用于统一浏览、编辑和管理跨 Claude Code、Cursor、Codex 等多种 AI 编程工具的技能与 Agent 配置文件。

Stars: 1511 | Forks: 98

Chops icon

Chops

你的 AI 技能与 agents,终于被井井有条地管理起来了。

下载 · 官网 · @Shpigford

Chops screenshot

一款 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, 开发工具, 效率工具