Providers

Maki talks to LLM providers over their HTTP APIs. Models are split into three tiers: weak (cheap and fast), medium (balanced), and strong (highest capability, highest cost).

Built-in Providers

Anthropic

  • Env var: ANTHROPIC_API_KEY
  • API: https://api.anthropic.com/v1/messages
  • Features: Prompt caching, thinking mode (adaptive/budgeted), advanced tool use
TierModels
Weakclaude-3-haiku, claude-3-5-haiku, claude-haiku-4-5
Mediumclaude-3-sonnet, claude-3-5-sonnet, claude-3-7-sonnet, claude-sonnet-4, claude-sonnet-4-5, claude-sonnet-4-6
Strongclaude-3-opus, claude-opus-4-5, claude-opus-4-6

Defaults: claude-haiku-4-5 (weak), claude-sonnet-4-6 (medium), claude-opus-4-6 (strong)

OpenAI

  • Env var: OPENAI_API_KEY (also supports OAuth device flow)
  • API: https://api.openai.com/v1
TierModels
Weakgpt-5.4-nano, gpt-5.4-mini, gpt-4.1-nano
Mediumgpt-4.1-mini, gpt-4.1, o4-mini
Stronggpt-5.4, o3

Defaults: gpt-5.4-nano (weak), gpt-4.1 (medium), gpt-5.4 (strong)

Z.AI

  • Env var: ZHIPU_API_KEY
  • API: https://api.z.ai/api/paas/v4 (standard) / https://api.z.ai/api/coding/paas/v4 (coding)

Z.AI has two endpoints: standard and coding. The coding endpoint is used for code-specific models.

TierModels
Weakglm-4.7-flash, glm-4.5-flash, glm-4.5-air
Mediumglm-4.7, glm-4.6, glm-4.5
Strongglm-5, glm-5-code

Defaults: glm-4.7-flash (weak), glm-4.7 (medium), glm-5-code (strong)

Synthetic

  • Env var: SYNTHETIC_API_KEY
  • API: https://api.synthetic.new/openai/v1
  • Features: Reasoning effort support (low/medium/high)

Synthetic hosts open-weight models via an OpenAI-compatible API.

TierModels
Weakhf:zai-org/GLM-4.7-Flash
Mediumhf:deepseek-ai/DeepSeek-V3.2
Stronghf:moonshotai/Kimi-K2.5

Model Identifiers

Models are referenced as provider/model_id:

anthropic/claude-sonnet-4-6
openai/gpt-4.1
zai/glm-4.7

If the model name is unique across providers, the prefix can be omitted.

Dynamic Providers

To add a custom provider or proxy, drop an executable script into ~/.maki/providers/. The script must handle these subcommands:

SubcommandTimeoutWhat it does
info5sReturn JSON with display_name, base provider, has_auth
resolve30sReturn auth JSON (base_url, headers)
logininteractiveOAuth or credential flow
logoutinteractiveClear credentials
refresh30sRefresh auth tokens

The base field specifies which built-in provider to inherit the model catalog from. Valid values: Anthropic, OpenAi, Zai, ZaiCodingPlan, Synthetic. For example, a proxy in front of Anthropic sets base to Anthropic and all Claude models are available, routed through your auth.

Dynamic provider models are namespaced as {slug}/{model_id} (e.g. myproxy/claude-sonnet-4-6).

Script Name Rules

  • Must start with a letter or digit
  • Only letters, digits, underscores, and hyphens after that
  • Can't reuse a built-in provider's slug
  • Must be executable