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-4-8). 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 Kimi K2, 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 (Kimi K2) 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. Free models are the exception — a stored free pick runs as picked, card or no card, since it costs nothing. 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 can push a repo’s model choice to every repo in the org with Set as default for all repos under the picker. Repos without a model of their own inherit the org default; an explicit repo selection always wins.

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-4-8). 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

ProviderAPI key env var
AnthropicANTHROPIC_API_KEY
OpenAIOPENAI_API_KEY (or use a ChatGPT subscription instead)
GoogleGOOGLE_GENERATIVE_AI_API_KEY or GEMINI_API_KEY
xAIXAI_API_KEY
DeepSeekDEEPSEEK_API_KEY
Moonshot AIMOONSHOT_API_KEY
OpenCodeOPENCODE_API_KEY (not required for free models)
OpenCode GoOPENCODE_API_KEY
OpenRouterOPENROUTER_API_KEY

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:
jobs:
  pullfrog:
    runs-on: ubuntu-latest
    steps:
      - name: Run agent
        uses: pullfrog/pullfrog@v0
        with:
          prompt: ${{ inputs.prompt }}
          model: openrouter/anthropic/claude-sonnet-5
        env:
          OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}