This guide covers common issues and their solutions.
Symptom:
Error: lima not found. Please install Lima first.
Solution:
macOS:
brew install limaLinux:
# See https://lima-vm.io/docs/installation/Verify:
limactl --versionSymptom:
bash: ./claude-vm: Permission denied
Solution:
chmod +x ~/.local/bin/claude-vmSymptom:
command not found: claude-vm
Solution:
Add ~/.local/bin to PATH:
# For bash
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
# For zsh
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrcVerify:
which claude-vmSymptom:
Error: Failed to create template
Debug:
-
Check Lima status:
limactl list
-
Try with verbose output:
claude-vm --verbose setup --git
-
Check Lima logs:
tail -f ~/.lima/*/ha.stdout.log
-
Clean and retry:
claude-vm clean claude-vm setup --git
Symptom:
Error: No space left on device
Solution:
-
Increase disk size:
claude-vm clean claude-vm setup --disk 50 --git
-
Clean unused templates:
claude-vm list --unused claude-vm clean-all
-
Check disk usage:
claude-vm list --disk-usage
Symptom:
Error: Failed to install docker
Debug:
-
Check for package conflicts:
claude-vm shell $ apt-cache policy docker
-
Try with verbose output:
claude-vm --verbose setup --docker
-
Try minimal setup first:
claude-vm clean claude-vm setup --git # Minimal # If works, add tools incrementally
Symptom:
Error: Failed to start VM
Debug:
-
Try with verbose output:
claude-vm --verbose shell
-
Check Lima VMs:
limactl list
-
Check if template exists:
claude-vm info
-
Stop any running VMs:
limactl stop --all
Symptom:
Error: Runtime script failed: .claude-vm.runtime.sh
Exit code: 1
Debug:
-
Check script locally:
bash -x .claude-vm.runtime.sh
-
Check script in VM:
claude-vm shell $ cat .claude-vm.runtime.sh $ bash -x .claude-vm.runtime.sh
-
Comment out failing parts:
# .claude-vm.runtime.sh # docker-compose up -d # Temporarily disable echo "Skipping docker for now"
Symptom:
$ claude-vm shell docker ps
Error: docker: command not foundSolution:
-
Check if tool is installed:
claude-vm info # Check enabled capabilities -
Reinstall template with tool:
claude-vm clean claude-vm setup --docker --git
-
Check if tool is in PATH:
claude-vm shell which docker
Symptom:
Error: bind: address already in use
Solution:
-
Check what's using the port:
# On host lsof -i :3000 -
Use different port:
# In your app PORT=3001 npm start -
Stop conflicting service:
# Find and stop the process kill <PID>
Symptom:
$ claude-vm shell ls /data
ls: /data: No such file or directoryDebug:
-
Check mount configuration:
claude-vm config show
-
Verify host directory exists:
ls -la ~/datasets -
Check for typos in config:
[[mounts]] location = "~/datasets" # Check spelling mount_point = "/data"
-
Try CLI mount:
claude-vm --mount ~/datasets:/data shell ls /data
Symptom:
Error: Invalid configuration
Debug:
-
Run validation:
claude-vm config validate
-
Check TOML syntax:
# Common errors: [vm] disk = 30 # ✓ Number disk = "30" # ✗ String [tools] docker = true # ✓ Boolean docker = "yes" # ✗ String
-
Check value ranges:
[vm] disk = 2000 # ✗ Out of range (max 1000) memory = 128 # ✗ Out of range (max 64)
Symptom: Config changes don't apply.
Debug:
-
Check effective config:
claude-vm config show
-
Check precedence:
- CLI flags override everything
- Then environment variables
- Then project config
- Then global config
-
Recreate template after config changes:
claude-vm clean claude-vm setup --git
Symptom:
$ claude-vm shell echo $API_KEY
# EmptySolution:
-
Pass via CLI:
claude-vm --env API_KEY=secret shell echo $API_KEY
-
Use env file:
claude-vm --env-file .env shell
-
Set in runtime script:
# .claude-vm.runtime.sh export API_KEY="secret"
See detailed output:
claude-vm --verbose setup --git
claude-vm --verbose shell
claude-vm --verbose "help me"Shows:
- Lima VM logs
- Script execution
- Mount operations
- Detailed errors
# List all VMs
limactl list
# Show VM details
limactl show <vm-name>
# Check VM logs
tail -f ~/.lima/<vm-name>/ha.stdout.log# Get template name
claude-vm info
# Start template VM
limactl start <template-name>
# Shell into VM
limactl shell <template-name>
# Stop VM
limactl stop <template-name># Validate config
claude-vm config validate
# Show effective config
claude-vm config show
# Show project info
claude-vm info# Test runtime script locally
bash -x .claude-vm.runtime.sh
# Test in VM
claude-vm shell bash -x .claude-vm.runtime.sh# Lima version
limactl --version
# Lima status
limactl list
# Lima logs
tail -f ~/.lima/*/ha.stdout.logInstall Lima:
brew install lima # macOSMake binary executable:
chmod +x ~/.local/bin/claude-vmDebug script:
bash -x .claude-vm.runtime.sh
claude-vm --verbose shellCheck package name:
apt-cache search <package>Add repository if needed:
[packages]
setup_script = """
# Add repository
"""Increase disk or clean templates:
claude-vm clean-all
claude-vm setup --disk 50 --gitLima logs:
tail -f ~/.lima/*/ha.stdout.logVM logs:
claude-vm shell journalctl -f-
Run with
--verbose:claude-vm --verbose setup --git > debug.log 2>&1
-
Include in bug report:
claude-vm --versionlimactl --version- Operating system
- Debug log
- Configuration file
-
Open issue on GitHub: https://github.com/themouette/claude-vm/issues
- Usage Guide - Learn all commands
- Configuration - Configure Claude VM
- Templates - Understand templates
- Development - Build from source