OpenClaw session goals
One durable objective per session, the six statuses, token budgets, what the model may and may not change, and the Control UI pill
A goal is one durable objective attached to the current OpenClaw session. It gives the agent and the operator a shared target for long-running work without turning that target into a background task, a reminder, a cron job or a standing order. Goals are session state: they move with the session key, survive process restarts, and appear in the goal command, the model-facing goal tools and the TUI footer. Here is the quick start, what a goal is for, the statuses, the budget mechanism, the rules the model works under, and the surfaces that show it.
Quick start and purpose
- Start a goal with the goal command and an objective, show it with the bare command, edit the wording, pause with a note, resume, complete with a note, or clear; the start word is optional, since any text after the command that is not a known action word becomes a new objective.
- Use a goal when a session has a concrete outcome that should stay visible across many turns: a PR closeout, a debug run, a docs pass, a bounded maintenance task.
- Only one goal can exist on a session at a time; starting a second fails until the current one is cleared, and new-session and reset commands clear the goal since they intentionally start fresh context.
- Explicit actions preserve line breaks and spacing inside the objective, and objectives are limited to 16,000 characters.
A goal is not a task queue.
Statuses and budgets
Six statuses: active, the session is pursuing the goal; paused by the operator, resumed with the command; blocked, when the agent or operator reported a real blocker, resumed when new information exists; budget-limited, when the configured token budget was reached, where resume restarts pursuit with a fresh budget window; usage-limited, reserved for a future stop state; and complete, which is terminal, so the goal must be cleared before another starts. A token budget is optional and set only through the model tool that creates a goal; it is measured from the session’s fresh token count at creation, waiting for the next fresh snapshot if the current one is stale so earlier spend is not charged, and reaching it moves the goal to budget-limited without deleting it. The docs call budgets a session-goal guardrail, not a billing cap; provider quota, cost reporting and context behaviour use the normal controls.
The model’s rules
- Three tools: read the goal with its status, objective, usage and budget; create one only when the user or system instructions explicitly ask, failing if a goal exists; and update it to complete or blocked. The model cannot silently pause, resume, clear or replace a goal; those stay operator controls.
- Complete only when the objective is verified against the full objective with no required work remaining; blocked only after the same blocking condition recurs for three consecutive goal turns, with a resume restarting that count; a nearly exhausted budget never justifies marking unfinished work complete, and updating the status sends no reply, so the agent still owes the requested final answer.
- Every chat turn with an active goal carries a compact context line naming the objective and the rules to advance, keep it active until achieved, block only after three consecutive turns, and provide the visible final after an update; paused, blocked, limited and complete goals are not injected, so an operator stop holds until resumed.
OpenClaw automations is where detached or scheduled work belongs instead, and OpenClaw sessions the session key a goal travels with.
The surfaces
In the Control UI, Goal is a command-picker mode where the objective is literal text, starting saves the goal, its user turn and the run admission together before acknowledging, and the goal shows as a pill above the composer with a status label, the truncated objective and a live timer, plus inline controls to edit, pause or resume, clear, and expand for the full objective, latest note, usage and elapsed time; the requests carry operation ids with twenty-four-hour receipts so a retry replays rather than duplicates. The TUI footer keeps the goal beside the agent, session and model fields with compact labels for pursuing, paused, blocked, limited and achieved. The command works in any command-capable surface, goal state attaches to the session key rather than the transport, and it is not a delivery directive: it does not force replies through a channel, change queue behaviour, approve tools or schedule work. OpenClaw slash commands covers the command surface, and OpenClaw usage tracking the token counts a budget reads.
On Diali
On Diali a goal follows the session like everywhere else: set it with the slash command in any channel that takes text commands, and it survives our releases because the session state lives on the assistant’s volume. Hosted OpenClaw on Diali is the assistant.
- One objective per session, moving with the session key.
- The model may complete or block, never pause, resume or clear.
- Budgets are a guardrail, not a bill.
Stop reading about it, build one
Set up an agent, pick a channel, and have it working inside the app you already keep open.
