Skip to main content

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​

AgentTypeDocker imageExisting host credentials
Claude Code (Anthropic)claudepropr/agentHOST_CLAUDE_DIR → ~/.claude
Codex (OpenAI)codexpropr/agentHOST_CODEX_DIR → ~/.codex
Antigravity (Google, multi-model)antigravitypropr/agentHOST_ANTIGRAVITY_DIR → ~/.gemini (authenticate with agy login)
OpenCodeopencodepropr/agentHOST_OPENCODE_XDG_DIR → ~/.config/opencode (plus data dir; see below)
Mistral Vibevibepropr/agentHOST_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.

ModelLabelContext
Claude Opus 5.5llm-claude-opus551M
Claude Fable 5.1llm-claude-fable511M
Claude Sonnet 5.5llm-claude-sonnet551M
Claude Fable 5llm-claude-fable1M
Claude Opus 5llm-claude-opus51M
Claude Sonnet 5llm-claude-sonnet51M
Claude Opus 4.8llm-claude-opus481M
Claude Opus 4.7llm-claude-opus471M
Claude Opus 4.6llm-claude-opus461M
Claude Sonnet 4.6llm-claude-sonnet461M
Claude Opus 4.5llm-claude-opus45200K
Claude Sonnet 4.5llm-claude-sonnet45200K
Claude Haiku 4.5llm-claude-haiku200K

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.

ModelLabelContext
GPT-6 Astrallm-codex-astra1.05M
GPT-6.1 Solllm-codex-gpt61-sol1.05M
GPT-6 Solllm-codex-gpt6-sol1.05M
GPT-6 Lunallm-codex-gpt6-luna1.05M
GPT-5.6 Solllm-codex-gpt56-sol1.05M
GPT-5.6 Terrallm-codex-gpt56-terra1.05M
GPT-5.6 Lunallm-codex-gpt56-luna1.05M
GPT-5.5llm-codex-gpt551M
GPT-5.5 Prollm-codex-gpt55-pro1M
GPT-5.4llm-codex-gpt541M
GPT-5.4 Prollm-codex-gpt54-pro1M
GPT-5.4 Minillm-codex-gpt54-mini400K
GPT-5.4 Nanollm-codex-gpt54-nano400K
GPT-5.3 Codexllm-codex-gpt53-codex400K
GPT-5.3 Codex Sparkllm-codex-spark400K
GPT-5.2llm-codex-gpt52400K
GPT-5 Minillm-codex-gpt5-mini400K
GPT-5 Nanollm-codex-gpt5-nano400K

Antigravity Models​

Antigravity is a multi-model CLI: one container and credential mount expose several backing models. All entries have a 1M context window.

ModelLabel
Gemini 3.8 Flashllm-antigravity-flash38
Gemini 3.1 Prollm-antigravity-pro
Claude Sonnet 5.5llm-antigravity-sonnet55
Claude Opus 5.5llm-antigravity-opus55
GPT-OSS 120Bllm-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:

ModelLabelContext
Big Picklellm-opencode-big-pickle200K
Ling 3.0 Flash Fin Freellm-opencode-ling30-flash-fin-free262K
MiMo V2.5 Freellm-opencode-mimo-v25-free200K
Muse Spark 1.2 Contributor Freellm-opencode-muse-spark12-free1M
Muse Spark 1.3 Contributor Freellm-opencode-muse-spark13-free1M
Nemotron 3 Ultra Freellm-opencode-nemotron-3-ultra-free1M
Nemotron 3.5 Lightning Freellm-opencode-nemotron35-lightning-free262K

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​

ModelLabelContext
Mistral Medium 3.5llm-vibe-mistral256K
GLM 5.3llm-vibe-glm531M
GLM 5.2llm-vibe-glm521M

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, and analysis_model_fast (see propr setting get).
  • Reviews use the configured pr_review_model unless a model is named in the /review command.
  • Per-task overrides: issue labels, propr issue implement -a <agent> -m <model>, /switch, and /use.