[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-74738":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":31,"readmeContent":32,"aiSummary":33,"trendingCount":16,"starSnapshotCount":16,"syncStatus":34,"lastSyncTime":35,"discoverSource":36},74738,"chops","Shpigford\u002Fchops","Shpigford","Your AI agent skills, finally organized. A macOS app to browse, edit, and manage skills across Claude Code, Cursor, Codex, Windsurf, and Amp.","https:\u002F\u002Fchops.md",null,"Swift",1400,88,4,11,0,5,34,87,15,89.55,"Other",false,"main",[26,27,28,29,30],"agents","ai","macos","skills","swiftui","2026-06-12 04:01:15","\u003Cp align=\"center\">\n  \u003Cimg src=\"site\u002Fpublic\u002Ffavicon.png\" width=\"128\" height=\"128\" alt=\"Chops icon\" \u002F>\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">Chops\u003C\u002Fh1>\n\n\u003Cp align=\"center\">Your AI skills and agents, finally organized.\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FShpigford\u002Fchops\u002Freleases\u002Flatest\u002Fdownload\u002FChops.dmg\">Download\u003C\u002Fa> &middot;\n  \u003Ca href=\"https:\u002F\u002Fchops.md\">Website\u003C\u002Fa> &middot;\n  \u003Ca href=\"https:\u002F\u002Fx.com\u002FShpigford\">@Shpigford\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"site\u002Fpublic\u002Fscreenshot.png\" width=\"720\" alt=\"Chops screenshot\" \u002F>\n\u003C\u002Fp>\n\nOne macOS app to discover, organize, and edit coding agent skills and agents across Claude Code, Cursor, Codex, Windsurf, and Amp. Stop digging through dotfiles.\n\n## Features\n\n- **Multi-tool support** — Claude Code, Cursor, Codex, Windsurf, Copilot, Aider, Amp\n- **Skills + Agents** — Discovers both skills and agents from each tool's directories\n- **Built-in editor** — Monospaced editor with Cmd+S save, frontmatter parsing\n- **Collections** — Organize skills and agents without modifying source files\n- **Real-time file watching** — FSEvents-based, instant updates on disk changes\n- **Full-text search** — Search across name, description, and content\n- **Create new skills & agents** — Generates correct boilerplate per tool\n- **Remote servers** — Connect to servers running [OpenClaw](https:\u002F\u002Fopenclaw.ai), [Hermes](https:\u002F\u002Fgithub.com\u002FNousResearch\u002Fhermes-agent), or other layouts to discover, browse, and install skills\n\n## Prerequisites\n\n- **macOS 15** (Sequoia) or later\n- **Xcode** with command-line tools (`xcode-select --install`)\n- **Homebrew** ([brew.sh](https:\u002F\u002Fbrew.sh))\n- **xcodegen** — `brew install xcodegen`\n\nSparkle (auto-update framework) is the only external dependency and is pulled automatically by Xcode via Swift Package Manager. No manual setup needed.\n\n## Quick Start\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FShpigford\u002Fchops.git\ncd chops\nbrew install xcodegen    # skip if already installed\nxcodegen generate        # generates Chops.xcodeproj from project.yml\nopen Chops.xcodeproj     # opens in Xcode\n```\n\nThen hit **Cmd+R** to build and run.\n\n> **Note:** The Xcode project is generated from `project.yml`. If you change `project.yml`, re-run `xcodegen generate`. Don't edit the `.xcodeproj` directly.\n\n### CLI build (no Xcode GUI)\n\n```bash\nxcodebuild -scheme Chops -configuration Debug build\n```\n\n## Project Structure\n\n```\nChops\u002F\n├── App\u002F\n│   ├── ChopsApp.swift        # @main entry — SwiftData ModelContainer + Sparkle\n│   ├── AppState.swift         # @Observable singleton — filters, selection, search\n│   └── ContentView.swift      # Three-column NavigationSplitView, kicks off scanning\n├── Models\u002F\n│   ├── Skill.swift            # @Model — a discovered skill or agent file\n│   ├── Collection.swift       # @Model — user-created skill groupings\n│   └── ToolSource.swift       # Enum of supported tools, their paths and icons\n├── Services\u002F\n│   ├── SkillScanner.swift     # Probes tool directories, upserts skills into SwiftData\n│   ├── SkillParser.swift      # Dispatches to FrontmatterParser or MDCParser\n│   ├── FileWatcher.swift      # FSEvents listener, triggers re-scan on changes\n│   └── SearchService.swift    # In-memory full-text search\n├── Utilities\u002F\n│   ├── FrontmatterParser.swift  # Extracts YAML frontmatter from .md files\n│   └── MDCParser.swift          # Parses Cursor .mdc files\n├── Views\u002F\n│   ├── Sidebar\u002F               # Tool filters, skills\u002Fagents lists, collections\n│   ├── Detail\u002F                # Skill editor, metadata display\n│   ├── Settings\u002F              # Preferences & update UI\n│   └── Shared\u002F                # Reusable components (ToolBadge, NewSkillSheet)\n├── Resources\u002F                 # Asset catalog (tool icons, colors)\n└── Chops.entitlements         # Disables sandbox (intentional)\n\nproject.yml          # xcodegen config — source of truth for Xcode project settings\nscripts\u002F             # Release pipeline (release.sh)\nsite\u002F                # Marketing website (Astro 6)\n```\n\n## Architecture\n\n**SwiftUI + SwiftData**, native macOS with zero web views.\n\n### App lifecycle\n\n1. `ChopsApp` initializes a SwiftData `ModelContainer` (persists `Skill` and `SkillCollection`)\n2. Sparkle updater starts in the background\n3. `AppState` is created and injected into the SwiftUI environment\n4. `ContentView` renders and calls `startScanning()`\n5. `SkillScanner` probes all tool directories and upserts discovered skills\n6. `FileWatcher` attaches FSEvents listeners — on any change, the scanner re-runs automatically\n\n### Key design decisions\n\n- **No sandbox.** The app needs unrestricted filesystem access to read dotfiles across `~\u002F`. This is intentional and required for core functionality. The entitlements file explicitly disables the app sandbox.\n- **Dedup via symlinks.** Skills are uniquely identified by their resolved symlink path. If the same file is symlinked into multiple tool directories, it shows up as one skill with multiple tool badges.\n- **No test suite.** Validate changes manually — build, run, trigger the feature you changed, observe the result.\n\n### State management\n\n`AppState` is an `@Observable` class that holds all UI state: selected tool filter, selected skill, search text, sidebar filter mode. It's injected via `@Environment` and accessible from any view.\n\n### UI layout\n\nThree-column `NavigationSplitView`:\n- **Sidebar** — tool filters and collections\n- **List** — filtered\u002Fsearched skill list\n- **Detail** — skill editor (wraps `NSTextView` for native text editing with Cmd+S save)\n\n## Supported Tools\n\nChops scans these directories for skills and agents:\n\n| Tool | Skills | Agents |\n|------|--------|--------|\n| Claude Code | `~\u002F.claude\u002Fskills\u002F` | `~\u002F.claude\u002Fagents\u002F` |\n| Cursor | `~\u002F.cursor\u002Fskills\u002F`, `~\u002F.cursor\u002Frules` | `~\u002F.cursor\u002Fagents\u002F` |\n| Windsurf | `~\u002F.codeium\u002Fwindsurf\u002Fmemories\u002F`, `~\u002F.windsurf\u002Frules` | — |\n| Codex | `~\u002F.codex\u002Fskills\u002F` | `~\u002F.codex\u002Fagents\u002F` |\n| Amp | `~\u002F.config\u002Famp\u002Fskills\u002F` | — |\n| Global | `~\u002F.agents\u002Fskills\u002F` | — |\n\nCopilot and Aider are also supported but only detect project-level skills and agents (no global paths). Custom scan paths can be added for any tool.\n\nTool definitions live in `Chops\u002FModels\u002FToolSource.swift` — each enum case knows its display name, icon, color, and filesystem paths.\n\n## Common Dev Tasks\n\n### Add support for a new tool\n\n1. Add a new case to the `ToolSource` enum in `Chops\u002FModels\u002FToolSource.swift`\n2. Fill in `displayName`, `iconName`, `color`, and `globalPaths`\n3. Optionally add a logo to the asset catalog and return it from `logoAssetName`\n4. Update `SkillScanner` if the new tool uses a non-standard file layout\n\n### Modify skill parsing\n\n- **Frontmatter (`.md`)** — edit `Chops\u002FUtilities\u002FFrontmatterParser.swift`\n- **Cursor `.mdc` files** — edit `Chops\u002FUtilities\u002FMDCParser.swift`\n- **Dispatch logic** — edit `Chops\u002FServices\u002FSkillParser.swift` (decides which parser to use)\n\n### Change the UI\n\nViews are in `Chops\u002FViews\u002F`, organized by column (Sidebar, Detail) and shared components. The main layout is in `Chops\u002FApp\u002FContentView.swift`.\n\n## Testing\n\nNo automated test suite. Validate manually:\n\n1. Build and run the app (Cmd+R)\n2. Trigger the exact feature you changed\n3. Observe the result — check for correct behavior and error messages\n4. Test edge cases (empty states, missing directories, malformed files)\n\n## Website\n\nThe marketing site lives in `site\u002F` and is built with [Astro](https:\u002F\u002Fastro.build\u002F).\n\n```bash\ncd site\nnpm install      # first time only\nnpm run dev      # local dev server\nnpm run build    # production build → site\u002Fdist\u002F\n```\n\n## AI Agent Setup\n\nThis repo includes a Claude Code skill at `.claude\u002Fskills\u002Fsetup.md` that gives AI coding agents full context on the project — architecture, key files, and common tasks. If you're using Claude Code, it'll pick this up automatically.\n\n## License\n\nFSL-1.1-MIT — see [LICENSE](LICENSE).\n","Chops 是一款 macOS 应用程序，用于浏览、编辑和管理 Claude Code、Cursor、Codex、Windsurf 和 Amp 等 AI 代理技能。其核心功能包括支持多种工具的集成、内置单间距编辑器、实时文件监控、全文搜索以及创建新技能和代理的能力。该应用还允许用户通过集合功能来组织技能和代理，而无需修改源文件，并且可以连接到运行 OpenClaw 或 Hermes 的远程服务器以发现和安装更多技能。适用于需要对多个 AI 编程助手进行统一管理和维护的开发者或团队，在 macOS 15 及更高版本上使用。",2,"2026-06-11 03:50:36","high_star"]