Installation issues

Node.js version mismatch

Symptom: You see an error like Unsupported engine or SyntaxError: Unexpected token during install.

Cause: Autohand requires Node.js 20 or later. Older versions do not support the JavaScript features Autohand uses.

# Check your current Node version
node --version

# If it shows v18 or lower, upgrade
# Using nvm (recommended)
nvm install 22
nvm use 22

# Using Homebrew on macOS
brew install node@22

# Verify the upgrade worked
node --version
# v22.x.x

Permission errors on install

Symptom: You see EACCES: permission denied when running npm install -g autohand.

Cause: Your global npm directory is owned by root, which means regular users cannot write to it.

# Fix: Configure npm to use a user-level directory
mkdir -p ~/.npm-global
npm config set prefix '~/.npm-global'

# Add to your shell profile (~/.zshrc or ~/.bashrc)
export PATH="$HOME/.npm-global/bin:$PATH"

# Reload your shell and install again
source ~/.zshrc
npm install -g autohand

Do not use sudo npm install -g. It creates files owned by root that cause problems later.

Binary not found after install

Symptom: Install succeeds but running autohand shows command not found.

Cause: The npm global bin directory is not in your PATH.

# Find where npm installs global binaries
npm bin -g

# Add that path to your shell profile
# For zsh (~/.zshrc):
export PATH="$(npm bin -g):$PATH"

# For bash (~/.bashrc):
export PATH="$(npm bin -g):$PATH"

# Reload and verify
source ~/.zshrc
which autohand
# /Users/you/.npm-global/bin/autohand

PATH not configured on Windows

Symptom: autohand is not recognized in PowerShell or CMD.

Cause: The npm global path was not added to the system PATH during Node.js installation.

# Check where npm installs globals
npm bin -g

# Add to your PowerShell profile
# Open $PROFILE in an editor:
notepad $PROFILE

# Add this line (replace with your actual path):
$env:PATH += ";C:\Users\you\AppData\Roaming\npm"

# Restart PowerShell and test
autohand --version

Connection and API errors

Provider connection refused

Symptom: ECONNREFUSED or connect ETIMEDOUT when starting a session.

Cause: The model provider's API endpoint is not reachable from your network. This can be a firewall rule, a VPN issue, or the provider being down.

# Test connectivity to the provider
curl -I https://api.openai.com/v1/models
curl -I https://api.anthropic.com/v1/messages

# If those fail, check your proxy settings
echo $HTTP_PROXY
echo $HTTPS_PROXY

# Configure Autohand to use your proxy
autohand config set network.proxy "http://proxy.company.com:8080"

API key invalid or expired

Symptom: 401 Unauthorized or Invalid API key error.

Cause: The API key in your configuration is wrong, expired, or belongs to a deactivated account.

# Check which key is configured
autohand config get providers.openai.apiKey
# Shows: sk-...****  (masked)

# Set a new key
autohand config set providers.openai.apiKey "sk-your-new-key"

# Or set it via environment variable
export OPENAI_API_KEY="sk-your-new-key"

# Verify the key works
autohand doctor

Rate limiting

Symptom: 429 Too Many Requests or Rate limit exceeded.

Cause: You have sent too many requests to the provider within their rate window. This is common with free-tier API keys or during heavy auto-mode usage.

# Autohand automatically retries with backoff, but you can tune it
autohand config set network.retryMaxAttempts 5
autohand config set network.retryBaseDelayMs 2000

# For auto-mode, increase the delay between iterations
autohand config set autoMode.iterationDelayMs 3000

If rate limiting happens often, consider upgrading your provider plan or switching to a provider with higher limits.

Timeout errors

Symptom: Request timeout or the session hangs waiting for a response.

Cause: The model is taking too long to respond. This happens with large prompts, complex tasks, or when the provider is under heavy load.

# Increase the request timeout (default: 120 seconds)
autohand config set network.timeoutMs 180000

# For local models that are slow on first load
autohand config set network.timeoutMs 300000

Network proxy issues

Symptom: Works at home but fails at work, or UNABLE_TO_GET_ISSUER_CERT_LOCALLY errors.

Cause: Corporate proxies often use custom TLS certificates that Node.js does not trust by default.

# Point Node.js to your corporate CA bundle
export NODE_EXTRA_CA_CERTS="/path/to/corporate-ca.pem"

# Or disable strict TLS (not recommended for production)
export NODE_TLS_REJECT_UNAUTHORIZED=0

