<?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: lenin coronel</title>
    <description>The latest articles on DEV Community by lenin coronel (@leno0421).</description>
    <link>https://dev.to/leno0421</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%2F4010517%2F92b331e8-ae76-45ca-9541-b208bac22620.gif</url>
      <title>DEV Community: lenin coronel</title>
      <link>https://dev.to/leno0421</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/leno0421"/>
    <language>en</language>
    <item>
      <title>Synod Update: Adding a Deterministic Safety Net (and Proving It Helps)</title>
      <dc:creator>lenin coronel</dc:creator>
      <pubDate>Wed, 08 Jul 2026 22:53:30 +0000</pubDate>
      <link>https://dev.to/leno0421/synod-update-adding-a-deterministic-safety-net-and-proving-it-helps-4ba7</link>
      <guid>https://dev.to/leno0421/synod-update-adding-a-deterministic-safety-net-and-proving-it-helps-4ba7</guid>
      <description>&lt;p&gt;Quick update on Synod, the multi-agent code reviewer I've been building for&lt;br&gt;
the Qwen Cloud hackathon.&lt;/p&gt;

&lt;p&gt;What changed&lt;/p&gt;

&lt;p&gt;I added a Semgrep pre-filter in front of the security agent. Before, every&lt;br&gt;
finding came purely from the LLM reading the code and reasoning about it —&lt;br&gt;
which works, but LLMs are stochastic. Same file, different run, sometimes a&lt;br&gt;
different result.&lt;/p&gt;

&lt;p&gt;Now Semgrep scans first with deterministic rules, and the security agent&lt;br&gt;
validates and enriches those candidates instead of starting from zero every&lt;br&gt;
time.&lt;/p&gt;

&lt;p&gt;Did it actually help?&lt;/p&gt;

&lt;p&gt;I was skeptical of my own change, so I benchmarked it properly instead of&lt;br&gt;
assuming. Ran a single-agent baseline against the full council, with and&lt;br&gt;
without the pre-filter, same vulnerable file, checked against known ground&lt;br&gt;
truth:&lt;/p&gt;

&lt;p&gt;MethodPrecisionRecallF1Single agent75%75%, but ranged 0–75% across runs75%Council, LLM-only75%same variance issue75%Council + Semgrep100%100%, every run100%&lt;/p&gt;

&lt;p&gt;The interesting part wasn't the top-line numbers — it was that the&lt;br&gt;
single-agent and LLM-only council both had real run-to-run variance.&lt;br&gt;
Sometimes it caught everything, sometimes it missed half. That's not a&lt;br&gt;
reviewer you can trust in CI.&lt;/p&gt;

&lt;p&gt;Adding the deterministic scanner as a floor fixed that. It's not smarter,&lt;br&gt;
it's just consistent — and consistency turned out to matter more than I&lt;br&gt;
expected.&lt;/p&gt;

&lt;p&gt;Also shipped&lt;/p&gt;

&lt;p&gt;A GitHub webhook — open a PR, Synod reviews the diff and comments&lt;br&gt;
directly, findings grouped by severity.&lt;br&gt;
A small CLI, closer to how tools like Claude Code feel in the terminal,&lt;br&gt;
for reviewing files or whole directories without touching the API&lt;br&gt;
directly.&lt;/p&gt;

&lt;p&gt;Repo's still open source: github.com/02NIN20/Synod&lt;/p&gt;

&lt;p&gt;Built for the Global AI Hackathon Series with Qwen Cloud — Track 3: Agent&lt;br&gt;
Society.&lt;/p&gt;

</description>
      <category>alibabachallenge</category>
      <category>ai</category>
      <category>hackathon</category>
      <category>github</category>
    </item>
    <item>
      <title>What Six Arguing AI Agents Taught Me About Building One That Actually Works</title>
      <dc:creator>lenin coronel</dc:creator>
      <pubDate>Sat, 04 Jul 2026 18:23:06 +0000</pubDate>
      <link>https://dev.to/leno0421/what-six-arguing-ai-agents-taught-me-about-building-one-that-actually-works-5a1c</link>
      <guid>https://dev.to/leno0421/what-six-arguing-ai-agents-taught-me-about-building-one-that-actually-works-5a1c</guid>
      <description>&lt;p&gt;I broke my own project on purpose, twice, before it worked. Here's the&lt;br&gt;
