pliuz

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.

shell
pip install pliuz          # Python >= 3.10
npm install @pliuz/sdk     # Node >= 18.17
The SDK base URL defaults to https://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.

Python
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)
TypeScript
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.

policy JSON
{
  "name": "refunds-need-human",
  "conditions": { "==": [{ "var": "tool" }, "issue_refund"] },
  "approver_group": "finance",
  "sla_seconds": 300
}

What to read next