latest tag on npm. “Claude Opus” resolves to a concrete version at runtime (anthropic/claude-opus-5), and when a new generation ships we bump it. Your configuration doesn’t change.
Selecting a model
Pick one under Agent > Model in the console. The API key row names the secret that model needs; store it in the console or in your workflowenv: — see BYOK. Set an org-wide default from the org console, which every repo inherits until it picks its own.

Smart
Under Provider, pick the provider whose key you store, then set Model selection to Smart or Manual. Manual pins one model from that provider’s menu and sets its reasoning effort. Smart picks the model for each pull request: Pullfrog reads the diff and runs a small change that can be checked line by line on a cheaper model, and a change that reaches across many files on the frontier one, using that provider’s whole ladder — Luna, Terra, Sol and Astra on OpenAI; Haiku, Sonnet and Opus on Anthropic; Flash and Pro on Google. Issue labeling and other small chores take the cheapest rung; mentions and fixes the middle one. The Model row under Smart lists the ladder and what each model takes. The scoring runs on Pullfrog’s own model, whatever credential the provider is configured with. Beneath the ladder, Custom instructions takes standing guidance for that choice — which paths or kinds of change deserve the top model or more reasoning effort, which can stay on the cheapest rung at low effort — written against the provider you picked, so changing the provider clears it. Lockfiles, snapshots and generated files are already left out when a diff is weighed, so they need no mention; guidance for the review itself belongs in Standing instructions, not here. The Provider card shows the credential that pays for the runs, or the way to set one up. Smart is part of Pro; outside it the tab carries a lock, and opening it explains how Smart works and where to upgrade. On Pullfrog Router it picks between DeepSeek Flash, GPT Luna, GPT Sol and Claude Opus, and stays on DeepSeek Flash until a card is on file. Reasoning effort sits under a pinned model and offers exactly the levels that model publishes; Smart sets it per run. Per run, use the--effort flag.
On Pullfrog Router without a card on file, a positive balance runs DeepSeek Flash and the other models are locked, so a credit balance can’t be spent on a premium model; with no balance at all, runs stop until you add a card or top up. Adding a card unlocks every model. Free models and any model you hold a Pullfrog-stored key for are exempt. BYOK is never gated.
Pullfrog for OSS
Repos in Pullfrog for OSS have their model costs covered by us, so the picker offers the set we fund:
Anything outside this set falls back to the default, and the PR footer says so — unless you’ve stored that provider’s key with Pullfrog, in which case the run uses your key and your pick. A key that lives only in GitHub Actions secrets doesn’t opt you out, because the server can’t see it when it decides. Same rule for a per-run
--model flag.
Model resolution
When a run starts, Pullfrog picks a model in this order:modelaction input — your workflow file, or the console. The recommended way.- Auto-select — Pullfrog asks OpenCode which models your keys can reach and takes the best curated match, preferring each provider’s top tier.
- Provider default — OpenCode’s own pick, if nothing matched.
anthropic/claude-opus-5); Pullfrog’s aliases map onto them.
The model also decides which agent runs it: an Anthropic model with Anthropic credentials runs on Claude Code, and everything else runs on OpenCode. Organizations opted in to the experimental Codex CLI agent run OpenAI models on Codex instead, when a Codex subscription or an OPENAI_API_KEY is present. Runs billed through Pullfrog Router or the OSS program always use OpenCode.
Supported providers
Custom providers
The table above is what the console has a card for. It is not the limit of what runs. Pullfrog runs models through OpenCode, which carries the whole models.dev catalog. Any provider there — Groq, Mistral, Cerebras, Together, Fireworks — switches on the moment its API key is in the run’s environment. Nothing to enable, nothing to wait on us for.This is BYOK. Set Model access to BYOK on the Billing card first — on Router billing the server hands the run a Router credential before it starts, and a key that lives only in GitHub Actions secrets is invisible to the server, so it can’t know to step aside.
env:.
model input, so pick Custom (set in workflow) — or Inherit from org if your org has a default. The job log confirms it took:
Routers
OpenRouter, OpenCode Zen, OpenCode Go, and Vercel AI Gateway are providers like any other, with their own aliases (OpenRouter’s “Claude Opus” →openrouter/~anthropic/claude-opus-latest). To pin an exact version instead of the rolling alias, set the model input to the full specifier:
OpenCode Zen and OpenCode Go
Zen and Go are two OpenCode plans behind one credential. StoreOPENCODE_API_KEY once and both groups appear in the picker.
Most of the Go catalog is not served on Zen at all, so the two groups are not two spellings of the same menu.
DeepSeek and Muse Spark are missing from the Go menu on purpose. OpenCode gates them on a workspace opt-in that is off by default — China hosting for DeepSeek, data collection for Muse Spark — so a run refuses with a link to the setting. Turn it on at your OpenCode workspace and they run by full specifier, as below. DeepSeek needs no opt-in on any other route.