# Configure proxy in Autohand
autohand config set network.proxy "http://proxy.company.com:8080"
autohand config set network.noProxy "localhost,127.0.0.1,.internal.company.com"

Model issues

Model not available

Symptom: Model 'xyz' is not available or model_not_found error.

Cause: The model name is misspelled, not supported by your provider, or your account does not have access to it.

# List available models for your configured provider
autohand models list

# Switch to a model you have access to
/model gpt-4o

# Check which model is currently selected
/model

Model responding slowly

Symptom: Long delays between your message and the model's response.

Cause: Large context windows, complex system prompts, or provider congestion. Local models may also be slow if your hardware is not fast enough.

# Check your context window usage
/status

# If context is large, compact it
/compact

# Switch to a faster model for simple tasks
/model gpt-4o-mini

# For local models, check GPU usage
nvidia-smi  # NVIDIA GPUs
# or
system_profiler SPDisplaysDataType  # macOS GPU info

Out of memory with local models

Symptom: Ollama, llama.cpp, or MLX crashes with out of memory or the system becomes unresponsive.

Cause: The model is too large for your available RAM or VRAM. A 70B parameter model needs roughly 40 GB of memory at Q4 quantization.

# For Ollama: switch to a smaller model
ollama run llama3.2:8b  # Instead of llama3.1:70b

# For llama.cpp: reduce context and use quantized models
autohand config set providers.llamacpp.contextSize 4096
autohand config set providers.llamacpp.model "/path/to/model-Q4_K_M.gguf"

# For MLX on Apple Silicon: check unified memory
sysctl hw.memsize
# A 32 GB Mac can comfortably run 8B-13B models
# Use Q4 quantization for larger models

Wrong model selected

Symptom: Responses feel off or the model does not follow instructions well.

Cause: A different model than expected is active. This can happen if an environment variable overrides your config, or if you switched models in a previous session.

# Check what model is active right now
/model

# Check for environment variable overrides
echo $AUTOHAND_MODEL
echo $AUTOHAND_PROVIDER

# Reset to your configured default
/model default

# Or set it explicitly
/model claude-sonnet-4

Permission problems

Tool blocked by permissions

Symptom: The agent says Permission denied for tool: write_file or asks for approval on every action.

Cause: Your permission configuration is restrictive. By default, Autohand asks before writing files or running commands.

# Check current permission settings
/permissions

# Allow file writes in the current project
/permissions allow write_file --scope project

# Allow shell commands matching a pattern
/permissions allow shell_command --pattern "npm test*"

# Or use yolo mode to skip all prompts (use carefully)
autohand --yolo

File access denied

Symptom: EACCES errors when the agent tries to read or write files.

Cause: The file or directory has filesystem permissions that prevent your user from accessing it. This is separate from Autohand's permission system.

# Check file permissions
ls -la /path/to/file

# Fix ownership if needed
sudo chown -R $(whoami) /path/to/directory

# Fix permissions
chmod 644 /path/to/file      # Read/write for owner, read for others
chmod 755 /path/to/directory  # Execute for directories

Workspace safety check failures

Symptom: Workspace safety check failed when starting a session in a directory.

Cause: Autohand checks that the workspace is safe to operate in. It will refuse to run in sensitive directories like /, /etc, ~, or directories containing credential files at the root level.

# Start Autohand in your project directory instead
cd ~/projects/my-app
autohand

# If you need to work in a non-standard directory, use --workspace
autohand --workspace /path/to/safe/directory

# Override safety checks (not recommended)
autohand --allow-unsafe-workspace

Resetting permissions

Symptom: Permissions got into a confusing state and you want to start fresh.

# Reset all permission rules to defaults
/permissions reset

# Reset only project-level permissions
/permissions reset --scope project

# View the raw permissions file
cat ~/.autohand/permissions.json

Session issues

Session will not resume

Symptom: /resume shows No session found or loads a blank session.

Cause: The session file may have been corrupted, deleted, or the session was too old and got cleaned up.

# List recent sessions
autohand sessions list

# Resume a specific session by ID
autohand --resume abc123

# If session files are corrupted, clear them
rm -rf ~/.autohand/sessions/corrupted-session-id

# Start a fresh session
autohand

Context too large

Symptom: Context length exceeded or the model starts giving confused, repetitive answers.

Cause: The conversation has grown beyond the model's context window. This happens naturally in long sessions, especially when many files have been read.

# Check current context usage
/status

# Compact the conversation to free space
/compact

# If compaction is not enough, start a fresh session
# with the context you need
/clear

