Skip to content

molt watch

Advance every open incident as far as it can go automatically — which stops at the approval gate.

Shell
molt watch

Finds every incident that has not closed, and calls Engine.advance on each one repeatedly (up to eight steps) until either it runs out of automatic work to do, or it lands in a state that needs a human.

What one step does

Each call to advance performs exactly the next mechanical step for an incident's current state — composing the heal prompt while diagnosing, calling bdata scraper heal while healing, and so on — and returns either performed (what it just did) or null with a note explaining why it stopped.

Text
Advancing 2 open incident(s)
 
  i_e956491c-…  DETECTED
    → diagnose.start   diagnosing
    → heal.start       awaiting_approval
    ⏸ awaiting a human decision on the proposed fix
    review: molt review i_e956491c-…
 
  i_7a21f4b0-…  HEALING
    ⏸ heal is already awaiting_approval; run molt review or molt unblock

Exit codes

ExitMeaning
0Every open incident either resolved or had nothing further to do automatically.
3At least one incident is now awaiting_approval and needs molt review.

Constraint

watch never crosses the approval gate itself. awaiting_approval is a state the engine will not leave on its own by design — see The human gate for why, and do not expect a flag to skip it: none exists in this CLI today.

Running it unattended

.github/workflows/molt-watch.yml runs molt watch on a schedule against the real fleet. It advances every incident it can, and stops the same way a human running it interactively would — at the gate, never past it. A scheduled watch is how drift gets detected and diagnosed continuously; the decision to ship a fix still happens in molt review / molt approve.