Sandbox
@tddworks/SkillsManager

macOS app for Claude Code and Codex skills

Skills Manager is a macOS app that helps you find skills in GitHub repositories or local directories, then install them into Claude Code or Codex. It also lets you tag skills, filter them, and edit local skill markdown with preview.

165 stars21 forksSwiftUpdated 3mo ago
Who it's for

Builders who want a desktop app to browse, tag, and install skills for Claude Code and Codex.

What it delivers

You can manage skills for multiple providers from one app instead of copying files by hand.

What it does

Browse remote skills

Discover skills from GitHub repositories such as `anthropics/skills`.

Add local directories

Load skills from any local folder through `file://` URLs.

Filter installed skills by provider

View installed skills for Claude Code, Codex, or both.

Manage multiple catalogs

Keep several GitHub skill catalogs in the same app.

Install and uninstall skills

Install to Claude Code, Codex, or both, then unlink or remove them later.

Tag skills

Create global custom tags and filter by SKILL.md tags or your own tags.

Preview and edit markdown

Open skill documentation with full markdown rendering and a split-pane editor with live preview.

Switch list and grid views

Browse skills as cards or as a compact list.

How to get it

  1. 1Run
    git clone https://github.com/tddworks/SkillsManager.git
    cd SkillsManager
    swift build -c release
  2. 2Generate EdDSA keys for signing updates
    # Build first to get Sparkle tools
    swift build
    
    # Generate key pair
    ./scripts/sparkle-setup.sh

README

Skills Manager

Build Tests codecov Swift 6.2 Platform

A macOS application for discovering, browsing, installing, and tagging skills for AI coding assistants. Manage skills for Claude Code and Codex from GitHub repositories or your local filesystem.

Skills Manager

Browse, install, and tag skills for Claude Code and Codex

Features

  • Browse Remote Skills - Discover skills from GitHub repositories like anthropics/skills
  • Local Directory Support - Add skills from any local directory via file:// URLs
  • View Installed Skills - Filter by provider (Claude Code, Codex, or all)
  • Multi-Repository Support - Add and manage multiple GitHub skill catalogs
  • Install to Multiple Providers - Install skills to Claude Code and/or Codex
  • Global Custom Tags - Create tags to organize skills across all catalogs
  • Tag-Based Filtering - Filter skills by SKILL.md tags or your custom tags
  • Markdown Rendering - View skill documentation with full markdown support
  • Split-Pane Editor - Edit local skills with live markdown preview
  • Uninstall / Unlink - Unlink from a provider or fully uninstall
  • Search - Find skills by name, description, or tags
  • Grid / List View - Toggle between card grid and compact list views

Providers

ProviderSkills PathDescription
Claude Code~/.claude/skillsAnthropic's AI coding assistant
Codex~/.codex/skills/publicOpenAI's code generation tool

Requirements

  • macOS 15+
  • Swift 6.0+

Installation

Download (Recommended)

Download the latest release from GitHub Releases.

Build from Source

git clone https://github.com/tddworks/SkillsManager.git
cd SkillsManager
swift build -c release

Usage

Launch the app to browse available skills. The three-column layout shows:

  • Sidebar - Navigate between installed skills, provider filters, and remote catalogs
  • Main Content - Browse skills in grid or list view with tag-based filtering
  • Detail Panel - View skill info, manage tags, install/uninstall

