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-4-6). 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.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-4-6). 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
| Provider | API key env var |
|---|---|
| Anthropic | ANTHROPIC_API_KEY |
| OpenAI | OPENAI_API_KEY |
GOOGLE_GENERATIVE_AI_API_KEY or GEMINI_API_KEY | |
| xAI | XAI_API_KEY |
| DeepSeek | DEEPSEEK_API_KEY |
| Moonshot AI | MOONSHOT_API_KEY |
| OpenCode | OPENCODE_API_KEY (not required for free models) |
| OpenRouter | OPENROUTER_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 toopenrouter/anthropic/claude-opus-4.6). 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:

