to11. It does two things:
- keeps the skills your company publishes current in the directories your coding agent reads;
- runs your agent with its traffic going through the gateway, so the work is visible without changing how you write code.
Where it comes from
The binary is published for Linux and macOS, on x86-64 and arm64. A Homebrew formula lives in theto11ai/tap tap, an asdf plugin lives at to11ai/asdf-to11, and every release carries the archives and a checksums.txt directly. There is no Windows build yet.
Receiving skills has the commands.
Getting it configured
to11, with no arguments, links the location you run it in and then syncs it. Inside a git repository it links the repository; outside one, your home. It signs you in through a browser when nobody is, asks only what it cannot work out — the project, its environment, whether to change the targets, the to11 plugin — writes skills.yaml, and fetches your skills. Every later run in a linked location is the sync, and asks nothing. to11 link does the same link without the sync, and takes each answer as a flag.
Without a terminal, or when it detects a coding agent, it asks nothing: what it still needs comes back as one action_required object, with commands that finish the link. On a machine where nobody signs in, such as CI, write the configuration yourself and set TO11_API_KEY.
to11 ui is a full-screen view of the same setup, and where you route Claude Code and Codex through to11.
See Receiving skills for the walkthrough, and to11 link for what each question decides.
What it puts where
Configuration never contains a secret, which is what makes a repository’s copy safe to commit.
$TO11_HOME moves the first four. A repository’s own configuration lives at <repo>/.to11/skills.yaml, and both apply at once — see Configuration.
Staying current
An automatic refresh is a cache read, andcacheTtlSeconds is the window: inside it there is nothing to do and no request is made. It syncs when the window has passed, or when a configuration file that governs your machine has changed since the last write.
The refresh runs from a hook the to11 plugin carries, which to11, to11 link and to11 ui offer to install for Claude Code and Codex, where it finds them. A repository can never change how often your refresh runs: a team decides which skills apply to work in their repository, never how a colleague’s agent behaves.
An automatic refresh does not block the work that triggered it. An update reaches the agent on the following message regardless, because the agent resolves a skill independently of when the file is written.
A refresh that fails is silent. It writes nothing to either stream, and records nothing for a later command to report. See Failing while nobody is watching.
to11 skill sync ignores the window entirely — an explicit sync always runs.
What it never does
- Touch a directory it did not create. The state file records what the CLI wrote, per file; anything else in the same directory is never read and never removed. It is listed once — as
unmanaged, or, when it stands exactly where a configured skill would go, as aconflictnaming the path. - Replace something you edited. A file you changed inside an installed skill makes that skill a local variant, and sync leaves the whole of it alone until you commit it with
to11 skill storeor discard it withto11 skill sync --force. - Delete a file you changed or added, on the way past. When configuration stops asking for a skill — or for one of the targets it went to — only the files the CLI wrote and nobody changed are removed. Every other file stays, and so does the directory holding it, reported as
orphanedon every run until it is empty; no flag removes it. A directory the CLI cannot read is reported and left whole. - Publish anything implicitly. Only
to11 skill releasemakes a skill reach anyone else. - Print your credential. Not in the process list, not in a log, not in the terminal.
Hidden files inside an installed skill are not compared.The CLI skips dot-prefixed entries when it compares a skill against what it wrote, which is what stops a
.DS_Store an agent or your OS drops into a skill directory from marking it changed and blocking every published update after it. So a hidden file you add, or edit when the CLI did not write it, never marks a skill dirty. It is not deleted either: when the skill leaves your configuration, it stays with the directory, which reads orphaned. The one exception is a .DS_Store written by macOS Finder, which holds only how Finder displays the folder; it is removed with the skill.Next steps
Commands
Every command, its flags, its conflicts, and what each deliberately does not do.
Configuration
The file that decides what you receive — including how to disable a skill.
Output formats
Plain versus JSON, and what the JSON contract promises.
Errors & exit codes
What a failure looks like, and what keeps working when one happens.
Non-interactive mode
When the CLI does not prompt, and the object it answers with instead.