Model-driven self-paced /loop (Claude-style omit-to-end)
Self-paced /loop <prompt> is now model-driven, faithfully matching Claude Code's /loop: the model does one iteration's work, then calls schedule_loop_wakeup at the end of its turn to run the next one — and ends the loop simply by not calling it (omit-to-end). No harness auto-continue.
One mechanism, three natural shapes:
- Indefinite — the model calls the wakeup every turn
- Goal-bound — continues until the goal is met, then omits the call
- Stochastic — continues unpredictably, stopping on a runtime condition
Changes
- Model-driven
schedule_loop_wakeupwithdelaySecondsandreasonfields LoopDeleteno longer refuses user-started loops (model can stop when goal is met)- Removed
PI_LOOP_CONTINUE_MSenv var (no longer needed) - New
npm run test:e2ewith count-to-N and die-roll-until-6 tests - Updated unit tests for omit-to-end semantics
- Added
loop-test/to .gitignore - Cleaned up
READONLY_NOTEhandling (moved to LoopCreate)