Boris Cherny a310cc1ae6
ralph-loop: fix false completion on bare word, whitespace-asymmetric promise match, and frozen iteration counter
Three stop-hook bugs that break loop termination:

- A bare assistant message equal to the promise (e.g. just "DONE") ended
  the loop even without <promise> tags: the perl substitution passed the
  input through unchanged when the tag was absent. Now the promise text
  is only extracted when a <promise>...</promise> tag is present.
- The observed promise text was whitespace-normalized but the expected
  promise was not, so a promise containing consecutive spaces
  ("ALL  DONE") could never match and the loop never ended. Both sides
  are now normalized identically (trim + collapse runs of whitespace).
- The iteration reader accepted "iteration:1" (no space after the colon)
  but the writer's sed only matched "iteration: " with a space, so the
  counter froze and the loop ran past max_iterations. The writer now
  matches with or without spaces, like the reader.

Adds tests/stop-hook.test.sh covering all three regressions plus
controls; the three bug cases fail on the previous script and pass now.

Fixes anthropics/claude-code#81827
Fixes anthropics/claude-code#81828
Fixes anthropics/claude-code#81829

No-Verification-Needed: shell-script plugin in claude-plugins-official; no claude-cli-internal runtime surface

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 20:19:46 -07:00

10 lines
343 B
JSON

{
"name": "ralph-loop",
"version": "1.0.1",
"description": "Continuous self-referential AI loops for interactive iterative development, implementing the Ralph Wiggum technique. Run Claude in a while-true loop with the same prompt until task completion.",
"author": {
"name": "Anthropic",
"email": "support@anthropic.com"
}
}