story.&lt;/p&gt;

&lt;h2&gt;
  
  
  Round one: the debate club
&lt;/h2&gt;

&lt;p&gt;My first idea for this hackathon sounded great in my head. Six AI agents,&lt;br&gt;
each with a "role" — security, architecture, performance, whatever — and&lt;br&gt;
they'd debate each other across multiple rounds before agreeing on a final&lt;br&gt;
answer. Like a mini panel of experts arguing it out.&lt;/p&gt;

&lt;p&gt;I built it. I ran it against some vulnerable test code. It came back with&lt;br&gt;
127 findings.&lt;/p&gt;

&lt;p&gt;I got excited for about four minutes. Then I actually read them.&lt;/p&gt;

&lt;p&gt;Maybe three were real. The other 124 were the agents politely agreeing with&lt;br&gt;
each other about problems that didn't exist, or restating the same bug five&lt;br&gt;
different ways because five different agents happened to notice it.&lt;br&gt;
Precision was somewhere around 2%. Worse than a single model working alone.&lt;/p&gt;

&lt;p&gt;That stung a little, not going to lie. I'd spent days on the debate logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Round two: quieter, and better
&lt;/h2&gt;

&lt;p&gt;So I ripped it apart. No more debate rounds. No more six agents shouting&lt;br&gt;
over each other. I went down to four, gave each one exactly one job, and —&lt;br&gt;
this is the part that actually fixed things — made them depend on each&lt;br&gt;
other in order instead of all firing at once.&lt;/p&gt;

&lt;p&gt;One agent maps out the code first. Two others use that map to look at&lt;br&gt;
security and quality separately. A last one compares what they found,&lt;br&gt;
throws out duplicates, and — importantly — actually checks the line numbers&lt;br&gt;
against the real file instead of trusting the AI's word for it.&lt;/p&gt;

&lt;p&gt;Same test file. This time: real vulnerabilities, correctly flagged, nothing&lt;br&gt;
made up. Point it at clean code afterward and it correctly said nothing was&lt;br&gt;
wrong, which honestly felt like a bigger win than finding the bugs did.&lt;/p&gt;

&lt;h2&gt;
  
  
  The annoying lesson
&lt;/h2&gt;

&lt;p&gt;I wanted this project to feel impressive. More agents, more debate, more&lt;br&gt;
"look how sophisticated this is." What actually worked was the boring&lt;br&gt;
answer: fewer agents, clear roles, one checking the other's work instead of&lt;br&gt;
everyone talking at once.&lt;/p&gt;

&lt;p&gt;I named the final version Synod, after the idea of a council that actually&lt;br&gt;
deliberates and reaches a verdict, instead of a crowd that just makes noise.&lt;/p&gt;

&lt;p&gt;The version that's on GitHub today is the second architecture, not the&lt;br&gt;
first. It's running on Alibaba Cloud, powered by Qwen, and includes a CLI so&lt;br&gt;
I can review code, chat about a project, or scan an entire repo right from&lt;br&gt;
the terminal. If you want to poke at it or roast my code, it's open source:&lt;br&gt;
&lt;strong&gt;github.com/02NIN20/Synod&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Built for the Global AI Hackathon Series with Qwen Cloud — Track 3: Agent&lt;br&gt;
Society.&lt;/p&gt;

</description>
      <category>alibabachallenge</category>
      <category>ai</category>
      <category>linux</category>
      <category>hackathon</category>
    </item>
    <item>
      <title>Synod: Teaching AI Agents to Actually Collaborate, Not Just Coexist</title>
      <dc:creator>lenin coronel</dc:creator>
      <pubDate>Wed, 01 Jul 2026 08:06:00 +0000</pubDate>
      <link>https://dev.to/leno0421/building-a-multi-agent-society-with-qwen-cloud-my-hackathon-journey-2cp8</link>
      <guid>https://dev.to/leno0421/building-a-multi-agent-society-with-qwen-cloud-my-hackathon-journey-2cp8</guid>
      <description>&lt;h2&gt;
  
  
  The Question That Started It
