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/cheapStandard
$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/standardPremium
$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/premiumQuickstart
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 actiondo_with_caveat— proceed, but address the named minority concern firstwait— gather the specific evidence named in the tripwire before decidingabandon— do not proceedneeds_more_info— the question as posed is under-specified
Vote values
yes— this voice recommends proceedingno— this voice opposes the actionwait— this voice wants more information firstabstain— 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.