Your AI agent skills, finally organized. A macOS app to browse, edit, and manage skills across Claude Code, Cursor, Codex, Windsurf, and Amp.
1,875
stars
120
commits
Swift
primary language
Aug 23, 2026
updated
Your AI skills and agents, finally organized.
Download · Website · @Shpigford
One macOS app to discover, organize, and edit coding agent skills and agents across Claude Code, Cursor, Codex, Windsurf, and Amp. Stop digging through dotfiles.
Chops scans these directories for skills and agents:
| Tool | Skills | Agents |
|---|---|---|
| Global | ~/.agents/skills/ | — |
| 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/ | — |
Copilot 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.
Tool definitions live in Chops/Models/ToolSource.swift — each enum case knows its display name, icon, color, and filesystem paths.
Build and run Chops locally with the steps below. End users can download the latest release instead.
xcode-select --install)brew install xcodegenSparkle (auto-update framework) is the only external dependency and is pulled automatically by Xcode via Swift Package Manager. No manual setup needed.
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
Then hit Cmd+R to build and run.
Note: The Xcode project is generated from
project.yml. If you changeproject.yml, re-runxcodegen generate. Don't edit the.xcodeprojdirectly.
xcodebuild -scheme Chops -configuration Debug build
Want to change the app? The sections below cover project layout, architecture, and common tasks.
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, native macOS with zero web views.
ChopsApp initializes a SwiftData ModelContainer (persists Skill and SkillCollection)AppState is created and injected into the SwiftUI environmentContentView renders and calls startScanning()SkillScanner probes all tool directories and upserts discovered skillsFileWatcher attaches FSEvents listeners — on any change, the scanner re-runs automatically~/. This is intentional and required for core functionality. The entitlements file explicitly disables the app sandbox.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.
Three-column NavigationSplitView:
NSTextView for native text editing with Cmd+S save)ToolSource enum in Chops/Models/ToolSource.swiftdisplayName, iconName, color, and globalPathslogoAssetNameSkillScanner if the new tool uses a non-standard file layout.md) — edit Chops/Utilities/FrontmatterParser.swift.mdc files — edit Chops/Utilities/MDCParser.swiftChops/Services/SkillParser.swift (decides which parser to use)Views are in Chops/Views/, organized by column (Sidebar, Detail) and shared components. The main layout is in Chops/App/ContentView.swift.
No automated test suite. Validate manually:
This repo includes a Claude Code skill at .claude/skills/setup.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.
The marketing site lives in site/ and is built with Astro.
cd site
npm install # first time only
npm run dev # local dev server
npm run build # production build → site/dist/
FSL-1.1-MIT — see LICENSE.
Swift
96.8%
Shell
1.9%
Astro
1.2%
Your AI agent skills, finally organized. A macOS app to browse, edit, and manage skills across Claude Code, Cursor, Codex, Windsurf, and Amp.
1,875
stars
120
commits
Swift
primary language
Aug 23, 2026
updated
Your AI skills and agents, finally organized.
Download · Website · @Shpigford
One macOS app to discover, organize, and edit coding agent skills and agents across Claude Code, Cursor, Codex, Windsurf, and Amp. Stop digging through dotfiles.
Chops scans these directories for skills and agents:
| Tool | Skills | Agents |
|---|---|---|
| Global | ~/.agents/skills/ | — |
| 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/ | — |
Copilot 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.
Tool definitions live in Chops/Models/ToolSource.swift — each enum case knows its display name, icon, color, and filesystem paths.
Build and run Chops locally with the steps below. End users can download the latest release instead.
xcode-select --install)brew install xcodegenSparkle (auto-update framework) is the only external dependency and is pulled automatically by Xcode via Swift Package Manager. No manual setup needed.
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
Then hit Cmd+R to build and run.
Note: The Xcode project is generated from
project.yml. If you changeproject.yml, re-runxcodegen generate. Don't edit the.xcodeprojdirectly.
xcodebuild -scheme Chops -configuration Debug build
Want to change the app? The sections below cover project layout, architecture, and common tasks.
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, native macOS with zero web views.
ChopsApp initializes a SwiftData ModelContainer (persists Skill and SkillCollection)AppState is created and injected into the SwiftUI environmentContentView renders and calls startScanning()SkillScanner probes all tool directories and upserts discovered skillsFileWatcher attaches FSEvents listeners — on any change, the scanner re-runs automatically~/. This is intentional and required for core functionality. The entitlements file explicitly disables the app sandbox.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.
Three-column NavigationSplitView:
NSTextView for native text editing with Cmd+S save)ToolSource enum in Chops/Models/ToolSource.swiftdisplayName, iconName, color, and globalPathslogoAssetNameSkillScanner if the new tool uses a non-standard file layout.md) — edit Chops/Utilities/FrontmatterParser.swift.mdc files — edit Chops/Utilities/MDCParser.swiftChops/Services/SkillParser.swift (decides which parser to use)Views are in Chops/Views/, organized by column (Sidebar, Detail) and shared components. The main layout is in Chops/App/ContentView.swift.
No automated test suite. Validate manually:
This repo includes a Claude Code skill at .claude/skills/setup.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.
The marketing site lives in site/ and is built with Astro.
cd site
npm install # first time only
npm run dev # local dev server
npm run build # production build → site/dist/
FSL-1.1-MIT — see LICENSE.
Swift
96.8%
Shell
1.9%
Astro
1.2%