Development Environment
The recommended Ultra Claude development environment uses tmux for terminal session persistence, SSH for remote access, and VS Code (or any editor) as a thin client. This setup lets you work from any device, survive connection drops, and keep long-running processes alive across sessions.
Recommended setup
TL;DR: Run Claude Code inside a tmux session on your development machine (VM, server, or local). Connect remotely via SSH. Use one tmux session per project. Manage your terminal windows inside tmux, not in VS Code.
Why tmux?
tmux is a terminal multiplexer — it lets you run multiple terminal sessions inside a single connection and keeps them alive independently of your client. This solves several real problems:
- Session persistence — closing your laptop, losing WiFi, or reloading VS Code doesn't kill your processes. Dev servers, builds, and Claude Code sessions keep running.
- Multi-device access — start work on your desktop, pick it up on your laptop. The tmux session is on the server, not your client.
- Window management — split your terminal into panes and windows without relying on your editor's terminal tabs. tmux windows persist; VS Code terminal tabs don't.
- Agent pane layout — during plan execution, Ultra Claude arranges agent panes in a visual grid so you can see what each agent is doing.
Why SSH?
Running Claude Code directly on the development machine (rather than through VS Code's integrated terminal over SSH) eliminates SSH latency from every tool call. This adds up quickly during plan execution where agents make hundreds of tool calls.
The recommended workflow:
- SSH into your development machine
- Attach to your project's tmux session
- Run Claude Code with bypass permissions for maximum speed
- Use VS Code for editing files and browsing code — it connects to the same machine via Remote SSH
tmux modes in Ultra Claude
The /uc:setup skill lets you choose how tmux is configured. There are four options:
| Mode | Description | Best for |
|---|---|---|
| Per-project session | One tmux session per project directory. Auto-created on first terminal, reattached on subsequent ones. No orphan sessions. | Most users (recommended) |
| No tmux | Plain shell. No persistence. Agent teams still work — you just don't get the visual pane layout. | Simple setups, quick tasks |
| Per-terminal session | Each terminal gets its own tmux session. Sessions accumulate over time — prune them by hand or prefer per-project mode. | Legacy setups |
| Custom | You manage tmux yourself. Ultra Claude won't touch your config. Agent pane labeling still works if you're inside tmux. | Advanced users with existing tmux setups |
Run /uc:setup to choose your mode. You can change it later by re-running setup.
tmux cheat sheet
All tmux commands start with the prefix key Ctrl+b, followed by a second key. For example, Ctrl+b c means: press Ctrl+b, release, then press c.
Sessions
| Key / Command | Action |
|---|---|
tmux ls | List all sessions |
tmux attach -t name | Attach to a session by name |
tmux new -s name | Create a new named session |
Ctrl+b d | Detach from current session (it keeps running) |
Ctrl+b $ | Rename current session |
Windows (tabs)
| Key | Action |
|---|---|
Ctrl+b c | Create new window |
Ctrl+b , | Rename current window |
Ctrl+b n | Next window |
Ctrl+b p | Previous window |
Ctrl+b 0-9 | Jump to window by number |
Ctrl+b w | List windows interactively |
Ctrl+b & | Close current window (confirms) |
Panes (splits)
| Key | Action |
|---|---|
Ctrl+b % | Split vertically (left/right) |
Ctrl+b " | Split horizontally (top/bottom) |
Ctrl+b arrow | Move between panes |
Ctrl+b z | Zoom pane to fullscreen (toggle) |
Ctrl+b x | Close current pane (confirms) |
Ctrl+b { / } | Swap pane with previous/next |
Ctrl+b Space | Cycle through pane layouts |
Copy mode (scrolling and selecting)
tmux uses vi-style navigation in copy mode by default when configured with Ultra Claude's tmux.conf.
| Key | Action |
|---|---|
Ctrl+b [ | Enter copy mode (scrollback) |
q | Exit copy mode |
h j k l | Move left/down/up/right |
Ctrl+u / Ctrl+d | Page up / page down |
/ | Search forward |
? | Search backward |
n / N | Next / previous search result |
Space | Start selection |
Enter | Copy selection to clipboard |
Typical workflow
A day with tmux + SSH looks like this:
Morning — start working
# SSH into your dev machine
ssh dev-vm
# List existing sessions
tmux ls
# Attach to your project session (or it auto-creates via VS Code)
tmux attach -t user_myproject
Working — manage windows in tmux
# Create windows for different tasks
Ctrl+b c # new window
Ctrl+b , # rename it "server"
npm run dev # start your dev server
Ctrl+b c # another window
Ctrl+b , # rename it "claude"
claude # run Claude Code here
Ctrl+b n # switch between windows
Ctrl+b 0 # jump to window 0
Switching devices
# On your desktop, detach
Ctrl+b d
# On your laptop, reconnect
ssh dev-vm
tmux attach -t user_myproject
# Everything is exactly where you left it
End of day — just close your terminal
Don't kill the session. Just close your SSH connection or laptop. The tmux session stays running. Tomorrow you'll reattach and everything is there: your dev server, your Claude Code session, your terminal history.
Customizing tmux
tmux is highly customizable via ~/.tmux.conf. Ultra Claude's setup writes a baseline config optimized for Claude Code (mouse and clipboard support for the fullscreen renderer, synchronized-output passthrough as a classic-renderer fallback, extended scrollback, etc.), but you can add your own customizations on top.
The primary fix for screen tearing is Claude Code's fullscreen renderer — /uc:setup offers to enable it ("tui": "fullscreen" in ~/.claude/settings.json, requires Claude Code v2.1.89+). It draws on the alternate screen like vim/htop, eliminating flicker and keeping memory flat on long sessions. Toggle it anytime with /tui fullscreen or /tui default.
Popular additions:
- Status bar themes — Oh my tmux! is a popular theme pack with a batteries-included config
- Plugin manager — TPM (Tmux Plugin Manager) lets you install plugins like tmux-resurrect (save/restore sessions across reboots)
- Custom keybindings — remap the prefix key, add shortcuts for common operations
- Color schemes — match your terminal theme with tmux status bar colors
If you customize your own tmux setup extensively, choose the "Don't touch it" mode in /uc:setup so Ultra Claude doesn't overwrite your config.
VS Code integration
VS Code works well alongside tmux via Remote SSH. /uc:setup handles the VS Code side: it creates a terminal profile that auto-attaches to your project's tmux session, and (opt-in, when VS Code is detected) offers recommended client-side settings for the Claude Code extension. But the key insight is: manage your terminal windows in tmux, not in VS Code.
- Use VS Code for editing files, browsing code, and git operations
- Use tmux windows for running processes: dev servers, builds, Claude Code, tests
- Opening multiple VS Code terminal panels attaches to the same tmux session — they mirror each other. Use tmux windows (
Ctrl+b c) instead of VS Code terminal tabs
Performance tip: For plan execution, run Claude Code directly in a tmux window via SSH rather than through VS Code's integrated terminal. Enable bypass permissions (claude --dangerously-skip-permissions) for maximum throughput. This eliminates SSH round-trip latency on every tool call and removes permission prompts.
tmux is optional
tmux is recommended but not required. Ultra Claude's agent teams communicate via SendMessage and file-based signals, not tmux. If you choose "No tmux" in /uc:setup, everything works — you just don't get the visual agent pane layout during plan execution or terminal session persistence.