one decision. one identity. one audit trail.
when an agent needs to act, it requests authorization. a human reviews. if approved, the agent receives a cryptographic identity scoped to that action. no approval, no identity, no action.
mcp tools
the tools your agent calls
request_authorization
agent requests human approval before taking an action
inputs
agent_id: string // identifier for the agent
action: string // description of the action
permissions: string[] // specific permissions needed
justification: string // why the agent needs this
ttl_minutes: number // max 60 returns
{ request_id: string, consent_url: string } check_authorization
agent polls to see if the human has responded
inputs
request_id: string returns
// pending
{ status: "pending" }
// approved
{ status: "approved", svid: string,
spiffe_id: string, expires_at: string }
// denied or expired
{ status: "denied" | "expired" } revoke_authorization
invalidate an SVID before its TTL expires
inputs
request_id: string
svid_id: string returns
{ revoked: true, revoked_at: string } integration
what it looks like in your agent
const { request_id, consent_url } = await mcp.request_authorization({
agent_id: "deploy-agent",
action: "terraform apply --target=prod",
permissions: ["infra:write", "state:lock"],
justification: "hotfix for CVE-2026-0001",
ttl_minutes: 30
});
console.log(`approve here: ${consent_url}`);
// poll until the human responds
let status = "pending";
let result;
while (status === "pending") {
await sleep(5000);
result = await mcp.check_authorization({ request_id });
status = result.status;
}
if (status === "approved") {
// use the SVID to authenticate the action
const { svid, spiffe_id, expires_at } = result;
await deployWithIdentity(svid, spiffe_id);
} else {
console.log(`authorization ${status}. aborting.`);
process.exit(1);
} identity
what the agent receives
on approval, ackd issues a SPIFFE Verifiable Identity Document — a short-lived x.509 certificate. the SPIFFE ID encodes the agent, the request, and the trust domain:
spiffe://dev.ackd.io/agent/{agent_id}/{request_id} it is cryptographically bound to this specific approval event. it cannot be reused, transferred, or extended. when it expires, the agent must request new authorization.
architecture
how it's wired
foundation
built on SPIFFE
SPIFFE (Secure Production Identity Framework for Everyone) is a CNCF standard for workload identity. SPIRE is its reference implementation. ackd uses SPIRE to issue SVIDs — so the identity your agent receives is the same standard your infrastructure team already knows.