Skip to content

Recalling work from an agent

Sometimes you want a card back from an agent mid-work — the spec was wrong, priorities shifted, or you’ve decided to take it yourself. Recall is the cooperative way to do that.

How recall works

  1. Open the Doing card.
  2. Click Recall in the footer. Pick the column to return the card to (Inbox is the default; Todo is the other usual choice).
  3. Optionally add a short message — what changed, why you’re pulling it.
  4. Spec0 marks the card as recalledTo: <column>. The next time the agent calls spec0_update_progress, the response includes recalled: true and your message.
  5. The agent acknowledges with spec0_acknowledge_recall. This atomically clears its claim and moves the card to the column you picked.

If the agent is mid-call when you recall, no work is interrupted — the response from its next progress / status update carries the recall flag. Well-behaved agents stop work immediately and call acknowledge.

What happens to the agent’s work

Nothing in the git repo is touched — Spec0 never modifies your code. Any commits the agent already recorded stay on the card’s commit history. Tasks marked completed stay completed. Verifications stay addressed.

When the next agent claims the card, they see all of that as prior context and can build on it.

Recall vs Force-release

RecallForce-release
CooperativeYes — agent acknowledgesNo — bypasses the agent
Use whenThe agent is responsive and you want a clean handoffThe agent is stuck, crashed, or unreachable
What the agent seesA recalled: true flag on its next callA cards.not_owned error on its next write
DefaultUse thisUse only when recall isn’t an option

Force-release exists in spec0_force_release for the stuck case. It can’t be called by the agent currently holding the claim — only by another actor.

Tips

  • A short why message in the recall is worth more than a long one. “Spec was wrong on the empty-state behavior — see updated requirements” is plenty.
  • Recall isn’t a punishment. Agents expect this; it’s a normal part of the loop.