← the Atlas

Workflow viewer

feature · budding ·

Integrating Claude Code dynamic-workflow JSONL into kolu — surfacing fan-out runs on the tile chrome and an Inspector run-list with live timelines.

Analysis of a live do-wf run in drishti/.worktrees/hm, generalized to the real case: a session holds many workflow runs at once — some running, some finished. Two-phase proposal, revised after hickey + lowy.

Multiplicity is the normal case (verified)

SessionWorkflow runsFan-out
agency/…/cc-workflow2 runs (wf_84c9119d, wf_e6f94ccf)4 agents, 14 agents
kolu/…/modest-runner3 runs
drishti/…/hm (live)1 run, in flight6 started / 5 done

So the UI target is a list of runs per session, each with its own status and timeline — not a single badge value.

What a dynamic workflow writes, and where status lives

~/.claude/projects/<encoded-cwd>/<session>.jsonl              # main transcript — launch markers + completion notifications
~/.claude/projects/<encoded-cwd>/<session>/
├── workflows/scripts/<name>-<runId>.js                       # persisted script — meta.name + meta.phases[]
└── subagents/workflows/
    ├── wf_84c9119d-127/  journal.jsonl + agent-*.jsonl       # run 1
    └── wf_e6f94ccf-a1f/  journal.jsonl + agent-*.jsonl       # run 2 …

The three discrepancies vs. kolu’s reader at the time (all verified; since fixed by #1124 ):

kolu assumesOn disk
One journal at <session>/workflows/<runId>.jsonMany at <session>/subagents/workflows/<runId>/journal.jsonl
Snapshot object {workflowName,status,agentCount}Event log: {type:"started",agentId} / {type:"result",agentId,result:{status,…}}
Name + status live in the journalname only in the script meta; workflow-level status is NOT in the journal at all

Proposal — two phases, each shippable alone

Phase 1 — repoint the reader (name + fan-out count appear) shipped

Shipped in #1124 (merged 2026-06-02; hardening follow-ups in #1130 and #1157 ). Bug-fix-shaped, almost entirely in core.ts; no UI change. They already consume ClaudeWorkflow {name,status,agents} (agentDisplay.ts:42-44, TerminalMeta.tsx:78-80, MetadataInspector.tsx:194-205):

Phase 2 — a list of workflow runs with live timelines, in the Inspector tab

Rendered prototype — a session’s runs, newest first; running auto-expanded, finished collapsed to a summary you can open:

Inspector
Code
Kindclaude-code
Staterunning in background
Workflows3 runs · 1 running
do-wfrunning6 agents · 4m elapsed
Sync · Research · Implementdone
Checkstatic-correctness gate
a9b4…61c0
Docs · Format · Commit · Review · …9 phases pending
deep-researchcompleted14 agents · 6m12s
finished 12m ago · click to expand timeline & per-agent transcripts
do-wffailed4 agents · 1m03s
failed at Check (1 agent failed) · click to expand
▸ click an agent → opens its transcript (reuses parseClaudeCodeJsonl → TranscriptEvent[] renderer)

Wiring (shaped by the review pass below):

What the hickey + lowy pass changed

Cut line

Phase 1 shipped in #1124 (2026-06-02): a small correction that made the already-built surface work for the first time, showing the active run. Phase 2 — the multi-run list + timelines in the Inspector — is what remains, and is independently reviewable. When ready, drive it with /do.