Agents & providers
OpenLoop ships no model integration of its own. A provider wraps a coding-agent CLI and runs it as a subprocess with a task prompt; everything else (scheduling, validation, promotion) is provider-agnostic.
Built-in providers
Section titled “Built-in providers”| Provider | Binary | Invocation |
|---|---|---|
pi (default) |
pi |
pi -p <prompt> [--model <m>] |
claude |
claude |
claude -p <prompt> --output-format json --permission-mode acceptEdits |
aider |
aider |
aider --message <prompt> --yes |
codex |
codex |
codex exec --json <prompt> |
opencode |
opencode |
opencode run <prompt> |
custom |
any | sh -c '<command> "$OPENLOOP_PROMPT"', per-project, see custom agents |
Check what’s available on your machine:
openloop config list-providers✅ pi , Pi❌ claude , Claude Code✅ aider , Aider+ custom, Run any shell command (configure per-project)Selecting a provider
Section titled “Selecting a provider”Resolution order: project config → global default → pi.
# global defaultopenloop config set-provider claude
# per-project (what you'll usually want)openloop config project-set-agent api claudeEach tool keeps its own credentials, OpenLoop never stores or forwards API keys.
Model resolution
Section titled “Model resolution”The model used for a run resolves as: CLI --model flag → project pi.model → global model.
openloop config set-model anthropic/claude-sonnet-4-5 # globalopenloop config project-set-model api openai/gpt-5.2-codex # projectopenloop run-once -p api --model <model> # one-off overrideWhat model identifiers are valid depends on the provider; they are passed through verbatim.
Cost tracking
Section titled “Cost tracking”Providers parse token usage and cost from the agent’s output (Claude’s full-JSON mode, the last JSON line for pi/codex, …). When output can’t be parsed (or a run is killed by the timeout), cost falls back to the configured estimate (budgets.estimatedCostPerRunUsd, default $0.10) for budget accounting.
Prompting
Section titled “Prompting”The task prompt is assembled from the scheduler role plus the repo’s prompt files (defaults: .agents/skills/openloop/SKILL.md, .pi/SYSTEM.md, .pi/APPEND_SYSTEM.md, configurable via pi.promptFiles). Preview the exact prompt with:
openloop run-once -p api --dry-runEscapes hatches
Section titled “Escapes hatches”agent.extraArgsinproject.jsonappends arguments verbatim, e.g. a stricter Claude permission mode.openloop run -p api --prompt "..."bypasses the scheduler and runs Pi directly against the repo (it always usesrunPi, regardless of the configured provider).