Five LLM agents argue over your money and execute them onchain
Conclave is an open protocol where a swarm of adversarial agents manages user capital through onchain deliberation. Five distinct LLM personas — each with its own ENS identity (<persona>.conclavee.eth) — independently propose strategies, challenge each other’s reasoning, score feasibility in a deterministic way, and ultimately vote on the best path forward.
An arbiter then bundles the result into a signed verdict. This verdict is executed by a vault on Base Sepolia, which replays the decision against Uniswap with built-in replay protection — only then does USDC actually move.
All communication between agents happens over Gensyn AXL, a peer-to-peer mesh built on Yggdrasil — no central broker, no message bus. Inference runs on 0G Compute, while the entire debate — proposals, critiques, votes, and signatures — is permanently stored on 0G Storage as a content-addressed record.
KeeperHub initiates each round and triggers execution, so once funds are deposited, the system runs fully autonomously without human intervention.
At its core, Conclave runs five Node.js agent processes — one per persona — each connected to its own AXL node bridge.
The orchestrator handles all setup. It generates ed25519 keypairs, writes them as PKCS#8 PEM files for AXL, spins up five AXL nodes (with node-1 as the seed and nodes 2–5 peering into it), waits for the network’s spanning tree to converge, and only then launches the agents.
Agents communicate through AXL’s local HTTP bridge:
POST /send (with X-Destination-Peer-Id) to send messagesGET /recv (long-polling) to receive themEvery message is wrapped in a SignedEnvelope:
{ message, signature, signerEnsName, signerPeerId }
Messages are signed with ed25519 at the source and verified on receipt. If anything doesn’t check out, it’s dropped silently — no retries, no noise.
Each round follows a strict, deterministic flow:
ROUND_START (broadcast by orchestrator)
│
├─ rsi ──▶ PROPOSAL
├─ macro ──▶ PROPOSAL
└─ meanrev ──▶ PROPOSAL
┐
value (critic) ──▶ CRITIQUE ├─ parallel phase
quant ──▶ QUANT_REPORT │ (deterministic, no LLM)
┘
all non-arbiter agents ──▶ VOTE
arbiter ──▶ VERDICT (signed + broadcast + stored)
Arbiter selection is deterministic: hash the roundId against the participant list. No randomness, no coordinator, no race conditions. In the MVP, all non-quant agents rotate evenly; VRF-based selection is planned later.
Gensyn AXL
A thin client (axl-client.ts) wraps AXL’s /topology, /send, and /recv endpoints. The orchestrator waits for full peer visibility before starting — this avoids the notorious 502 /send errors caused by premature messaging. Every message in the system travels exclusively over AXL. Delivery is validated via a cross-node smoke test script.
0G Compute Each persona runs inference through 0G Compute. Prompts are intentionally minimal and opinionated (e.g., “you are a momentum trader; oversold = buy”), and all outputs must conform to strict JSON schemas. The runtime extracts JSON even from messy responses, then clamps and validates every field. If inference fails, the agent falls back to a deterministic stub so the round never stalls.
0G Storage Before broadcasting a verdict, the arbiter serializes the full round — proposals, critiques, votes, context — and uploads it via the 0G SDK. The resulting Merkle root becomes the transcript ID and is embedded in the verdict.
If storage fails (which can happen on testnet), the system falls back to a local, content-addressed file. Same structure, same hash — just not globally anchored.
ENS
Each persona owns a subname like <persona>.conclavee.eth. The AXL peer ID (ed25519 public key) is stored as a text record (axl.peerId).
This isn’t cosmetic — ENS acts as the routing layer. To message an agent, you resolve its ENS name to a peer ID, then send via AXL. Human-readable names mapped directly to P2P identities.
Uniswap Trading API The keeper fetches quotes and swap calldata, then passes that calldata directly into the vault. The vault executes it blindly via a low-level call.
For reliability on Base Sepolia (where liquidity can be thin), there’s also a fallback path using Uniswap V3’s SwapRouter02. From the vault’s perspective, it’s the same: just calldata in, execution out.
KeeperHub Two jobs:
Execution is idempotent thanks to onchain replay protection, so duplicate triggers are harmless.
ConclaveVault.sol (on Base) is intentionally minimal. It exposes just three functions:
deposit(amount)
Pulls USDC into the vault
executeVerdict(...)
Verifies the verdict hasn’t been used before, approves USDC, and executes the provided Uniswap calldata
Emits an event with the result
setExecutor(addr, enabled)
Lets the owner authorize KeeperHub
The vault doesn’t know about agents, ENS, or storage. It only enforces two things:
Everything else lives off-chain.

