Skip to content
IchenDEVPublic

About

A native macOS app to manage AI agent skills — browse, install, and organize skills.sh packages across all your coding agents.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

SkillsUI logo

A native macOS app for managing AI agent skills without living in dotfiles and symlinks.

Browse installed skills, search skills.sh, inspect rendered SKILL.md, and send the same package to Codex, Claude Code, Cursor, Windsurf, and the rest of your local agent setup.

Swift 6 macOS 26+ SwiftUI

What It Does • Getting Started • Architecture • Supported Agents • 中文文档


What It Does

  • Shows every installed skill from the shared ~/.agents/skills store, grouped by source repo.
  • Renders SKILL.md content so you can inspect a package before wiring it into another agent.
  • Searches the skills.sh marketplace inside the app and installs packages with one click.
  • Detects per-agent links across 20 supported agent directories, so you can see where each skill is actually available.
  • Gives you the day-to-day actions you need: reveal in Finder, open the source, remove a skill, or refresh the index.
  • Checks Node.js and the skills CLI on launch, then points you to the missing piece when your environment is incomplete.

Getting Started

Prerequisites

  • macOS 26 (Tahoe) or later
  • Xcode 26+ (or an equivalent Swift 6.2 toolchain with full macOS UI macro support)
  • Node.js — SkillsUI will guide you through installation on first launch if it's missing

Tip: You don't need to install the skills CLI manually. SkillsUI detects whether it's present and offers installation guidance in the onboarding sheet and in Settings → Environment.

Why Node at all? The app itself is native SwiftUI, but install/remove/update operations call npx skills under the hood, so Node.js is a runtime dependency for those actions rather than for building the macOS app.

Build & Run

# Clone
git clone https://github.com/IchenDEV/skills-ui.git
cd skills-ui

# Build
swift build

# Run
swift run SkillsUI

Build for Release

./scripts/package-dmg.sh
open dist

This creates:

  • dist/SkillsUI.app
  • dist/SkillsUI.dmg

Install it like a normal Mac app: open the DMG and drag SkillsUI.app into Applications.

The current packaging flow is for local distribution and testing. It uses an ad-hoc signature by default, and it does not include Developer ID signing or notarization yet.

If xcode-select -p still points at Command Line Tools, the packaging script automatically switches builds to /Applications/Xcode.app/Contents/Developer when that Xcode install exists.

Note: Locally built app bundles are still unsigned for public distribution. If macOS blocks a local build, run xattr -cr dist/SkillsUI.app once to clear the quarantine flag.

Download a Pre-built Binary

Pre-built arm64 binaries are attached to every GitHub Release. Each release includes a .sha256 checksum file for verification.

# Verify checksum after download
shasum -a 256 -c SkillsUI-*.tar.gz.sha256

Architecture

Sources/
├── SkillsUIApp.swift          # @main entry, window config, app icon, Settings scene
├── ContentView.swift          # TabView (Installed / Marketplace) + onboarding trigger
├── SkillsSidebar.swift        # Sidebar list, grouped by source, version footer
├── SkillDetailView.swift      # Detail pane — metadata grid + SKILL.md
├── SkillMarkdownView.swift    # Native Textual renderer + local markdown styling
├── AddSkillSheet.swift        # Sheet for adding skills from GitHub
├── MarketplaceView.swift      # Marketplace search UI
├── MarketplaceService.swift   # skills.sh API client (actor)
├── MarketplaceSkill.swift     # Marketplace data model
├── SkillsManager.swift        # Core state — scanning, install, remove, env check
├── Skill.swift                # Installed skill model
├── Skill+UI.swift             # SwiftUI extension: skillColor
├── SkillParser.swift          # SKILL.md YAML frontmatter parser
├── SkillLock.swift            # .skill-lock.json Codable types
├── DependencyChecker.swift    # DependencyStatus model + EnvironmentChecker
├── OnboardingView.swift       # Setup sheet shown when Node/skills CLI is missing
├── SettingsView.swift         # Settings window (About + Environment tabs)
└── AppVersion.swift           # Version string — overwritten by CI on release builds

Packaging/
├── AppIcon.iconset/           # Source PNGs for the bundled app icon
├── AppIcon.icns               # Bundled app icon used by Finder/Dock
└── Info.plist.template        # App bundle metadata template

scripts/
├── package-dmg.sh             # Builds SkillsUI.app and SkillsUI.dmg
└── render-app-icon.swift      # Regenerates the tracked iconset PNGs

Key Design Decisions

  • SwiftPM executable — no Xcode project required; builds with swift build
  • @Observable + actors — Swift 6 strict concurrency throughout
  • No third-party UI deps — pure SwiftUI with native macOS look & feel
  • Textual — direct rendering dependency for native, block-level Markdown previews
  • Version baked at build time — CI overwrites AppVersion.swift with the Release tag before swift build -c release

Supported Agents

Agent Skills Path
Amp ~/.agents/skills
Claude Code ~/.claude/skills
Codex ~/.codex/skills
Cursor ~/.cursor/skills
Windsurf ~/.codeium/windsurf/skills
Gemini CLI ~/.gemini/skills
GitHub Copilot ~/.copilot/skills
Roo Code ~/.roo/skills
Cline ~/.cline/skills
OpenCode ~/.config/opencode/skills
Trae ~/.trae/skills
Augment ~/.augment/skills
Droid ~/.factory/skills
Kiro ~/.kiro/skills
Warp ~/.warp/skills
Deep Agents ~/.deepagents/agent/skills
Antigravity ~/.gemini/antigravity/skills
OpenHands ~/.openhands/skills
Qwen Code ~/.qwen/skills
Trae CN ~/.trae-cn/skills

How It Works

┌──────────────┐     npx skills add     ┌──────────────────┐
│  skills.sh   │ ◄──────────────────── │    SkillsUI      │
│  Marketplace │                        │  (this app)      │
└──────┬───────┘                        └────────┬─────────┘
       │                                         │
       │  download                     scan & parse
       ▼                                         ▼
┌──────────────┐     symlink            ┌──────────────────┐
│ ~/.agents/   │ ────────────────────► │ ~/.cursor/skills  │
│   skills/    │                        │ ~/.claude/skills  │
│              │                        │ ~/.codex/skills   │
│  SKILL.md    │                        │   ...             │
│  lock.json   │                        └──────────────────┘
└──────────────┘

Releasing a New Version

Push a tag matching v* and the CI workflow builds the binary and attaches it to the GitHub Release automatically:

git tag v1.2.3
git push origin v1.2.3

The workflow injects the tag version into AppVersion.swift before building, so Settings → About always shows the correct release version.

Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/awesome)
  3. Commit your changes (git commit -m 'Add awesome feature')
  4. Push the branch (git push origin feature/awesome)
  5. Open a Pull Request

About

A native macOS app to manage AI agent skills — browse, install, and organize skills.sh packages across all your coding agents.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages