feat(cli): Add session ID support to resume command (v3.0)#737
feat(cli): Add session ID support to resume command (v3.0)#737A13xSM wants to merge 2 commits intodanielmiessler:mainfrom
Conversation
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>
There was a problem hiding this comment.
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
--resumeparsing to accept eitherboolean(resume last) or a UUID session ID. - Add
extractSessionCwd()to locate a session’s JSONL file and recover its original working directory. - Update
cmdLaunchbehavior and help text to supportpai -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>
|
Thanks for this contribution! PAI v4.0 significantly restructured the architecture — new directory layout, Algorithm v3.6.0 (up from v1.x), hooks/lib/paths.ts for path resolution, and many of the underlying systems this PR targets have been rewritten. This PR targets the v3.0 architecture and can't be cleanly applied to v4.0.x. Closing as superseded. The latest release is v4.0.2. We're actively working on platform compatibility and other bigger items. If there's still a gap not covered by the new releases, we'd welcome a fresh PR against the current codebase. Thanks again! |
Summary
-r/--resumeflagcmdLaunchfunction to acceptresumeas eitherbooleanorstring(session ID)--resumeflagMotivation
Currently, users can only resume the most recent session with
pai -r. If they want to return to an older session, they must use theclaude --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
Test Plan
pai -r(no session ID)pai helpImplementation Details
/^[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 acceptedextractSessionCwd()searches~/.claude/projects/subdirectories for the session JSONL file and extracts the original working directoryCLAUDE_DIRif session cwd cannot be determinedpai -rusage continues to workChanges from original PR #561
Releases/v2.5/toReleases/v3.0/pai.ts(identical structure)🤖 Generated with Claude Code