# Prevent this in the future by enabling auto-compaction
autohand config set context.autoCompact true
autohand config set context.compactThreshold 0.8

Conversation stuck

Symptom: The agent repeats itself, goes in circles, or stops making progress.

Cause: The model may be confused by contradictory instructions in the context, or the task is outside its abilities. This also happens when the context is nearly full.

# Try rephrasing your request more specifically
# Instead of "fix the tests", try:
# "The test in src/auth.test.ts line 45 fails because
#  the mock does not return a token. Add a token to the mock."

# Compact to clear old context
/compact

# Switch to a stronger model for hard problems
/model claude-sonnet-4

# As a last resort, start fresh
/clear

Git and worktree problems

Worktree creation fails

Symptom: fatal: 'branch-name' is already checked out or Preparing worktree (new branch) failed.

Cause: Git does not allow the same branch to be checked out in two worktrees simultaneously. The branch you are trying to use is already active somewhere else.

# See all existing worktrees
git worktree list

# Remove a stale worktree that is no longer needed
git worktree remove /path/to/old-worktree

# Create the worktree with a new branch name
/worktree create feature/my-task-v2

# If the old worktree directory was deleted manually, prune it
git worktree prune

Merge conflicts in auto-mode

Symptom: Auto-mode stops because of merge conflicts when trying to commit or merge.

Cause: The base branch changed while auto-mode was working. The agent's changes conflict with recent commits from other developers.

# Let the agent resolve conflicts
# Just describe what you need:
# "Resolve the merge conflicts in src/api.ts. Keep our
#  new validation logic but accept their updated imports."

# Or resolve manually
git status                    # See conflicted files
git diff                      # See the conflicts
# Edit files to resolve
git add .
git commit -m "resolve merge conflicts"

Stale worktrees

Symptom: git worktree list shows worktrees that no longer exist on disk.

Cause: A worktree directory was deleted manually (with rm -rf) instead of using git worktree remove.

# Clean up all stale worktree references
git worktree prune

# Verify they are gone
git worktree list

Branch cleanup

Symptom: You have dozens of leftover branches from auto-mode and worktree sessions.

# List branches created by Autohand (they follow a naming pattern)
git branch | grep "autohand/"

# Delete merged branches
git branch --merged main | grep "autohand/" | xargs git branch -d

# Force delete unmerged branches you no longer need
git branch | grep "autohand/" | xargs git branch -D

MCP server issues

Server will not connect

Symptom: Failed to connect to MCP server or Connection refused when the session starts.

Cause: The MCP server process failed to start, crashed immediately, or is not listening on the expected address.

# Check if the MCP server process is running
ps aux | grep mcp

# For stdio-based servers, test the command manually
npx @modelcontextprotocol/server-filesystem /tmp

# For HTTP-based servers, verify the endpoint
curl http://localhost:3100/health

# Check Autohand's MCP configuration
cat ~/.autohand/config.json | jq '.mcpServers'

Tools not discovered

Symptom: The MCP server connects but no tools show up in /tools.

Cause: The server's tool listing endpoint is returning an empty array, or the server needs time to initialize its tool catalog.

# Refresh the tool list
/tools refresh

# Check MCP server logs for errors
AUTOHAND_MCP_DEBUG=true autohand

# Verify the server exposes tools correctly
# For stdio servers, test with a direct JSON-RPC call:
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | npx your-mcp-server

Timeout on startup

Symptom: MCP server startup timed out after waiting 30 seconds.

Cause: The server takes longer than the default timeout to initialize. This is common with servers that download data or build indexes at startup.

{
  "mcpServers": {
    "my-server": {
      "command": "npx",
      "args": ["my-mcp-server"],
      "startupTimeoutMs": 60000
    }
  }
}

Debugging stdio vs HTTP

Symptom: You are not sure whether the problem is with the server or the connection method.

# Test a stdio server directly
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"capabilities":{}}}' \
  | npx your-mcp-server

# Test an HTTP server
curl -X POST http://localhost:3100/rpc \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"capabilities":{}}}'

# Enable full MCP protocol logging
AUTOHAND_MCP_DEBUG=verbose autohand

Auto-mode problems

Circuit breaker triggered

Symptom: Circuit breaker: auto-mode stopped after N iterations.

Cause: The agent reached the maximum iteration count without completing the task. The circuit breaker exists to prevent runaway loops.

# Check the current limit
autohand config get autoMode.maxIterations

# Increase it if the task genuinely needs more iterations
autohand config set autoMode.maxIterations 50

