# Handoff — opencode (free inference) **Sprint goal focus:** Additive, visible TUI work. Blast radius contained to the Go app (`apps/tui-go`) plus the WS messages it reads. Cheap inference is fine here — a human eyeballs the result. Read the full task body in Vikunja (project 4) before starting each — `get_task_details `. Mark each **Doing** on start, and **commit green work referencing the task #** when done. ## Tasks ### #295 — TUI: token usage display for router/talkie (like narrator) The narrator already shows token usage in the TUI. Mirror the same display for the router and talkie streams. Follow the existing narrator pattern — don't invent a new widget. ### #296 — TUI: execution plan viewer (freestyle sessions + general) Add a view that renders the session's execution plan (stages/transitions) in the TUI. Useful for freestyle runs especially. Reuse whatever plan data already comes over the WS. ### #298 — TUI output view: show CoT/reasoning on artifact + tool-call turns The reasoning/CoT stream is already captured (reasoningArtifactId on InferenceCompleted). Surface it in the output view on artifact and tool-call turns so the operator can see the model's reasoning. ### #265 — TUI clarification modal not dismissed when answered externally When a clarification is resolved on the server (or answered outside the TUI), the modal stays open. Dismiss it on the server-resolve / external-answer signal. Contained bug — find the modal state and the resolve message. ## Notes These are all `apps/tui-go` (Go / Bubble Tea, WS client). Don't touch the Kotlin core.