Troubleshooting
Common issues and how to resolve them.
The Daemon
Daemon won't start
Check the port is not already in use:
lsof -i :9800Use a different port in your config:
daemon:
listen: "127.0.0.1:9801"Then target it with --daemon-url:
tack --daemon-url http://127.0.0.1:9801 status"daemon not reachable"
The daemon must be running before CLI commands work. Start it in a dedicated terminal:
tack daemonIf the daemon is running but CLI cannot connect, check the listen address matches. The default is 127.0.0.1:9800.
Database locked errors
Tack uses SQLite. Concurrent writes should not cause locks under normal operation. If you see "database is locked":
- Make sure only one daemon instance is running
- Check that the data directory is writable
- Restart the daemon
pkill -f "tack daemon"
tack daemonObjectives
Objective stuck in planning
The planner agent is either still running or failed silently. Check:
tack agents # Is the planner still active?
tack watch --summary # Any status changes?If the planner agent died, kill it and retry:
tack agents kill <planner-agent-id>
tack exec <objective-id>Plan looks wrong
Reject it and submit a clearer objective:
tack reject <plan-id>
tack plan "More specific description pointing to the right files"See Writing Good Objectives for patterns.
Objective is blocked
A stream ran out of retry attempts and is waiting for human guidance.
- Check what happened:
tack watch --stream <stream-id>
tack mail <agent-name>- Send guidance:
tack mail send <agent-name> "Fix hint" "The import path changed to src/lib/..." --objective <objective-id>- The run resumes automatically after guidance is received.
Objective is partial
Some streams completed and merged, but others failed. The merged changes are preserved.
Options:
- Accept the partial result and handle the remaining work manually
- Retry the failed streams by creating a new objective for the remaining work
You cannot retry individual streams directly today. Create a follow-up objective for the incomplete parts.
Quality Gates
Gates fail but the code looks correct
Gate failures are attributed by file scope. If the error is in a file outside the stream's scope, the gate passes. If the error is in scope, the builder gets a fix loop.
Check which files the gate error is in:
tack watch --verbose --stream <stream-id>Look for the gate output to see which file and line the error is on.
Fix loops keep repeating
The builder has a limited number of fix iterations (max_fix_iterations in the blueprint). If it keeps hitting the same error:
- Check
tack logs <builder-agent-id>to see what the agent is doing - The agent may not have enough context — consider adding a scoped rule for the relevant files
- If the error is in project setup (missing dependency, wrong config), fix it outside Tack and retry
Pre-existing errors blocking progress
Tack's file-attribution system means pre-existing errors in files outside the stream's scope should not block it. If you see unexpected blocking:
- The error might actually be in the stream's scope (check the file paths carefully)
- The stream's file scope may be too broad — the planner assigned it files that have existing errors
Post-merge gates fail
Post-merge gates run after streams are merged into the base branch. A failure means the combined changes broke something that individual streams could not detect.
Tack reverts the merge and marks the stream as failed. Check:
tack merge
tack merge diff <stream-id>Look at what changed in the merge. Common causes:
- Two streams modified the same interface from different directions
- The merge introduced a dependency ordering issue
Merge Queue
Merge stuck at pending
The merge queue processes entries FIFO. If a stream has dependencies, it waits until those dependencies are merged first.
tack mergeLook at the dependency column. The stream will not merge until its dependency streams are merged.
Merge conflict
The merge hit conflicts that automatic resolution could not handle.
tack merge retry <entry-id>If retry also conflicts, the stream needs human intervention. Check the conflicting files and consider:
- Creating a manual branch that resolves the conflict
- Adjusting the objective to avoid the overlapping changes
All merges show failed
This usually means post-merge quality gates are failing on the integrated result. Check the gate output in tack watch and look for integration-level issues.
Agents
Agent timeout
Agents have configurable timeouts. If an agent exceeds its timeout, it is killed with a clear error.
agents:
timeouts:
builder:
max_duration_minutes: 45
idle_minutes: 10max_duration_minutes— total wall clock timeidle_minutes— time since last output
If agents keep timing out:
- Increase the timeout for the role
- Check if the objective is too large (break it into smaller objectives)
- Check
tack logs <agent-id>to see where the agent got stuck
Agent killed unexpectedly
Check the agent log for the last actions before death:
tack logs <agent-id>Common causes:
- Out of memory in the sandbox
- Provider rate limit hit
- Network issue between daemon and sandbox
Agent not producing useful changes
The agent may not have enough context. Check:
- Are the right scoped rules in place?
- Is the stream's file scope correct? (
tack show <plan-id>) - Does the agent have access to the right tools? (Check
toolsconfig)
Sandboxes
Worktree creation fails
Local sandboxes use git worktrees. Common issues:
- Not in a git repo —
tackcommands must run inside a git repository - Uncommitted changes on base branch — stash or commit before running objectives
- Branch name collision — a previous run left a stale branch. Clean up with
tack cleanupor manually
Daytona sandbox won't start
- Check credentials:
tack auth test daytona - Check the Daytona API is reachable
- If using a snapshot, verify it exists:
tack snapshot check
Sandbox out of disk
Build artifacts, node_modules, and large dependencies can fill sandbox storage. Daytona sandboxes have configurable disk:
sandbox:
default_resources:
disk: 20For local sandboxes, check available disk on the host.
Configuration
Config changes not taking effect
Most config changes require a daemon restart:
# Restart the daemon
pkill -f "tack daemon"
tack daemonSome changes (like quality gates and model selection) are read per-objective, so new objectives will use the updated config without a restart.
"no default blueprint" error
Tack requires exactly one loaded blueprint with default: true, or exactly one blueprint total. If you have custom blueprints, make sure one of them sets default: true.
id: my-workflow
default: true
steps:
...Credentials not working
tack auth list # Are credentials configured?
tack auth test anthropic # Do they work?For remote sandboxes, make sure you are using mode: tack (not native) so Tack injects credentials into the sandbox.