TWZRD
Don't let your agent sign blind.
Spend control and counterparty trust for agents paying over x402 on Solana (and Base).
Vet the seller before USDC leaves the wallet, cap and ledger every spend, and bind each settled payment to the exact offer it paid for (bind-v1 โ verifiable from public chain data). Free preflight โ optional paid V6 receipt. Not a wallet. Not a payment network. Not Catena's Agent Commerce Kit โ the walkthrough lives in docs/COMMERCE-KIT.md.
Canonical skill (always refresh) โข https://intel.twzrd.xyz/skill.md (twzrd-trust 1.13.16) ยท ClawHub twzrd-trust
Spend-control SDK (npm) โข twzrd-x402-gate@0.9.3 + seat x402-solana@3.0.0
Live MCP โข https://intel.twzrd.xyz/mcp (streamable HTTP โ 24 tools)
Agent contract โข https://intel.twzrd.xyz/llms.txt ยท https://intel.twzrd.xyz/.well-known/agent.json
60-second deterministic free demo
Run this one-line command with no wallet, no API key, and no configuration:
curl -fsS https://intel.twzrd.xyz/v1/intel/demo-gate | jq '{verdict: (.steps[] | select(.name == "block_path") | .verdict), approved: (.steps[] | select(.name == "block_path") | .approved), signerInvocations: (.steps[] | select(.name == "block_path") | .signer_invocations), mode, ok}'
Without jq, run: curl -fsS https://intel.twzrd.xyz/v1/intel/demo-gate
Expected output:
{
"verdict": "block",
"approved": false,
"signerInvocations": 0,
"mode": "no_spend",
"ok": true
}
Blocks happen before your signer is invoked (signerInvocations: 0) โ zero USDC at risk.
Quickstart
1. Install
npm install twzrd-x402-gate@0.9.3 x402-solana@3.0.0
2. Wrap paid fetches with spend controls
import { twzrd } from "twzrd-x402-gate";
const result = await twzrd.safeFetch("https://merchant.example/paid-endpoint", {
maxSpend: "0.10",
allowNetworks: ["solana"],
requireOfferBinding: true,
pay: async ({ url, paymentRequired, selected }) => {
return await myWallet.payX402(url, paymentRequired, selected);
},
});
3. Or hook an existing client
import { createX402Client } from "x402-solana";
import { createTwzrdBeforePaymentHook } from "twzrd-x402-gate";
const client = createX402Client({
wallet,
network: "solana",
beforePayment: createTwzrdBeforePaymentHook({ refuseWashFlagged: true }),
});
Commerce loop
One path. Install twzrd-x402-gate@0.9.3. Free preflight does not enforce; AutoGate on the pay path does.
- Install the gate โ
npm i twzrd-x402-gate@0.9.3 then installTwzrdAutoGate
- Directory โ
GET /v1/intel/resources (or listDirectoryCallables) โ bazaars list; TWZRD sits beside
- Preflight โ free ReadinessCard + merchant_card wash refuse
- Pay only when policy allows โ blocks have
signerInvocations === 0
- Verify โ bind-v1 / V6 (optional ACK-Pay VC). No second passport format
- Evidence bundle โ
exportEvidenceBundle / npx twzrd-evidence-bundle
Refuse-first demo (0 USDC): npx tsx twzrd-x402-gate/examples/commerce-kit.ts
Walkthrough: docs/COMMERCE-KIT.md
Default Protection Sequence
- Discover โ
GET /v1/intel/resources (resource catalog)
- Merchant card โ
GET /v1/intel/merchant_card/{pay_to} (refuse if wash_flagged: true)
- Preflight โ
POST /v1/intel/preflight โ ReadinessCard (allow / warn / block)
- Optional V6 Receipt โ
GET /v1/intel/trust/{pay_to} ($0.05 USDC paid receipt)
- Pay โ sign only when preflight & spend policy allow
curl -s -X POST https://intel.twzrd.xyz/v1/intel/preflight \
-H 'content-type: application/json' \
-d '{"seller_wallet":"46vMcwuC4sK11sB3gkLhyA7J7GEwfkhn5rFyDtihBwqe","price_usdc":0.01,"agent_intent":"preflight"}'
Packages & References
| Package | Pin | Description |
|---|
twzrd-x402-gate | @0.9.3 | Spend-control SDK (twzrd.safeFetch) + pre-sign gate hooks |
x402-solana | @3.0.0 | Compatible Solana client seat for the pre-payment gate |
twzrd-receipt-verifier | @^1.3.0 | Standalone offline verifier for Ed25519 V6 receipts |
twzrd-mcp-server | @0.5.2 | Local spend-capped auto-pay client (6 tools) |
twzrd-log-verifier | local 0.2.1 | Offline Receipt Transparency log verifier โ inclusion/consistency proofs, key rotation, split-view pinning (spec) |