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:

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:

  1. SSH into your development machine
  2. Attach to your project's tmux session
  3. Run Claude Code with bypass permissions for maximum speed
  4. 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:

ModeDescriptionBest 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 / CommandAction
tmux lsList all sessions
tmux attach -t nameAttach to a session by name
tmux new -s nameCreate a new named session
Ctrl+b dDetach from current session (it keeps running)
Ctrl+b $Rename current session

Windows (tabs)

KeyAction
Ctrl+b cCreate new window
Ctrl+b ,Rename current window
Ctrl+b nNext window
Ctrl+b pPrevious window
Ctrl+b 0-9Jump to window by number
Ctrl+b wList windows interactively
Ctrl+b &Close current window (confirms)

Panes (splits)

KeyAction
Ctrl+b %Split vertically (left/right)
Ctrl+b "Split horizontally (top/bottom)
Ctrl+b arrowMove between panes
Ctrl+b zZoom pane to fullscreen (toggle)
Ctrl+b xClose current pane (confirms)
Ctrl+b { / }Swap pane with previous/next
Ctrl+b SpaceCycle 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.

KeyAction
Ctrl+b [Enter copy mode (scrollback)
qExit copy mode
h j k lMove left/down/up/right
Ctrl+u / Ctrl+dPage up / page down
/Search forward
?Search backward
n / NNext / previous search result
SpaceStart selection
EnterCopy 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:

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.

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.