# Review what the agent did so far
/history

# Resume auto-mode to continue from where it stopped
/auto continue

Stuck in loops

Symptom: The agent keeps doing the same thing over and over, making no progress.

Cause: The task description is too vague, the acceptance criteria are unclear, or the agent is trying to fix something it cannot fix with its available tools.

# Stop auto-mode immediately
# Press Ctrl+C or Esc

# Give more specific instructions
/auto "Fix the failing test in src/auth.test.ts.
The test expects a 200 status but gets 401.
The auth middleware needs to skip validation
for the /health endpoint."

# Set a lower iteration limit for focused tasks
/auto --max-iterations 10 "Add input validation to the signup form"

Cost limit reached

Symptom: Session cost limit reached: $X.XX.

Cause: You configured a per-session spending limit and the session hit it. This is a safety feature to prevent unexpected bills.

# Check current cost limit
autohand config get costLimit.perSession

# Increase the limit
autohand config set costLimit.perSession 10.00

# Check what this session has spent so far
/cost

# Remove the limit entirely (be careful)
autohand config set costLimit.perSession 0

Checkpoint recovery

Symptom: Auto-mode created a checkpoint but you want to go back to it.

# List available checkpoints
/checkpoints

# Restore to a specific checkpoint
/checkpoint restore cp-abc123

# Checkpoints are git commits, so you can also use git directly
git log --oneline | grep "autohand-checkpoint"
git checkout autohand-checkpoint-1709560200

Performance

Slow responses

Symptom: Every response takes 10+ seconds, even for simple questions.

Cause: Large context, slow provider, or the system prompt is too long.

# Check what is using your context
/status

# Compact to reduce context size
/compact

# Switch to a faster model for quick tasks
/model gpt-4o-mini

# Check if your system prompt is very large
wc -c ~/.autohand/CLAUDE.md
# If it is over 10 KB, consider trimming it

High token usage

Symptom: Sessions consume more tokens than expected and costs are higher than normal.

Cause: Reading large files, having verbose AGENTS.md files, or the agent exploring too many files during a task.

# Check token usage for the current session
/cost

# Enable context compaction to keep usage lower
autohand config set context.autoCompact true
autohand config set context.compactThreshold 0.7

# Be specific about which files to read
# Instead of "look at the src directory",
# say "read src/auth/middleware.ts"

Context compaction not working

Symptom: You run /compact but the context usage barely changes.

Cause: Most of the context is pinned content (system prompt, AGENTS.md, recently read files). Compaction can only shrink the conversation history, not pinned content.

# See what is consuming context
/status --detailed

# If AGENTS.md is large, trim it
# Keep only the most relevant instructions

# If many files were read, start a fresh session
# and read only what you need
/clear

# Reduce the system prompt size
autohand config set systemPrompt.maxLength 4000

Performance tips summary: Use /compact regularly in long sessions. Switch to faster models for simple tasks. Be specific about which files you need instead of asking the agent to explore. Keep your AGENTS.md under 5 KB.

Getting help

If the solutions on this page do not fix your issue, here is how to get more support.

The /feedback command

The fastest way to report a bug is the built-in feedback command. It automatically includes relevant context (with your permission) so the team can diagnose the problem quickly.

# Report a bug from inside a session
/feedback

# Include your session transcript for full context
# The command will ask before sending anything

GitHub issues

For bugs that need discussion or affect other users, open an issue on the Autohand GitHub repository. Include:

  • Your Autohand version (autohand --version)
  • Your operating system and Node.js version
  • The full error message or unexpected behavior
  • Steps to reproduce the issue

Community channels

  • Discord - Join the Autohand community for real-time help from other users and maintainers
  • GitHub Discussions - Ask questions, share tips, and discuss workflows
  • Twitter/X - Follow @autohandai for announcements and tips

Diagnostic command

The autohand doctor command runs a full health check and gives you a report you can share with support:

autohand doctor

# Output:
# Autohand v2.4.1
# Node.js v22.1.0
# OS: macOS 15.3 (arm64)
# Shell: /bin/zsh
#
# Providers:
#   openai: connected (gpt-4o available)
#   anthropic: connected (claude-sonnet-4 available)
#   ollama: not configured
#
# MCP Servers:
#   filesystem: running (3 tools)
#   brave-search: running (1 tool)
#
# Permissions: default (ask mode)
# Sync: enabled, last sync 2m ago
# Disk usage: 45 MB in ~/.autohand/
#
# No issues found.