Chapter 9B · Sessions & Surfaces

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.

01 · The Map

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.

The through-line: the terminal REPL is now just one of eight ways in — but they all share the same sessions and the same settings.
02 · Session Management

Name your sessions — resume is instant, and forking gives you a second timeline

claude -cContinue the most recent conversation
claude -r "auth-refactor"Resume a session by name or ID — optionally with a new prompt appended
/resumeResume a conversation by ID or name from inside the REPL
/renameName the current session so -r can find it later
/forkFork 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)
Sessions are auto-saved either way — the discipline that pays is /rename early, so "where was that JWT work?" becomes claude -r "auth-refactor".
03 · Keyboard Shortcuts

Twelve workflow shortcuts run the cockpit — and the input line is pure readline

Workflow

Ctrl+C · Ctrl+DCancel input/generation · exit Claude Code
Shift+Tab / Alt+MToggle permission modes
Esc EscRewind code/conversation (Ch. 8)
Ctrl+T · Ctrl+BToggle task list · background running tasks
Ctrl+OToggle verbose output (view reasoning)
Ctrl+RReverse-search history
Ctrl+GEdit plan in external editor
Ctrl+LClear terminal screen
Option/Alt+P · +TSwitch model · toggle extended thinking

Line editing (readline)

Ctrl+A · Ctrl+ELine start · line end
Ctrl+K · Ctrl+UCut to end · cut to start
Ctrl+W · Ctrl+YDelete word back · paste (yank)
Tab · ↑/↓Autocomplete · command history

If your shell muscle memory is bash/zsh/emacs, it transfers wholesale — same bindings, same behavior.

The four worth drilling: Shift+Tab (modes), Esc Esc (rewind), Ctrl+T (tasks), Ctrl+O (see the reasoning).
04 · Custom Keybindings

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 · HistorySearch18 contexts total, incl. Transcript, Task, DiffDialog, ModelPicker.

Reserved & conflicting keys

Ctrl+C · Ctrl+DReserved — cannot be rebound (interrupt / exit)
Ctrl+B · Ctrl+A · Ctrl+ZTerminal conflicts: tmux prefix · GNU Screen prefix · process suspend
A shortcut that "doesn't work" is usually your terminal eating it first — check the multiplexer before blaming the config.
05 · Input Power Moves

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 searchReverse-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 inputStart with \, write across lines, finish with \end — for prompts with requirement lists
Inline editingEdit 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
The sleeper is Ctrl+R across all projects — that prompt you crafted last month in another repo is one search away.
06 · Vim Mode

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+)

vCharacter-wise selection; extend with motion keys
VLine-wise — always selects whole lines
yYank (copy) the selection
d / xDelete the selection
cChange — delete and enter INSERT
EscBack to NORMAL

Selections are highlighted in the input field — you see exactly what will be yanked, deleted, or changed before committing the operator.

If your fingers think in vim, the prompt line now does too — operators, text objects, and visible selections, not just navigation.
07 · TUI & Voice

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-talkHold a key to record, release to send
20 languagesSpeech-to-text support
Custom keyConfigure the push-to-talk key via /keybindings
RequirementA Claude.ai account — STT runs through it
Both are about matching the surface to the moment: TUI when Claude lives in a pane all day; voice when the prompt is faster said than typed.
08 · Channels

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.

DiscordReceive and respond to messages in your session
TelegramReceive and respond to messages in your session
iMessageReceive iMessage notifications
WebhooksEvents from arbitrary webhook sources

Plugins must be approved via the allowedChannelPlugins managed setting — admins control which sources an org may wire in.

MCP so far has been Claude pulling data when it needs it; Channels is the outside world pushing — a bug report lands in Discord and the session already knows.
09 · Chrome Integration

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.

The trust model is layered: your login, your visible window, your per-site allowlist — and the human handles every CAPTCHA.
10 · Remote Control

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.

Two kill switches to know: admins set disableRemoteControl: true at managed scope (v2.1.128+) — and since v2.1.139, any API-key credential (ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN, apiKeyHelper) silently disables Remote Control, /schedule, claude.ai MCP connectors, and notification prefs — even if you're also logged in via OAuth.
11 · Where the Code Runs

