Skip to content

Long-running goals

A Goal lets Kodik keep working toward one durable objective after an individual response settles. The Goal belongs to its chat session and can schedule private continuation turns until the work completes, needs you, or reaches a limit.

Send /goal <objective>:

/goal Migrate the package parser and prove compatibility

Kodik starts immediately. The submitted objective remains in chat as a normal user-style message with a Goal badge. The private Goal prompt, continuation turns, built-in Goal tools, and lifecycle notices do not add extra chat rows.

Every non-empty value after /goal is treated as the objective itself and starts a Goal.

For larger work, send bare /goal to open the authoring panel without starting a Goal. Enter one prose objective, optionally set a token budget, then select Start. Authoring does not call the model or enter the chat transcript; the Goal attaches to the current session only when you start it.

If an unfinished Goal already exists, Kodik opens a replacement confirmation instead of discarding it silently.

The Goal panel stays above the Todo and File Changes panels whenever a Goal exists. It shows:

  • the current status and objective;
  • elapsed active duration, updated every second while Kodik pursues the Goal and frozen when it stops;
  • the full blocker reason when one exists;
  • controls to pause, resume, edit, or clear the Goal.

The panel intentionally does not show a token counter. Kodik still tracks tokens internally when an optional token budget is configured.

While a Goal is active, its Target icon remains visible in the Goal panel, on the Goal’s session card in the sessions sidebar, and on its navbar tab.

An active Goal can continue in its owning session even when that chat is not selected. Before Kodik starts another Goal turn, higher-priority work wins: a user message, queued work, an approval, a question, or recovery from a failed turn.

Goal state and accounting survive conversation compaction and a workbench restart. An active restored Goal can continue automatically once its session is ready.

Goal continuations are Goal-owned in every chat mode. An ordinary user-authored Plan turn is not charged to the Goal.

Use the controls in the Goal panel:

  • Pause stops automatic continuation without removing the Goal.
  • Resume makes a resumable Goal active again.
  • Edit changes the prose objective or optional token budget.
  • Clear removes the Goal from the session.

Using Stop while a Goal turn is running cancels that turn and pauses the Goal.

A Goal can be active, paused, blocked, usage-limited, budget-limited, or complete. /goal is the only creation boundary. While the Goal is active, the model receives two internal tools: get_goal and update_goal. Ordinary, paused, blocked, limited, and completed chats do not spend context on their schemas. Goals are one objective plus status, not an itemized checklist. These tools are Goal runtime controls, so they do not appear in Harness settings or as tool cards in chat.

An optional token budget is a soft safety boundary. Kodik charges fresh input and output, including cache-write input, while excluding cache reads. When the boundary is crossed during a tool turn, Kodik gives the model one opportunity to wrap up before settling the Goal as budget-limited.

A Goal becomes blocked only after the same blocker is reported across repeated consecutive Goal turns. Provider or account rate limits use the separate usage-limited status.