Get a new developer up and running with the Chops codebase — prerequisites, build, architecture, and common tasks.
64
76%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Fix and improve this skill with Tessl
tessl review fix ./.claude/skills/setup/SKILL.mdSet 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 generateThis 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 buildOr open in Xcode and hit Cmd+R:
open Chops.xcodeprojShare 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 directly1a1ff0d
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.