Configuration
OpenLoop splits configuration in two: global (~/.openloop/config.json) for machine-wide defaults, and per-project (<repo>/.openloop/project.json) for everything repo-specific. Full key references live in the configuration reference; this guide is about workflow.
Global config
Section titled “Global config”openloop config show # print the whole thingChange settable keys with dot notation (values are validated):
openloop config set budgets.dailyCostUsd 40openloop config set runtime.maxAttemptsPerTask 5openloop config set runtime.projectSelectionStrategy priorityModel and provider shortcuts:
openloop config set-model anthropic/claude-sonnet-4-5openloop config set-provider claudeopenloop config list-providersProject config
Section titled “Project config”openloop config project-show myappThe file is plain JSON; edit it directly for anything structural. The parts you’ll touch most:
Validation commands: the backbone of the promotion pipeline. Stack detection fills these during project init; verify them before trusting auto-merge.
{ "validation": { "lintCommand": "npm run lint", "testCommand": "npm test", "typecheckCommand": "npm run check" }}Agent & model: usually via the helper commands rather than by hand:
openloop config project-set-agent myapp claudeopenloop config project-set-model myapp openai/gpt-5.2-codexRuntime behavior: worktree isolation and branch prefix:
{ "runtime": { "useWorktree": true, "branchPrefix": "openloop/", "prCommand": null }}prCommand defaults to gh pr create; override it to use another PR tool.
Review & verification: deterministic post-run checks:
{ "review": { "enabled": true }, "verification": { "enabled": true }}Policy
Section titled “Policy”Scope and risk live in .openloop/policy.yaml, not project.json (see policy & risk.
Resolution order
Section titled “Resolution order”- Provider: project
agent.type→ globaldefaultProvider→pi. - Model: CLI
--model→ projectpi.model→ globalmodel. - Everything else: project settings are used where they exist; global defaults fill the gaps; hardcoded defaults (see the reference) are the floor.