Use any provider in Continue
Continue lists its models in ~/.continue/config.yaml, one entry per model, and uses whichever entry comes first. yoink writes an entry for every model you selected, with apiBase and a literal apiKey, and --default moves your pick to the top of the list. The command is yoink connect <name> --to continue --default <model>.
On this page
At a glance
| Fact | Value |
|---|---|
| Harness id | continue |
| Config yoink writes | ~/.continue/config.yaml |
| Format | YAML |
| Protocols, in order of preference | openai-chat, anthropic-messages |
| Default model | the chosen model moves to the top of models |
| Path override | none |
| Providers at once | many, side by side |
| Experimental | no |
| Presets that reach it | 7 of 7: openai, kimi-code, moonshot, openrouter, deepseek, zai, ollama |
| Connect command | yoink connect <name> --to continue |
Generated from the yoink CLI source and docs/harnesses.md.
What yoink writes
If the file does not exist yet, yoink creates it with a header (name: Local Config, version: 1.0.0, schema: v1) and a models list. One model from the OpenRouter preset comes out like this, key redacted:
name: Local Config
version: 1.0.0
schema: v1
models:
- name: GLM-4.7 (openrouter)
provider: openai
model: z-ai/glm-4.7
apiBase: https://openrouter.ai/api/v1/
apiKey: <your key>
roles:
- chat
- edit
- apply
capabilities:
- tool_use
defaultCompletionOptions:
contextLength: 204800
maxTokens: 131072This matches the OpenAI-compatible form in Continue's OpenAI provider docs: provider: openai plus a custom apiBase. A few specifics:
apiBasealways ends in/. For an Anthropic endpoint it is the base URL plus/v1/, withprovider: anthropic.rolesis alwayschat,editandapply. yoink does not addautocompleteorembed, so pick a separate model for those.capabilitiesgainsimage_inputwhen the model accepts images.- The
nameis the model's display name followed by the profile id in parentheses. That suffix is how yoink recognizes its entries.
Which providers work
Continue takes OpenAI Chat, then Anthropic Messages. Every preset lands on its Chat endpoint, ollama and openai included, so the Anthropic shape only shows up for a custom gateway that answered the /v1/messages probe and not the Chat one. A Responses-only gateway cannot connect.
How the default works
Continue has no default-model key, so yoink uses list order. --default moves that model's entry to the first position; without it, a new provider's entries go to the end and a known provider's entries stay where they were. Your own entries keep their order around them.
yoink connect openrouter --to continue --default z-ai/glm-4.7
yoink connect openrouter --to continueStill on config.json?
Older Continue setups use ~/.continue/config.json. If that file exists and config.yaml does not, yoink refuses to connect, because a new config.yaml would hide your JSON config. The error asks you to run Continue's "Convert config.json to config.yaml" action first. yoink import still reads models from the legacy file, and yoink harnesses shows config.json as the config path until you migrate.
Detection
yoink treats Continue as installed when ~/.continue exists, the cn command-line tool is on your PATH, or a continue.continue-* folder is in ~/.vscode/extensions.
Disconnect and backups
yoink disconnect openrouter --from continue removes every entry whose name ends in (openrouter) and keeps the rest of the file, comments included. The first write keeps the original as config.yaml.yoink.bak.
FAQ
Can I rename the entries yoink adds?
Not safely. yoink matches its entries by the full <model name> (<provider>) name, such as GLM-4.7 (openrouter). Rename one and keep the suffix, and the next connect or re-sync replaces it with a fresh entry under the original name, losing your name and any keys you added. Drop the suffix, and yoink stops recognizing it: the next connect adds a duplicate and disconnect leaves yours behind. To customize an entry, add keys and leave name alone: yoink rewrites only the fields shown in the example above and keeps any other key you put on the entry.
Why does yoink skip some of my models during import?
yoink import adopts entries with provider: openai or provider: anthropic and a literal key. An apiKey written as a ${{ secrets.NAME }} template, or any other reference to a variable, is skipped, because yoink cannot keep a key in sync that it never sees.
Related
- Harnesses
What yoink writes into pi, omp, opencode, codex, Claude Code, Qwen Code, Kilo, Droid, Crush, Continue, Goose, Zed and Claude Desktop: paths and keys.
- Providers
Add an API key once with yoink, from a preset (OpenAI, Kimi, OpenRouter, DeepSeek, z.ai, Ollama) or any compatible URL it probes, and pick its models.
- Use OpenRouter in your coding agents
Add your OpenRouter key once and yoink writes it into Claude Code, opencode, pi, Qwen Code, Crush and 7 more. Codex is not supported: no Responses endpoint.
- Use any provider in pi
Connect any OpenAI- or Anthropic-compatible provider to pi. yoink writes ~/.pi/agent/models.json with model limits from models.dev and sets the default.
- Use any provider in omp
Connect a provider to omp. yoink writes ~/.omp/agent/models.yml (or models.yaml), carries over a legacy models.json and sets modelRoles.default in config.yml.
- Use any provider in opencode
Connect OpenRouter, DeepSeek, Ollama or any compatible API to opencode. yoink edits opencode.json or .jsonc in place, keeping your comments and formatting.