The crew tool's live view recomputes process_alive, manifest_present, log_age_seconds and log_fresh on every read, but takes phase from the stored pointer. Phase is the field a reader actually wants, and it is the one that lags: measured here, a run 41 seconds into a 77KB event stream reported starting, and only flipped to working after a CLI observe wrote the record.
That contradicts the tool's own contract. It is read-only by design, yet its headline field only becomes accurate after a mutation the caller must know to perform - and the correction requires the CLI, so a pure MCP reader can never get a true phase. The tool already reads the log's mtime for log_age_seconds, so the stream is in hand; fold the phase from it on read and leave the write to observe.
The same read is where token usage is captured, so the two defects share a remedy: whatever folds the stream for the live view should also be what complete calls before promoting.
Two smaller findings from the same exercise. The tool's docstring advertises four views while the code accepts five - a budget view exists in reckon/mcp.py that the description never mentions, and a stdio server started before it landed rejects the view outright, which is the documented cold-code behaviour rather than a bug. And the description says what the tool reads without saying when to reach for it: it should name the situation - checking on background workers without interrupting them - and name the wrong alternative it replaces, because an agent that does not see itself in the description will shell out to the CLI instead. That is exactly what happened before this was written.