agent_stopped
Step 7: the key is valid, and someone used Stop on its agent (STOP.md).
HTTP 403 · permission_error · not retryable
What happened
Section titled “What happened”Step 7: the key is valid, and someone used Stop on its agent
(STOP.md). It takes precedence over agent_suspended. GET /v1/whoami still
answers and shows "status": "stopped". The message never includes the stop reason or who
stopped the agent: the caller is the agent, and the reason may be sensitive.
On POST /v1/actions the attempt is still recorded: the action goes
evaluated → denied → sealed with the stop decision (decision.source: stop), and the envelope
carries the sealed action in error.action. The Ledger shows what a stopped agent tried to do. An
action that waits for approval is checked again when someone approves it: if the agent or org is
stopped by then, it ends denied the same way and never runs.
What to do
Section titled “What to do”Find out why it was stopped: the reason is in the agent.stopped deed and in
Console › Agents. An admin can start it again, with a reason, in Console › Agents or with
deedglass agent start <name> --reason "…".
Example
Section titled “Example”{ "error": { "type": "permission_error", "code": "agent_stopped", "message": "Agent \"support-bot\" is stopped. Deedglass refuses its calls until an admin starts it in Console › Agents.", "param": null, "request_id": "req_01j9zr3m5k8q2w7x4t6v0b1c9d", "doc_url": "https://docs.deedglass.com/errors/agent_stopped" }}The message is for a person and can get more exact over time: branch on type and code, never on the message.
In the SDKs
Section titled “In the SDKs”| SDK | Raised as |
|---|---|
TypeScript (@deedglass/sdk) |
PermissionDeniedError with code === "agent_stopped" |
Python (deedglass) |
deedglass.PermissionDeniedError with .code == "agent_stopped" |