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.
- 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 in the console.
- 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. - Click Preview import. The gateway finds every
SKILL.mdin the repo and lists each skill with its description and size. Nothing is saved yet. - Click Add next to one skill, or Add all.
https://github.com/owner/repo, or /tree/branch/path to read one folderSKILL.mdThe 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, readsgit logandgit diff, names the cause (the last commit dropped the trailing-separator branch inremoveMootSeparators), puts it back, and runsnpx avauntil all 25 tests pass. It also tells youtest.jsalready had aDé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 diffshows the one restored line inindex.js,npx avais 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.
Turn skills off
To stop one skill, switch it off in the Installed skills list. To stop all of them, open Settings 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 | 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 | 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 | .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 | A gateway, hosted or self-hosted | Clients of the gateway | Syncs team skills to SKILL.md files | Through Portkey's admin |
| LiteLLM | 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.