Turn the run into a graph
Every message becomes a step. When a later step reuses a URL, file, number or name from an earlier one, follows its instruction, or reads its output, Butterfly links them. No LLM involved.
When a team of AI agents fails a task, Butterfly finds the agent that made the decisive mistake, the step where it happened, and, when the graph links them, the chain of steps that carried it to the failure.
Multi-agent systems fail quietly. One agent misreads a page early on, the others build on it, and the failure only shows at the end. Butterfly reads the run as a graph of who relied on whom, and walks back from the failure to the step where it started.
Same model for every method, no answers in any prompt, scored against the benchmark's human labels.
Every message becomes a step. When a later step reuses a URL, file, number or name from an earlier one, follows its instruction, or reads its output, Butterfly links them. No LLM involved.
Graph queries score every step by how much of the run builds on it, how many new facts it introduced, and how early it happened. Most of the work ends here.
A model reads only the top suspects and picks the decisive one. A shortest-path query then looks for the chain from the failure back to the mistake, so the answer can be checked when the graph links them.
// The proof: from the failure back to the suspect MATCH (f:Step {is_final: true}), (s:Step {idx: $idx}) WITH shortestPath((f)-[:DEPENDS_ON*]->(s)) AS p RETURN [n IN nodes(p) | n.idx] AS steps // How much of the run builds on each suspect MATCH (s:Step {candidate: true}) CALL algo.BFS(s, 200, 'FEEDS') YIELD nodes RETURN s.idx, size(nodes) AS downstream
Pick any of the 184 failed runs, watch the graph rank the suspects, and read the proof step by step.
Try Butterflydocker compose up from the repo.