v0.3.1 · macOS · Windows · Linux · MIT

Every tool's skills, in one library

Your skills, agents, commands and rules are scattered across a dozen folders, one convention per tool. This puts them in one place — and works on the real folders, so everything it does is a real change.

No account, no telemetry, nothing to sign in to.

The library: a sidebar of tools and types, a grid of cards, and a detail panel showing a skill's content

On disk

It acts on the real files

A checkbox in a manager that never touches the file a tool reads has not disabled anything. Everything here happens on disk.

Discover

Install from anywhere, update with your eyes open

Search the skills.sh registry by name, or point it at any repository git can reach. No account and no token either way — and nothing is overwritten before you have seen what would change.

Discover: a registry search grouped by repository, and below it a watched repository with the skills found in it, each with an install button
Search finds the repository; watching it finds the skills.
An update shown as a line diff with the changed words picked out, and the other changed files listed
The changed words picked out, and what else moves.
Anything installed this way records the commit it came from. That record is what makes checking for updates possible — and putting it back exactly as it was.

Cost

See what it all costs

What a tool carries every turn — a name and a description, so the model knows the item exists — separated from what it loads once the item is actually used. Only the first is a standing cost.

The cost page: totals for enabled items, always-available and on-invocation tokens, items ranked by cost, and suggestions
Where a tool keeps a session history — Claude Code and Codex do — that history says which items have really been used, instead of guessing from how old a file is. It is read on request, not on every scan: 459 MB of it here, in 284 ms.

Tools

Sixteen tools, and room for yours

It writes where they already read. Every path below is a default, editable and checked against your machine as you type — only the difference from the default is stored, so a path you leave alone stays free to be corrected by an update.

The tools page with one tool expanded, each of its paths an editable field

Appearance

Eighteen palettes, and the type to go with them

The nine VS Code ships with, five you would otherwise install, both SAP Fiori Horizon themes, and the two it started with. A palette is a set of colours and nothing else — it never changes a size, a spacing or a typeface.

The settings page with three dropdowns: theme, interface font and code font
Three dropdowns, and one of them follows the system until you say otherwise.

The typefaces are their own two settings, because they are their own two decisions: a sans face for the interface, a monospaced one for code, paths and sizes. Nine families ship with the application, so a choice looks the same on every machine and needs no network.

All of it is tokens. A palette is a block of colours and a typeface is a stack — no component in the interface knows the name of either, and there is not one hard-coded colour outside the token files. That is why adding a palette is a block of CSS rather than a patch, and why 547 KB covers nine fonts: only the Latin cuts are bundled, and a glyph outside them falls back to the system face.

Architecture

Built to be checked

Three layers, dependencies pointing inwards only. The domain crate never imports the UI framework — enforced by cargo deny, not by discipline — and $HOME is injected rather than read, which is what makes the scanner testable against temporary directories instead of only the machine it runs on.

LayerWhereKnows about
UIsrc/the generated bindings, and nothing else
Adaptersrc-tauri/Tauri and the domain
Domaincrates/core/neither of the above
There is also a command-line harness that drives the same domain code from a terminal. That it can exist at all is the proof the domain really is decoupled.

Get it

One command, or two and a coffee

macOS installs from a Homebrew tap; Windows and Linux take their installer from the releases page. Building it yourself needs Rust, Node and pnpm, and produces a .app and a .dmg — or the equivalent for your platform.

Builds are not signed yet, so macOS will object the first time. Open the app, let it be refused, then allow it under System Settings → Privacy & Security, where an Open Anyway button now sits — or take the quarantine flag off yourself with xattr -dr com.apple.quarantine /Applications/skills-hub.app. Control-clicking the app and choosing Open no longer works; macOS 15 removed that bypass.