feat(cli): Add session ID support to resume command (v3.0)#737
Open
A13xSM wants to merge 2 commits intodanielmiessler:mainfrom
Open
feat(cli): Add session ID support to resume command (v3.0)#737A13xSM wants to merge 2 commits intodanielmiessler:mainfrom
A13xSM 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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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