progress_card is the single agent status tool for a session. It stores an ordered step plan, a compact Markdown note, or both. Each call replaces the whole card, so the latest write is the source of truth for someone following the work without reading the transcript.
The card is durable session state. A reconnect or page reload reads the latest card from the Gateway instead of reconstructing it from tool events or transcript history. The transcript keeps only a short update receipt, not another full copy of the card.
Adoption
OpenClaw adds a short progress-card reminder only for non-main sessions when a web, iOS, Android, or macOS card renderer is paired with the Gateway and the run is not using the agent’s utility model. Channel-only deployments such as a WhatsApp-only Gateway do not receive the reminder. The reminder says:During multi-step work, keep your progress card current with the progress_card tool; the user follows it instead of reading the transcript.The reminder does not override tool policy.
tools.updatePlan: false or a matching tools.deny entry still removes progress_card from the run entirely.
Update a card
Both input fields are optional:plan: up to 50 ordered steps. Each step has non-emptysteptext and astatusofpending,in_progress, orcompleted. At most one step may bein_progress.markdown: a compact narrative about what happened, what is blocked, or what comes next. Use it when a glanceable note says more than the step list; do not repeat the plan in Markdown.
markdown removes the previous note; omitting plan removes the previous checklist.
The tool returns a short receipt such as Progress card updated (rev 4, 1/3 done) or Progress card updated (rev 4) when there is no plan. Its structured result contains the revision and either completed/total step counts or null when no plan is present. OpenClaw also emits plan events for native apps and channel renderers during their migration, but the durable card remains the authoritative state.
Format the note
Choose the representation that makes the current state easiest to scan: use a table for comparisons or metrics, a progress bar for one long operation, and a checklist only when the work is genuinely sequential. Omit the checklist when a table, bar, or sentence says it better, and do not repeat the same facts across the plan and Markdown. Markdown accepts ordinary formatting, links, and optional progress bars:aria-label with its purpose and current/total values. In the session hovercard, the Agent Notepad pins the bar above the note and shows that label. Other raw HTML is stripped by the Markdown sanitizer.
Limits
- Markdown: at most 8,192 UTF-8 bytes.
- Plan: at most 50 steps.
- Step text: non-empty and at most 512 UTF-8 bytes per step.
- Active work: at most one
in_progressstep.
Clear a card
Callprogress_card with both parts absent or empty to remove the current card:
Progress card cleared.
Where the card appears
The current chat keeps exactly one live card in the main conversation:- The card appears in the collapsible surface inside the composer at every width.
progressCard.changed notifications.
The composer and dashboard placements show the local time of the last progress update. The hovercard instead shows the current-or-next plan step and its completed/total count, followed by Markdown in a separate Agent Notepad when a note is present.
Pin the card to the dashboard
Use thedashboard tool to keep the live card on the current session’s dashboard:
props.sessionKey to follow the dashboard’s session. To show another session’s card, add "props": { "sessionKey": "agent:main:release" }. The current connection must participate in that session; otherwise select an accessible session or change its sharing.