Report on background work started by start_frame, refine_frame, start_booth, refine_booth or create_booth. Always pass the jobId that the start/refine/create call returned — keep it for the rest of the conversation, because an id keeps working for the full 15 minutes even if the connection re-authenticates partway through, and calling with no arguments does not. With no arguments it reports the most recent job of any kind, which is a convenience for when the id was lost, not the normal way to call it. Designing a booth takes 1-3 minutes, a redraw about a minute, creating a booth 2-6 minutes: tell the operator that, then poll about every 15 seconds. While it says 'running', nothing exists yet — relay the progress line if there is one, tell the operator it is still going, and wait 10-15 seconds before calling again rather than polling tightly. When it says 'done': a frame job carries imageUrl, threadId and generationId (a preview — nothing saved until save_frame); a booth design carries draft{…} (a draft — nothing created until create_booth); a booth creation carries booth{slug, boothUrl, projectId} — the one case where something now exists. This reads a status and creates nothing, so it is always safe to call.