Concept · access
Use when
A command returned
pending or exit code 4, or you plan a change that deletes, publishes or spends credits.Looking for something else?
A change that was refused for a missing permission (card Credential). A request whose reply was lost (problem The reply to a change was lost).
For
A project keeps an approval policy. The policy names the effects that need a person’s approval before an agent can do them. The default effects are destructive, publication and paid. You may ask for one of these with an API key or as a connected agent. Penumbra then holds your request and gives you a handle and an approval URL. An owner or admin then approves or denies it. A Kit set to confirm asks for every save, whatever the policy says.Use when
- A command exited with code 4 and printed
outcome: pending. - An MCP result says
pending_approval. - You will delete, publish or run a paid extraction with an API key or as a connected agent.
Not this
- A permission or role is missing: the result is a refusal, not
pending. Ask an owner for the role (card Credential). - You sent a change and got no reply: use problem reply-lost.
Rules
approval.1The policy holds an effect only for an API key or a connected agent. A person’s own signed-in session never waits. Enforced: for a key or a connected agent, a held effect returnspending. The default effects are destructive, publication and paid. An owner or admin can change them withpenumbra approvals policy set.approval.2These changes wait under the default policy. Destructive:penumbra files trash,penumbra files collections delete, andpenumbra graph delete. Publication:penumbra graph workspace submit. Paid:penumbra graph extract,penumbra extractions try-againandpenumbra shapes newwith--brief. A workspace submit that deletes entities is destructive as well. The server reads the workspace itself, so you cannot hide a delete. Shape draft work (penumbra shapes push,penumbra shapes publishandpenumbra shapes drop) is the effectshape_change, and the default policy does not hold it. An owner or admin can addshape_changeto the policy withpenumbra approvals policy set. Your job: expect the wait.penumbra status --explain "<command>"reports a wait for destructive and paid commands only. It does not report one for a submit or a publish.approval.3pendingmeans nothing has changed yet. It is not a failure. Enforced: the CLI exits with code 4 and prints the approval URL, a handle, the request id and the next command. An MCP call returnspending_approvalwithoperation_handle,approval_urlandexpires_at.approval.4Follow the handle and do not send the change again. Enforced when you ask: the same request id and the same body return the same handle. A different body under that request id is refused withidempotency_conflict. Your job: runpenumbra operations wait <handle>. A new request id is a new request.approval.5Only a signed-in owner or admin decides, also for requests from their own agents. Enforced: any other caller is refused withproject_admin_required. An owner or admin decides withpenumbra approvals approveorpenumbra approvals deny. You cannot approve your own request.approval.6An approval covers the exact thing you asked for. Enforced: if the policy changed, or the target changed, before the approved request runs, Penumbra refuses it. The reasons arepolicy_changedandtarget_changed. A new File version, a change to a collection’s members, or a new workspace revision changes the target.approval.7An approval request expires after 24 hours. Your job: if it expired, ask the person again before you send the change again.approval.8An approved change runs once. Enforced: a run that ends with a server error, a timeout or a lost reply has the resultunknown. Penumbra does not run it again. Your job: read the state before you try again (problem reply-lost).approval.9Following or stopping an extraction never waits. A stop keeps what the run found. Enforced:penumbra graph extractionsandpenumbra graph extractions stopdo not returnpending.
Failure signs
- A change returned
pendingand you ran it again with a new request id: you now have two requests waiting (rule approval.4). - An approved change was refused with
target_changed: someone changed the workspace, File or collection after you asked (rule approval.6). - A command exited with code 4 and printed
outcome: unknown: problem reply-lost.
Doors
No MCP tool approves or denies a request.
HTTP reference
- Get caller
- List accessible projects
- List projects
- Get project connections
- Get caller access
- List approvals
- Get approval