[loop] Fix Hermes timeout — fire-and-forget delegation, never block on Kimi #229

Closed
opened 2026-03-15 17:45:29 +00:00 by hermes · 1 comment
Collaborator

Problem

Cycles 53 and 54 both timed out (exit code 142 = SIGALRM at 20 min) because Hermes dispatched work to Kimi then burned the entire cycle budget on sleep 30 && tmux capture-pane polling loops.

Root Cause

The loop prompt instructs Hermes to:

  1. Dispatch to Kimi
  2. Poll Kimi's tmux pane every 30-60 seconds
  3. Wait until Kimi finishes
  4. Extract the result

This blocks Hermes for the full duration of Kimi's work. If Kimi takes >20 min, Hermes times out and the cycle is wasted.

Fix

With the new Gitea-based delegation (#225, #226):

  • Hermes assigns the issue and moves on immediately
  • Hermes does its own work in the same cycle
  • Hermes checks for Kimi PRs as part of its cycle start (Phase 1)
  • Zero blocking, zero polling

In the Loop Prompt

Add to Phase 1 (start of cycle):

Check for open PRs from kimi:
  GET /repos/.../pulls?state=open&poster=kimi
For each: review, merge if tests pass, or request changes.

Remove:

  • All tmux send-keys dispatch to Kimi
  • All sleep/poll loops
  • All tmux capture-pane checks

Expected Impact

  • Cycles should complete in 5-15 min instead of timing out at 20
  • Hermes does its own work while Kimi works independently
  • Both agents productive simultaneously
## Problem Cycles 53 and 54 both timed out (exit code 142 = SIGALRM at 20 min) because Hermes dispatched work to Kimi then burned the entire cycle budget on `sleep 30 && tmux capture-pane` polling loops. ## Root Cause The loop prompt instructs Hermes to: 1. Dispatch to Kimi 2. Poll Kimi's tmux pane every 30-60 seconds 3. Wait until Kimi finishes 4. Extract the result This blocks Hermes for the full duration of Kimi's work. If Kimi takes >20 min, Hermes times out and the cycle is wasted. ## Fix With the new Gitea-based delegation (#225, #226): - Hermes assigns the issue and moves on immediately - Hermes does its own work in the same cycle - Hermes checks for Kimi PRs as part of its cycle start (Phase 1) - Zero blocking, zero polling ## In the Loop Prompt Add to Phase 1 (start of cycle): ``` Check for open PRs from kimi: GET /repos/.../pulls?state=open&poster=kimi For each: review, merge if tests pass, or request changes. ``` Remove: - All tmux send-keys dispatch to Kimi - All sleep/poll loops - All tmux capture-pane checks ## Expected Impact - Cycles should complete in 5-15 min instead of timing out at 20 - Hermes does its own work while Kimi works independently - Both agents productive simultaneously
Author
Collaborator

Resolved. The old tmux-polling model is gone.

With kimi-loop.sh (#228), Hermes delegates by assigning issues via Gitea API and moves on immediately. No tmux polling, no blocking, no timeouts. Fire-and-forget delegation is now the default workflow. Closing.

Resolved. The old tmux-polling model is gone. With `kimi-loop.sh` (#228), Hermes delegates by assigning issues via Gitea API and moves on immediately. No tmux polling, no blocking, no timeouts. Fire-and-forget delegation is now the default workflow. Closing.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Rockachopa/Timmy-time-dashboard#229