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. An asdf plugin lives atto11ai/asdf-to11, and every release carries the archives and a checksums.txt directly. There is no Windows build.
Receiving skills has the commands.
Getting it configured
to11 init configures one location and runs a first sync. It authenticates with an API key, created in the dashboard under Settings → API keys and supplied once at a hidden prompt; $TO11_API_KEY supplies it without a terminal. With every flag given it asks nothing.
See Receiving skills for the walkthrough, and to11 init for every flag.
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 three. 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 in your own agent settings, installed once by to11 init. A repository can never install one on your machine or change how often yours 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 skill directory you edited, on the way past. When configuration stops asking for a skill — or for one of the targets it went to — each directory is judged on its own: one still holding what the CLI wrote is taken back; one you have edited, or that cannot be read at all, is reported and left, on every run, until
to11 skill sync --forcesays otherwise. Under--remove-allthe command that finishes it isto11 skill sync --remove-all --force. - 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.
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 turn a skill off.
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.