원클릭으로
setup
// Get a new developer up and running with the Chops codebase — prerequisites, build, architecture, and common tasks.
// Get a new developer up and running with the Chops codebase — prerequisites, build, architecture, and common tasks.
| name | setup |
| description | Get a new developer up and running with the Chops codebase — prerequisites, build, architecture, and common tasks. |
Set up the Chops development environment and orient a new contributor to the codebase.
Verify these are installed. If any are missing, tell the user what to install and stop.
sw_vers -productVersion (must be ≥ 15.0)xcode-select -p (if missing: xcode-select --install)which brew (if missing: direct them to https://brew.sh)which xcodegen (if missing: brew install xcodegen)xcodegen generate
This reads project.yml (the source of truth for all Xcode project settings) and generates Chops.xcodeproj. Re-run this anytime project.yml changes. Never edit the .xcodeproj directly.
xcodebuild -scheme Chops -configuration Debug build
Or open in Xcode and hit Cmd+R:
open Chops.xcodeproj
Share this architecture overview:
Entry point: Chops/App/ChopsApp.swift — sets up SwiftData ModelContainer (Skill + SkillCollection), starts Sparkle updater, injects AppState into environment.
State: Chops/App/AppState.swift — @Observable singleton holding UI state (selected tool, selected skill, search text, sidebar filter).
Models (SwiftData):
Chops/Models/Skill.swift — a discovered skill file, uniquely identified by resolved symlink pathChops/Models/Collection.swift — user-created groupings of skillsChops/Models/ToolSource.swift — enum of supported tools with display names, icons, colors, and filesystem pathsServices:
Chops/Services/SkillScanner.swift — probes tool directories, parses frontmatter, upserts into SwiftData. Deduplicates via resolved symlink paths.Chops/Services/FileWatcher.swift — FSEvents via DispatchSource, triggers re-scan on file changesChops/Services/SkillParser.swift — dispatches to FrontmatterParser (.md) or MDCParser (.mdc)Chops/Services/SearchService.swift — in-memory full-text searchViews: Three-column NavigationSplitView (Sidebar → List → Detail). Editor wraps NSTextView for native text editing. Cmd+S save via FocusedValues.
Key design decisions:
Scanned tool paths:
| Tool | Paths |
|---|---|
| Claude Code | ~/.claude/skills/, ~/.agents/skills |
| Cursor | ~/.cursor/skills/, ~/.cursor/rules |
| Windsurf | ~/.codeium/windsurf/memories/, ~/.windsurf/rules |
| Codex | ~/.codex |
| Amp | ~/.config/amp |
Copilot and Aider detect project-level skills only (no global paths).
Add a new tool: Add a case to ToolSource enum in Chops/Models/ToolSource.swift. Fill in displayName, iconName, color, globalPaths. Update SkillScanner if the tool uses a non-standard file layout.
Modify parsing: Frontmatter → Chops/Utilities/FrontmatterParser.swift. Cursor .mdc → Chops/Utilities/MDCParser.swift. Dispatch logic → Chops/Services/SkillParser.swift.
Change UI: Views are in Chops/Views/ (Sidebar/, Detail/, Settings/, Shared/). Main layout is Chops/App/ContentView.swift.
project.yml is the source of truth for Xcode settings — never edit .xcodeproj directly