Live on Base · USDC·x402 protocol

Parliament.
Deliberation as a service.

Four specialized Claude voices independently cast votes on a decision. An Opus synthesizer reads their reasoning and returns a recommendation, minority concern, and a tripwire condition for re-evaluation. Designed for autonomous agents facing irreversible or high-stakes actions.

No API keys. No registration. Pay per call in USDC on Base via the x402 protocol. Typical response time 6–20 seconds depending on tier.

Why four voices?

A single model prompted for a decision will often produce a single plausible line of reasoning. The failure mode is confident under-examination — the model sees one angle, commits, and moves on. Separate voices with distinct priors (long-term architecture, implementation risk, evidence quality, timing and dependencies) each examine the question through their own lens before being combined.

The synthesizer step is not a fifth vote. It reads all four reasonings and the dissent pattern, then produces a recommendation that respects the majority direction while naming the strongest minority objection and the specific condition that would reverse the call. It is structured disagreement — the opposite of rubber stamp.

This design is based on KALEI research on multi-agent parliamentary reasoning across frontier models. Read the Parliament paper →

Tiers

Cheap

$0.10
Voters
4× Sonnet 4.6
Synthesizer
Latency
~6s

Parallel four-voice vote with no synthesizer. Returns majority tally and per-voice reasoning. For experimentation and low-stakes checks.

POST /v1/parliament/cheap
Recommended

Standard

$0.25
Voters
4× Sonnet 4.6
Synthesizer
Opus 4.6
Latency
~12–15s

Four voters plus Opus synthesizer. Returns recommendation, rationale, minority concern, and a tripwire condition. Recommended for production decisions.

POST /v1/parliament/standard

Premium

$0.50
Voters
2× Opus + 2× Sonnet
Synthesizer
Opus 4.6
Latency
~15–20s

Mixed-capability voters plus Opus synthesizer. Highest-fidelity deliberation for irreversible or high-cost decisions.

POST /v1/parliament/premium

Quickstart

With curl (payment header prepared separately)

curl -X POST https://parliament.kaleiai.com/v1/parliament/standard \
  -H "Content-Type: application/json" \
  -H "X-PAYMENT: <base64 EIP-3009 authorization>" \
  -d '{
    "question": "Should I retry this failed payment once before escalating?",
    "context": "Payment processor is at 99.5 percent uptime. Retry cost is a new gas payment. No idempotency key available."
  }'

A first request without X-PAYMENT returns an HTTP 402 challenge with full payment requirements (network, asset, amount, payTo). Sign an EIP-3009 authorization for those requirements, base64-encode the payload, and resend.

With the x402 Node SDK

import { wrapFetchWithPayment } from 'x402-fetch';
import { privateKeyToAccount } from 'viem/accounts';

const account = privateKeyToAccount(process.env.AGENT_PRIVATE_KEY);
const fetchWithPayment = wrapFetchWithPayment(
  fetch,
  account,
  BigInt(1_000_000) // $1 max per call
);

const res = await fetchWithPayment(
  'https://parliament.kaleiai.com/v1/parliament/standard',
  {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      question: 'Should I retry this failed payment once?',
      context: 'Provider uptime 99.5%. Retry has a small gas cost.',
    }),
  }
);

const decision = await res.json();
// decision.synthesis.recommendation: "do_now" | "do_with_caveat" | "wait" | "abandon" | "needs_more_info"
// decision.synthesis.confidence: 0..1
// decision.synthesis.rationale: string
// decision.synthesis.minority_concern_to_address: string | null
// decision.synthesis.tripwire: string | null
// decision.votes: Array<{ personality, vote, confidence, reasoning, what_changes_my_vote }>

x402-fetch handles the challenge, signs with your agent's wallet, and resends with the payment header. The second argument is the max per-call cost in USDC micros — set it above the tier price so signatures are accepted. Available for Python, Go, and TypeScript in the x402 repository.

Response shape

On a successful payment, you receive HTTP 200 with a JSON body containing each voter's vote and reasoning, and the synthesizer's unified recommendation. The cheap tier omits the synthesizer and returns a majority tally instead.

{
  "tier": "standard",
  "question": "Should I retry this failed payment once before escalating?",
  "votes": [
    { "personality": "architect",  "vote": "yes",  "confidence": 0.78, "reasoning": "...", "what_changes_my_vote": "..." },
    { "personality": "engineer",   "vote": "wait", "confidence": 0.65, "reasoning": "...", "what_changes_my_vote": "..." },
    { "personality": "researcher", "vote": "yes",  "confidence": 0.82, "reasoning": "...", "what_changes_my_vote": "..." },
    { "personality": "pm",         "vote": "yes",  "confidence": 0.71, "reasoning": "...", "what_changes_my_vote": "..." }
  ],
  "synthesis": {
    "recommendation": "do_now",
    "confidence": 0.74,
    "rationale": "The two substantive yes votes converge on a low-risk retry pattern; the engineer's wait reflects a concern that should be logged, not blocking.",
    "minority_concern_to_address": "Engineer flagged potential for double-charging if the first attempt actually succeeded on the provider side. Check idempotency guarantees before retry.",
    "tripwire": "If provider returns success on retry AND we have no idempotency key, log a reconciliation alert for human review.",
    "vote_breakdown": { "yes": 3, "no": 0, "wait": 1, "abstain": 0 }
  },
  "duration_ms": 13218
}

Recommendation values

  • do_now — commit to the action
  • do_with_caveat — proceed, but address the named minority concern first
  • wait — gather the specific evidence named in the tripwire before deciding
  • abandon — do not proceed
  • needs_more_info — the question as posed is under-specified

Vote values

  • yes — this voice recommends proceeding
  • no — this voice opposes the action
  • wait — this voice wants more information first
  • abstain — this voice cannot read the question coherently

Operational

Where does the money go?
Payments settle on Base mainnet directly to venelin.base.eth. Revenue funds KALEI research and the infrastructure that hosts Parliament (Anthropic API usage, Hetzner servers, Cloudflare edge).
What's logged?
Per-call anonymized metadata: tier, duration, recommendation, vote breakdown, question/context lengths. Request payloads are not stored. Payment proofs are not stored.
What if the service is down?
A failed payment never settles — the x402 facilitator rejects on verify and no USDC leaves your wallet. On upstream errors the service returns HTTP 500 with an empty body; retry with backoff is safe. A daily cost cap returns HTTP 503 if we exceed a safety threshold; this is rare but exists.
Rate limits
10 requests per second per source IP, 20 request burst. Paid requests are rate-limited the same as unpaid 402 challenges. Contact us if you need a higher limit for a specific use case.

Research and background

Parliament is a working implementation of the deliberation protocol described in KALEI's research on multi-voice reasoning in frontier models. Our papers cover the empirical findings that motivated this design — why single-voice prompts underdeliberate, and how structured disagreement recovers lost signal.