A macOS application for discovering, browsing, and installing skills for AI coding assistants. Manage skills for Claude Code and Codex from GitHub repositories or your local filesystem.
Browse and manage skills from GitHub repositories
Install skills to Claude Code and/or Codex with one click
Edit skill files and preview documentation with markdown rendering
- Browse Remote Skills - Discover skills from GitHub repositories like anthropics/skills
- View Local Skills - See skills already installed on your system
- Multi-Repository Support - Add and manage multiple GitHub skill repositories
- Install to Multiple Providers - Install skills to Claude Code (
~/.claude/skills) and/or Codex (~/.codex/skills/public) - Provider Badges - Visual indicators showing where each skill is installed
- Markdown Rendering - View skill documentation with full markdown support
- Search & Filter - Quickly find skills by name or description
- Uninstall Support - Remove skills from individual providers
| Provider | Skills Path | Description |
|---|---|---|
| Claude Code | ~/.claude/skills |
Anthropic's AI coding assistant |
| Codex | ~/.codex/skills/public |
OpenAI's code generation tool |
- macOS 15+
- Swift 6.0+
Download the latest release from GitHub Releases.
git clone https://github.com/tddworks/SkillsManager.git
cd SkillsManager
swift build -c releaseLaunch the app to browse available skills. Use the source dropdown to switch between:
- Local - Skills installed on your system
- Remote repositories - Skills from configured GitHub repos
Select a skill to view its details and documentation. Click "Install" to install a skill to your chosen providers.
- Click the source dropdown
- Select "Add Repository..."
- Enter a GitHub URL (e.g.,
https://github.com/anthropics/skills) - Click "Add"
# Build the project
swift build
# Run all tests
swift test
# Run the app
swift run SkillsManagerThe project uses Tuist to generate Xcode projects with SwiftUI preview support.
# Install Tuist (if not installed)
brew install tuist
# Generate Xcode project
tuist generate
# Open in Xcode
open SkillsManager.xcworkspace
# Run tests via Tuist
tuist testFull documentation: docs/ARCHITECTURE.md
Skills Manager uses a layered architecture with rich domain models:
SkillLibrary (@Observable)
├── localCatalog: SkillsCatalog ← Installed skills (claude + codex)
└── remoteCatalogs: [SkillsCatalog] ← GitHub skill repositories
└── skills: [Skill] ← Each catalog OWNS its skills
| Layer | Location | Purpose |
|---|---|---|
| Domain | Sources/Domain/ |
Rich models with behavior (SkillsCatalog, Skill) |
| Infrastructure | Sources/Infrastructure/ |
Repositories, clients, parsers, installers |
| App | Sources/App/ |
SwiftUI views consuming domain directly (no ViewModel) |
- Rich Domain Models - Behavior encapsulated in models (not anemic data)
- Tell-Don't-Ask - Objects manage their own state; callers tell objects what to do
- Protocol-Based DI -
@Mockableprotocols for testability - Chicago School TDD - Test state changes, not interactions
- No ViewModel Layer - Views consume domain models directly
The project includes CI/CD workflows and Sparkle integration for automatic updates.
Generate EdDSA keys for signing updates:
# Build first to get Sparkle tools
swift build
# Generate key pair
./scripts/sparkle-setup.shThe script will:
- Generate a public/private EdDSA key pair
- Optionally update
Info.plistwith the public key - Display the private key to add as a GitHub secret
| Secret | Purpose |
|---|---|
APPLE_CERTIFICATE_P12 |
Base64-encoded Developer ID certificate |
APPLE_CERTIFICATE_PASSWORD |
Certificate password |
APP_STORE_CONNECT_API_KEY_P8 |
Base64-encoded App Store Connect API key |
APP_STORE_CONNECT_KEY_ID |
API key ID |
APP_STORE_CONNECT_ISSUER_ID |
Team issuer ID |
SPARKLE_EDDSA_PRIVATE_KEY |
EdDSA private key for signing updates |
CODECOV_TOKEN |
(Optional) Codecov upload token |
Releases are triggered by:
- Pushing a version tag:
git tag v1.0.0 && git push --tags - Manual workflow dispatch with version input
The release workflow will:
- Build universal binary (arm64 + x86_64)
- Sign with Developer ID
- Notarize with Apple
- Create DMG and ZIP artifacts
- Publish GitHub Release
- Update Sparkle appcast for auto-updates
SkillsManager/
├── Sources/
│ ├── Domain/
│ │ ├── Models/ # Skill, SkillsCatalog (@Observable class), Provider
│ │ └── Protocols/ # SkillRepository, SkillInstaller (@Mockable)
│ ├── Infrastructure/
│ │ ├── Repositories/ # LocalSkillRepository, ClonedRepo, MergedRepo
│ │ ├── Local/ # ProviderPathResolver, LocalSkillWriter
│ │ ├── Parser/ # SkillParser (YAML frontmatter)
│ │ └── Installer/ # FileSystemSkillInstaller
│ └── App/
│ ├── Views/ # SwiftUI views (consume domain directly)
│ └── SkillLibrary.swift # @Observable coordinator for catalogs
├── Tests/
│ ├── DomainTests/ # SkillTests, SkillsCatalogTests
│ ├── AppTests/ # SkillLibraryTests
│ └── InfrastructureTests/
├── Project.swift # Tuist configuration
└── Package.swift # SPM configuration
MIT License - see LICENSE for details.


