skills/chops-ai-skills-manager/SKILL.md
```markdown --- name: chops-ai-skills-manager description: macOS app to browse, edit, and manage AI agent skills across Claude Code, Cursor, Codex, Windsurf, and Amp triggers: - manage my AI agent skills - organize claude code skills - add a new skill to cursor - browse skills across AI tools - edit my agent skills files - set up chops on my mac - create a new skill file - sync skills between AI coding tools --- # Chops — AI Agent Skills Manager > Skill by [ara.so](https://ara.
npx skillsauth add aradotso/trending-skills skills/chops-ai-skills-managerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
---
name: chops-ai-skills-manager
description: macOS app to browse, edit, and manage AI agent skills across Claude Code, Cursor, Codex, Windsurf, and Amp
triggers:
- manage my AI agent skills
- organize claude code skills
- add a new skill to cursor
- browse skills across AI tools
- edit my agent skills files
- set up chops on my mac
- create a new skill file
- sync skills between AI coding tools
---
# Chops — AI Agent Skills Manager
> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection.
Chops is a native macOS app (SwiftUI + SwiftData) that discovers, organizes, and edits AI coding agent skill files across Claude Code, Cursor, Codex, Windsurf, Copilot, Aider, and Amp — all in one place, with real-time file watching, full-text search, and a built-in markdown editor.
## Installation
### Download the App
```bash
# Direct download
curl -L https://github.com/Shpigford/chops/releases/latest/download/Chops.dmg -o Chops.dmg
open Chops.dmg
Or visit chops.md and click Download.
Prerequisites:
# Install dependencies
xcode-select --install
brew install xcodegen
# Clone and build
git clone https://github.com/Shpigford/chops.git
cd chops
xcodegen generate # generates Chops.xcodeproj from project.yml
open Chops.xcodeproj # then press Cmd+R to build and run
xcodebuild -scheme Chops -configuration Debug build
Note: The
.xcodeprojis generated fromproject.yml. Always editproject.ymland re-runxcodegen generate— never edit.xcodeprojdirectly.
Chops scans these directories automatically:
| Tool | Scanned 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 only detect project-level skills (no global paths). Custom paths can be added per tool in Settings.
Skills are Markdown files with YAML frontmatter:
---
name: my-skill-name
description: One-line description of what this skill does
triggers:
- phrase users might say
- another trigger phrase
- add 6-8 total triggers
---
# Skill Title
Main skill content in Markdown...
Cursor uses .mdc files with the same frontmatter format. Chops handles both automatically.
Chops reads and writes skills for all major AI coding agents. Skills are deduplicated by resolved symlink path — symlinked files appear once with multiple tool badges.
NSTextView-based editor.md or .mdc fileGroup skills logically without moving or modifying source files. Collections are stored in SwiftData, not on disk.
FSEvents-based watcher detects disk changes instantly and triggers a re-scan. No manual refresh needed.
Search across skill name, description, and full content simultaneously.
Connect to remote servers (e.g., OpenClaw) to discover, browse, and install community skills.
Chops/
├── App/
│ ├── ChopsApp.swift # @main — SwiftData ModelContainer + Sparkle updater
│ ├── AppState.swift # @Observable singleton — all UI state
│ └── ContentView.swift # Three-column NavigationSplitView
├── Models/
│ ├── Skill.swift # @Model — a discovered skill file
│ ├── Collection.swift # @Model — user-created groupings
│ └── ToolSource.swift # Enum of tools, their paths and icons
├── Services/
│ ├── SkillScanner.swift # Probes directories, upserts skills into SwiftData
│ ├── SkillParser.swift # Routes to FrontmatterParser or MDCParser
│ ├── FileWatcher.swift # FSEvents listener → triggers re-scan
│ └── 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, collection list
├── Detail/ # Skill editor, metadata display
├── Settings/ # Preferences & Sparkle update UI
└── Shared/ # ToolBadge, NewSkillSheet, etc.
Edit Chops/Models/ToolSource.swift:
enum ToolSource: String, CaseIterable, Codable {
// ... existing cases ...
case myNewTool
var displayName: String {
switch self {
case .myNewTool: return "My New Tool"
// ...
}
}
var globalPaths: [String] {
switch self {
case .myNewTool: return ["~/.mynewtools/skills"]
// ...
}
}
var color: Color {
switch self {
case .myNewTool: return .purple
// ...
}
}
var iconName: String {
switch self {
case .myNewTool: return "wand.and.stars"
// ...
}
}
// Optional: return asset name if you add a logo to the asset catalog
var logoAssetName: String? {
switch self {
case .myNewTool: return "MyNewToolLogo"
default: return nil
}
}
}
If the tool uses a non-standard file layout, also update Chops/Services/SkillScanner.swift.
Edit Chops/Utilities/FrontmatterParser.swift:
struct FrontmatterParser {
static func parse(_ content: String) -> (metadata: [String: Any], body: String) {
// Frontmatter is delimited by --- on its own line
// Returns structured metadata dict + remaining markdown body
guard content.hasPrefix("---") else {
return ([:], content)
}
// ... parsing logic
}
}
Edit Chops/Services/SkillParser.swift to add dispatch logic:
static func parse(fileURL: URL) -> SkillMetadata {
switch fileURL.pathExtension {
case "mdc":
return MDCParser.parse(fileURL: fileURL)
case "md", "markdown":
return FrontmatterParser.parse(fileURL: fileURL)
case "txt":
// Add handling for plain text skills
return PlainTextParser.parse(fileURL: fileURL)
default:
return SkillMetadata(name: fileURL.lastPathComponent)
}
}
The main layout is a three-column NavigationSplitView in Chops/App/ContentView.swift:
NavigationSplitView {
SidebarView() // Column 1: tool filters + collections
} content: {
SkillListView() // Column 2: filtered/searched skill list
} detail: {
SkillDetailView() // Column 3: editor + metadata
}
AppState is the single source of truth for all UI state:
@Observable
class AppState {
var selectedTool: ToolSource? // current sidebar filter
var selectedSkill: Skill? // currently open skill
var searchText: String = "" // full-text search query
var sidebarMode: SidebarMode // .tools or .collections
}
Access it in any view via @Environment:
struct MyView: View {
@Environment(AppState.self) var appState
var body: some View {
Text("Searching: \(appState.searchText)")
}
}
If your project is used with Chops-supported AI tools, create a skill file so agents have instant context:
# For Claude Code
mkdir -p .claude/skills
cat > .claude/skills/setup.md << 'EOF'
---
name: my-project-setup
description: Architecture and key patterns for MyProject
triggers:
- how does myproject work
- set up myproject
- myproject architecture
---
# MyProject
[Describe your project here for AI agents]
EOF
Chops will automatically discover and display this skill.
.md or .mdc~/ access — if you built from source, confirm Chops.entitlements has com.apple.security.app-sandbox set to false--- on the very first line (no leading whitespace or BOM).mdc files use the same frontmatter format but a different parser — ensure the extension is correct# Regenerate the Xcode project after any project.yml changes
xcodegen generate
Sparkle is pulled automatically via Swift Package Manager. If SPM resolution fails:
# In Xcode: File → Packages → Reset Package Caches
# Or from terminal:
rm -rf ~/Library/Caches/org.swift.swiftpm
xcodebuild -resolvePackageDependencies
cd site
npm install # first time only
npm run dev # local dev server at localhost:4321
npm run build # production build → site/dist/
Built with Astro 6.
~/. Intentional and documented in Chops.entitlements.Skill and SkillCollection models are persisted; scanning upserts (never duplicates) discovered skills.development
```markdown --- name: compose-performance-skills description: Install and use the skydoves/compose-performance-skills agent skill library to diagnose and fix Jetpack Compose performance issues including stability, recomposition, lazy layouts, modifiers, side effects, and build configuration. triggers: - "my composable recomposes too often" - "LazyColumn drops frames during scroll" - "diagnose Compose stability issues" - "fix unnecessary recomposition in Jetpack Compose" - "optimize Com
development
Headless iOS Simulator manager with host-side HID input injection, 60fps streaming, and device farm web UI for iOS 26
development
```markdown --- name: claude-code-game-studios description: Turn Claude Code into a full 49-agent game dev studio with 72 workflow skills, automated hooks, and a real studio hierarchy for Godot, Unity, and Unreal projects. triggers: - "set up claude code game studios" - "use ai agents for game development" - "set up game dev studio with claude" - "add game studio agents to my project" - "how do I use claude code for game dev" - "set up godot unity unreal ai workflow" - "49 agents g
development
```markdown --- name: xq-py-quantum-vm description: Python implementation of the Quip Network's quantum virtual machine (xqvm) triggers: - quantum virtual machine python - xqvm quip network - quantum circuit simulation python - xq-py quantum vm - quip network quantum python - simulate quantum gates python - quantum vm xqvm - xqvm-py quantum circuit --- # xq-py Quantum Virtual Machine > Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection. `xqvm-py` is a Python impl