Skip to content

Comments

feat(cli): Add session ID support to resume command (v3.0)#737

Open
A13xSM wants to merge 2 commits intodanielmiessler:mainfrom
A13xSM:feature/resume-session-by-id-v3
Open

feat(cli): Add session ID support to resume command (v3.0)#737
A13xSM wants to merge 2 commits intodanielmiessler:mainfrom
A13xSM:feature/resume-session-by-id-v3

Conversation

@A13xSM
Copy link

@A13xSM A13xSM commented Feb 19, 2026

Summary

  • Rebased PR feat(cli): Add session ID support to resume command #561 against v3.0 (previously targeted v2.5 paths that no longer exist)
  • Added ability to resume specific Claude Code sessions by passing a session ID to the -r/--resume flag
  • Modified cmdLaunch function to accept resume as either boolean or string (session ID)
  • Updated argument parsing to detect UUID format after --resume flag
  • Enhanced help text with session ID usage examples

Motivation

Currently, users can only resume the most recent session with pai -r. If they want to return to an older session, they must use the claude --resume <session-id> command directly, bypassing the PAI wrapper and losing PAI's startup configuration (MCP profiles, directory changes, voice notifications, etc.).

This enhancement allows direct navigation to any session by ID while maintaining all PAI wrapper functionality.

Usage

# Resume last session (existing behavior)
pai -r

# Resume specific session by ID (new feature)
pai -r 285728b4-8814-40c4-b643-bb7a8e81859e

Test Plan

  • Tested with valid session IDs
  • Tested backward compatibility with pai -r (no session ID)
  • Verified help text displays correctly with pai help
  • Confirmed UUID validation rejects non-UUID arguments
  • Verified that invalid session IDs are handled by Claude Code (not the wrapper)

Implementation Details

  • UUID pattern matching (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i) ensures only valid session IDs are accepted
  • extractSessionCwd() searches ~/.claude/projects/ subdirectories for the session JSONL file and extracts the original working directory
  • Falls back to "resume last" behavior if next argument is not a UUID
  • Falls back to CLAUDE_DIR if session cwd cannot be determined
  • Fully backward compatible: existing pai -r usage continues to work
  • No breaking changes

Changes from original PR #561

  • File path updated from Releases/v2.5/ to Releases/v3.0/
  • Code applied cleanly against the v3.0 pai.ts (identical structure)
  • No other changes needed — the v3.0 file had the same relevant code sections

🤖 Generated with Claude Code

Allow users to resume specific Claude Code sessions by passing a
session ID to the -r/--resume flag. This enables direct session
navigation without having to resume the most recent session first.

When resuming by session ID, the wrapper automatically:
1. Finds the session file in ~/.claude/projects/
2. Extracts the original working directory (cwd)
3. Changes to that directory before launching Claude

Usage:
  pai -r                                       # Resume last session
  pai -r 285728b4-8814-40c4-b643-bb7a8e81859e  # Resume specific session

Changes:
- Added extractSessionCwd() to parse session files
- Modified cmdLaunch to accept session ID as string or boolean
- Updated argument parsing to detect UUID format after --resume
- Enhanced help text with session ID usage examples

Rebased against v3.0 (previously PR danielmiessler#561 targeting v2.5)

Co-Authored-By: Claude Opus 4.6 (PAIv3.0) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings February 19, 2026 04:08
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds support for resuming a specific Claude Code session from the PAI wrapper by allowing -r/--resume to optionally take a session UUID, so users can resume older sessions while still getting PAI’s startup behavior (profiles/cwd/notifications).

Changes:

  • Extend --resume parsing to accept either boolean (resume last) or a UUID session ID.
  • Add extractSessionCwd() to locate a session’s JSONL file and recover its original working directory.
  • Update cmdLaunch behavior and help text to support pai -r <session-id>.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

- Wrap readdirSync(projectsDir) in try/catch to prevent CLI crash on
  permission errors or transient FS issues
- Limit file reading in extractSessionCwd to first 64KB for large
  session files instead of loading entire JSONL into memory
- Guard process.chdir(sessionCwd) with existsSync check and try/catch,
  falling back to CLAUDE_DIR if the directory no longer exists

Co-Authored-By: Claude Opus 4.6 (PAIv3.0) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant