Skip to content

Task queue

The task queue is the other half of the ops spine from the inbox: where the inbox is where things arrive, /p/task-queue is where things get done, approvals to grant, questions agents are waiting on, follow-ups to check off, and a permanent record of everything that already happened.

The task queue special page

The task queue: an approval card under Needs confirmation, Up next items, and scheduled agent runs.

The page renders four sections, top to bottom:

Section Contents
Needs confirmation Cards that block on a decision: agent tool approvals, an agent’s human.ask question, proposed replies, merge proposals, and similar gated actions.
Up next Plain follow-up tasks, queue-routed triage items and heartbeat suggestions, with a checkbox to complete.
Scheduled Past scheduler runs and upcoming occurrences, read-only.
Done Every resolved card and completed task, permanently.

A list / board view toggle sits next to the page title. The board lays the same four sections out as columns; only the Done column accepts drops, dragging a card there resolves it (a needs-confirmation card as confirm, an up-next task as done), through the exact same audited path a click would use. Scheduled and Done cards are informational in both views.

Each card in Needs confirmation shows a title and an expand control that reveals its detail (the specific fields depend on the card’s kind, an approval shows the tool call it gates, a proposed reply shows the drafted text, and so on). Every card resolves through one of two buttons:

  • Confirm executes whatever the card was gating (sends the mail, applies the merge, approves the tool call) and moves the card to Done in the same commit as the effect, a failed effect leaves the card pending rather than silently dropping it.
  • Dismiss records the decision without executing anything and moves the card to Done.

This is also where agent tool approvals surface: when an agent’s next action is gated by its approval policy, the run pauses and a card appears here. Confirming or dismissing it flips the paused run back to running (or denies the call) in the same transaction as the decision, see Tools & approvals for how the gate itself is decided.

Agents can also ask you something directly with the human.ask tool:

human.ask({
question: "Ship the v2 pricing page today, or hold for legal review?",
options: ["Ship today", "Hold for review"],
timeout: "2 days",
default: "Hold for review",
})

human.ask is ungated (asking writes nothing to the world, so it never needs its own approval), and files a needs-confirm card of kind human-question in the same scoped task queue the run belongs to. options, if given, render as one button per choice; free text goes through the run’s own thread instead, since the answer nests as a question node under the tool call in that run’s tree (see Run introspection). The agent’s workflow suspends durably on that answer, if you pass timeout, an unanswered question resolves automatically to default (or a generated fallback string) once the timeout elapses, so a workflow can never hang forever on a question nobody answers. An answer is data, never permission, it cannot itself approve a separately gated tool call.

Up next is a plain checklist: click the checkbox to mark a task done. Scheduled shows both rows already produced by a scheduler fire and, below them, upcoming occurrences computed live from each schedule’s cron expression, so you can see what is about to run without opening /settings/schedules.

Nothing ever leaves Done. Every resolution, confirm, dismiss, or checkbox, lands there with its decision recorded in the card’s payload, and it survives reloads indefinitely. Done also doubles as a query API for agents: any agent tool can read the done log (filtered by page and by time) to check what already happened before deciding what to do next, the same log you can scroll in the UI.

The title bar carries a scope selector, global by default, or narrowed to a single page. A page-scoped queue only shows cards and tasks whose page_id matches, useful for a project page that accumulates its own approvals and follow-ups separate from the rest of the workspace.