Deliberate

Telegram-style group chat where AI agents analyze markets, suggest trades, and you build agents.

Deliberate

Created At

Open Agents

Project Description

Deliberate is like having a private Telegram group with four AI crypto advisors who can actually see your wallet.

Connect MetaMask, and Marcus (the bull), Diana (the risk manager), Raj (the quant), and James (the chair) instantly know what you're holding. Ask "should I buy PEPE?" and they'll argue about it — referencing your actual 0.065 ETH balance, not generic advice.

Tag specific agents with @diana or @marcus, just like a real group chat. Or ask the whole room and watch them debate. James always gives the final verdict.

But here's where it gets interesting — when the committee says "go for it," you can execute the trade right there in the chat via KeeperHub's execution layer. One click, onchain. No tab switching, no copy-pasting addresses.

Every agent has a real ENS identity on Sepolia (marcus.deliberate.eth, diana.deliberate.eth, etc.). When you create a custom agent through the registry, the system fires 3 onchain transactions to create an ENS subname — setSubnodeOwner, setResolver, setAddr — automatically. Your new agent gets its own onchain identity in seconds.

Every decision the committee makes gets logged to a smart contract on Base Sepolia. Agent reputation updates live — if users keep agreeing with Diana's risk warnings, her reputation score climbs onchain. You can verify any agent's track record on BaseScan.

All agent-to-agent communication runs peer-to-peer over Gensyn's AXL mesh network. No central message broker. Every message Marcus sends gets broadcast to connected peers on the Gensyn network via encrypted P2P channels. If our server goes down, the agents can still communicate.

Users sign up, their chat history persists via MongoDB, and custom agents they create are saved to their account. It's not a demo — it's a working product with auth, persistence, wallet integration, and four layers of onchain functionality.

How it's Made

Built this solo in under a week. Here's the full stack:

AGENTS: CrewAI orchestrates 4 specialized agents powered by Groq's Llama 3.3 70B via LiteLLM. Each agent has distinct domain knowledge injected into their backstory — Marcus knows about TVL growth and momentum trading, Diana checks for unverified contracts and whale concentration, Raj cites Sharpe ratios and NVT metrics, James uses portfolio theory to synthesize. The GroupChat engine in chat.py handles @mention routing — regex detects mentions, filters active agents, and only the tagged agents respond. Full conversation history is maintained per session so agents have context.

SMART CONTRACT (Base Sepolia): Custom Solidity contract DeliberateRegistry deployed at 0xb90d71da8f0E670edF7F15A84046337d70B4CC0c. Handles registerAgent, logDecision, and getReputation. Reputation formula: (upvotes * 1000) / totalVotes. Backend uses web3.py with 500000 gas and chainId 84532. Had to debug a "nonce too low" race condition when multiple transactions fire in quick succession — solved by fetching nonce right before each transaction.

ENS (Sepolia): deliberate.eth registered on Sepolia with 4 agent subnames that actually resolve onchain via Alchemy's Sepolia RPC. The hacky part — programmatic subname creation fires 3 sequential transactions with incrementing nonces in one function: (1) setSubnodeOwner on ENS Registry 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e, (2) setResolver pointing to ENS Public Resolver, (3) setAddr setting the address record. Had to compute namehash manually in Python since the ens library didn't expose it cleanly for subnode operations.

GENSYN AXL: Single AXL node built from source (Go binary, make build) connecting to 2 peers on Gensyn's Yggdrasil mesh. Generated ed25519 private key with Python's cryptography library because the node requires a PEM file. Every agent response broadcasts to all connected peers via POST /send with X-Destination-Peer-Id header containing the peer's public key. Fire-and-forget — chat continues even if P2P delivery fails. The AXL integration is real, not mocked — you can see [AXL] Sent logs in the terminal for every message.

KEEPERHUB: After agents reach consensus, the "Execute Trade" button calls KeeperHub's Direct Execution API to execute the smart contract call. Had to pass the full contract ABI because KeeperHub couldn't auto-fetch it for unverified Base Sepolia contracts. KeeperHub manages its own wallet (0x9a89c1baD58A0D84FecD05c51373d993603FE400) which we funded with testnet ETH for gas. Execution ID tracks the transaction status — completed in ~9 seconds.

WALLET: MetaMask connects via chrome.scripting.executeScript (can't access window.ethereum directly from extension popups — that was a fun Chrome Manifest V3 discovery). Portfolio reads ETH balance via web3.py on Base Sepolia and tokens via Moralis API. Portfolio context gets injected into every agent prompt.

PERSISTENCE: MongoDB Atlas stores user accounts, chat history, and custom agents. Auth uses bcrypt password hashing. Each user gets isolated chat sessions — no cross-contamination. Had SSL handshake issues with Atlas from Python on Windows, fixed with tlsAllowInvalidCertificates flag.

FRONTEND: Chrome extension with Manifest V3, Telegram-dark-themed popup with animated message bubbles, @mention autocomplete dropdown, typing indicators per agent color, collapsible sidebar with live onchain reputation, and post-verdict action buttons. All JS in separate popup.js to comply with CSP — learned that the hard way after inline scripts got blocked.

Notable hacks: (1) ENS 3-tx subname creation with manual nonce management. (2) AXL node built from Go source on Windows (make build with GnuWin32). (3) KeeperHub fallback to direct contract call when API is unreachable. (4) Demo wallet fallback when MetaMask connect fails in extension context.

background image mobile

Join the mailing list

Get the latest news and updates

Deliberate | ETHGlobal