A breaker panel for your Claude. Skills are invisible — nobody uses tools they can't see. SkillSwitch is a small macOS app that sits next to Claude Cowork and shows every skill on your machine as a switch on an electrical panel. Arm a breaker and the skill fires at the start of your next conversation — then the breaker trips off, ready for next time. No terminal, no config files, no tmux.
Inspired by Shift — the stick shift for Claude Code models.
- Breakers — every skill in Cowork's own skills list gets a rocker switch. SkillSwitch reads and writes the manifest Cowork actually loads from (
~/Library/Application Support/Claude/local-agent-mode-sessions/skills-plugin/…/manifest.json). Flipping a circuit ON arms it: the skill is enabled and its description gets a fire-now instruction, so your next Cowork chat invokes it right at the start. Once it fires, SkillSwitch notices (it watches Cowork's session logs) and the breaker trips back off — armed skills are one-shots. Skills that ship with Cowork appear as hardwired circuits (always on). - Add Skills — a discovery shelf preloaded from skills.sh with every skill above 50k installs (mirror sources deduped, sorted by popularity, searchable). One click downloads the skill from its GitHub repo into Cowork's skills folder and registers it in the manifest as a user skill (
creatorType: "user", syncManaged: false— the shape Cowork's sync explicitly preserves), armed and ready to fire in your next chat. Click a row to unfold its description (fetched on demand from its skills.sh page) with a link to the page itself. - Labels — click a skill's label to copy its
/nameinvocation; in Cowork you can paste it, or just ask for the skill in plain English.
Flips apply to your next Cowork conversation (a running chat keeps the skills it started with). If a chat never uses an armed skill, the breaker simply stays armed for the chat after that.
Grab SkillSwitch.dmg, drag SkillSwitch to Applications, done. (Build it yourself with ./build-app.sh && ./tools/make-dmg.sh.)
SkillSwitch is distributed directly rather than through the Mac App Store: App Store apps are sandboxed and can't touch Cowork's skills manifest, which is the whole point of the app. Release builds are signed and notarized (./tools/release.sh, needs an Apple Developer ID) so Gatekeeper opens them without complaint.
- macOS 14+
- The Claude desktop app, signed in, with a Cowork chat opened at least once (that's what creates the skills manifest)
swift build # compile
swift run # run from the CLI
./build-app.sh # assemble build/SkillSwitch.app (regenerates Assets/AppIcon.icns if missing)
./tools/make-icns.sh # redraw the app icon (tools/make-icon.swift is the source of truth)
./tools/make-owner-seed.sh # refresh the org/user seed for the AUTHOR filter (needs gh)
swift tools/make-og-image.swift docs/og/card.png # redraw the social share card
./tools/make-dmg.sh # package build/SkillSwitch.dmg
./tools/release.sh # sign + notarize + DMG (needs a Developer ID certificate)The website lives in docs/index.html (GitHub Pages–ready).
CoworkEnvironment— finds the signed-in account's skills-plugin folder and does all manifest I/O. JSON is read and written withJSONSerialization(notCodable) so fields SkillSwitch doesn't know about survive the round trip, and every write is atomic (Cowork quarantines a manifest it can't parse).SkillScanner— turns manifest entries into breakers:creatorType: "user"entries are flippable circuits, everything else is hardwired.SkillToggler— ON arms (enables the skill and prepends the fire-now instruction to its description — the description is what Cowork's model reads, so that's the auto-invoke lever); OFF disarms and restores the original description.TripScanner— tails Cowork's per-sessionaudit.jsonllogs (incremental byte offsets, newline-safe) for aSkilltool-use of an armed skill; the store polls it every 4s and trips the breaker on a hit.DiscoveryStore— parses the skills.sh homepage leaderboard payload, filters to GitHub-installable sources with ≥50k installs, downloads via the GitHub trees API (HEADref, so any default branch works) into a staging dir, swaps it into Cowork's skills folder, then registers the manifest entry.PanelView/DiscoveryView— the SwiftUI electrical panel.
Skills that need API keys can declare them in SKILL.md frontmatter — required keys, optional keys, and pick-one-of-N groups — so tools like SkillSwitch can render real setup UI instead of guessing. Spec: SKILL-ENV.md.
SkillSwitch is an independent open-source project, not affiliated with or endorsed by Anthropic (Claude) or Vercel (skills.sh). It works by editing Claude Cowork's local skills manifest — an extension point Cowork's own sync deliberately preserves for user-added entries. Everything happens on your machine; nothing phones home.
Found a vulnerability? Please use GitHub's private vulnerability reporting rather than a public issue. See SECURITY.md.