[Feature Request] Session naming and machine-readable state indicators for multi-session workflows
Bug Description
Feature Request: Session Naming and Terminal State Indicators
From: Jordan Dea-Mattson
GitHub: @jordan-of (OrdinaryFolk), @jordandm (personal)
Email: jordan-of@users.noreply.github.com
Context: Claude Enterprise plan, heavy multi-session workflow with 4-5 concurrent Claude Code instances across git worktrees
- Editable Session Names with Terminal Tab Integration
Current behavior: Claude Code auto-generates a session name (e.g., "tool-telemetry-permission-gap") and sets the terminal title. This name cannot be changed.
Problem: When running multiple Claude Code sessions simultaneously (one per worktree/task), the auto-generated names are often unhelpful for distinguishing sessions at a glance. Terminal tab
managers (iTerm2, Warp, tmux) pick up the terminal title, so whatever Claude Code sets propagates to the tab. There's no way to rename a session to something meaningful like "transcript-analysis"
or "PR review #16".
Requested behavior:
The session name should be settable at three points:
- At launch: claude --session-name "my-task" — sets the name for a new session
- At resume: claude --resume <id> --session-name "new-name" — renames when resuming an existing session
- Within a session: A command (e.g., /session-name <name>) to rename the active session
The name should:
- Update the terminal title immediately so tab managers reflect the change
- Persist across the session (survive context compression, tool calls, etc.)
- Be used as the filename for resume files (e.g., my-task.jsonl instead of 32adfdd0-54f3-4063-a6f6-9a41dd3da410.jsonl), so sessions are identifiable on disk
- Appear in claude --list or equivalent session listing output
- Machine-Readable Session State for External Tooling
Current behavior: There is no way for external tools (terminal tab managers, status bars, scripts) to determine whether a Claude Code session is currently working, idle/available, or waiting for
user input.
Problem: With multiple concurrent sessions, I need visual indicators to know which sessions need attention (waiting for input/approval) vs. which are busy working. This is especially important for
accessibility — color-blind users need icon-based indicators, not just color changes. Terminal tab managers like iTerm2 support custom icons and badge colors, but they need a signal to read.
Requested behavior:
- A machine-readable state signal indicating the current session status:
- working — Claude is processing, running tools, generating output
- available — Claude has finished and is ready for the next prompt
- waiting — Claude is blocked on user input (permission prompt, question, approval)
- Implementation options (any would work):
- A status file at a known path (e.g., ~/.claude/sessions/<pid>.status)
- Terminal escape sequences that tab managers can interpret
- A local socket or IPC mechanism
- This enables:
- Tab color/icon changes (green = available, yellow = working, red = waiting)
- Accessibility: icon-based indicators for color-blind users
- Automation: scripts that wait for a session to become available before sending input
Why This Matters
These aren't cosmetic requests — they're workflow infrastructure. When you're running 4-5 Claude Code instances across worktrees, the inability to name sessions and detect their state creates real
friction. You end up clicking through tabs to find which one needs attention, or losing track of which session is doing what.
Environment Info
- Platform: darwin
- Terminal: iTerm.app
- Version: 2.1.80
- Feedback ID: 43a72d75-3833-4084-a999-2511c472ceb7
Errors
[{"error":"Error: NON-FATAL: Lock acquisition failed for /Users/jordan_of/.local/share/claude/versions/2.1.80 (expected in multi-process scenarios)\n at YST (/$bunfs/root/src/entrypoints/cli.js:2903:2174)\n at fBq (/$bunfs/root/src/entrypoints/cli.js:2903:1318)\n at processTicksAndRejections (native:7:39)","timestamp":"2026-03-20T06:22:33.390Z"},{"error":"MaxFileReadTokenExceededError: File content (10820 tokens) exceeds maximum allowed tokens (10000). Use offset and limit parameters to read specific portions of the file, or search for specific content instead of reading the whole file.\n at z_9 (/$bunfs/root/src/entrypoints/cli.js:4268:23437)\n at processTicksAndRejections (native:7:39)","timestamp":"2026-03-20T06:36:03.196Z"},{"error":"MaxFileReadTokenExceededError: File content (17524 tokens) exceeds maximum allowed tokens (10000). Use offset and limit parameters to read specific portions of the file, or search for specific content instead of reading the whole file.\n at z_9 (/$bunfs/root/src/entrypoints/cli.js:4268:23437)\n at processTicksAndRejections (native:7:39)","timestamp":"2026-03-20T06:39:17.705Z"},{"error":"MaxFileReadTokenExceededError: File content (14803 tokens) exceeds maximum allowed tokens (…
Note: Content was truncated.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