Skip to content

Approvals

A tool call that needs approval pauses the turn until a person approves or denies it. The paused turn is stored, so it survives a restart. It never times out.

wardrik approval ls
wardrik approval approve triage call_1 --note "Label it for the next sprint."
wardrik approval deny triage call_1 --reason "Not on a Friday."
  • Approving runs the call with the model's arguments. The model receives the --note with the result.
  • Denying returns an error with your --reason to the model. The turn continues.
  • To change a call, deny it and say what to do instead.
  • For a call in a conversation, pass --conversation ID. approval ls shows the ID.
curl -X POST -H "authorization: Bearer $TOKEN" \
-d '{"note": "Only staging."}' \
http://127.0.0.1:4747/v1/agents/agt_1/interrupts/call_1/approve
Route Does
POST /v1/agents/{agent}/interrupts/{interrupt}/approve approves one call
POST /v1/agents/{agent}/interrupts/{interrupt}/deny denies one call, with an optional reason
POST /v1/agents/{agent}/decisions approves or denies several calls
GET /v1/interrupts lists every pending call

A conversation's calls are under /v1/agents/{agent}/conversations/{conversation}/....

  • In the daemon: a subject bound to a role that allows approve, deny or decide on the agent.
  • In a chat channel: the person who sent the message that started the turn.
  • The wardrik command, which runs as the admin.
  • Allowed calls in the same round have already run.
  • Each pending call is approved or denied separately. The model receives the round's results once all are resolved.
  • New messages are queued until the turn resumes.
  • wardrik agent cancel ends the turn and drops the queued messages.
  • A call that needs a connected account is pending the same way, with a sign-in link. See Connect accounts.