Skip to content

ralph loop: stop hook matches the completion tag as a bare substring, so prose about the protocol ends the loop #62

Description

@bprzybysz

Component: ralph loop stop hook

Symptom

The stop hook greps the agent's output for the completion tag as a plain substring. It cannot distinguish a mention of the tag from a use of it.

Writing the tag in prose — to explain the loop protocol to the user, or to quote the contract in a status report — terminates the loop and deletes the state file, even though no completion was ever signalled.

Impact

A loop can be ended by its own documentation.

The workaround is for the agent to never write the tag in any user-facing text, which makes the protocol impossible to explain in-session. In our runs this became a standing instruction carried across context compactions, purely to avoid tripping the hook by accident.

We hit this for real: a prose mention ended a loop and took the state file with it (see the companion issue on state-file deletion).

Suggested fix

Any one of these removes the ambiguity:

  • require the tag to be the sole content of the final output block;
  • anchor the match to the end of the message;
  • use a delimiter form that prose cannot accidentally contain.

Provenance

Observed during a multi-day ralph run on an external project. Reported with the maintainer's tooling in mind, not as a support request — happy to test a fix.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions