Hermes TUI — plugin
hermes-idle-recap
You left an active hermes --tui open. After 2 min of no input, a single panel tells you where you left off + what to do next. Once per idle, never spam. Deterministic (no LLM), config hot-reloads.
What you see
— idle recap · away 2m 04s —
Where we left off:
you: add idle recap after 2 min
hermes: added useIdleRecap hook…
Status:
✓ idle — ready for your next prompt
todos: 1/3 done — next: wire config
What to do next:
→ Follow up on the last exchange…
Panel uses panel() (3 sections). Falls back to sys(). Cooldown 60s + hasRecappedThisIdle = once, then quiet until your next keystroke.
How it works
useIdleRecap.ts — buildIdleRecapPanel() + hook (refs keep callbacks stable)
UiState.idleRecapMinutes → useConfigSync → useMainApp wiring
- Priority:
HERMES_TUI_IDLE_RECAP_MINUTES env > display.idle_recap_minutes > 2 min
- Triggers on poller (15s) + on return (keystroke / Enter / focus) — second is no-op if poller already fired
Read the hook ↗
Install
curl -fsSL https://raw.githubusercontent.com/UFT1/hermes-idle-recap/main/install.sh | bash
# manual
cp useIdleRecap.ts ~/.hermes/hermes-agent/ui-tui/src/app/useIdleRecap.ts
patch -p1 < patches/core.patch
cd ~/.hermes/hermes-agent/ui-tui && npm run typecheck && npm run build:ink
hermes config set display.idle_recap_minutes 2
hermes --tui # idle 2m → single recap
2 min default0 disablesclamped 0..60
Test: HERMES_TUI_IDLE_RECAP_MINUTES=0.1 hermes --tui (6s) · Off: HERMES_TUI_IDLE_RECAP_MINUTES=0 hermes --tui
Config
hermes config set display.idle_recap_minutes 2 — minutes as float. Hot-reloads via 5s config.get mtime poll. Env still wins for one-offs.
hermes config get display.idle_recap_minutes
Fixed: no spam
Early version fired every 60s after threshold. Now hasRecappedThisIdleRef + stable refs → fires once at idle ≥ threshold, stays quiet until your next input restarts the idle window.
Zero-build static · theme from UFT1/opencode-model-viewer · Deploys via wrangler pages deploy site --project-name=hermes-idle-recap