&lt;/h2&gt;

&lt;p&gt;Track 3 asked for a multi-agent system where agents work together through&lt;br&gt;
"task division, dialogue, and negotiation." Most submissions I imagined would&lt;br&gt;
spin up five agents, run them in parallel, and glue the outputs together with&lt;br&gt;
a summary. That's not collaboration — that's five monologues in a trench coat.&lt;/p&gt;

&lt;p&gt;I wanted agents that actually depended on each other. So I built &lt;strong&gt;Synod&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Name
&lt;/h2&gt;

&lt;p&gt;A synod is a council that convenes to deliberate and reach a verdict — not a&lt;br&gt;
crowd shouting in parallel, but a structured body where each member has a&lt;br&gt;
defined seat and a defined voice. That's the model I wanted for code review.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem With "More Agents"
&lt;/h2&gt;

&lt;p&gt;My first instinct — and my first mistake — was to throw more agents at the&lt;br&gt;
problem. I benchmarked a single generalist model against a six-agent panel&lt;br&gt;
with full debate rounds. The multi-agent version found 8-11x more "findings."&lt;/p&gt;

&lt;p&gt;Then I checked precision. It had collapsed to near zero. The council wasn't&lt;br&gt;
finding more real bugs — it was drowning three real vulnerabilities in a&lt;br&gt;
hundred hallucinated ones, then calling it thoroughness. F1 score, the number&lt;br&gt;
that actually matters, was &lt;em&gt;worse&lt;/em&gt; than the single agent in most samples.&lt;/p&gt;

&lt;p&gt;That result reshaped the whole project. Scale isn't the win condition.&lt;br&gt;
Signal is.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture: Three Agents With a Reason to Talk
&lt;/h2&gt;

&lt;p&gt;Synod runs three core agents, each with a role that doesn't overlap with the&lt;br&gt;
others, chained so that context flows downstream instead of everyone&lt;br&gt;
analyzing in a vacuum:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cartographer&lt;/strong&gt; goes first. It doesn't judge the code — it maps it: modules,&lt;br&gt;
dependencies, entry points. Pure reconnaissance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inspector&lt;/strong&gt; and &lt;strong&gt;Sentinel&lt;/strong&gt; run next, in parallel, but both receive&lt;br&gt;
Cartographer's map as context. Inspector hunts code quality issues —&lt;br&gt;
complexity, anti-patterns, maintainability traps. Sentinel hunts security —&lt;br&gt;
CWE-mapped vulnerabilities, from SQL injection to command injection to unsafe&lt;br&gt;
&lt;code&gt;eval()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arbiter&lt;/strong&gt; closes the loop. It doesn't just concatenate findings — it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deduplicates near-identical findings by title similarity&lt;/li&gt;
&lt;li&gt;Validates every cited line number against the actual source, dropping
anything a model hallucinated&lt;/li&gt;
&lt;li&gt;Escalates severity when two agents independently flag the same issue —
real corroboration, not vibes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For high-severity findings, an optional fourth agent — &lt;strong&gt;Smith&lt;/strong&gt; — steps in&lt;br&gt;
with a proposed fix. Sentinel then re-reviews Smith's fix before it's&lt;br&gt;
accepted, in a short bounded loop (max 2 iterations). Generate, critique,&lt;br&gt;
refine — not a free-for-all debate, a targeted second opinion where it&lt;br&gt;
actually earns its cost in tokens.&lt;/p&gt;

&lt;p&gt;This is the pattern the literature on agent orchestration keeps pointing to:&lt;br&gt;
prompt chaining for deterministic dependency, evaluator-optimizer for the one&lt;br&gt;
step that benefits from iteration. Not a debate club. A pipeline with&lt;br&gt;
judgment built in.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed My Mind Mid-Build
&lt;/h2&gt;

