Quickstart
First human-approved action in under 10 minutes
Wrap a risky function, write one policy, decide from Slack. Every decision lands in a tamper-evident, externally-verifiable audit chain.
1 · Install + API key
Create an account, add an agent in the dashboard, and copy its key into PLIUZ_API_KEY.
pip install pliuz # Python >= 3.10
npm install @pliuz/sdk # Node >= 18.17https://pliuz.com. Set PLIUZ_BASE_URL for staging/self-host.2 · Gate a function
One decorator (Python) or wrapper (TypeScript) is the whole integration surface.
from pliuz import gated
@gated(redact=["customer.iban"], timeout_s=300)
def issue_refund(customer: dict, amount_cents: int) -> dict:
return stripe.refunds.create(...)
# Blocks until a human approves in Slack or the web inbox.
result = issue_refund({"id": "cus_1", "iban": "DE89..."}, 5000)import { gated } from '@pliuz/sdk'
const issueRefund = gated(
{
redact: ['customer.iban'],
toolArgs: (c: Customer, cents: number) => ({ customer: c, amount_cents: cents }),
applyFinalArgs: (fa, [c]) => [c, fa.amount_cents as number] as const,
},
async (c: Customer, cents: number) => stripe.refunds.create(/* ... */),
)3 · Write a policy
Declarative JSONLogic, evaluated server-side, no LLM. If no policy matches, the request is rejected with 422 (fail-closed). Add a catch-all {"==":[1,1]} for a default human route.
{
"name": "refunds-need-human",
"conditions": { "==": [{ "var": "tool" }, "issue_refund"] },
"approver_group": "finance",
"sla_seconds": 300
}What to read next
Agents, tools, policies, approvals, the hash chain — the mental model in 5 minutes.
Signed JSONL export, the open-source verifier, EU AI Act Article 12 evidence.
Edit-and-approve, standing approvals with scope/TTL, delegation, long-poll.
JSONLogic operators, auto-approve/reject, versioning, shadow mode.