<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Leo</title>
    <description>The latest articles on DEV Community by Leo (@mrleonix).</description>
    <link>https://dev.to/mrleonix</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4101172%2F1451c84c-a7d4-4951-8b00-ac1d5cfebc17.jpg</url>
      <title>DEV Community: Leo</title>
      <link>https://dev.to/mrleonix</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mrleonix"/>
    <language>en</language>
    <item>
      <title>How I built an AI planning tribunal in a weekend by orchestrating AI agents</title>
      <dc:creator>Leo</dc:creator>
      <pubDate>Sun, 30 Aug 2026 11:46:34 +0000</pubDate>
      <link>https://dev.to/mrleonix/how-i-built-an-ai-planning-tribunal-in-a-weekend-by-orchestrating-ai-agents-16md</link>
      <guid>https://dev.to/mrleonix/how-i-built-an-ai-planning-tribunal-in-a-weekend-by-orchestrating-ai-agents-16md</guid>
      <description>&lt;p&gt;I spent this weekend building Setback for Google's All Things Agentic Hackathon: a tool that turns a resident's plain-language objection to a nearby development application into a real, legally-relevant council submission, and just as importantly, honestly refuses the parts that aren't. &lt;strong&gt;Disclosure: this was created for entering that hackathon, and most of the actual typing was done by AI coding agents that I orchestrated rather than by me line-by-line.&lt;/strong&gt; That's the part I actually want to write about.&lt;/p&gt;

&lt;p&gt;The problem itself is mundane and real. NSW planning law only lets a council weigh a specific, fairly short list of things when it reviews a development application next door to you: overshadowing, privacy, height and bulk, heritage, a handful of others. A falling property value isn't on that list. Neither is disliking the applicant. Residents write those objections anyway, all the time, because that's genuinely how people feel, and a submission full of them gets set aside without the resident ever finding out why. Setback runs a small panel of AI reviewers over a resident's interview transcript plus whatever photos or plans they upload, splits the objection into individual grounds, and checks each one against the actual statutory list before anything gets submitted anywhere. The grounds that don't survive that check don't just vanish. The resident gets a plain-English explanation of exactly why, and what would make it viable instead. I made a point of styling that explanation as calm, informational copy, not a red error banner, because telling someone the truth about their own submission is serving them correctly, not failing them.&lt;/p&gt;

&lt;p&gt;The build itself was the more interesting experiment for me. I didn't write it by hand. I ran it as a small, deliberately-scoped multi-agent workflow: several coding agents, each locked to a strict set of files, working concurrently against the same codebase, with an integration pass at the end of every round to reconcile the seams between them. It's closer to running a small remote team for a weekend than prompting a single chatbot. The interesting decisions were about lane boundaries and review discipline, not individual lines of code.&lt;/p&gt;

&lt;p&gt;That approach earns its keep, and it has real teeth too. The two nastiest bugs of the build were both invisible to a fully green, several-hundred-test offline suite and only surfaced once I forced a genuinely deployed, end-to-end run. One was an agent framework silently falling back to the wrong API because of an unset environment variable, four layers deep inside someone else's library. The other, more sobering one: the production job was quietly discarding every resident's uploaded evidence for an entire build wave, because two separate backend processes disagreed about where uploads actually lived. Neither shows up in a code review that only reads the diff. Both only show up when you actually run the thing against real infrastructure and read the output with your own eyes. By the fourth round of doing exactly that, it had stopped being a one-off QA pass and become a standing discipline: run it for real, watch it fail, fix it, re-run, write down what you found either way.&lt;/p&gt;

&lt;p&gt;Even that discipline has a ceiling, though. My own polished demo case was still a story I'd hand-picked, and it took pointing the pipeline at the one real, currently-exhibited DA I could find, with its real, unhelpful, twelve-document register, to expose the bug that actually mattered: the overlay code grabbing a council form letter instead of the real site plan because nothing in my curated fixture had ever contained a letter like that to begin with.&lt;/p&gt;

&lt;p&gt;The other lesson was about honesty under time pressure. A review pass caught that my own design docs had drifted, describing a component that was designed and then genuinely never built, as if it had shipped. The fix wasn't to quietly patch the doc. It was to leave the correction visible in place, because a document caught overclaiming once stops being trusted for anything else it says. That rule applies to the pitch too. The honest gaps are more credible than a polished claim that doesn't survive a second look.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://setback-console-956646636969.australia-southeast1.run.app" rel="noopener noreferrer"&gt;Try it live&lt;/a&gt;. If you want the mechanics, the ADK graph, the deterministic legal gate, the structural separation between the legal-text reviewer and the photo reviewer, the repo goes deeper than a blog post reasonably can: &lt;a href="https://github.com/MrLeonix/setback" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;#AllThingsAgenticHackathon #AllThingsAgentic&lt;/p&gt;

</description>
      <category>ai</category>
      <category>hackathon</category>
      <category>allthingsagentic</category>
      <category>gemini</category>
    </item>
  </channel>
</rss>
