Agents and Models
ProPR runs coding work through configurable agents. Each agent is a CLI tool that runs in the unified propr/agent Docker image, with an isolated credential directory mounted into its container. Models are addressed by stable ProPR model IDs that work everywhere a model can be chosen: issue labels, the Web UI, the CLI (-a/-m), and PR commands (/switch, /use, /review <model>).
The canonical catalog lives in packages/shared/src/modelDefinitions.ts. The tables below reflect that file; if they ever disagree, the source file wins. Custom model IDs can also be added per agent in the Web UI (AI Agents) or with propr agent add.
What Routing Solves
Different agents are better at different work, and most teams hold a mix of subscription access, API access, and provider-specific limits. ProPR treats the agent and model as routing decisions within a single workflow: the same issue intake, planning, PR creation, comment handling, and task history apply whichever agent runs the task.
Use routing when you want to:
- Choose a default agent for routine implementation
- Use a stronger or different model for reviews
- Compare outputs from multiple models
- Keep using subscription-backed CLI credentials where available
- Fall back to another provider when rate limits or quota are tight
- Preserve the same PR follow-up workflow across providers
For virtual routing across several configured direct agents, see Synthetic Pools.
Supported Agents
| Agent | Type | Docker image | Existing host credentials |
|---|---|---|---|
| Claude Code (Anthropic) | claude | propr/agent | HOST_CLAUDE_DIR → ~/.claude |
| Codex (OpenAI) | codex | propr/agent | HOST_CODEX_DIR → ~/.codex |
| Antigravity (Google, multi-model) | antigravity | propr/agent | HOST_ANTIGRAVITY_DIR → ~/.gemini (authenticate with agy login) |
| OpenCode | opencode | propr/agent | HOST_OPENCODE_XDG_DIR → ~/.config/opencode (plus data dir; see below) |
| Mistral Vibe | vibe | propr/agent | HOST_VIBE_DIR → ~/.vibe (plus HOST_VIBE_PROMPT_CACHE_DIR/VIBE_PROMPT_CACHE_DIR for the prompt cache) |
When adding Claude, Codex, Antigravity, or OpenCode in the Web UI, choose either Log in to a new account or Use existing config. Direct login saves the agent first, starts its configured image, and writes credentials to a new directory owned by that agent. This makes it possible to attach several accounts from the same provider without sharing or overwriting their login state. The dialog displays authorization links and accepts confirmation codes or terminal-menu input. Vibe continues to use MISTRAL_API_KEY or a pre-populated config.
Direct-login accounts use the portable saved path ~/.propr/agent-credentials/<agent-id>/…. ProPR maps it automatically to ~/.propr/agent-credentials for native and Compose installs, or to PROPR_DATA_DIR/agent-credentials for the launcher container. You do not enter a host path. The generated provider subdirectory is mounted read-write so its CLI can refresh auth state, and the agent image normalizes ownership before dropping to its unprivileged runtime user.
To reuse an account that is already authenticated on the host, select Use existing config and provide its config path. Launcher deployments also expose that path with the matching HOST_* setting. You can authenticate existing paths with a host CLI or propr agent login <type>; both CLI and Web login actions run the configured agent image, avoiding host/image CLI version drift. Gemini CLI was discontinued upstream; Gemini models route through Antigravity.
Goal sessions
Codex, Claude and Antigravity run goals on their native goal support. Antigravity goals use its /goal command in a persistent CLI conversation: ProPR streams activity, saves the conversation ID, and delivers checkpoints, operator input, pause and cancel by interrupting at the next finished step and resuming that exact conversation. Availability is checked against the configured image's CLI capabilities.
Keep Antigravity's mounted configuration directory across goal attempts, since it holds the goal conversation. See Goals for checkpoint, pause/resume, cancellation, and draft PR behavior.
Agent Configuration
The Web UI includes an AI Agents page for configuring coding agents. Each agent entry defines:
- Agent type (claude, codex, antigravity, opencode, vibe)
- A unique alias (lowercase alphanumeric and hyphens)
- An enable toggle
- The Docker image (predefined per agent type)
- A ProPR-managed login or an existing credential/config path
- The supported model list (toggle individual models on or off)
- The default model
- Optional per-model custom labels
- Optional environment variables and an API key
- The agent CLI version (default or a pinned custom version)
The model IDs you enable here become the durable names used by labels and slash commands.
For an interactive login, choose direct login while adding the agent or choose Log in from an existing entry's ⋯ actions menu. Open the authorization URL shown in the dialog and send a confirmation code or requested response when prompted. Login sessions are private to the dashboard user who started them, permit only one writer per credential directory, expire after ten minutes of inactivity, and are not persisted in task or LLM logs.
Reasoning Levels
The system setting model_reasoning_level applies to Claude, Codex, and Antigravity agent invocations, including implementation runs and lightweight analysis runs such as planning context, plan generation, and PR review. Short task-title generation does not inherit the system setting, avoiding high-cost reasoning for a trivial summary; a model-specific reasoning override or level-* label still applies. Leave the setting empty to use the default effort (Antigravity starts from medium and resolves it against the selected model's supported levels). Each supported model can also set one of its native reasoning levels in the agent configuration; that model-specific value overrides the system setting. An explicit run selection or issue or PR level-* label has the highest precedence and overrides both.
Valid system preference and level-* label values are low, medium, high, xhigh, max, ultra, ultracode, and auto. ProPR resolves the requested effort against the selected agent and model's vocabulary. Codex maps ultracode to ultra and omits auto; Claude maps ultra to max and passes auto through as Claude Code's adaptive effort mode. Antigravity chooses the closest supported level at or below the request, falling back to the model's lowest level when necessary; auto starts from medium. For example, xhigh or max becomes high for Claude 5.5 and Gemini Flash, medium becomes low for Gemini 3.1 Pro, and GPT-OSS always uses medium. Model configuration offers only the selected model's supported levels; reasoning effort is separate from its base model label.
Reasoning flags require Claude Code >= 2.1.68 and Codex CLI >= 0.144.0. Saving a global or model-specific reasoning level surfaces a non-blocking warning for enabled agents pinned below those versions. If the mismatch remains, ProPR also fails an affected run before starting the CLI with a version-specific error.
Model Labels
Every model has a GitHub label of the form llm-<agent>-<model-alias>. Add one to an issue (together with your trigger label, such as AI) to route that issue to the model. The same identity follows the run through the system: task records show the selected agent and model, and branch names include the model identifier for traceability.
Adding several model labels to one issue fans the work out into one job per model label: each model gets its own run, its own worktree and branch, and its own pull request. Compare the PRs, merge the best one, and close the rest. If a base-<branch> label is also present, the fan-out is per base × per model.
AI
llm-claude-fable51
llm-codex-astra
This issue produces two tasks and two pull requests — one per model.
The same aliases work in PR comments (the llm- prefix is optional; the raw catalog model ids are accepted too):
/switch claude-fable51 # future follow-ups on this PR use this model
/use codex-astra # one follow-up with this model
/review claude-fable51 codex-astra # independent reviews from two models
See PR Slash Commands for full command syntax.
Claude Code Models
Claude Opus 5.5 is the default Claude model and the target of the plain opus alias. Claude Sonnet 5.5 is the target of the plain sonnet alias.
| Model | Label | Context |
|---|---|---|
| Claude Opus 5.5 | llm-claude-opus55 | 1M |
| Claude Fable 5.1 | llm-claude-fable51 | 1M |
| Claude Sonnet 5.5 | llm-claude-sonnet55 | 1M |
| Claude Fable 5 | llm-claude-fable | 1M |
| Claude Opus 5 | llm-claude-opus5 | 1M |
| Claude Sonnet 5 | llm-claude-sonnet5 | 1M |
| Claude Opus 4.8 | llm-claude-opus48 | 1M |
| Claude Opus 4.7 | llm-claude-opus47 | 1M |
| Claude Opus 4.6 | llm-claude-opus46 | 1M |
| Claude Sonnet 4.6 | llm-claude-sonnet46 | 1M |
| Claude Opus 4.5 | llm-claude-opus45 | 200K |
| Claude Sonnet 4.5 | llm-claude-sonnet45 | 200K |
| Claude Haiku 4.5 | llm-claude-haiku | 200K |
Some models require a minimum agent CLI version (for example, Sonnet 5.5 requires Claude Code ≥ 2.1.284); ProPR records this in the catalog and the agent image is kept current.
Codex Models
GPT-6 Astra is the recommended default for the most demanding implementation, research, and security work. GPT-6.1 Sol offers near-Astra capability at a lower cost, GPT-6 Sol remains available for existing workflows, and GPT-6 Luna is the fastest and lowest-cost GPT-6 option. GPT-6.1 Sol requires Codex CLI >= 0.153.0, while GPT-6 Sol and GPT-6 Luna require Codex CLI >= 0.155.0. The bundled Codex CLI is pinned to 0.160.0.
| Model | Label | Context |
|---|---|---|
| GPT-6 Astra | llm-codex-astra | 1.05M |
| GPT-6.1 Sol | llm-codex-gpt61-sol | 1.05M |
| GPT-6 Sol | llm-codex-gpt6-sol | 1.05M |
| GPT-6 Luna | llm-codex-gpt6-luna | 1.05M |
| GPT-5.6 Sol | llm-codex-gpt56-sol | 1.05M |
| GPT-5.6 Terra | llm-codex-gpt56-terra | 1.05M |
| GPT-5.6 Luna | llm-codex-gpt56-luna | 1.05M |
| GPT-5.5 | llm-codex-gpt55 | 1M |
| GPT-5.5 Pro | llm-codex-gpt55-pro | 1M |
| GPT-5.4 | llm-codex-gpt54 | 1M |
| GPT-5.4 Pro | llm-codex-gpt54-pro | 1M |
| GPT-5.4 Mini | llm-codex-gpt54-mini | 400K |
| GPT-5.4 Nano | llm-codex-gpt54-nano | 400K |
| GPT-5.3 Codex | llm-codex-gpt53-codex | 400K |
| GPT-5.3 Codex Spark | llm-codex-spark | 400K |
| GPT-5.2 | llm-codex-gpt52 | 400K |
| GPT-5 Mini | llm-codex-gpt5-mini | 400K |
| GPT-5 Nano | llm-codex-gpt5-nano | 400K |
Antigravity Models
Antigravity is a multi-model CLI: one container and credential mount expose several backing models. All entries have a 1M context window.
| Model | Label |
|---|---|
| Gemini 3.8 Flash | llm-antigravity-flash38 |
| Gemini 3.1 Pro | llm-antigravity-pro |
| Claude Sonnet 5.5 | llm-antigravity-sonnet55 |
| Claude Opus 5.5 | llm-antigravity-opus55 |
| GPT-OSS 120B | llm-antigravity-gpt-oss-120b |
Each model has one catalog entry and base label. Select reasoning effort separately using a per-model override in AI Agents, an issue label such as level-low, level-medium, or level-high, or the system reasoning preference. Explicit run / label selections take precedence over per-model overrides; otherwise the closest supported effort to the system preference is used. Claude 5.5 and Gemini Flash support low, medium, and high; Gemini 3.1 Pro supports low and high (medium maps to low); GPT-OSS always uses medium.
OpenCode Models
Built-in free models:
| Model | Label | Context |
|---|---|---|
| Big Pickle | llm-opencode-big-pickle | 200K |
| Ling 3.0 Flash Fin Free | llm-opencode-ling30-flash-fin-free | 262K |
| MiMo V2.5 Free | llm-opencode-mimo-v25-free | 200K |
| Muse Spark 1.2 Contributor Free | llm-opencode-muse-spark12-free | 1M |
| Muse Spark 1.3 Contributor Free | llm-opencode-muse-spark13-free | 1M |
| Nemotron 3 Ultra Free | llm-opencode-nemotron-3-ultra-free | 1M |
| Nemotron 3.5 Lightning Free | llm-opencode-nemotron35-lightning-free | 262K |
OpenCode can also use any provider/model authenticated through its direct-login dialog or on the host. Run opencode models after a host opencode auth login, then register the IDs with ProPR's opencode- prefix (for example opencode-openai/gpt-5.5). Dynamic OpenCode labels use a ~ separator — llm-<agent-alias>~<propr-opencode-model-id>, for example llm-opencode~opencode-openai/gpt-5.5. The ~ format is a stable public contract: the labels persist on GitHub issues and are resolved for routing at execution time.
For an existing host account, install the CLI, run opencode auth login, and use ~/.config/opencode as the agent config path. Provider auth lands in ~/.local/share/opencode/auth.json, which the worker mounts into agent containers when HOST_OPENCODE_DATA_DIR is set (or inferred from the default config path). A direct-login account instead keeps both directories inside its own managed agent root. See OpenCode in the Agent Runtime Reference for the full host setup and the auth-data fallback options.
Mistral Vibe Models
| Model | Label | Context |
|---|---|---|
| Mistral Medium 3.5 | llm-vibe-mistral | 256K |
| GLM 5.3 | llm-vibe-glm53 | 1M |
| GLM 5.2 | llm-vibe-glm52 | 1M |
Vibe uses CLI 2.25.8. GLM runs through Mistral with the same MISTRAL_API_KEY or Vibe credentials; no separate Z.ai account is needed. Select zai-glm-5-3 (or zai-glm-5-2) in AI Agents, per-task model controls, or the CLI. Mistral Medium remains the default. Existing agents gain these choices on load; custom/local models, credentials, explicit CLI pins, and supported defaults are preserved. Retired hosted Devstral defaults move to Mistral Medium. Use the default CLI version for the verified GLM integration.
Choosing Models per Phase
Planning, implementation, review, and follow-ups can each use a different agent or model:
- Defaults per agent are configured in the Web UI (AI Agents) or
propr agent add -d <model>. - Planner models are settings keys:
planner_context_model,planner_generation_model, andanalysis_model_fast(seepropr setting get). - Reviews use the configured
pr_review_modelunless a model is named in the/reviewcommand. - Per-task overrides: issue labels,
propr issue implement -a <agent> -m <model>,/switch, and/use.