ALLOW
This exact action is authorized now.
Execute once and preserve the decision ID.
Add user-controlled spending permissions to apps and AI agents with a few lines of code.
ShieldKit 0.1.0 is public. npm artifacts are verified before every release.
import { ShieldClient } from "@decionis/shield";
const shield = new ShieldClient(); // sandbox by default
const decision = await shield.authorize({
amount: 89,
currency: "USD",
purpose: "Book hotel",
merchant: "Hilton"
});
if (decision.allowed) await execute();One abstraction
No policy graphs, signature plumbing, or enterprise organization model is required for first success.
This exact action is authorized now.
Execute once and preserve the decision ID.
The user must approve.
Hold. Execute only after a later ALLOW.
The action is not authorized.
Stop. Do not execute.
Handle ASK correctly
Shield orchestrates Presence when the user's rules require human approval. Your application waits for a final ALLOW bound to the same action.
switch (decision.verdict) {
case "ALLOW":
await execute();
break;
case "ASK": {
const final = await shield.requestApproval(decision.decisionId);
if (final.verdict === "ALLOW") await execute();
break;
}
case "BLOCK":
await cancel();
}Deterministic sandbox
npx @decionis/shield-demo --allEvery fixture is labelled sandbox evidence, replays deterministically, and cannot authorize real execution.
Choose your surface
@decionis/shieldNode.js, server agents, and browser-safe sandbox.
ShieldKitiOS and macOS with native async/await types.
POST /v1/shield/authorizeOne contract for any trusted backend.
shield.request_purchaseConsumer-friendly tools for agent runtimes.
Product hierarchy
Enforcement boundary
Shield deterministically controls Shield-integrated execution. Observed activity and sandbox simulations must be labelled as such. Shield does not universally intercept arbitrary card or bank transactions.
Start in sandbox, handle ASK correctly, inspect the dossier, then complete production identity and compatibility validation.