Troubleshooting
Start here:
openloop doctor # prerequisites, providers, daemon healthopenloop service statusopenloop logs --lines 100openloop events --since 1hThe daemon won’t start
Section titled “The daemon won’t start”Symptom: service start warns the daemon may not have started, or status shows nothing.
- Check the log tail:
openloop logs. - A stale PID file (crashed daemon) is detected and cleared automatically, but a PID pointing at a foreign process is refused. Remove
~/.openloop/run/daemon.pidmanually if you know it’s wrong. - The daemon self-pauses after 5 consecutive tick errors;
openloop resumerestarts scheduling once the cause is fixed (seelogs). - Run it in the foreground to watch behavior directly:
openloop service run.
Commands missing after install
Section titled “Commands missing after install”You installed from npm and newer commands (doctor, setup, digest, issue, dashboard, mcp, approval) don’t exist; the registry release lags the repository. Install from source, or rebuild an existing clone (npm run build) and re-link.
A globally linked openloop can also go stale after pulling new commits without rebuilding:
cd /path/to/openloop && npm run buildnode dist/index.js fails
Section titled “node dist/index.js fails”Expected: the bundled CLI targets Bun (its shebang is #!/usr/bin/env bun). Run openloop (the linked bin) with Bun installed, or bun dist/index.js.
The daemon runs but nothing happens
Section titled “The daemon runs but nothing happens”openloop task list -p <alias> --status ready, onlyreadytasks are scheduled. Proposals need planning first (ortask update --status ready).- Check budget:
openloop status, a hit ceiling pauses the daemon (budget-blockedevents confirm). - Check backpressure: ≥3 pending promotions skip the project until reviewed.
- Awaiting approval: tasks in
awaiting-approvalnever run untiltask approve. run-once -p <alias> --dry-runshows exactly what the scheduler would pick and why.
Agent run fails or does nothing
Section titled “Agent run fails or does nothing”- Provider missing:
openloop config list-providers; the chosen agent binary must be onPATH. - Timeout: runs are killed at
runtime.runTimeoutSeconds(default 30 min). Long tasks need either a higher limit or smaller scope. - Prompt inspection:
run-once --dry-runprints the exact prompt;--verboseprints it during a real run.
Auto-merge never happens
Section titled “Auto-merge never happens”By design, auto-merge requires all of: low-risk task, policy allowing it, validations configured and passing, no blocking review findings, no hook veto. Check in order:
config project-show <alias>→validationblock non-empty?promotion show -p <alias> --task <task>→ decision + reason.- Policy:
risk.requirePolicyForAutoMergeneeds a real policy; scope drift downgrades.
Promotion apply fails
Section titled “Promotion apply fails”- Auto-merge/pr modes need
git; PR creation needs an authenticatedgh(or a customruntime.prCommand). - Dirty working tree: with worktrees disabled, OpenLoop tolerates a dirty tree but conflicts still fail the apply, commit or stash first.
Reset a stuck project
Section titled “Reset a stuck project”openloop task recover -p <alias> # in_progress → readyopenloop pause # hold the loopopenloop service restart.openloop/backup/<timestamp>/ keeps pre---force state if initialization went sideways.
Still stuck?
Section titled “Still stuck?”Open an issue with the output of openloop doctor, openloop status, and a log excerpt (openloop logs --lines 200): github.com/jaltez/openloop/issues.