Skip to content

Troubleshooting

Preflight errors

"@anthropic-ai/sandbox-runtime not installed"

SRT (Sandbox Runtime) is required for deer to function. It should be installed automatically during deer installation.

If it is missing, try reinstalling deer:

sh
curl -fsSL https://raw.githubusercontent.com/zdavison/deer/main/install.sh | bash

"sandbox-exec not available" (macOS)

sandbox-exec is a built-in macOS utility that SRT uses for filesystem isolation. If it is missing, your macOS version may not be supported. deer requires macOS 12 (Monterey) or later.

"bwrap not available" (Linux)

Bubblewrap is required on Linux for filesystem isolation. Install it with your package manager:

sh
# Debian / Ubuntu
apt install bubblewrap

# Fedora / RHEL
dnf install bubblewrap

"claude CLI not available"

deer requires the Claude Code CLI. Install it by following the official instructions at docs.anthropic.com/en/docs/claude-code.

"gh auth not configured"

The GitHub CLI is required for PR creation and git operations through the proxy. Authenticate it:

sh
gh auth login

"No credentials"

deer could not find any Claude credentials. You have several options:

  • Set the CLAUDE_CODE_OAUTH_TOKEN environment variable
  • Create a file at ~/.claude/agent-oauth-token containing your token
  • Set the ANTHROPIC_API_KEY environment variable
  • If you have Claude Code installed, run claude once to ensure credentials are stored

See Authentication for the full credential resolution order.

"Claude OAuth token expired"

Your OAuth token has passed its expiry time. Refresh it:

sh
claude /login

Common issues

Agent stuck in "setup"

If an agent stays in the setup status and never transitions to running:

  • Run deerbox preflight to check for dependency or credential errors.
  • Ensure tmux is installed and working: tmux new-session -d -s test && tmux kill-session -t test
  • Check if SRT can launch: srt --version
  • Look at the tmux pane output by pressing Enter on the agent in the dashboard to attach.

Network requests failing in sandbox

The sandbox only allows outbound requests to domains on the allowlist. If the agent needs to reach a domain that is not on the default list, add it to your deer.toml:

toml
[network]
allowlist_extra = ["example.com", "api.example.com"]

See Network & Auth Proxy for the default allowlist and proxy configuration.

Dependencies not available in sandbox

If the agent cannot find project dependencies inside the sandbox:

  • Check ecosystem detection -- deer looks for lockfiles (package-lock.json, yarn.lock, bun.lockb, Pipfile.lock, Cargo.lock, etc.) in the repo root. If your lockfile is in a subdirectory, ecosystem detection may miss it.

  • Use a setup command -- configure a custom setup command in deer.toml:

    toml
    [agent]
    setup_command = "cd packages/myapp && npm install"
  • Disable a conflicting ecosystem -- if deer detects the wrong ecosystem, disable it:

    toml
    [agent]
    ecosystems_disabled = ["npm"]

PR creation fails

If pressing p to create a PR results in an error:

  • Ensure gh auth token returns a valid token.
  • Check that you have push access to the repository.
  • Verify the agent made actual changes -- an empty diff produces no PR.
  • Check the error message in the dashboard for specifics (authentication, branch conflicts, etc.).

Worktrees piling up

Old worktrees from previous tasks can accumulate on disk. Clean them up:

sh
# Remove dangling worktrees and task directories
deerbox prune

# Force cleanup: kill all deer tmux sessions and remove everything
deerbox prune --force

Multiple deer instances conflicting

Running multiple deer instances against the same repository is supported. deer uses SQLite WAL mode for concurrent database access and poller_pid claims to prevent duplicate polling.

If you experience issues with multiple instances:

  • Check that all instances are running the same version of deer.
  • Restart all instances -- stale PID claims from crashed processes are cleaned up on startup.
  • As a last resort, run deerbox prune --force to reset all state and kill all sessions.

Released under the MIT License.