I build the layer that keeps AI coding agents honest.
An agent will tell you it finished. It marks the task done, reports its own progress, moves on, and nobody checks, because checking is slow and the report is right there, already written, sounding confident. That report is the cheapest thing it produces. It's also the one thing everyone believes.
So I stopped asking it. agf keeps execution in a persistent SQLite graph: every task is a node with testable acceptance criteria, every dependency an edge. Nothing closes until the criterion, the code on disk, and the test on disk all agree. A graph can't hallucinate.
I started it on May 22, 2026 and called it mcp-graph. An MCP server that handed the agent a task graph as tools. It worked. Then I hit the ceiling.
MCP forces the graph to be a service, sitting behind a protocol, reachable only by the agent you configured to talk to it. Want Copilot in there too? Build another bridge. Worse, the protocol keeps shoving context into the conversation, and context is the most expensive thing you own.
On June 4, 2026 I tore it out and rebuilt it as a CLI. That's the whole inversion, and it's where the name came from. Any agent that can spawn a process can drive agf. The graph became the source of truth, the agent became the executor, and MCP became what it always should have been: an optional transport. Today agf runs with zero MCP.
Ants, not planners. A single ant has no idea where the food is. The colony does, because every ant returning from a good path lays down pheromone while the bad paths quietly evaporate, and after enough trips the shortest route is simply the one that smells strongest. Nobody planned it. An agent picking a skill for some intent has that exact problem: it cannot know in advance which route works. The graph remembers for it. Pheromone only gets deposited against evidence (claim → validated → proven). That's the part that keeps a colony from cheerfully converging on a hallucination.
Tokens have an owner. Output runs 3-5× the price of input. Input is cacheable. Almost nobody measures either one, so the bill lands at the end of the month with no idea which task earned it. Every LLM call in agf goes to a ledger, attributed to the node that caused it.
Local-first, and I let a test say so. No background update checks. No telemetry. No fingerprint of your machine. That's not a README promise, because README promises rot the moment the code moves; it's a test that breaks the build if any module reaches the network outside a named allowlist. Two requests exist in the whole program. You start both.
Apache-2.0 · graph-flow.cloud
- Blog — diegonogueira.blog
- LinkedIn — /in/diegonogueirapaula
- X — @diegoconsagrado
- GitHub — @DiegoNogueiraDev
- Instagram — @devnogueira__