Adding Catalogs

  1. Click "+ Add Catalog" in the sidebar footer
  2. Choose GitHub Repository or Local Directory
  3. Enter a URL (e.g., https://github.com/anthropics/skills) or browse for a folder
  4. Click "Add Catalog"

Tagging Skills

  1. Select a skill to open the detail panel
  2. In the Tags section, click "+ add" to create a new tag
  3. Tags are global labels - once created, they appear in the filter bar across all views
  4. Purple tags come from SKILL.md frontmatter; cyan tags are your custom tags

Development

Command Line (Swift Package Manager)

# Build the project
swift build

# Run all tests
swift test

# Run the app
swift run SkillsManager

Xcode (with SwiftUI Previews)

The 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 test

Architecture

Full documentation: docs/ARCHITECTURE.md

Skills Manager uses a layered architecture with rich domain models and SwiftUI Atomic Design:

SkillLibrary (@Observable, coordinator)
├── localCatalog: SkillsCatalog     ← Installed skills (claude + codex)
├── remoteCatalogs: [SkillsCatalog] ← GitHub repos or local directories
│   └── skills: [Skill]             ← Each catalog OWNS its skills
└── skillTags: SkillTags            ← Global tag management aggregate
LayerLocationPurpose
DomainSources/Domain/Rich models (Skill, SkillsCatalog, SkillTags), protocols
InfrastructureSources/Infrastructure/Repositories, parsers, persistence
AppSources/App/SwiftUI views (Atomic Design), coordinator, design tokens

Key Design Decisions

  • Rich Domain Models - Behavior encapsulated in models (not anemic data)
  • Domain Aggregates - SkillTags is an @Observable aggregate managing the tags feature
  • Tell-Don't-Ask - Objects manage their own state; callers tell objects what to do
  • Protocol-Based DI - @Mockable protocols for testability
  • Chicago School TDD - Test state changes, not interactions
  • No ViewModel Layer - Views consume domain models directly
  • SwiftUI Atomic Design - Atoms, Molecules, Organisms, Pages
  • Design Tokens - DS enum mirrors prototype CSS for consistent dark theme

Project Structure

SkillsManager/
├── Sources/
│   ├── Domain/
│   │   ├── Models/          # Skill, SkillsCatalog, SkillTags, Provider, SkillEditor
│   │   └── Protocols/       # SkillRepository, UserTagRepository, SkillInstaller (@Mockable)
│   ├── Infrastructure/
│   │   ├── Repositories/    # MergedSkillRepository
│   │   ├── Local/           # LocalSkillRepository, LocalDirectorySkillRepository
│   │   ├── Git/             # ClonedRepoSkillRepository
│   │   ├── Parser/          # SkillParser (YAML frontmatter)
│   │   ├── Installer/       # FileSystemSkillInstaller
│   │   └── UserDefaultsUserTagRepository.swift
│   └── App/
│       ├── SkillLibrary.swift   # @Observable coordinator
│       ├── Theme/               # DesignTokens (DS enum)
│       └── Views/
│           ├── ContentView.swift     # 3-column root layout
│           ├── Sidebar/              # SidebarView, SkillCardView, SkillRowView
│           ├── Detail/               # SkillDetailView, SkillEditorView, MarkdownView
│           ├── Atoms/                # TagChip, EditableTagsView, FlowLayout, etc.
│           ├── Molecules/            # CategoryTabsBar, StatsBar, ProviderLinkCard
│           └── Sheets/               # AddCatalogSheet, InstallSheet, UninstallSheet
├── Tests/
│   ├── DomainTests/         # SkillTests, SkillTagsTests, SkillEditorTests
│   ├── AppTests/            # SkillLibraryTests, SkillLibraryUserTagTests
│   └── InfrastructureTests/ # Parser, repository, installer tests
├── Project.swift            # Tuist configuration
└── Package.swift            # SPM configuration

Release & Auto-Updates

The project includes CI/CD workflows and Sparkle integration for automatic updates.

Setup Sparkle Keys

Generate EdDSA keys for signing updates:

# Build first to get Sparkle tools
swift build

# Generate key pair
./scripts/sparkle-setup.sh

Required GitHub Secrets

SecretPurpose
APPLE_CERTIFICATE_P12Base64-encoded Developer ID certificate
APPLE_CERTIFICATE_PASSWORDCertificate password
APP_STORE_CONNECT_API_KEY_P8Base64-encoded App Store Connect API key
APP_STORE_CONNECT_KEY_IDAPI key ID
APP_STORE_CONNECT_ISSUER_IDTeam issuer ID
SPARKLE_EDDSA_PRIVATE_KEYEdDSA private key for signing updates
CODECOV_TOKEN(Optional) Codecov upload token

Creating a Release

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:

  1. Build universal binary (arm64 + x86_64)
  2. Sign with Developer ID
  3. Notarize with Apple
  4. Create DMG and ZIP artifacts
  5. Publish GitHub Release
  6. Update Sparkle appcast for auto-updates

License

MIT License - see LICENSE for details.

Files in the repo

Repository payload15 top-level entries
  • .claude
  • .github
  • docs
  • prototype
  • scripts
  • Sources
  • Tests
  • .gitignore
  • CHANGELOG.md
  • CLAUDE.md
  • codecov.yml
  • Package.swift
  • Project.swift
  • README.md
  • Tuist.swift

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More tools

JuliusBrussee/
caveman

🪨 why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman

105k
1 add
MemPalace/
mempalace

The best-benchmarked open-source AI memory system. And it's free.

59k
stablyai/
orca

Orca is the ADE for working with a fleet of parallel agents. Run any coding agent with your own subscription. Available on desktop, mobile and remote runtime.

66k

A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io

132k

Never stop coding. Free MIT AI gateway: one endpoint, 352 providers (150+ free), 1200+ models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline & Copilot. Quota-aware auto-fallback, RTK+Caveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 550+ contributors

64k
headroomlabs-ai/
headroom

Compress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.

71k