# Skills docs: one skill catalog for Claude Code and Codex

Import skills from GitHub once. The gateway keeps them for your account and loads the one that matches your message, in Claude Code and Codex, on any machine. Skills are in every plan.

## Key facts

What it is

A skill catalog kept on the gateway for your account. The gateway loads the skill that matches your message.

Who it is for

Developers who use skills in Claude Code or Codex on more than one machine.

Clients

Claude Code and Codex. Part of [Pro](https://context-mode.com/docs/faq#access).

Measured result

Not measured for quality: we have not measured whether skills give better answers. In our benchmark accounts the skill list was about 760 tokens a request, read from cache.

Limits

Imports come from GitHub. A skill that loads adds its whole body to the prompt.

## Where skills live

Claude Code and Codex load skills from `SKILL.md` files on the local disk. Context Mode keeps them on the gateway instead. Every session that goes through `https://gateway.context-mode.com` sees the same catalog, whatever machine or project it runs in. Nothing is written to your disk.

A skill on the gateway is a different skill from a local one with the same or a similar name. The gateway tells the model so on every request, so it does not open a local file by mistake.

## Import from GitHub

Open [Skills](https://console.context-mode.com/app/skills) in the console.

1. Paste a repo URL such as `https://github.com/mattpocock/skills`, or click one of the popular repos: `vercel-labs/skills`, `mattpocock/skills`, `millionco/react-doctor`.
2. Click **Preview import**. The gateway finds every `SKILL.md` in the repo and lists each skill with its description and size. Nothing is saved yet.
3. Click **Add** next to one skill, or **Add all**.

URL shape `https://github.com/owner/repo`, or `/tree/branch/path` to read one folder

skill name the folder that holds the `SKILL.md`

body size at most 262,144 bytes per skill; a larger body is refused with the reason

large repos import in batches; **Import the next batch** continues

import again updates skills that came from GitHub

The console has no token field. If GitHub limits the read, the console says so and shows how long until you can retry.

## Manage installed skills

The **Installed skills** list shows each skill, its description and the repo it came from. Filter it by name. Each row has an on/off switch and a **Remove** button. Removal asks you to confirm. To bring a removed skill back, import its repo again.

## How a skill is matched

On each message, the gateway compares what you wrote with the name and description of every skill that is on. A second check decides whether you are asking for that skill now or only mention its topic. At most one skill loads per turn. If a check fails or the match is weak, no skill loads.

You can also ask for a skill by its name or a close version of it. The gateway loads it on that message.

The matcher reads the `description` in each `SKILL.md`. A skill with a clear description is easier to match.

## What you see

When a skill loads, a line in the reply names it:

```
⏺ context-mode · skill to-tickets auto-loaded
```

The skill stays loaded on later turns. The line speaks again only when that changes:

| Line ends with | What happened |
| --- | --- |
| ended, task done | Your message ended the task |
| ended, idle over 6 h | The conversation was idle for more than 6 hours |
| ended, skills off | You turned skills off |
| ended, disabled | The skill was switched off on your account |
| still loaded, say done to end it | You came back to a skill that is still loaded |

Loading a different skill also ends the current one.

## Try it in 5 minutes

You report a real regression in plain words. You never name a skill, yet the right one loads, and a second one takes over when you ask for tickets.

### Setup

```
npx @context-mode/cli      # sign in and connect Claude Code, then restart Claude Code
# In the console, open Skills, click the popular repo mattpocock/skills, click Preview import, then Add all.
# Keep clicking "Import the next batch" until all are in. You need diagnosing-bugs and to-tickets on.
git clone https://github.com/sindresorhus/slugify && cd slugify && npm install
npx ava      # all green (25 tests): the healthy baseline
python3 -c "p='index.js'; s=open(p).read(); a='|(?:${escapedSeparator})$'; assert a in s; open(p,'w').write(s.replace(a,''))"   # play the teammate: a 'tidy up' that drops one branch
git commit -am 'refactor: simplify separator cleanup'
npx ava      # now red: 7 tests fail, for example 'Déjà Vu!' gives 'deja-vu-'
claude
```

### Prompts

Prompt 1:

```
Walk me through how slugify turns a title into a slug, step by step.
```

Prompt 2:

```
Since this morning our blog URLs end with a dash. 'Déjà Vu!' now comes out as 'deja-vu-' and the test suite is red. Nothing in the inputs changed. Figure out what broke and fix it. You can edit the code.
```

Prompt 3:

```
Good. Now break the follow-up work from this into tickets I can hand to the team.
```

Prompt 4:

```
Thanks, that's all done.
```

### What you will see

```
# prompt 1: a question about the code, so no skill line

# prompt 2: you never typed a skill name
⏺ context-mode · skill diagnosing-bugs auto-loaded

# prompt 3
⏺ context-mode · skill to-tickets auto-loaded

# prompt 4
⏺ context-mode · skill to-tickets ended, task done
```

- **Prompt 1.** A normal step-by-step answer. No skill loads. If Memory is on, a memory line can show instead.
- **Prompt 2.** The agent follows the skill: it reproduces `deja-vu-` first, reads `git log` and `git diff`, names the cause (the last commit dropped the trailing-separator branch in `removeMootSeparators`), puts it back, and runs `npx ava` until all 25 tests pass. It also tells you `test.js` already had a `Déjà Vu!` case, and that this case went red. It may list its ranked guesses and ask first. If it does, answer "yes, go ahead".
- **Prompt 3.** In 2 of our 3 runs, to-tickets loaded here and ended diagnosing-bugs. In the third, on 2026-10-04, no new skill loaded: diagnosing-bugs stayed loaded, and the agent still wrote the tickets. The agent writes thin end-to-end tickets as files under `.scratch/`, each with a "Blocked by" line, then asks if the sizes are right.
- **Prompt 4.** The skill ends.
- **Check it yourself.** `git diff` shows the one restored line in `index.js`, `npx ava` is green, and the ticket files are on disk.

We ran this on 2026-10-02 and again on 2026-10-04 in real Claude Code sessions through the gateway with Claude Opus 5.5. Every skill line above is copied from those runs. On 2026-10-04 diagnosing-bugs loaded at prompt 2 and ended at prompt 4 with "ended, task done". With Claude Haiku 4.5 the gateway loaded diagnosing-bugs, but no skill line showed in the reply.

**Why it matters.** Your team's best habits (debug in order, prove the fix with the tests, split work into clean tickets) apply the moment someone describes the problem in plain words, on every machine, with nothing to install in each repo.

## What it costs

Skills add tokens to your requests.

- **The list.** Each skill that is on adds one line (name and description) to a list at the start of every request. It sits in the cached part of the prompt, so after the first request it bills at the cache-read rate. In our benchmark accounts it was about 760 tokens.
- **The body.** A skill that loads adds its whole body to the prompt.

The benchmark runs had memory and skills on, so their results include this cost. We have not measured whether skills give better answers. See [Benchmarks](https://context-mode.com/docs/benchmarks).

## Turn skills off

To stop one skill, switch it off in the Installed skills list. To stop all of them, open [Settings](https://console.context-mode.com/app/controls) and switch **Skills** off. The list and every skill body leave your requests. Context Saving, Memory and Cage keep working.

## Compared with other approaches

From each vendor's own pages, read on 2026-09-30.

| Approach | Where skills live | Clients | How a skill is picked | Rollout to a team |
| --- | --- | --- | --- | --- |
| **Context Mode** | The gateway, imported from any GitHub repository with `SKILL.md` files | Claude Code and Codex | The gateway compares your message with each skill, runs a second check, loads at most one per turn and names it in the reply | One catalog per account. No team roles yet. |
| [Claude Code skills](https://code.claude.com/docs/en/skills) | `SKILL.md` folders: personal, project, plugin, or the managed settings folder. Skills can also sync from claude.ai. | Claude Code | The model loads a skill when its `description` fits, or you type its name | Commit it to a repository, ship it in a plugin, or deploy it through managed settings to "All users on machines where your organization deploys it" |
| [Claude Code plugin marketplaces](https://code.claude.com/docs/en/plugins/org) | A catalog in a git repository, a URL or a local path | Claude Code | As above, once installed | Managed settings register a marketplace and install plugins on every machine. "Users can't override them." |
| [Codex skills](https://learn.chatgpt.com/docs/build-skills) | `.agents/skills` in the repository, a personal folder, and an admin folder, `/etc/codex/skills` | Codex | The model, from the skill's description, or you name it | Check skills into the repository, or into the admin folder on each machine or container |
| [Portkey](https://portkey.ai/docs/product/guardrails) | A gateway, hosted or self-hosted | Clients of the gateway | Syncs team skills to `SKILL.md` files | Through Portkey's admin |
| [LiteLLM](https://docs.litellm.ai/docs/proxy/guardrails/tool_permission) | A proxy you host | Clients of the proxy | Runs a Claude Code plugin marketplace | Through LiteLLM's admin |

**Where Context Mode differs.** One catalog reaches Claude Code and Codex on every machine that uses the account, with nothing to copy into each repository or folder. The gateway, not the model, decides when a skill loads, and the reply names it, so you can see which skill shaped an answer.

**Where they are stronger.** Claude Code and Codex load skills with no third party, from an open format. Managed settings and plugin marketplaces reach every machine in an organization and cannot be switched off by a user. A skill in the repository is reviewed in git like code. We have not measured whether skills give better answers.

## FAQ

### Do I still need SKILL.md files on each machine?

No. The gateway keeps the catalog for your account, so a machine gets it once it is connected.

### How does the gateway pick a skill?

It compares each message with the name and description of every skill you have on. A weak match loads nothing.

### How do I know which skill loaded?

A line in the reply names it.

### Can I turn skills off?

Yes. Switch them all off in Settings, under "What your agent gets", or one at a time on the Skills screen.

Compared with other tools: see the [landscape](https://context-mode.com/docs/landscape#skills).

[Connect your agent →](https://context-mode.com/docs/quick-start) [Skills overview](https://context-mode.com/skills) [Memory](https://context-mode.com/docs/memory)
