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.
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.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.
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 low → max 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:modelaction input — set in your workflow file or via the console. This is the recommended way to select a model.- Auto-select — Pullfrog queries available models (via OpenCode’s
opencode modelscommand) and picks the best curated match based on your API keys. - Provider default — if no curated match is found, OpenCode picks a model on its own.
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 toopenrouter/~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:

