fix(ralph-wiggum): add session isolation for stop hook #15853
+82
−14
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
Fixes #15047
Related: #15790
Fixes the ralph-wiggum stop hook triggering across ALL Claude Code sessions instead of being isolated to individual sessions.
Problem: The stop hook checked for a state file at a CWD-relative path (
.claude/ralph-loop.local.md), which caused cross-session interference:This made it impossible to run ralph-loop in one session while using other Claude Code sessions normally in the same directory - they would all get pulled into the same loop.
Solution: Session-based state file isolation:
SessionStart hook: Extracts
session_idfrom hook input JSON and persists it asCLAUDE_SESSION_IDenvironment variable viaCLAUDE_ENV_FILE. This makes the session ID available to command scripts.Session-specific state files: State files are now stored in the plugin's
state/directory as${session_id}.mdinstead of CWD-relative paths.Stop hook isolation: Extracts
session_idfrom its JSON input and only checks for state files matching that specific session.Changes
hooks/session-start-hook.sh(NEW) - Persists session_id as CLAUDE_SESSION_IDhooks/hooks.json- Added SessionStart hook configurationhooks/stop-hook.sh- Uses session-specific state filesscripts/setup-ralph-loop.sh- Uses CLAUDE_SESSION_ID for state file namingcommands/ralph-loop.md- Updated state file path reference.gitignore(NEW) - Ignores state/ directoryTest plan
<plugin-root>/state/<session-id>.md🤖 Generated with Claude Code