LIVE ON BASE SEPOLIA v0.1 · OPEN SOURCE

The control plane for
AI agent payments.

Set the rules. Watch every payment. Score every counterparty. Rein governs your agent's authority to spend — it never holds the funds.

$ npm install @reinconsole/sdk

MIT-licensed · 8 packages on npm · x402 + ERC-8004 stack

Live feed STREAMING
  • 14:02:11 ALLOW $0.05 api.research.example within budget
  • 14:02:12 SETTLED $0.05 api.research.example base-sepolia
  • 14:02:19 DENY $180.00 premium-intel.example over per-tx cap
audit chain intact · every decision hash-linked
THE FAILURE MODES

An agent with a wallet is an unattended
terminal with a credit card.

PROMPT-INJECTION DRAIN03:12

A poisoned page tells your agent to pay $180 for “priority access.” It complies. Nobody notices until the wallet is empty.

RUNAWAY LOOP04:00

A retry loop hits a paid endpoint 400 times before sunrise. Every call cost $0.25. Every call was authorized — by nobody.

SHADY COUNTERPARTY

The cheapest vendor in the marketplace has a 12% dispute rate and three burned wallets behind it. Your agent only sees the price.

Rein exists because “the agent will behave” is not a security model.

THE CONTROL PLANE

Three planes. One loop.

Guard the demand side, gate the supply side, and let one reputation graph feed evidence back into enforcement on both.

01

GUARD

demand side

Wrap your agent's fetch once. Every x402 paywall becomes a policy decision before a cent moves.

import { createGuard } from '@reinconsole/sdk';

const guard = createGuard({ engineUrl, agentId });
const fetch = guard.wrap();

// vendor answers 402 → intent → policy check →
// signed decision. Deny blocks before payment exists.
const res = await fetch('https://api.vendor.example');
  • budgets & tx caps
  • allow / deny lists
  • kill switch
  • signed receipts
@reinconsole/sdk →
02

GATE

supply side

Price your routes once. Every payment into your API is screened, settled, and receipted before your handler runs.

import { createGate, gateMiddleware } from '@reinconsole/gate';

const gate = createGate({
  routes: [{ path: '/api/answer', price: '0.05' }],
  rails, payTo: '0xYourTreasury…',
  screen: { check: payerCheck(graph, { denyBelow: 40 }) },
});

app.use(gateMiddleware(gate));
  • quote consistency
  • replay protection
  • velocity caps
  • payer screening
@reinconsole/gate →
03

GRAPH

reputation

Evidence in, scores out. Both sides of the wire feed one graph — and the graph feeds back into enforcement.

import { ReputationGraph, payerCheck } from '@reinconsole/graph';

const graph = new ReputationGraph()
  .observe(engine).observe(indexer).observe(gate);

// pushed scores make vendorReputationLt policies fire
await graph.syncVendors(engine.spend);
  • never stored, always explainable
  • unknown ≠ bad
  • survives key rotation
@reinconsole/graph →
RECEIPTS

“Live on testnet” — with links,
not adjectives.

NON-CUSTODIAL BY ARCHITECTURE

Authority moves through Rein.
Money doesn't.

YOUR AGENT holds no keys
intent
POLICY ENGINE rules → signed decision voucher
voucher
SESSION SIGNER verifies offline · caps · expiry · kill switch
x402 payment
VENDOR'S GATE screens · settles · receipts
Funds never pass through Rein Every decision is hash-chained & auditable The kill switch revokes authority instantly

Put reins on it.

$ npm install @reinconsole/sdk

v0.1 — early open-source infrastructure, live on testnet. APIs may change before 1.0.
No waitlist. No email capture. The code is public.