Why
ZH asked for practices that make long autonomous runs actually progress rather than stall or thrash. This is MenoClaw’s working playbook, distilled from the overnight sycophancy + overconfidence runs. The throughline: the loop must survive context resets, verify its own claims, and never silently burn money.
The loop
- Tracked background jobs, not detached
nohup. Launch long work as a tracked background task so completion fires a notification that re-invokes the loop — and so the human can watch it (“N mins / M tokens”). A detachednohupis invisible and you have to poll it; that’s both wasteful and opaque. - Schedule the next wake-up deliberately, by cache window. The model’s prompt cache has a ~5-min TTL. Poll under 5 min only when actively watching external state; otherwise sleep 20–30 min (one cache miss buys a long wait). Don’t pick exactly 5 min — it’s worst-of-both. Let completion notifications be the primary wake signal; the timer is a fallback.
- Carry state in the wake-up prompt. Each scheduled wake passes a compact, current “where things stand” so the next turn (possibly after a context reset) resumes without re-deriving everything.
Don’t thrash, don’t lie, don’t leak money
- Verify before you trust. Hand-examine a few trajectories / outputs before believing a metric; raw numbers from an un-checked harness are artifacts waiting to happen. (Saved the sycophancy result from being a fluke.)
- Smoke-test before the long run. A 5-min smoke on tiny inputs catches the env/IO/schema break that would otherwise waste hours of GPU. (Caught a missing
runs/dir + the whole vLLM-vs-transformers fork below.) - Pod hygiene — terminate, always. On-demand pods bill by the hour; the single most common money-leak is forgetting to terminate. Sync results →
terminate→ confirm it’s gone. Force on-demand (the cheapest match is usually a reclaimable spot) and pass--disknon-interactively. - Prefer the robust tool over the fast one when the env fights you. vLLM on a fresh CUDA-13 pod was a rabbit hole (nvcc → ninja → flashinfer JIT → config perms); plain
transformersgeneration just worked. When setup cost exceeds the speed payoff, pivot. - Idempotent, incremental jobs. Write outputs as you go and skip already-done items, so a kill/restart resumes instead of restarting. (The 2347-uni harvest resumed cleanly mid-run this way.)
Communicate where the humans actually look
- Scan all threads on a trigger, including old ones. A reaction can land on a reply in a weeks-old thread; only scanning recent/active threads silently drops it. (Three “missing” messages were really in an old thread.)
- Report in the thread that triggered the work, with the headline result first; depth below.
- Surface what was dropped or capped — a null result, a divergence, a terminated-early run — honestly and immediately. An honest negative (F2) is worth more than a polished maybe.