Troubleshooting
Start here: bento doctor
bento doctorChecks the daemon process, database connection, cloudflared / tailscale availability, and webhook reachability. Most setup problems show up here with a plain-text description.
Daemon won't start
Symptom: bento daemon start exits immediately or bento status shows the daemon as unreachable.
- Check the daemon log:
bento daemon logs - Common causes:
- Port 7890 already in use —
lsof -i :7890to find the occupant - Database unreachable — confirm Postgres is running:
docker compose ps - Missing
GITHUB_WEBHOOK_SECRET— the variable must be set in your shell or.envfile beforebento daemon start
- Port 7890 already in use —
Webhooks not firing
Symptom: You open a PR and the daemon receives nothing.
- Confirm the daemon is reachable from the internet:
bento doctor # → local: reachable, tunnel: reachable - Check the GitHub webhook delivery log (repo Settings → Webhooks → Recent Deliveries). Look for HTTP errors or timeouts.
- If you're using a Cloudflare Quick Tunnel, the URL rotates on restart — re-register it with GitHub after every
bento restart. - Confirm the webhook secret in GitHub matches
webhooks.secretindaemon.yaml. A mismatch returns401and silently drops the event. - Check daemon logs for signature verification errors:
bento daemon logs -f
Agent run not appearing
Symptom: A webhook was delivered (GitHub shows 200) but no agent run shows up.
- Check the pipeline trigger matches the event type.
pull_request.openedandpull_request.synchronizeare the most common:bento trace <event-id> - Check queue depth — a backlog may delay the run:
bento queue status - Check
defaults.limits.max_concurrentindaemon.yaml. If all slots are taken, new jobs queue behind the running ones.
Agent run failed or timed out
Symptom: The run appears in bento status but shows failed or timeout.
- Read the agent's stdout:
bento logs <invocation-id> - Increase
guardrails.timeoutin the pipeline file if the task is genuinely long-running. - Check for sandbox issues — if the agent can't clone the repo or reach the network, it fails early:
bento probe <invocation-id> - Check
queue.circuit_breaker.failure_threshold— repeated failures open the circuit and stop queuing jobs for that pipeline until the daemon restarts.
Authentication failures
Symptom: 401 Unauthorized from the daemon or MCP client can't connect.
- List issued tokens:
bento token list - Verify the token your client is using matches one of the listed IDs.
- Confirm the token's
scopespermit the operation (e.g.pipelines:*for pipeline invocations). - Re-issue a token if needed:
See Authentication for client setup.
bento token issue --email you@example.com
Tunnel not reachable
Symptom: bento status shows tunnel : pending or tunnel : error.
- Confirm
cloudflaredis on PATH:which cloudflared - The tunnel takes up to 5s to establish after
bento start. Runbento statusagain after a few seconds. - Check daemon logs for
cloudflarederrors:bento daemon logs | grep tunnel
- Confirm the host is enrolled in your tailnet:
tailscale status - Confirm HTTPS certificates are enabled in the Tailscale admin console (DNS → HTTPS Certificates)
- Confirm Funnel is enabled (Access Controls → Funnel)
- Run
tailscale funnel statusto verify the funnel is active
Database issues
Symptom: database unreachable in bento doctor.
docker compose ps # is the container running?
docker compose up -d # restart if stoppedThe canonical Compose file sets up Postgres at postgresql://bento:bento@localhost:8421/bento. Confirm this matches database.url in daemon.yaml.
Inspecting a specific run
For deep inspection of a single invocation — agent stdout, prompt, context, and timing — see Inspecting Runs.

