Quickstart
This guide takes you from a fresh install to a running daemon with your first promoted change. If you prefer a guided flow, openloop setup walks through the same steps interactively.
1. Link a repository
Section titled “1. Link a repository”openloop project add myapp ~/code/myapp --initThis does two things:
- Registers the alias
myappin the global registry (~/.openloop/projects.json). - Materializes the per-repo control plane into
~/code/myapp/.openloop/, task ledger, policy, config, plus agent prompt files (.pi/SYSTEM.md,.agents/skills/openloop/SKILL.md) and an OpenLoop section inAGENTS.md.
During --init, OpenLoop detects your stack and fills in validation commands. Verify the result:
openloop config project-show myappLook at the validation block; it should reflect your real commands:
{ "validation": { "lintCommand": "npm run lint", "testCommand": "npm test", "typecheckCommand": "npm run check" }}Stack detection covers Node (npm/pnpm/yarn/bun), Python (ruff/pytest/mypy), Go (golangci-lint/go test/go vet), Rust (cargo clippy/test/check), Gradle, Maven, Ruby (rubocop/rspec), and .NET. Edit .openloop/project.json directly to override.
2. Enqueue work
Section titled “2. Enqueue work”openloop task add -p myapp \ --title "Add pagination to the /orders endpoint" \ --kind feature --risk low \ --scope src/api/ tests/api/What you just did:
--kindand--riskdrive scheduling and the promotion decision.--scopeconstrains which paths the agent may touch, enforced by policy.- The task id is a slug of the title (
add-pagination-to-the-orders-endpoint).
Or pull work from your tracker: label a GitHub issue openloop, configure issue sync, and it becomes a task automatically.
3. Try one iteration
Section titled “3. Try one iteration”Before handing control to the daemon, run a single scheduler iteration:
openloop run-once -p myapp --dry-run # shows selected task + built prompt, runs nothingopenloop run-once -p myapp # actually runs itThe output summarizes the run: prompt, agent result, validations, and the promotion decision.
4. Start the daemon
Section titled “4. Start the daemon”openloop service startopenloop status # per-project queue counts + daemon/budget stateOne daemon manages all linked projects; one active worker per repo at a time. From here on, OpenLoop cycles through queued tasks on its own.
5. Review the results
Section titled “5. Review the results”openloop task list -p myapp --status doneopenloop promotion list -p myappopenloop digest # fleet-wide: activity, spend, review queue- Low-risk tasks with green validations land as auto-merge promotions (applied on a branch and merged); see
promotion applyif you prefer to apply them yourself. - Everything else queues a pull request or waits for manual review.
openloop approval list -p myappshows the human-review packets: risk, attempts, cost, branch.
6. Keep an eye on it
Section titled “6. Keep an eye on it”openloop watch: live, 1-second-refreshing dashboard in your terminal.openloop events --since 2h: the append-only audit log.openloop report: a human-readable activity summary.openloop dashboard enable: a local web dashboard (guide).
When you’re done for the day: openloop service stop (or pause to stop scheduling without killing the daemon).
Where to go next
Section titled “Where to go next”- Understand how the scheduler thinks.
- Tighten scope policy before giving agents bigger tasks.
- Wire hooks and notifications so you hear about promotions.