GC
6 min read·Updated 2026-04-13

Skills

Skills bundle instructions and optional MCP tool servers into a switch you flip on and off — one focused behavior at a time.

What a skill is

A skill is a small bundle of instructions and (optionally) an external tool server that the bot can switch into for part of a conversation. While a skill is active the bot reads its instructions, gains its tools, and behaves accordingly. When it switches out, the bot goes back to its default behavior.

Skills are how you teach the bot to do one thing well without polluting every other conversation. A code-review skill, a GitHub skill, a research skill — each is a separate package you can install once and ask for when you need it.

You do not toggle a skill by hand. You ask the bot for something that matches a skill's description, and the bot calls its skill_transition tool to switch itself in. Once that happens, the choice is sticky: the skill stays active across subsequent turns of the same session until the bot transitions out or the session resets.

Installing a skill and asking for it

The dashboard has a top-level Skills page with two tabs: Installed (the skills currently loaded in the workspace) and Marketplace (a catalog you can install from). That page is where everything lives — there is no separate page under Settings.

  1. From the marketplace. Open Skills → Marketplace, browse the catalog, and click Install on the skill you want. The skill appears in the Installed tab immediately.
  2. By hand. If you are writing your own skill, drop a folder with a SKILL.mdfile into the bot's skills/ directory. The bot does not watch the filesystem, so click Reload on the skill in the Installed tab (or POST /api/skills/<name>/reload) to make it visible. A bot restart also works.

To check which skills the bot currently sees, type /skills in any chat — it prints a text list of installed skills, nothing more. It is not an activation command: there is no pick step. To actually use a skill, describe what you want in plain language and let the bot switch itself in.

What happens when a skill becomes active

When the bot transitions into a skill, three things happen in order: it loads the instruction body into the system prompt, applies the tier override (if the skill declares one), and starts the MCP tool server (if the skill declares one). When it transitions out, the instructions drop from the next prompt and the MCP server shuts down after its idle timeout.

You do not drive any of this by hand — the bot does it through the skill_transition tool. But it helps to know the order: if something goes wrong (MCP server fails to start, tier did not change) you know which piece to look at.

What “active” means across turns

The resolver keeps the currently active skill sticky by writing its name to session metadata. On the next turn the bot sees the same skill is still active and does not have to reload it. The skill stops being sticky when the bot transitions to a different skill, the session is reset, or the skill is removed from the catalog (in which case the persisted name is cleared).

Writing your own SKILL.md

If you are writing your own skill, the instructions live in a file called SKILL.md. It has two parts: a YAML header with metadata and a Markdown body with the actual instructions. The body is what gets injected into the bot's prompt when the skill is active.

A SKILL.md with everything in it
yaml
---
name: github-assistant
description: Work with GitHub via MCP
model_tier: coding
mcp:
  command: npx -y @modelcontextprotocol/server-github
  env:
    GITHUB_PERSONAL_ACCESS_TOKEN: ${GITHUB_TOKEN}
  startup_timeout: 30
  idle_timeout: 10
---

Use the available MCP tools to work with GitHub.
Focus on the repositories the user asks about.
When creating issues or PRs, summarize first and ask for confirmation.

The $${GITHUB_TOKEN} placeholder in the env block is resolved at load time — first from a vars: section in the same frontmatter, then from the process environment. The full recipe (token setup included) lives in Cookbook → Connect GitHub via MCP.

name

The skill identifier. Lowercase, hyphens are fine. Optional — if you omit it, the parent directory name is used. Must be unique on this bot.

Optional

description

A short sentence shown in the marketplace and the /skills list. Keep it to one line.

Required

model_tier

Override the model tier the bot uses while the skill is active. Accepts the four named tiers (balanced, smart, coding, deep) and the five custom slots (special1–special5). Skip it to leave routing alone.

Optional

reflection_tier

Second-tier hint used for recovery and reflection paths inside the skill. Same allowed values as model_tier. Skip unless you have a specific reason.

Optional

mcp

Declare an MCP tool server: command, env, startup_timeout (seconds), idle_timeout (minutes). The bot starts it when the skill activates.

Optional

Common gotchas

The MCP recipe is in the Cookbook

The most common skill pattern is one that wraps an MCP tool server (GitHub, Slack, Linear). The full step-by-step, including token setup and verification, lives in Cookbook → Connect GitHub via MCP. Read this page first for the concept, then go there for the recipe.

When a skill does not show up

  • Wrong filename casing. The loader matches SKILL.md exactly. Lowercase skill.md or mixed-case Skill.md are silently skipped.
  • Missing SKILL.md. The bot only lists skills with a readable SKILL.md file. Add one (even with a minimal header) and reload the Installed tab.
  • The bot has not reloaded. There is no filesystem watcher — after you edit or drop a file by hand, click Reload on the skill in the Installed tab or restart the bot.
  • Broken YAML header. A typo in the frontmatter silently drops the skill. Check the runtime log for parse errors.
  • Duplicate name. Skill names must be unique. The bot keeps the first one loaded and logs a warning for the duplicate.
  • MCP server fails to start. The skill still activates but its MCP tools are missing. See MCP Servers for the troubleshooting table.

What to do next