Problem
The desktop app surfaces nothing about the plan or the task list. Capacitor.App has no plan or task rendering at all — the only match in the project is a tool-name string in ViewModels/ToolSummary.cs. Someone driving a session from the desktop app cannot see how far through its plan the agent is.
The original brief — copy the Codex app's compact progress strip above the input area, expandable — still holds visually. The data half has changed: the plan ledger shipped 2026-09-15 and is now the source of the task list. Do not rebuild the old tool-call fold; for current Claude Code it yields nothing, which is the reason the ledger exists.
Data source
GET /api/sessions/{sessionId}/plans, then GET /api/plans/{planId}. Both are on the public OpenAPI document, so they are reachable from the app's remote lane.
total_known says whether the total is real. is_complete goes false when a contributing session is hidden from the viewer — the strip must not present a partial count as a whole one.
Open decision: the server raises no signal when a plan changes (PlanProjector publishes nothing), so there is no push telling the app that a task flipped. Either poll while the session runs, or add a plan signal server-side. Settle it in this issue.
Shape
A collapsed strip above the composer: N of M · <current task title>, expanding to the full list with per-task status. Absent entirely when no plan is declared. Skip changed-files — the app has no diff support.
Not in scope
Rendering the plan/spec/design documents themselves; the web surfaces, which are tracked separately.
Supersedes (and carries the Codex-app reference screenshot): AI-2422
Problem
The desktop app surfaces nothing about the plan or the task list.
Capacitor.Apphas no plan or task rendering at all — the only match in the project is a tool-name string inViewModels/ToolSummary.cs. Someone driving a session from the desktop app cannot see how far through its plan the agent is.The original brief — copy the Codex app's compact progress strip above the input area, expandable — still holds visually. The data half has changed: the plan ledger shipped 2026-09-15 and is now the source of the task list. Do not rebuild the old tool-call fold; for current Claude Code it yields nothing, which is the reason the ledger exists.
Data source
GET /api/sessions/{sessionId}/plans, thenGET /api/plans/{planId}. Both are on the public OpenAPI document, so they are reachable from the app's remote lane.total_knownsays whether the total is real.is_completegoes false when a contributing session is hidden from the viewer — the strip must not present a partial count as a whole one.Open decision: the server raises no signal when a plan changes (
PlanProjectorpublishes nothing), so there is no push telling the app that a task flipped. Either poll while the session runs, or add a plan signal server-side. Settle it in this issue.Shape
A collapsed strip above the composer:
N of M · <current task title>, expanding to the full list with per-task status. Absent entirely when no plan is declared. Skip changed-files — the app has no diff support.Not in scope
Rendering the plan/spec/design documents themselves; the web surfaces, which are tracked separately.
Supersedes (and carries the Codex-app reference screenshot): AI-2422