&lt;p&gt;I originally planned four debate rounds — individual analysis, cross-debate,&lt;br&gt;
refinement, negotiation — modeled on how human review panels argue. I&lt;br&gt;
scrapped it. The rounds added latency and token cost without adding&lt;br&gt;
precision; agents mostly restated each other's points or, worse, converged&lt;br&gt;
on a wrong consensus because three models arguing don't automatically&lt;br&gt;
out-reason one correct observation. Sycophancy cascades are real in&lt;br&gt;
multi-agent systems — agents tend to agree with the majority, not the truth.&lt;/p&gt;

&lt;p&gt;Cutting the debate and replacing it with structural dependency (Cartographer&lt;br&gt;
→ Inspector/Sentinel) and evidence validation (Arbiter checking real line&lt;br&gt;
numbers) did more for output quality than any amount of extra dialogue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploying on Alibaba Cloud
&lt;/h2&gt;

&lt;p&gt;Synod runs as a single FastAPI service in Docker on an Alibaba Cloud ECS&lt;br&gt;
instance, talking to Qwen Cloud through its OpenAI-compatible endpoint&lt;br&gt;
(&lt;code&gt;qwen3-coder-plus&lt;/code&gt; for review, chosen specifically because it's a&lt;br&gt;
code-specialized model rather than a general one). One container, one&lt;br&gt;
&lt;code&gt;docker-compose up&lt;/code&gt;, one exposed port. No database cluster to babysit before&lt;br&gt;
a demo — working memory lives in a per-session dict, which is honest about&lt;br&gt;
what a hackathon build needs: fast to deploy, nothing to migrate, nothing to&lt;br&gt;
lose sleep over the night before judging.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a Real Review Looks Like
&lt;/h2&gt;

&lt;p&gt;Point Synod at an intentionally vulnerable sample and it comes back with&lt;br&gt;
Sentinel catching hardcoded credentials (CWE-798), SQL injection (CWE-89),&lt;br&gt;
command injection via both &lt;code&gt;os.system&lt;/code&gt; and &lt;code&gt;subprocess(shell=True)&lt;/code&gt;&lt;br&gt;
(CWE-78), and unsafe &lt;code&gt;eval()&lt;/code&gt; (CWE-94) — while Inspector independently flags&lt;br&gt;
the SQL injection from a code-quality angle, and Arbiter treats that overlap&lt;br&gt;
as corroboration and escalates it. That's the collaboration piece actually&lt;br&gt;
doing something: two different lenses converging on the same real problem,&lt;br&gt;
not two agents padding a findings count.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd Tell Past Me
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Precision before scale.&lt;/strong&gt; A ten-agent system that's 95% noise is worse&lt;br&gt;
than a three-agent system that's mostly signal. Measure F1, not finding&lt;br&gt;
count.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Give agents a reason to depend on each other.&lt;/strong&gt; Parallel agents with no&lt;br&gt;
shared context aren't a society, they're a queue. Structural dependency —&lt;br&gt;
one agent's output becoming another's input — is what makes "multi-agent"&lt;br&gt;
mean something instead of being a buzzword on the tin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bound your loops.&lt;/strong&gt; Iteration helps exactly where verification is cheap&lt;br&gt;
and drift is a real risk. Everywhere else, it's just more tokens for the&lt;br&gt;
same answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simple deploys win demos.&lt;/strong&gt; No cluster, no orchestration, no 2am migration&lt;br&gt;
panic. One container that starts in fifteen seconds beats an impressive&lt;br&gt;
architecture diagram that doesn't survive a live run.&lt;/p&gt;

&lt;h2&gt;
  
  
  Repository
&lt;/h2&gt;

&lt;p&gt;Open source, MIT licensed:&lt;br&gt;
&lt;strong&gt;github.com/02NIN20/Synod&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Built for the Global AI Hackathon Series with Qwen Cloud — Track 3: Agent&lt;br&gt;
Society.&lt;/p&gt;

</description>
      <category>alibabachallenge</category>
      <category>ai</category>
      <category>agents</category>
      <category>hackathon</category>
    </item>
  </channel>
</rss>
