project · tier 1 · 2026
Sabueso — a multi-agent investigator for LATAM anti-corruption reporting
An orchestrator fanning out to 6 parallel investigator agents, verified by a Mixture-of-Agents pass, to synthesise public-record research a journalist would otherwise do by hand.
- Role
- Creator & Engineer
- Period
- May 2026 — Present
Problem
Anti-corruption journalism in LATAM means chasing the same claim across public procurement records, court filings, news archives and social posts — work that scales badly with a newsroom's headcount, not with the size of the story.
What I built
Sabueso is a hierarchical multi-agent researcher: one orchestrator plans the investigation with the ReWOO pattern (reason, then act without re-planning at every step) and fans it out to 6 investigator agents running in parallel, each covering a different evidence source. A barrier synchronises them before a verification pass — implemented as a Mixture-of-Agents vote rather than a single model's opinion — reconciles conflicting findings before the report is assembled.
The frontend renders the investigation itself as a graph with cosmos.gl, so a reader can see which sources corroborate a claim, not just read a paragraph asserting it. Ingestion runs through Scrapling and CocoIndex into Postgres, with pgvector for semantic retrieval and pgmq for the task queue between the API and the investigation worker.
Architecture
Hover or tab through a node to read what it does. Top is input; bottom is output.
- Loads the target entity and the last claims from previous investigations so the planner does not rediscover them.
- Sabueso (Claude Sonnet 4.6, 4 prompt-cache breakpoints) turns the case into plan steps; a conditional fan_out edge sends one to each investigator in parallel.
- El Buscador (ReWOO) resolves DNI and RUC identifiers and official-visit records via find_dni_record, find_ruc_record and search_manolo.
- La Tasadora (ReAct) reads JNE sworn-asset PDFs and checks them against SUNARP property records for patrimony discrepancies.
- El Contador (ReWOO) searches SEACE public-procurement releases per RUC and flattens each award into a claim.
- El Letrado (ReWOO) queries the Legalize corpus for laws voted, sentences and vote-vs-interest conflicts.
- El Detective (ReAct) walks family, partner and board relations via find_relatives and SUNARP directories, emitting graph edges rather than claims.
- El Periodista (ReAct) searches the press archive, snapshots pages in the Wayback Machine and follows up on the Twitter archive.
- Barrier after the fan-out: LangGraph converges here once every Send finishes and the reducer has concatenated all claims, edges and events.
- La Jueza verifies every claim with a Mixture-of-Agents: 3 proposers in parallel against the primary source, then a Sonnet 4.6 aggregator calibrates the final verdict.
- Sabueso as editor-in-chief (Claude Opus 4.7, one call) writes the Markdown dossier: summary, findings, evidence, contradictions, next steps.
- Writes the investigation, its claims and edges to Postgres in one transaction — all or nothing.
Sabueso's LangGraph `StateGraph` — `plan` (ringed) fans out to 6 parallel investigators, `collect` is the barrier, `jueza` the Mixture-of-Agents verification, `synthesize` the dossier, top to bottom.
Evidence
Live at sabueso-silk.vercel.app.