Skip to content

orchestrate: continuous out-of-band progress reporting for multi-hour runs (status command + durable milestone markers) #48

Description

@TBarregren

Context — field experience (kntnt-extractor, 2026-07-22, orchestrate 0.16.1)

An orchestrate run is a 6–12 hour unattended process, but the only live views of its progress are inside the Claude Code TUI: the /workflows progress tree and the agent view (arrow-left). In the field this is worse than inconvenient — entering the agent view to check on progress and leaving it again is precisely the interaction that has repeatedly killed the background workflow mid-run (a compaction prompt appears on exit; by then the run is already dead — see the companion resume ticket). So today the maintainer must choose between flying blind for hours and risking the run by peeking.

What the maintainer actually needs, continuously and out of band (no TUI interaction): which issues are done, which issue is in flight, and where in its lifecycle it stands (implement / verify / fix round k of N / reconcile / integrate / parked), plus coarse run-level facts (agents spent, waves remaining).

What exists today

  • The engine log()s wave/fix-round events — but those render only in the in-session progress tree, the exact place peeking is dangerous.
  • The Workflow harness already persists journal.jsonl in the run's transcript dir, with one started/result line per agent — durable, on disk, updated live. In the 2026-07-22 recovery this journal was sufficient to reconstruct the full run state by hand (which issue landed at which SHA, which lens was outstanding).
  • Workflow scripts have no filesystem access, so the engine cannot write a progress file itself; sub-agents, however, run with full tools.

Decision R1 — reporting channel(s)

(a) Deterministic status command (recommended core). A new orchestrate.py status mode that reads the run's journal.jsonl (plus the plan) and renders the current per-issue lifecycle position, timestamps, and agent counts. Zero tokens, pure code, watchable from any plain terminal (watch -n 60 …) with no TUI interaction. Requires the engine's journal entries to be self-describing — today the journal records agentId + result but the human-readable label/phase lives only in the per-agent meta.json; either the harness journals labels or status joins against the meta files.

(b) Durable GitHub milestone comments (recommended complement). Post one comment per lifecycle milestone on the issue itself — "implementation green on branch X", "verification cleared", "integrated at SHA". Visible from a phone, survives any crash, and doubles as the machine-readable landed-marker the companion resume ticket needs (shared mechanism — coordinate the format there). Sub-agents are forbidden outward writes by the operating contract, so these would be posted by the integrate step (already the authorized mutator) and/or a dedicated mechanical-tier reporter dispatch.

(c) Push notification at coarse milestones (optional). One notification per landed/parked issue and at run end.

Acceptance criteria

  • During a run, the maintainer can see, from a plain terminal with zero Claude Code TUI interaction, each issue's lifecycle position (implement / verify / fix round k / reconcile / integrate / done / parked) and which issues have landed at which SHA.
  • Each landed issue leaves a durable, machine-readable marker (format shared with the companion resume ticket).
  • No documented progress-checking path requires opening the agent view or /workflows.
  • The status rendering is deterministic (code, not an LLM) and covered by tests/test_orchestrate.py.

🤖 Generated with Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestready-for-agentFully specified, ready for an AFK agent

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions