Advanced Features II — Sessions, Surfaces & Settings
Part 2 of 2 — Part 1 covered the autonomy stack (planning, thinking, auto mode, permissions, background work, sandboxing). This deck is everything around it: sessions that persist and fork, the keyboard you actually drive with, and the surfaces Claude Code now lives on — TUI, voice, Chrome, your phone, the browser, the desktop — plus the settings machinery that governs it all.
One engine, many surfaces — this half of the chapter is about reach, not autonomy
Part 1 asked "how much can Claude do on its own?" This part asks three different questions: how do you keep and branch work across sessions, where can you drive Claude Code from, and who controls the configuration underneath.
Sessions
Resume by name, fork to explore alternatives, get a recap when you return. Plus the interactive layer: shortcuts, custom keybindings, vim mode, bash mode.
Surfaces
Fullscreen TUI, voice dictation, Channels pushing events in, Chrome as Claude's browser, Remote Control from your phone, web sessions, the desktop app.
Settings
Three config files, ~40 environment variables, enterprise managed settings deployed through the OS — and the experimental Agent Teams switch.
Name your sessions — resume is instant, and forking gives you a second timeline
| claude -c | Continue the most recent conversation |
| claude -r "auth-refactor" | Resume a session by name or ID — optionally with a new prompt appended |
| /resume | Resume a conversation by ID or name from inside the REPL |
| /rename | Name the current session so -r can find it later |
| /fork | Fork the current session into a new branch |
# resume and fork for experimentation claude --resume auth-refactor \ --fork-session "try OAuth instead"
Why fork?
Try an alternative approach without losing the original — the session-scale version of checkpoint branching from Chapter 8.
Session recap (v2.1.108)
- Return after being away → Claude shows a brief recap of what was accomplished
- /recap triggers one manually · /config toggles auto-recap
- CLAUDE_CODE_ENABLE_AWAY_SUMMARY=0/1 disables / forces it
- On by default for telemetry-disabled users (Bedrock, Vertex, Foundry)
Twelve workflow shortcuts run the cockpit — and the input line is pure readline
Workflow
| Ctrl+C · Ctrl+D | Cancel input/generation · exit Claude Code |
| Shift+Tab / Alt+M | Toggle permission modes |
| Esc Esc | Rewind code/conversation (Ch. 8) |
| Ctrl+T · Ctrl+B | Toggle task list · background running tasks |
| Ctrl+O | Toggle verbose output (view reasoning) |
| Ctrl+R | Reverse-search history |
| Ctrl+G | Edit plan in external editor |
| Ctrl+L | Clear terminal screen |
| Option/Alt+P · +T | Switch model · toggle extended thinking |
Line editing (readline)
| Ctrl+A · Ctrl+E | Line start · line end |
| Ctrl+K · Ctrl+U | Cut to end · cut to start |
| Ctrl+W · Ctrl+Y | Delete word back · paste (yank) |
| Tab · ↑/↓ | Autocomplete · command history |
If your shell muscle memory is bash/zsh/emacs, it transfers wholesale — same bindings, same behavior.
Almost every default is rebindable — /keybindings opens a JSON file scoped by UI context
{
"bindings": [
{ "context": "Chat",
"bindings": {
"ctrl+e": "chat:externalEditor",
"ctrl+u": null, ← unbind a default
"ctrl+k ctrl+s": "chat:stash" ← chord
} },
{ "context": "Confirmation",
"bindings": { "ctrl+a": "confirmation:yes" } }
]
}
/keybindings opens ~/.claude/keybindings.json (v2.1.18+). Modifiers: ctrl, alt/opt, shift, meta/cmd; uppercase implies Shift (K = shift+k).
Contexts scope the binding
Chat (submit, cancel, cycleMode, externalEditor, stash…) · Confirmation (yes, no, toggleExplanation) · Global (interrupt, exit, toggleTodos) · Autocomplete · HistorySearch — 18 contexts total, incl. Transcript, Task, DiffDialog, ModelPicker.
Reserved & conflicting keys
| Ctrl+C · Ctrl+D | Reserved — cannot be rebound (interrupt / exit) |
| Ctrl+B · Ctrl+A · Ctrl+Z | Terminal conflicts: tmux prefix · GNU Screen prefix · process suspend |
Five input tricks: complete, search everything, go multi-line, edit in place, drop to shell
| Tab completion | /rew⇥ → /rewind · /plugin ⇥ expands subcommands (install, enable, disable) |
| Ctrl+R history search | Reverse-search defaults to all prompts across all projects (v2.1.129+); press Ctrl+S inside the picker to narrow to the current project |
| Multi-line input | Start with \, write across lines, finish with \end — for prompts with requirement lists |
| Inline editing | Edit the command in place before sending — fix the typo, then submit |
| Bash mode ! | ! npm test · ! git status — run a shell command directly, no context switch |
Vim mode is configuration now — /vim is gone, and v2.1.118 added real visual selections
Activation
Toggle "Editor / Vim mode" in /config, or set editorMode: "vim" in ~/.claude/settings.json. The standalone /vim command was removed — it's configuration-driven now.
Modes & motions
- Esc NORMAL · i/a/o INSERT · v VISUAL · V VISUAL-LINE
- Motions: h j k l · w b e by word · 0 $ line ends · gg G text ends
- Text objects: iw/aw word · i"/a" quotes · i(/a( parens
Visual modes (v2.1.118+)
| v | Character-wise selection; extend with motion keys |
| V | Line-wise — always selects whole lines |
| y | Yank (copy) the selection |
| d / x | Delete the selection |
| c | Change — delete and enter INSERT |
| Esc | Back to NORMAL |
Selections are highlighted in the input field — you see exactly what will be yanked, deleted, or changed before committing the operator.
Fullscreen TUI keeps tmux panes flicker-free; /voice turns the prompt into push-to-talk
TUI mode (v2.1.110)
/tui # toggle from within a session claude --tui # start directly in TUI mode
- Fullscreen rendering with flicker-free output — built for tmux and iTerm2 split panes
- autoScrollEnabled (default true) — disable via /config or settings to stop auto-scrolling to the latest message
- /focus — distraction-free view of only the most relevant output; Ctrl+O now only toggles normal ↔ verbose transcript
Voice dictation
/voice
| Push-to-talk | Hold a key to record, release to send |
| 20 languages | Speech-to-text support |
| Custom key | Configure the push-to-talk key via /keybindings |
| Requirement | A Claude.ai account — STT runs through it |
Channels invert the flow — external services push events into a running session
A Research Preview where MCP servers act as channel plugins: messages from outside arrive in your active session in real time, and Claude can read and respond to them in context. No polling required.
# subscribe at startup
claude --channels discord,telegram
claude --channels discord,telegram,imessage,webhooks
Auth (v2.1.128+): works with both Pro/Max OAuth and API-key (console) authentication — earlier releases required OAuth.
| Discord | Receive and respond to messages in your session |
| Telegram | Receive and respond to messages in your session |
| iMessage | Receive iMessage notifications |
| Webhooks | Events from arbitrary webhook sources |
Plugins must be approved via the allowedChannelPlugins managed setting — admins control which sources an org may wire in.
Chrome integration drives your real browser — logged-in state, visible window, your gates
claude --chrome # enable at startup claude --no-chrome # disable /chrome # within a session
Beta feature. Claude Code shares your browser's login state, so it can work inside authenticated apps. It controls a visible window — you watch actions happen, and on a login page or CAPTCHA it pauses for you to handle it manually.
Site-level permissions: the extension popup grants or revokes access per site — Claude only touches sites you've explicitly allowed.
What it unlocks
- Live debugging — console logs, DOM inspection, real-time JS
- Design verification — rendered page vs mockup
- Form validation + web app testing in authenticated apps
- Data extraction · session recording as GIF files
Known limits
Chrome and Edge only (no Brave/Arc) · not in WSL · not with Bedrock/Vertex/Foundry · extension service worker can go idle in long sessions.
Remote Control hands the screen to your phone — the engine never leaves your machine
claude remote-control --name "Auth Refactor" /remote-control # from within a session
Flags: --name · --verbose · --sandbox / --no-sandbox (default). Pro, Max, Team & Enterprise, v2.1.51+.
Three ways to connect
- Session URL printed to the terminal — open in any browser
- QR code — press spacebar after starting
- Find by name at claude.ai/code or in the Claude mobile app
Security & limits
- No inbound ports — outbound HTTPS over TLS only, with short-lived scoped tokens
- One remote session per instance · terminal must stay open · times out after ~10 min offline
Push notifications (v2.1.110)
Enable "Push when Claude decides" in /config while Remote Control is active — your phone gets pinged when a long task finishes or needs input. Requires a subscription + the mobile app.
One question separates the remote surfaces: does execution stay local, or move to the cloud?
start work in the cloud
pull it back to your terminal
The desktop app adds the visual layer: diffs, app preview, PR watching, parallel worktrees
A standalone app for macOS (universal) and Windows (x64 / ARM64), on Pro, Max, Team and Enterprise plans. Hand off a CLI session to it with /desktop.
| Diff view | File-by-file visual review with inline comments — Claude reads them and revises |
| App preview | Auto-starts dev servers with an embedded browser; configure in .claude/launch.json (command, port, readyPattern, persistCookies) |
| PR monitoring | GitHub CLI integration — auto-fix CI failures, auto-merge when checks pass |
| Parallel sessions | Sidebar sessions with automatic worktree isolation |
| Scheduled tasks | Hourly / daily / weekdays / weekly — run while the app is open |
| Rich rendering | Code, markdown, diagrams; GFM task checkboxes render (v2.1.149+) |
Connectors
GitHub, Slack, Linear, Notion, Asana, Calendar — richer context per session. Not available for remote (cloud) sessions.
Session types
Remote — Anthropic cloud, keeps running with the app closed. SSH — full remote filesystem and tools; Claude Code must be installed on the remote machine.
Enterprise
Admin console for Code-tab access · MDM (macOS) / MSIX (Windows) deployment · SSO requirement · centrally managed settings. Permission modes mirror the CLI: ask, auto-accept edits, plan, bypass (sandbox-only, admin-controlled).
Two quiet helpers: a task list that outlives compaction, suggestions mined from your git history
Task list
- Ctrl+T toggles the task list view
- Tasks persist across context compactions — long-running work items survive when conversation history is trimmed to fit the window
- Built for complex, multi-step implementations
# named task directory shared across sessions
export CLAUDE_CODE_TASK_LIST_ID=my-project-sprint-3
Multiple sessions share one list — team workflows, multi-session projects.
Prompt suggestions
- Grayed-out example commands appear below your input
- Tab accepts · Enter accepts and submits
- Context-aware — drawn from git history and the current conversation state
# turn them off
export CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION=false
Enterprises ship policy through the OS — and drop-ins merge in alphabetical order
Admins deploy configuration org-wide via macOS managed plists (MDM), the Windows Registry, or managed configuration files (all v2.1.51+). Since v2.1.83, modular drop-ins let different teams own different policy files:
| disableBypassPermissionsMode | Users can never enable bypass permissions |
| availableModels | Restrict which models users can select |
| allowedChannelPlugins · autoMode.environment | Gate channel sources · define trusted infrastructure for auto mode |
| wslInheritsWindowsSettings | (v2.1.118+) WSL inherits the Windows host's managed settings — one policy, both shells |
| parentSettingsBehavior | (v2.1.133+, admin-tier) SDK merge strategy: "first-wins" or "merge" |
Three config files, one /config menu — and an environment variable for nearly everything
Where config lives
| ~/.claude/config.json | Global config |
| ./.claude/config.json | Per-project — hooks, permissions, project MCP servers |
| ~/.config/claude-code/settings.json | User config |
/config opens the interactive menu — extended thinking, verbose output, permission mode, model selection — without touching a file.
The env-var layer, by category
| Models & API | ANTHROPIC_MODEL, per-tier defaults, ANTHROPIC_API_KEY |
| Thinking | MAX_THINKING_TOKENS · CLAUDE_CODE_EFFORT_LEVEL |
| Feature toggles | …DISABLE_CRON, …DISABLE_AUTO_MEMORY, …ENABLE_PROMPT_SUGGESTION, …SIMPLE (--bare) |
| Context & caching | ENABLE_PROMPT_CACHING_1H=1 (1-h TTL vs 5-min default) · CLAUDE_AUTOCOMPACT_PCT_OVERRIDE |
| MCP & agents | MAX_MCP_OUTPUT_TOKENS · ENABLE_TOOL_SEARCH · …SUBAGENT_MODEL · …TASK_LIST_ID |
| Hardening | …SUBPROCESS_ENV_SCRUB (hide secrets from subprocesses) · …STOP_HOOK_BLOCK_CAP (v2.1.143) |
| Platform | …FORCE_SYNC_OUTPUT, …PACKAGE_MANAGER_AUTO_UPDATE (v2.1.129) · PowerShell controls (v2.1.143) · ANTHROPIC_WORKSPACE_ID |
Agent Teams is one env var away — Chapter 4 taught the architecture; this is the switchboard
# enable (experimental, off by default) export CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 # or in your settings JSON { "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" }
The structure, in brief
- A team lead coordinates and delegates subtasks
- Teammates work independently, each with their own context window
- A shared task list enables self-coordination
- Roles come from subagent definitions (.claude/agents/ or --agents)
Display modes — what this chapter adds
| in-process | Default — teammates run within the same terminal process |
| tmux | Each teammate gets a dedicated split pane (requires tmux or iTerm2) |
| auto | Automatically selects the best display mode |
claude --teammate-mode tmux
Use cases: large refactors split by module · parallel review + implementation · coordinated multi-file changes. Experimental — expect change.
One task per session, name what you'll want back, and clean up behind yourself
✅ Do
- Use separate sessions for different tasks
- Save important session states — and name them
- Clean up old sessions
❌ Don't
- Mix unrelated work in one session — context is a budget, and unrelated work spends it
The chapter's remaining best-practice groups ride with their features in Part 1 (Autonomy & Control): planning mode (complex tasks only, review before approving) · extended thinking (architecture, not trivia) · background tasks (monitor, don't over-spawn) · permission modes (plan for review, default for pairing, acceptEdits for automation, auto for guarded autonomy — and bypassPermissions almost never).
The terminal is now one door among eight — and the settings decide who holds the keys
Sessions persist, resume by name (claude -r), fork into branches, and recap themselves when you return. The interactive layer is fully yours: twelve workflow shortcuts, readline editing, rebindable keys across 18 UI contexts, vim mode with real visual selections, ! for raw shell. The surfaces multiply — fullscreen TUI, push-to-talk voice, Channels pushing Discord and Telegram into the session, Chrome as Claude's hands on the web, Remote Control from your phone with execution staying local, web sessions in Anthropic's cloud with /teleport back, and a desktop app with visual diffs and parallel worktree sessions. Underneath: a task list that survives compaction, three config files plus ~40 env vars, enterprise managed settings merged from drop-ins users can't override, and Agent Teams behind an experimental flag.