Skills
Route /skills. Search the skill marketplaces and install what you find.

Searching
Type a query and press Search. The search spans every marketplace the core has configured, and each result says which source it came from.
An empty result list is ambiguous, so the screen never leaves it at that. One of four things is always on screen after a search:
- rows, when a marketplace answered with hits,
- a notice naming the sources that could not be reached,
- an explicit "no match" line, when every source answered and none matched,
- an error, when the search itself failed.
This matters offline. With no marketplace reachable, the honest answer is "nobody could be asked", not "there is nothing".
Some hubs are disabled by design on the registry rather than unreachable — agentskills.io and Hermes Hub, at the time of writing. Those show up as a quiet "Not included: …" line instead of the warning, with the reason in a tooltip (ⓘ): they were never candidates for this query, so their absence does not make the result incomplete the way an unreachable hub's does.
Creating a skill
New skill, in the header, opens a sheet with two ways to get a SKILL.md:
- Let the agent draft it — name it, describe what it should do, and pick a name and a scope (this project, or every project). The agent writes the file itself, as a turn on the thread you have open — watch it happen there, the same way you would watch any other file get written; the sheet closes and a "Drafting…" line stays on the Skills screen until that turn ends.
- Write it myself — the same choice of name and scope, but a
SKILL.mdeditor instead, opened on a starter template (frontmatter withname,description,version, then "When to use", "Steps" and "Checks" headings). The frontmatter is checked live, the same rule the registry enforces — a bad name or too short a description is caught before Save, not after. If the name is already taken, Save turns into an explicit "Overwrite it" checkbox rather than failing silently.
Either way, once it exists a "Run it with /name" banner offers to drop the slash command straight into the composer of the thread you have open.
Editing an installed skill
Edit on an installed row opens the same SKILL.md editor, loaded from disk. Save writes it back and reloads the installed list. A packaged (builtin) skill carries a built-in badge instead: it has no on-disk location this window can write to or remove, so its row offers View — the same editor, read-only, with no Save.
Saving a conversation as a skill
In a thread's ⋯ menu, Save this conversation as a skill asks for a name and sends /skill learn <name> — the agent reads the transcript back and writes the SKILL.md from it, the same as typing the command by hand.
Installing
Install on a row installs that skill through the core. The source box below the results installs from somewhere the search does not cover:
- a local directory —
./my-skill - an archive URL —
https://…/skill.zip - a registry name
Installed skills
The lower table is what is installed now, with each skill's kind. It loads when the screen opens; Refresh list re-reads it.
Installing a skill can add slash commands, which is why the command palette in a thread offers different commands on different machines.