Skip to main content
Pullfrog uses a curated set of model aliases that automatically resolve to the latest version at runtime — like a latest tag on npm. You select a model in the console, and Pullfrog handles the rest.

Selecting a model

Pick a model from the dropdown in Agent > Model in the Pullfrog console.
Model selector in the Pullfrog console
Each alias (e.g. “Claude Opus”) resolves to a concrete, versioned model at runtime (e.g. anthropic/claude-opus-5). When a new generation ships, Pullfrog bumps the underlying version — your configuration stays stable. The UI shows which API keys are required for each model. After selecting a model, the API key row tells you exactly which secret to add.
API keys must be added both as a GitHub secret and mapped into your pullfrog.yml workflow env: block. See Keys for full setup instructions.
Models marked Free don’t require any API key — they work out of the box. See free models for the full list.

Auto vs custom

The model picker has two tabs: Auto and Choose model. On Pullfrog Router billing, Auto picks for you based on your billing state:
  • No card on file — Auto runs DeepSeek Flash, the most efficient model: a fast, low-cost reviewer.
  • Card on file — Auto runs Claude Opus, the most intelligent model.
Without a card, Router accounts are Auto-only: the Choose model tab is locked (hover it for the add-a-card link), and the server clamps any stored custom pick to the efficient default (DeepSeek Flash) so a trial balance can’t be spent on a premium model before you’ve added billing. Adding a card upgrades Auto to Claude Opus and unlocks the full model dropdown. Two picks are exempt and run as picked, card or no card: free models, since they cost nothing, and any model covered by a provider key you’ve stored with Pullfrog — that key is used instead of Router, so there is no trial balance to protect. On BYOK billing nothing is gated — you pay your provider directly — and Auto instead auto-selects from the providers you have keys for.

Org-wide default

Org admins set an org-wide default in the Model card of the org console. Repos without a model of their own inherit it; an explicit repo selection always wins. To hand a repo back to the org default, pick Inherit from org at the top of that repo’s model dropdown — which releases its reasoning effort too.

Pullfrog for OSS

Repos accepted into Pullfrog for OSS have their model costs covered by us, so the picker offers the set we fund rather than the full catalog: Pick any of them and runs use it. A model outside this set isn’t funded, so runs fall back to the default and the PR footer says so — unless that provider’s key is stored with Pullfrog (org or repo secrets in the console), in which case the run uses your credentials and your pick, funded set or not. A key that lives only in GitHub Actions secrets doesn’t opt you out, because the server can’t see it when it decides. The same rule applies to a per-run --model flag: allowlisted models work, anything else needs your own key for that provider.

Reasoning effort

Effort is a separate axis from model choice: the model decides which brain runs, effort decides how long it thinks before answering. Set it per repo under Agent > Model, or per run with the --effort flag. The default is the middle of each model’s range — High on the Claude and GPT flagships, Medium on a three-level model. Which levels a model offers varies, and so do their names — and for some models it also depends on how the run is billed, because Pullfrog Router and the OSS subsidy route through OpenRouter, which publishes its own ladders. A run on your own provider key always uses the direct ladder. The Claude and GPT flagships take the full lowmax range everywhere. DeepSeek Pro runs high to max on your own key and high to xhigh over Router; DeepSeek Flash runs low to max on both. A few (Claude Haiku, Kimi K2) have no effort control at all and hide the setting. Pullfrog reads each model’s levels from models.dev and stores your choice as a position on that model’s range rather than a level name — the lowest level it offers, the highest, or somewhere between. Switch models and your setting keeps its relative position on the new model’s range, so it never goes stale and never asks for a level the model doesn’t have. A position that falls between two levels always rounds down, so it never costs more than you asked for.

Model resolution

When a run starts, Pullfrog resolves which model to use in this order:
  1. model action input — set in your workflow file or via the console. This is the recommended way to select a model.
  2. Auto-select — Pullfrog queries available models (via OpenCode’s opencode models command) and picks the best curated match based on your API keys.
  3. Provider default — if no curated match is found, OpenCode picks a model on its own.
Model specifiers use the format from models.dev (e.g. anthropic/claude-opus-5). Pullfrog’s alias registry maps stable slugs like anthropic/claude-opus to these specifiers and keeps them up to date. During auto-select, Pullfrog prefers preferred models (the top-tier pick for each provider, marked in the alias registry). If no preferred model is available, it falls back to any curated match, then to OpenCode’s own default.

Supported providers

Routers

OpenRouter and OpenCode are treated as providers like any other — they appear in the model selector with their own set of aliases. The UI gives you curated aliases for each router (e.g. OpenRouter’s “Claude Opus” resolves to openrouter/~anthropic/claude-opus-latest). If you need to pin a specific model version instead of using the rolling alias, set the model action input to the exact models.dev specifier: