Project Info
Best Use of The Agentverse by Fetch AI
Quorum : drop-in validation layer for multi-agent AI Systems
Find our agent at: https://agentverse.ai/agents/details/agent1qtvr2pk4hp4gfh4wh2af33vpjv5zmawz9tj4q6ngt09tandh2jg8smkfak9/profile Chat with our agent at : https://asi1.ai/chat/1e44922f-85dc-42f3-bfdf-9465fd083c78 (this is a validation agent! ask to check any facts you wish)
Inspiration
There is a silent assumption baked into almost every multi-agent AI system built today: that the agents feeding each other information are telling the truth. They are not always. We started thinking about this after watching a demo where a research agent confidently passed a hallucinated statistic downstream - and by the time it reached the final output layer, three more agents had cited it, reasoned from it, and built recommendations on top of it. The hallucination didn't just survive; it compounded. One wrong claim upstream behaves like an avalanche: small at the origin, catastrophic at the base. This isn't a hypothetical edge case. It is the default failure mode of any pipeline where agents trust each other without verification. In financial analysis, healthcare triage, legal research, or automated decision-making - a single undetected error early in the chain can corrupt everything downstream with mathematical certainty. We built Quorum because multi-agent systems are only as trustworthy as their least reliable agent - and nobody was solving that. What It Does Quorum is a drop-in validation layer that intercepts any factual claim before it propagates through a multi-agent pipeline and returns a structured, machine-readable consensus verdict. Every claim runs through three independent validators in parallel: Source Validator : powered by Browserbase The Source Validator doesn't just query an API - it browses the web like a human researcher. Using Browserbase's cloud browser infrastructure, it navigates live pages, extracts real content, and cross-references the claim against DuckDuckGo search results and Wikipedia. This gives us ground-truth web evidence that static APIs simply can't provide. Each source is scored for topic relevance, and the validator gracefully degrades to a benefit-of-the-doubt score when no sources are retrievable - so the pipeline never hard-crashes on network failures. Consistency Validator : powered by Redis The Consistency Validator maintains a live memory of every claim accepted within a workflow session, persisted in Redis. When a new claim arrives, it compares it against all prior accepted claims and surfaces contradictions - even subtle ones across different time periods, metrics, or subsectors. Redis was critical here: it gave us sub-millisecond cross-claim lookups even as workflow histories grew, and let us support concurrent sessions without state bleed. Without a fast, durable store, this validator would be unusable at any real scale. Reasoning Validator : powered by Anthropic Claude The Reasoning Validator asks the hardest question: is this claim internally coherent? Claude evaluates the logical structure of the claim , flagging unsupported conclusions, circular reasoning, category errors, and open-ended questions masquerading as factual assertions. It doesn't just check if something is true; it checks if it's the kind of statement that can be evaluated as true or false in the first place. Consensus Engine The three validators vote independently. Each verdict is weighted by a reliability score and combined into a single consensus score between 0 and 1. Claims above the acceptance threshold pass. Claims below the rejection threshold are blocked. Claims in between are quarantined for human review - not silently dropped, not blindly passed. Fetch.ai Agentverse Integration Quorum was built from the ground up to live in the Fetch.ai ecosystem. The agent is deployed on Agentverse with a mailbox endpoint, fully discoverable, and ships with the Agent Chat Protocol, meaning it can be queried directly from ASI:One as a first-class citizen. Any user building a multi-agent workflow on Fetch.ai can drop our agent address in and get instant validation on every claim their pipeline produces. No integration code. No custom API. Just an agent talking to an agent. A real-time dashboard surfaces live pipeline activity: per-agent verdicts, validator breakdowns, trust scores, quarantine queue, and full provenance trails. How We Built It Backend: Python, FastAPI, uAgents (Fetch.ai), asyncio Validators: Browserbase (live web), Redis (session memory), Anthropic Claude (reasoning) Agentverse: uAgents mailbox deployment, Agent Chat Protocol v0.3.0, Agentverse API registration Frontend: Next.js 15 (App Router), Tailwind CSS, shadcn/ui, WebSocket streaming Infrastructure: Redis Cloud, git-based secrets management, environment-driven validator configuration The architecture is deliberately modular, validators are loaded at startup based on which API keys are available, so the system degrades gracefully in constrained environments rather than failing completely. The consensus engine is decoupled from the validator implementations, so new validators can be added without touching the core pipeline logic. Challenges We Ran Into Redis on a public network. Connecting to a managed Redis instance over a public endpoint introduced latency and occasional connection drops under the async load of parallel validators. We had to implement retry logic, connection pooling, and a FakeStore fallback so the pipeline could continue running even if Redis became temporarily unreachable - critical for a live demo environment. Fetch.ai protocol spec lock. The Agent Chat Protocol spec in the uAgents framework locks the set of allowed replies at registration time. When we tried to add a ChatAcknowledgement handler after the fact, the protocol verification failed because the original spec didn't include it. We had to understand the internals of how ProtocolSpecification works, pass replies=None to bypass the locked reply set, and register both message handlers correctly - a non-obvious fix that took significant debugging. ASI:One discoverability. Getting the agent to actually appear in ASI:One search required more than just deploying it - the agent needed a proper name, description within the 300-character limit, and an active mailbox endpoint registered through the Agentverse API. The registration flow involved a three-step identity challenge-proof-register sequence that had to be triggered correctly at startup. Validator output formatting. Python enum string representations (ValidatorName.REASONING) leaked into frontend output and pipeline rationale text. Fixing it required patching both the backend reply formatter and the frontend rendering layer, and catching a TypeScript s-flag regex incompatibility along the way. Accomplishments That We're Proud Of We built something that works - not just as a demo, but as a production-grade architecture that holds up under adversarial claims, network failures, and concurrent sessions. But the accomplishment we're most proud of isn't technical. Quorum is deployed. Right now. On Agentverse. Anyone building a multi-agent workflow on Fetch.ai can query our agent today. A real agent, at a real address, returning real verdicts. That felt significant to us: not just building something cool, but shipping something usable. We're also proud of the seamless ASI:One integration. The chat protocol means a non-developer can type a claim into the ASI:One interface and get back a structured, human-readable breakdown of what three independent AI systems thought about it. That's a genuinely new capability. And on a personal level: we're proud that we kept the codebase clean, the architecture honest, and the scope disciplined - even when the temptation to add more features was constant. What We Learned Technical: How Fetch.ai's uAgents framework handles protocol registration, identity challenges, and Agentverse mailbox routing - including the parts the documentation doesn't cover How to build a consensus engine that is robust to partial validator failure without sacrificing correctness How Browserbase's async browser sessions work at scale and how to extract structured signals from unstructured live web content How Redis enables stateful session memory in otherwise stateless async pipelines How to manage TypeScript/Next.js App Router constraints when building real-time WebSocket-driven dashboards Human: Building under a tight deadline exposed every assumption we had about how long things take. Features that look simple in a design doc have sharp edges. The things that break are never the things you tested. We learned to timebox ruthlessly, ship the imperfect version that works over the perfect version that doesn't exist yet, and resist the pull of scope creep when momentum feels good. We learned how to work in parallel without stepping on each other - splitting the pipeline backend from the frontend from the Agentverse integration, then stitching them together cleanly at the end. And we learned, the hard way, that sleep is a performance-enhancing tool, not a luxury. What's Next for Quorum The ideal future for this project isn't a standalone app - it's middleware. The most natural integration point is Fetch.ai's internal orchestration layer. When an AI system decides to spin up a multi-agent workflow - research agents, analysis agents, decision agents - Quorum sits in the middle, validating the signal as it flows between them. Not as an optional plugin. As a standard component. The way a load balancer sits between a client and a server not because anything is broken, but because you don't run production systems without one. We'd want to work with Fetch.ai to embed Quorum into the default scaffolding for multi-agent pipelines on ASI:One - so that any workflow built on the platform has trust and consensus built in from day one, not bolted on after the first incident. Beyond that: expanding the validator set (financial data APIs, scientific literature, live news feeds), adding configurable trust profiles per workflow domain, and building a provenance graph that lets operators trace exactly which upstream claim was the origin of a downstream error. The goal isn't to make AI agents perfect. It's to make their failures visible, bounded and recoverable.
Quorum
Chat with our agent at : https://asi1.ai/chat/1e44922f-85dc-42f3-bfdf-9465fd083c78
Live Agent at: https://agentverse.ai/agents/details/agent1qtvr2pk4hp4gfh4wh2af33vpjv5zmawz9tj4q6ngt09tandh2jg8smkfak9/profile
Trust and consensus layer for Fetch.ai multi-agent systems.
Prevents a single hallucinating agent from corrupting an entire multi-agent workflow.
The Problem
When one agent produces a bad output in a Fetch.ai workflow, the error propagates through every downstream agent:
Weather Agent → Wrong Claim → Planner → Budget Agent → Wrong Outcome
Quorum intercepts every claim before it becomes canonical workflow state and runs it through three independent validators before allowing it to proceed.
Architecture
Agent Claim
↓
┌─────────────────────────────────────────────┐
│ Quorum Pipeline │
│ │
│ ┌────────┐ ┌─────────────┐ ┌──────────┐ │
│ │ Source │ │ Consistency │ │ Reasoning│ │
│ │ Val. │ │ Val. │ │ Val. │ │
│ └────────┘ └─────────────┘ └──────────┘ │
│ ↓ ↓ ↓ │
│ └───────────┴──────────────┘ │
│ ↓ │
│ Consensus Engine │
│ reliability × confidence │
│ × evidence quality │
│ ↓ │
│ ACCEPTED │ NEEDS_REVIEW │ REJECTED │
│ ↓ │
│ State Store │ Quarantine │ Provenance │
└─────────────────────────────────────────────┘
↓ ↓ ↓
Workflow State Dashboard Trust Scores
Components
| Component | Description |
|---|---|
| Source Validator | Checks claims against OpenWeatherMap, PubMed, SEC EDGAR, Browserbase |
| Consistency Validator | Detects contradictions with prior accepted workflow claims via Anthropic |
| Reasoning Validator | Evaluates logical soundness of claims via Anthropic (with optional debate round) |
| Consensus Engine | Weighted scoring: reliability × confidence × evidence_quality |
| Quarantine | Holds NEEDS_REVIEW claims in quorum:pending_claims |
| Provenance Layer | Immutable audit trail: who said what, who validated it, why it was accepted |
| Trust Manager | Per-agent trust scores + per-validator reliability, updated after every consensus |
| FastAPI + WS | REST API + real-time WebSocket stream of consensus events |
| Next.js Dashboard | 4-page shadcn/ui dashboard: Live Consensus, Provenance, Trust, Quarantine |
| Fetch.ai uAgents | Quorum gatekeeper agent + weather demo workflow (Bureau) |
Sponsor Alignment
| Sponsor | Usage |
|---|---|
| Fetch.ai | uAgents protocols, Bureau multi-agent orchestration |
| Redis | Workflow state, provenance, trust, quarantine, consensus history |
| Anthropic | Consistency + reasoning validators (Claude) |
| Browserbase | Web verification fallback for open-ended claims |
Quick Start
Prerequisites
- Python 3.11+
- Node.js 18+
- Docker (for Redis)
Backend
# Clone and install
git clone https://github.com/your-org/quorum
cd quorum
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
# Configure
cp .env.example .env
# Fill in API keys in .env
# Start Redis
docker-compose up redis -d
# Run tests
pytest
# Start API server
uvicorn quorum.api.main:app --reload
Dashboard
cd dashboard
npm install
npm run dev
# Open http://localhost:3000
Full stack with Docker Compose
docker-compose up
# API: http://localhost:8000
# Dashboard: http://localhost:3000
Weather Demo (Fetch.ai Agents)
source .venv/bin/activate
python -m quorum.agents.demo_workflow
This runs the weather scenario:
WeatherAgentsubmits "0% chance of rain" (hallucinated)- Quorum validates → REJECTED (contradicts NOAA + reasoning failure)
FallbackAgentsubmits "75% rain based on NOAA"- Quorum validates → ACCEPTED
PlannerAgentandBudgetAgentreceive the correct forecast
API Reference
See docs/api.md for the full REST + WebSocket schema.
Key endpoints:
POST /claims/validate — Submit a claim for validation
GET /claims/{id}/provenance — Audit trail for a claim
GET /workflows/{id}/state — Current canonical workflow state
GET /agents/trust — Agent trust scores
GET /validators/reliability — Validator reliability scores
GET /claims/quarantine — Quarantined (NEEDS_REVIEW) claims
WS /stream — Real-time consensus event stream
Project Structure
quorum/
quorum/
contracts/ # Shared Pydantic models, interfaces, Redis keys, config
validators/ # source.py, consistency.py, reasoning.py
consensus/ # engine.py, scoring.py, quarantine.py
state/ # redis_store.py, provenance.py, trust.py
agents/ # Fetch.ai uAgents + demo workflow
api/ # FastAPI routes, WS, observability, startup
fakes/ # In-memory fakes for testing
pipeline.py # QuorumPipeline (integration wiring)
tests/ # 177 tests across all components
dashboard/ # Next.js + shadcn/ui light-mode dashboard
docs/api.md # API schema
docker-compose.yml
Test Coverage
pytest # 177 tests, ~2s
pytest tests/contracts # Shared models + fakes
pytest tests/validators# Source, consistency, reasoning validators
pytest tests/consensus # Engine, scoring, quarantine
pytest tests/state # Redis store, provenance, trust
pytest tests/agents # uAgents protocols + quorum agent
pytest tests/api # FastAPI routes + WebSocket
pytest tests/test_pipeline.py # End-to-end pipeline integration
Analysis
View
Metric
- 9
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- AnthropicIn code
- CSSIn code
- FastAPIIn code
- Next.jsIn code
- PythonIn code
- ReactIn code
- Tailwind CSSIn code
- TypeScriptIn code
- RedisClaimed
8 of 9 appear in the indexed code. 1 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
- Claude CodeConfig
- CodexConfig
- CursorConfig
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
428 KB
Source files
110
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
mohiitt/Quorum
131 files · 800 KB · @ b5802af
Structure
Interface
24 files · 18%Screens, components and styles rendered to the user.
API & routing
9 files · 7%Request entry points: routes, handlers and controllers.
Application logic
42 files · 32%Domain rules, services and shared utilities.
+5 more
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- Python55%
- TypeScript30%
- Markdown7%
- Shell5%
- CSS4%
- YAML0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
pyproject.toml
pypi · 19- anthropic
- arize
- fakeredis[aioredis]
- fastapi
- httpx
- playwright
- pydantic
- pydantic-settings
- redis[asyncio]
- sentry-sdk
- uagents
- uvicorn[standard]
- websockets
- +6 more
dashboard/package.json
npm · 18- @base-ui/react
- class-variance-authority
- clsx
- lucide-react
- next
- react
- react-dom
- shadcn
- tailwind-merge
- tw-animate-css
- +8 more
requirements.txt
pypi · 18- anthropic
- anyio[trio]
- arize
- fakeredis[aioredis]
- fastapi
- httpx
- pydantic
- pydantic-settings
- pytest
- pytest-asyncio
- pytest-httpx
- redis[asyncio]
- respx
- ruff
- sentry-sdk
- uagents
- uvicorn[standard]
- websockets
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
Feature verification
ChatAcknowledgement / replies=None protocol-spec workaroundVerified
Passed replies=None to bypass a locked reply set when adding ChatAcknowledgement handler after initial protocol registration
Claimed on Devposthigh confidencequorum/agents/agentverse_agent.py:281— @chat_protocol.on_message(ChatMessage, replies=None) matches the described replies=None bypassquorum/agents/agentverse_agent.py:345— @chat_protocol.on_message(ChatAcknowledgement, replies=None) handler registered as claimed
Consensus Engine (weighted voting, accept/reject/quarantine thresholds)Verified
Three validators vote independently, weighted by reliability, combined into a 0-1 consensus score with accept/reject/quarantine thresholds
Claimed on Devposthigh confidencequorum/consensus/engine.py:24— ConsensusEngine.run() computes a score via compute_score(validator_results) and derives a Verdict via determine_verdict(), producing ACCEPTED/REJECTED/NEEDS_REVIEWquorum/consensus/quarantine.py:12— Quarantine class holds NEEDS_REVIEW claims in a pending list rather than dropping or silently passing them
Consistency Validator (Redis-backed claim memory, contradiction detection)Verified
Consistency Validator maintains live memory of accepted claims in Redis and detects contradictions across a workflow session
Claimed on Devposthigh confidencequorum/validators/consistency.py:108— validate() pulls context.accepted_claims and asks Claude whether the new claim contradicts any of themquorum/state/redis_store.py:15— RedisStore implements BaseStore backing workflow state persistence used to hold accepted claims
Fetch.ai uAgents Bureau multi-agent orchestration (weather demo workflow)Verified
Weather Agent submits hallucinated claim, Quorum rejects it, Fallback Agent resubmits corrected claim, Planner/Budget Agents receive validated forecast
Claimed on readmehigh confidencequorum/agents/demo_workflow.py:87— run_demo() wires quorum, weather, fallback, planner, and budget agents into a Bureau and runs the described flowquorum/agents/quorum_agent.py:16— create_quorum_agent() is the gatekeeper agent that validates ClaimSubmission via the injected pipeline and replies with ValidationVerdict
Modular validator loading based on available API keys (graceful degradation)Verified
Validators are loaded at startup based on which API keys are available so the system degrades gracefully
Claimed on Devposthigh confidencequorum/agents/agentverse_agent.py:96— Consistency/Reasoning validators only added to the list if settings.anthropic_api_key is set; falls back to always_accept if none loadquorum/agents/demo_workflow.py:66— Same conditional-loading pattern repeated in the demo workflow pipeline builder
Real-time dashboard (Live Consensus, Provenance, Trust, Quarantine pages) via WebSocket streamingVerified
Real-time dashboard surfaces per-agent verdicts, validator breakdowns, trust scores, quarantine queue via WebSocket streaming
Claimed on Devposthigh confidencequorum/api/ws.py:46— ws_endpoint forwards events from an EventBus over WebSocket to connected dashboard clientsdashboard/src/app/consensus/page.tsx:1— Dedicated consensus dashboard page consuming WebSocket streamdashboard/src/app/trust/page.tsx:1— Dedicated trust-score dashboard pagedashboard/src/app/quarantine/page.tsx:1— Dedicated quarantine queue dashboard pagedashboard/src/app/provenance/page.tsx:1— Dedicated provenance/audit trail dashboard page
Reasoning Validator (Claude-based logical coherence check, optional debate round)Verified
Reasoning Validator asks Claude whether a claim is internally coherent, flags unsupported conclusions/circular reasoning/category errors
Claimed on Devposthigh confidencequorum/validators/reasoning.py:87— ReasoningValidator.validate() calls an LLM with a system prompt evaluating logical soundness and failure modes (missing_reasoning, unsupported_conclusion, invalid_assumption, contradictory_logic)quorum/validators/reasoning.py:137— _debate_round() runs skeptic + defender LLM passes then a synthesis pass, matching the 'optional debate round' README claim
Redis retry logic, connection pooling, and FakeStore fallbackVerified
Implemented retry logic, connection pooling, and a FakeStore fallback so the pipeline continues if Redis becomes unreachable
Claimed on Devposthigh confidencequorum/api/startup.py:77— TLS auto-retry (rediss://) on connection failure, falling back to in-memory FakeStore on total failurequorum/fakes/__init__.py:1— FakeStore module referenced as in-memory fallback used across agentverse_agent.py, demo_workflow.py, and startup.py
Source Validator (web search via DuckDuckGo/Wikipedia + LLM grading, Browserbase fallback)Verified
Source Validator browses the web via Browserbase, cross-references DuckDuckGo and Wikipedia, scores relevance, degrades gracefully with no sources
Claimed on Devposthigh confidencequorum/validators/source.py:246— Queries DuckDuckGo Instant Answer API and Wikipedia search API, then asks an LLM to grade the claim against retrieved snippetsquorum/validators/source.py:51— BrowserbaseHTTPClient creates a real Browserbase session and drives it via Playwright CDP to scrape DuckDuckGo HTML results, used as a fallbackquorum/validators/source.py:397— When no web data is retrievable, returns a benefit-of-the-doubt ACCEPTED verdict instead of crashing
Test suite (177 tests across all components)Verified
177 tests across contracts, validators, consensus, state, agents, api, and pipeline integration
Claimed on readmemedium confidencetests/test_pipeline.py:1— 17 test files found across tests/{contracts,validators,consensus,state,agents,api} totaling 188 test functions, closely matching the claimed 177 (count may include parametrized variants or have drifted slightly)
Trust Manager: per-agent trust scores and per-validator reliability (EMA updates)Verified
Per-agent trust scores and per-validator reliability, updated after every consensus
Claimed on readmehigh confidencequorum/state/trust.py:27— update_agent_trust() applies an EMA update based on verdict outcomequorum/state/trust.py:81— update_validator_reliability() applies a separate EMA update per validator
FastAPI REST API with claim validation, provenance, workflow state, trust, reliability, quarantine endpointsCode-supported
REST endpoints for POST /claims/validate, GET /claims/{id}/provenance, /workflows/{id}/state, /agents/trust, /validators/reliability, /claims/quarantine, WS /stream
Claimed on readmemedium confidencequorum/api/main.py:1— Main FastAPI app file exists wiring routes and the WebSocket endpoint; exact route paths not individually enumerated in this pass
Fetch.ai Agentverse deployment with mailbox + Agent Chat ProtocolCode-supported
Agent deployed on Agentverse with a mailbox endpoint, ships with Agent Chat Protocol v0.3.0, queryable from ASI:One
Claimed on Devpostmedium confidencequorum/agents/agentverse_agent.py:188— Agent is created with mailbox=True (uAgents built-in mailbox registration) and description for Agentverse listingquorum/agents/agentverse_agent.py:279— chat_protocol = Protocol(spec=chat_protocol_spec) with ChatMessage/ChatAcknowledgement handlers wired for ASI:One chat compatibility
Provenance Layer (immutable audit trail)Code-supported
Provenance layer records an immutable audit trail of who said what, who validated it, why it was accepted
Claimed on readmemedium confidencequorum/state/provenance.py:1— Dedicated provenance module exists alongside trust.py and redis_store.py, storing claim/validation history
Validator output enum-string formatting bug fix (ValidatorName.REASONING leak)Code-supported
Fixed Python enum string representations leaking into frontend output by patching backend reply formatter and frontend rendering
Claimed on Devpostmedium confidencequorum/agents/agentverse_agent.py:145— _clean_name() strips 'ValidatorName.' prefix and lowercases validator names before formatting, consistent with the described fix
Agentverse three-step identity challenge-proof-register API sequenceClaimed only
Registration flow involved a three-step identity challenge-proof-register sequence triggered at startup
Claimed on Devpostmedium confidenceLive deployed agent reachable via Agentverse/ASI:One linksBlocked
Agent is live and queryable at agentverse.ai and asi1.ai chat links provided
Claimed on readmelow confidence
An AI agent derived these features from the project’s Devpost page and readme, then searched the code for each one. Verified features are backed by cited code; claimed-only features had no supporting code, which is not by itself proof a feature is missing.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.