One question separates the remote surfaces: does execution stay local, or move to the cloud?

Your machine — code executes here
Full access to local files, MCP servers, and CLI tools
Terminal REPL
The default surface — everything in this series so far
Remote Control  claude remote-control
UI moves to phone / tablet / browser; execution stays here. Terminal must remain open.
Desktop app — local sessions
Visual layer over local execution, parallel via worktrees
claude --remote "…"
start work in the cloud
/teleport
pull it back to your terminal
Anthropic cloud — code executes there
No local dependencies; start fresh from any browser
Web sessions  claude.ai/code
Run Claude Code in the browser, or create from the CLI with claude --remote. Share the URL with teammates; use the web UI for visual diff review.
Desktop app — remote sessions
Run on Anthropic infrastructure; continue even when the app is closed
Same product, opposite homes: Remote Control = your machine, any screen. Web sessions = any machine, Anthropic's compute — and /teleport (or claude --teleport) moves a web session into your local terminal.
12 · Desktop App

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 viewFile-by-file visual review with inline comments — Claude reads them and revises
App previewAuto-starts dev servers with an embedded browser; configure in .claude/launch.json (command, port, readyPattern, persistCookies)
PR monitoringGitHub CLI integration — auto-fix CI failures, auto-merge when checks pass
Parallel sessionsSidebar sessions with automatic worktree isolation
Scheduled tasksHourly / daily / weekdays / weekly — run while the app is open
Rich renderingCode, 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).

The desktop pitch in one line: everything the terminal can't show — visual diffs, live app previews, and a fleet of parallel sessions you can actually see.
13 · Quiet Helpers

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
The task list is the answer to a Part 1 problem: compaction forgets — tasks don't. And a shared TASK_LIST_ID is the simplest cross-session coordination primitive in the chapter.
14 · Managed Settings

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:

1
00-org-defaults.json
platform team
2
10-team-policies.json
your org
3
20-project-overrides.json
project layer
Effective managed policy
merged alphabetically from managed-settings.d/ · managed scope — individual users cannot override it
disableBypassPermissionsModeUsers can never enable bypass permissions
availableModelsRestrict which models users can select
allowedChannelPlugins · autoMode.environmentGate 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"
The naming convention is the precedence mechanism: number your drop-in files (00-, 10-, 20-) and alphabetical merge order becomes deliberate layering.
15 · Configuration

Three config files, one /config menu — and an environment variable for nearly everything

Where config lives

~/.claude/config.jsonGlobal config
./.claude/config.jsonPer-project — hooks, permissions, project MCP servers
~/.config/claude-code/settings.jsonUser 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 & APIANTHROPIC_MODEL, per-tier defaults, ANTHROPIC_API_KEY
ThinkingMAX_THINKING_TOKENS · CLAUDE_CODE_EFFORT_LEVEL
Feature toggles…DISABLE_CRON, …DISABLE_AUTO_MEMORY, …ENABLE_PROMPT_SUGGESTION, …SIMPLE (--bare)
Context & cachingENABLE_PROMPT_CACHING_1H=1 (1-h TTL vs 5-min default) · CLAUDE_AUTOCOMPACT_PCT_OVERRIDE
MCP & agentsMAX_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
~40 variables in the chapter's full reference list. The pattern: files for durable team config, env vars for per-shell overrides — and the highest-leverage three are effort level, thinking budget, and the 1-hour cache TTL.
16 · Agent Teams

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-processDefault — teammates run within the same terminal process
tmuxEach teammate gets a dedicated split pane (requires tmux or iTerm2)
autoAutomatically 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.

For the deep treatment — teammates vs subagents, delegation patterns, context economics — see the Chapter 4 deck. What's new here: the enable switch and the --teammate-mode display options.
17 · Practice

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).

Every surface in this deck shares one session model — so session hygiene is the practice that pays everywhere at once.
18 · Recap

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.

Try it now: /rename this session, press Ctrl+T, then /keybindings. Next — Chapter 10: the CLI — print mode, JSON output, and CI/CD.
Sid Dani · June 2026