Skip to content

Providers and models

Yachiyo has no built-in model and no hosted account. You bring providers, and you can have as many as you like at once — switching per message is normal usage, not an edge case.

Providers live in ~/.yachiyo/config.toml. API keys are stored there in plain text on your machine and are redacted in all CLI output.

Settings → Providers → Add, then pick a preset. The preset fills in the API type and base URL; you supply the key.

PresetAPI typeBase URL
Anthropicanthropichttps://api.anthropic.com/v1
OpenAIopenaihttps://api.openai.com/v1
OpenAI (Codex OAuth)openai-codexhttps://chatgpt.com/backend-api/codex
Geminigeminihttps://generativelanguage.googleapis.com/v1beta
Google Vertex AIvertex— (uses project + location)
Vercel AI Gatewayvercel-gatewayhttps://ai-gateway.vercel.sh/v3/ai
OpenRouteropenaihttps://openrouter.ai/api/v1
DeepSeekopenaihttps://api.deepseek.com/v1
Moonshotopenaihttps://api.moonshot.cn/v1
Kimi For Codinganthropichttps://api.kimi.com/coding/v1
Zhipu GLManthropichttps://open.bigmodel.cn/api/anthropic
Z.aianthropichttps://api.z.ai/api/anthropic
Minimaxopenaihttps://api.minimaxi.com/v1
Mistralopenaihttps://api.mistral.ai/v1
Aliyun Bailianopenaihttps://dashscope.aliyuncs.com/compatible-mode/v1
PackyCodeanthropichttps://www.packyapi.com/v1
Ollamaopenaihttp://localhost:11434/v1

Anything not on the list works too — pick the preset whose API shape matches (most third-party endpoints are OpenAI- or Anthropic-compatible) and replace the base URL.

The Ollama preset points at http://localhost:11434/v1 and needs no API key. Any other OpenAI-compatible local server (llama.cpp, LM Studio, vLLM) works the same way — set the base URL and leave the key blank if the server does not check it.

Vertex does not use an API key. It needs project, location, and a service account (serviceAccountEmail + serviceAccountPrivateKey) instead.

The openai-codex type authenticates through a Codex CLI session rather than a key. Point codexSessionPath at your Codex auth.json and Yachiyo reads the account from it.

Fetching a provider’s catalogue returns everything the API knows about, which is usually far more than you want in a picker. So each provider keeps two lists:

  • modelList.enabled — shows up in the model picker
  • modelList.disabled — known, deliberately hidden

Only enabled models are selectable. Curate the list once and the picker stays short.

Terminal window
yachiyo provider models openai # everything the API offers
yachiyo provider models # what you have actually enabled

There is also modelList.imageIncapable — models are assumed to accept images, so list the ones that do not.

The defaultModel setting decides what new threads start with:

Terminal window
yachiyo provider set-default anthropic --model <model-name>

That promotes the provider to default and sets the active model in one step. Without --model it picks the provider’s first enabled model. Individual threads and messages can override it freely.

Separate from the model that talks to you, Yachiyo uses a tool model for background work:

  • thread titles
  • memory generation and distillation
  • context handoff when a thread outgrows its window
  • image-to-text descriptions
  • group-chat probes and reply rewriting
  • the built-in translator

Three modes:

ModeBehavior
defaultReuse the chat model. Simple, and the most expensive option.
customName a specific provider and model.
disabledSkip auxiliary generation entirely. Titles stay generic, distillation stops.

This work is frequent and low-stakes, so custom pointed at something small and fast is usually the right setup.

Terminal window
yachiyo config get toolModel
yachiyo config set toolModel.mode '"custom"'

For models that expose a reasoning budget, each provider can carry a reasoning block: which effort levels are offered (low, medium, high, xhigh, max), which is the default, and whether off is allowed. Effort is then selectable in the composer per message.

Terminal window
yachiyo provider list # all providers, keys redacted
yachiyo provider show openai # one provider in full
yachiyo provider update openai --payload '{"apiKey":"sk-..."}'
yachiyo provider set-default openai --model <model-name>

Full details in the provider CLI reference.