Complete installation and troubleshooting guide for Vibecraft.
Vibecraft visualizes Claude Code's activity in real-time as a 3D workshop. When Claude uses tools (Read, Edit, Bash, etc.), a character moves to corresponding workstations.
Two parts:
- Hooks - Capture events from Claude Code
- Server - WebSocket server + 3D browser visualization
┌─────────────────┐ hooks ┌─────────────────┐
│ Claude Code │ ───────────────→ │ Vibecraft │
│ (your CLI) │ │ Server (:4003) │
└─────────────────┘ └────────┬────────┘
│
↓ WebSocket
┌─────────────────┐
│ Browser │
│ (3D Scene) │
└─────────────────┘
# macOS
brew install jq tmux
# Ubuntu/Debian
sudo apt install jq tmux
# Arch
pacman -S jq tmuxnpx vibecraft setupThis automatically adds hooks to ~/.claude/settings.json.
# Terminal 1: Start Vibecraft server
npx vibecraft
# Terminal 2: Use Claude Code normally
claudeOpen http://localhost:4003 in your browser.
That's it! Every time Claude uses a tool, you'll see it in the 3D visualization.
| Dependency | Required? | Purpose |
|---|---|---|
| Node.js 18+ | Yes | Runs the server |
| jq | Yes | JSON processing in hook scripts |
| tmux | Optional | Session management, browser→Claude prompts |
Check if installed:
node --version # Should be 18+
jq --version # Should output version
tmux -V # Should output version (optional)npx vibecraft setupThis:
- Copies hook script to
~/.vibecraft/hooks/vibecraft-hook.sh - Creates
~/.vibecraft/data/directory - Configures all 8 hooks in
~/.claude/settings.json - Backs up existing settings
- Checks for jq/tmux
After setup, restart Claude Code for hooks to take effect.
If you prefer to configure hooks manually, add to ~/.claude/settings.json:
{
"hooks": {
"PreToolUse": [
{ "matcher": "*", "hooks": [{"type": "command", "command": "HOOK_PATH", "timeout": 5}] }
],
"PostToolUse": [
{ "matcher": "*", "hooks": [{"type": "command", "command": "HOOK_PATH", "timeout": 5}] }
],
"Stop": [
{ "hooks": [{"type": "command", "command": "HOOK_PATH", "timeout": 5}] }
],
"SubagentStop": [
{ "hooks": [{"type": "command", "command": "HOOK_PATH", "timeout": 5}] }
],
"SessionStart": [
{ "hooks": [{"type": "command", "command": "HOOK_PATH", "timeout": 5}] }
],
"SessionEnd": [
{ "hooks": [{"type": "command", "command": "HOOK_PATH", "timeout": 5}] }
],
"UserPromptSubmit": [
{ "hooks": [{"type": "command", "command": "HOOK_PATH", "timeout": 5}] }
],
"Notification": [
{ "hooks": [{"type": "command", "command": "HOOK_PATH", "timeout": 5}] }
]
}
}Replace HOOK_PATH with the output of:
npx vibecraft --hook-pathNote: You must also copy the hook script to a stable location and ensure ~/.vibecraft/data/ exists.
If you see this overlay in the browser:
┌──────────────────────────────────┐
│ │
│ 🔌 Agent Not Connected │
│ │
│ Vibecraft needs a local agent │
│ running to receive events. │
│ │
│ [ npx vibecraft ] │
│ │
└──────────────────────────────────┘
It means ONE of these:
| Problem | Solution |
|---|---|
| Server not running | Run npx vibecraft in a terminal |
| Wrong port | Check URL matches server port (default: 4003) |
| Hooks not configured | Run npx vibecraft setup |
Quick test:
# Check server is running
curl http://localhost:4003/health
# Should return: {"ok":true,...}To send prompts to Claude from the Vibecraft UI:
# Create named tmux session
tmux new -s claude
# Start Claude inside tmux
claude# In another terminal
npx vibecraftIn the browser, type in the prompt field and click "Send" with "Send to tmux" checked.
Note: If you named your tmux session something other than claude:
VIBECRAFT_TMUX_SESSION=myname npx vibecraft# macOS
brew install jq
# Ubuntu/Debian
sudo apt install jq
# Arch
pacman -S jqchmod +x $(npx vibecraft --hook-path)1. Check server is running:
curl http://localhost:4003/health2. Check hooks are configured:
cat ~/.claude/settings.json | grep vibecraft3. Restart Claude Code (hooks load at startup)
# List sessions
tmux list-sessions
# Default session name is 'claude'
# If different, set environment variable:
VIBECRAFT_TMUX_SESSION=yourname npx vibecraftYou likely have duplicate hooks configured. Check ~/.claude/settings.json for duplicate vibecraft-hook entries and remove extras. Then run npx vibecraft setup to ensure correct configuration.
- Refresh the page
- Check if server is still running
- Check browser console for errors
For speech-to-text prompts:
- Sign up at deepgram.com
- Create an API key
- Add to your
.envfile:DEEPGRAM_API_KEY=your_api_key_here
- Restart the server
- Press
Alt+Sor click the microphone icon
| Variable | Default | Description |
|---|---|---|
VIBECRAFT_PORT |
4003 |
Server port |
VIBECRAFT_TMUX_SESSION |
claude |
tmux session for prompts |
VIBECRAFT_DEBUG |
false |
Verbose logging |
DEEPGRAM_API_KEY |
(none) | Deepgram API key for voice input |
Example:
VIBECRAFT_PORT=4005 VIBECRAFT_DEBUG=true npx vibecraftFor contributing or modifying:
# Clone
git clone https://github.com/nearcyan/vibecraft
cd vibecraft
# Install dependencies
npm install
# Start dev servers (frontend :4002, API :4003)
npm run dev
# Open browser
open http://localhost:4002Note: In dev mode, frontend and API run on different ports. In production (npx vibecraft), everything runs on port 4003.
To remove Vibecraft hooks (keeps your event data):
npx vibecraft uninstallThis:
- Removes vibecraft hooks from
~/.claude/settings.json - Removes the hook script from
~/.vibecraft/hooks/ - Keeps your data in
~/.vibecraft/data/ - Does NOT affect other hooks you may have configured
To completely remove all data:
rm -rf ~/.vibecraftRestart Claude Code after uninstalling for changes to take effect.
- GitHub Issues: https://github.com/nearcyan/vibecraft/issues
- Technical Docs: See CLAUDE.md
- Orchestration: See ORCHESTRATION.md