@glinr/theauth. Both aim to make an agent’s actions checkable before and after they run. The changes sit in pending changesets in the repository and are merged to main. This page does not name a release number. Check the GitHub releases for what has been published, and the changelog for breaking changes.
Every changeset in the pending set is minor or patch, and several change behavior, so read the “Behavior changes” list before you upgrade.
Accountability at runtime (first round)
- Three way decisions.
policy.evaluatereturnsallow,denyorescalate. Risk tiers map an amount, currency or data class to no approval, human approval or step up. See Agent accountability and Policy engine. - Delegation keeps its limits. A delegated permission carries its constraints, narrowed against the parent, and a child that does not overlap the parent now gets a deny instead of the parent’s wider value. See Delegation.
- Revoking an agent cuts its delegations.
agent.revoke()also revokes the chains where the agent is source or target, and everything downstream. See Cascading revocation. - Richer audit rows. Rows record the accountable human, the acting agent, the policy version, the approver and the delegation chain. Delegation and approval events join the hash chain. See Tamper evident audit trail.
- Fail closed fixes.
maxCallsPerHour: 0denies, malformed time windows and IP lists deny, a revoked or suspended agent is denied byevaluate, and an unknown agent id is denied.
Tools, approvals and proofs (second round)
- Single use approvals.
authorize()andpolicy.evaluate()accept anapprovalId. An approval is checked against the agent, action and resource, then spent once. See Approval flows. - Tool guard.
guardToolandguardToolsput the policy engine in front of any tool with anexecutefunction. Walkthroughs for the Vercel AI SDK and the OpenAI Agents SDK, with the shared pieces in Guard agent tools. LangChain appears as a hand wrapped example, not a supported integration. - Taint guard. Tool arguments can carry labels for where they came from, and policy decides which labels may reach which tools. The labels are written to the audit row. See Taint aware tool guard.
- Policy shrink.
analyzeUsage,suggestShrinkandverifyShrinkcompare what an agent may do with what it did, and report which recorded decisions would change. They never edit permissions. See Policy shrink. - Audit checkpoints and receipts. Signed checkpoints over the audit log, with inclusion and consistency proofs and receipts that verify offline with a public key. See Audit checkpoints and receipts.
- MCP live delegation check. With
delegationStoreset, a token’sactchain is re-checked against live links, andresolveActorAgentIdmaps actors to agent ids. See MCP OAuth 2.1. - Session and audit fixes. Session refresh and
maxConcurrentno longer race, a failing audit write no longer makesauthorize()throw, andcanonicalJsonrejects cycles.
Behavior changes to check
- ABAC
requireApprovalnow escalates instead of returning a plain deny.allowedis still false. policy.evaluatewrites an audit row on every call, and the row joins the hash chain.- A permission with
requireApproval: trueis denied until the call carries a validapprovalId. - Delegated constraints that do not overlap the parent now deny every call.
checkLiveDelegationtakes an options object as its fourth argument in place of thenowdate.- Rows written before the new audit columns verify as erased history, not as tampered.
Tutorials
- Stop prompt injection from making an agent send email
- Find and remove unused agent permissions
- Give a counterparty a receipt they can verify offline
Limits that still apply
input_provenanceholds the labels you supply. The SDK does not infer where an input came from.- The approver is stored on the approval’s audit row and on the decision that spends it, not on every decision row.
CheckpointStoreships with an in memory implementation. There is no database backed store.- The MCP adapters do not serve the
/mcp/revokeor/mcp/jwksroutes that the metadata advertises.