<?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: Itay Maman</title>
    <description>The latest articles on DEV Community by Itay Maman (@itay-maman).</description>
    <link>https://dev.to/itay-maman</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3735957%2Fb6012d34-30ba-4ec6-80e8-d7d4455a5092.jpg</url>
      <title>DEV Community: Itay Maman</title>
      <link>https://dev.to/itay-maman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/itay-maman"/>
    <language>en</language>
    <item>
      <title>20 lines of markdown replaced my code review bot</title>
      <dc:creator>Itay Maman</dc:creator>
      <pubDate>Sun, 05 Apr 2026 15:35:40 +0000</pubDate>
      <link>https://dev.to/itay-maman/20-lines-of-markdown-replaced-my-code-review-bot-26h2</link>
      <guid>https://dev.to/itay-maman/20-lines-of-markdown-replaced-my-code-review-bot-26h2</guid>
      <description>&lt;p&gt;I stopped waiting for Greptile and co.&lt;/p&gt;

&lt;p&gt;Instead I run a skill I call &lt;code&gt;regression-dog&lt;/code&gt;. It's open source, simple (about 20 lines of markdown), and integrates right into my terminal/coding agent.&lt;/p&gt;

&lt;p&gt;Initially, I imagined I'd do a few quick passes locally and then still lean on the dedicated review bots for the real deep analysis. To my surprise, it's usually just as thorough as those bots, and sometimes better.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;It reads the diff of your branch (or last commit, or last N commits - you choose the scope) and lists every behavioral change it can find. Not style nits, not "consider renaming this variable" — just behavioral deltas. This used to do X, now it does Y.&lt;/p&gt;

&lt;p&gt;The output is split into two sections. First, numbered regressions with severity ratings — things like "the retry loop now exits after 3 attempts instead of 5" or "the error response no longer includes the request ID." Then a "Cleared" section listing every change it reviewed and found safe. That second section matters more than it sounds — I'll explain why below.&lt;/p&gt;

&lt;p&gt;A typical output looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fycco56eb4oy8ouxgur0z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fycco56eb4oy8ouxgur0z.png" alt="Typical output of regression-dog"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's unpack the magic
&lt;/h2&gt;

&lt;p&gt;The whole prompt is meticulously crafted to keep the LLM focused on a well-grounded task. Every line is there for a reason:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Do NOT run tests, typechecks, linters, or build commands.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Protects the agent's context window so the underlying LLM can invest its reasoning where it matters.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Enumerate behavioral differences: this used to do X, now it does Y.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It poses a specific, concrete question: what are all the behavioral changes in this diff? This is a grounded task, unlike open-ended "review my code" prompts.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Do not judge whether the old or new behavior is correct - just surface the delta.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Picking apart code is an LLM's happy place. Judging intent isn't. This keeps it where it's strongest.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Do not flag pre-existing issues or suggest improvements&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Shuts down a rabbit hole agents love going down.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Add a "Cleared" section listing items that were reviewed and found to have no issues.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This sounds cosmetic but it's load-bearing. When the agent inspects a code change, it has two outlets: either the change is safe (goes to "Cleared") or it's a behavioral difference (goes to "Regressions"). This symmetry forces an explicit decision on every change instead of quietly skipping things it's unsure about. It improved recall noticeably when I added it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I actually use it
&lt;/h2&gt;

&lt;p&gt;I work on something. When I think it's ready, I open a fresh Claude Code session and type something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flag all regressions in this branch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A fresh session matters — it keeps the review unbiased by the conversation that produced the code.&lt;/p&gt;

&lt;p&gt;It comes back fast - often under a minute, depending on scope. Even with bigger changes it's significantly faster than the push-to-GitHub-wait-for-bot loop. And it's right there in my terminal, no tab-switching.&lt;/p&gt;

&lt;p&gt;Then I fix things in that same session. It's already loaded with high quality context about the branch, so fixes are fast. Some "regressions" are intentional, so I just move on. Then I open yet another clean session and run it again. Repeat until it comes back clean, or until every flagged item is something I'm deliberately changing.&lt;/p&gt;

&lt;p&gt;This works just as well on feature branches as on pure refactors. Turns out "enumerate what changed" is a useful lens even when you expect changes - it catches the unintended changes hiding next to the intentional ones. You meant to change the retry logic, but you also accidentally changed the error message format - that kind of thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install it
&lt;/h2&gt;

&lt;p&gt;It's on &lt;a href="https://github.com/imaman/skills" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. To install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add https://github.com/imaman/skills &lt;span class="nt"&gt;--skill&lt;/span&gt; regression-dog
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After installing, open a Claude Code session in your repo and ask it to review your branch for regressions. It'll pick up the skill automatically.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>ai</category>
      <category>codereview</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Why I Wouldn't Act on SkillsBench</title>
      <dc:creator>Itay Maman</dc:creator>
      <pubDate>Wed, 25 Feb 2026 10:37:02 +0000</pubDate>
      <link>https://dev.to/itay-maman/why-i-wouldnt-act-on-skillsbench-1h61</link>
      <guid>https://dev.to/itay-maman/why-i-wouldnt-act-on-skillsbench-1h61</guid>
      <description>&lt;p&gt;I came across &lt;a href="https://www.skillsbench.ai/" rel="noopener noreferrer"&gt;SkillsBench&lt;/a&gt; (&lt;a href="https://arxiv.org/pdf/2602.12670" rel="noopener noreferrer"&gt;paper&lt;/a&gt;, Feb 2026) while watching &lt;a href="https://www.youtube.com/watch?v=GcNu6wrLTJc" rel="noopener noreferrer"&gt;Theo&lt;/a&gt;, and was genuinely excited. It asks two critical questions: do curated procedural documents ("Skills") actually help coding agents, and which coding agent utilizes them best? The headline number, +16.2pp from curated Skills, felt immediately actionable.&lt;/p&gt;

&lt;p&gt;Then I started pulling at the methodology, and things unraveled.&lt;/p&gt;




&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;p&gt;SkillsBench is ambitious in scope: 84 tasks, 11 domains, 7 coding agents, 7,308 trajectories. It evaluates tasks under three conditions: no Skills, curated (expert-written) Skills, and self-generated Skills. Each task ships with a fixed Skill package (markdown instructions, sometimes with scripts or templates) provided to the agent alongside the task.&lt;/p&gt;




&lt;h2&gt;
  
  
  The leaderboard
&lt;/h2&gt;

&lt;p&gt;In every benchmark the central outcome is the leaderboard. Here it is Finding 2 (§4.1.1), which crowns Gemini CLI + Flash for best raw performance (48.7%) and Claude Code + Opus 4.5 for largest uplift (+23.3pp). This is a legitimate result — though Flash beating Opus 4.5/4.6 is a bit surprising.&lt;/p&gt;

&lt;p&gt;The more interesting question is what the leaderboard actually measures. To answer that, let's consider the actual mechanism behind Skills: they are prompt pieces loaded into the context on demand. So the pass rate shown in the leaderboard doesn't tell us which coding agent &lt;em&gt;uses Skills best&lt;/em&gt;. It tells us which agent performed the best — but it doesn't tell us whether the Skills &lt;em&gt;mechanism&lt;/em&gt; made any difference, or whether the same result would have been achieved by placing the content directly in the prompt.&lt;/p&gt;

&lt;p&gt;The experiment that would settle this: inject the same Skill content directly into the prompt (baseline) vs. let the harness load Skills through its native discovery mechanism. That experiment isn't in the paper — and it's the one that would justify a benchmark titled "SkillsBench."&lt;/p&gt;

&lt;p&gt;The leaderboard aside, the paper makes several claims about &lt;em&gt;how&lt;/em&gt; and &lt;em&gt;why&lt;/em&gt; Skills help.&lt;/p&gt;




&lt;h2&gt;
  
  
  Here things get complicated
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Skill design findings are confounded by task identity
&lt;/h3&gt;

&lt;p&gt;Two of the paper's design-oriented findings sound practical:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;2–3 Skills are optimal&lt;/em&gt; (+18.6pp); 4+ Skills show diminishing returns (+5.9pp). (Finding 5, §4.2.1)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Moderate-length Skills outperform comprehensive ones&lt;/em&gt; — detailed (+18.8pp) and compact (+17.1pp) beat comprehensive (–2.9pp). (Finding 6, §4.2.2)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The problem: In the experiment design, each task ships with a fixed Skill package, so Skill count and Skill complexity are properties of the task. Hence, the experiment presented in the paper cannot isolate the effect of "number of Skills" from the effect of "which task this is." A task that happens to need 4+ Skills is a different task than one that needs 1. The paper stratifies post-hoc by Skill count and draws causal language ("optimal," "diminishing returns"), but the design doesn't support that inference.&lt;/p&gt;

&lt;p&gt;The same applies to complexity. The N=140 "comprehensive" bucket that shows –2.9pp could simply contain harder tasks. Without controlling for task difficulty — or better, varying Skill count/complexity &lt;em&gt;within&lt;/em&gt; a task — these are correlational observations dressed as design guidelines.&lt;/p&gt;

&lt;h3&gt;
  
  
  The domain-level claims rest on tiny sample sizes
&lt;/h3&gt;

&lt;p&gt;The paper's most striking result is the domain breakdown (Table 4): Healthcare leads at +51.9pp, Manufacturing at +41.9pp. These numbers anchor the paper's claim that domains with knowledge "underrepresented in model pretraining" benefit most from Skills (Finding 4, §4.1.3).&lt;/p&gt;

&lt;p&gt;But Healthcare has &lt;strong&gt;2 tasks&lt;/strong&gt; and Manufacturing has &lt;strong&gt;3&lt;/strong&gt;. A single outlier task — and several individual tasks swing by 70–85pp — can dominate an entire domain's aggregate. With N=2, you're not measuring a domain effect; you're measuring two tasks. The paper reports these figures without confidence intervals at the domain level and without flagging the sample size issue.&lt;/p&gt;

&lt;p&gt;For comparison, Software Engineering (N=16) shows +4.5pp — a much more defensible estimate, but also a much less exciting one.&lt;/p&gt;

&lt;h3&gt;
  
  
  The other findings restate what we already know about prompting
&lt;/h3&gt;

&lt;p&gt;We noted that Skills are lazily loaded prompt pieces. With that in mind, try the thought experiment of replacing "Skills" with "prompt" in the remaining findings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Finding 1 (§4.1.1): curated Skills improve performance → curated, expert-written &lt;strong&gt;prompts&lt;/strong&gt; improve performance.&lt;/li&gt;
&lt;li&gt;Finding 7 (§4.2.3): smaller model + Skills can exceed larger model without Skills → a smaller model with a good &lt;strong&gt;prompt&lt;/strong&gt; can outperform a larger model with a mediocre &lt;strong&gt;prompt&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Neither of these is surprising. The prompting literature has established both points.&lt;/p&gt;

&lt;p&gt;Finding 3 (§4.1.1) — self-generated Skills provide no benefit — is slightly more interesting. Meta-prompting (using a model to generate its own prompts) is a real technique that works in some settings, so this finding could have been novel.&lt;/p&gt;

&lt;p&gt;But the likely dynamic here is more mundane: for tasks where the model lacks domain knowledge, it can't write effective Skills &lt;em&gt;because it lacks the knowledge&lt;/em&gt;. For tasks where the model already has the domain knowledge, the marginal contribution of a Skill is minimal. Either way, performance doesn't improve when the model writes its own Skills. Do the same substitution exercise again and you get "performance doesn't improve when the model provides its own context" — which is not surprising.&lt;/p&gt;




&lt;h2&gt;
  
  
  What would make this credible
&lt;/h2&gt;

&lt;p&gt;The paper asks the right questions but doesn't yet have the experiments to answer them. Some of these came up above; here they are in one place.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Isolate the mechanism.&lt;/strong&gt; A benchmark called "SkillsBench" should measure whether the &lt;em&gt;Skills machinery&lt;/em&gt; matters — not just whether the Skills &lt;em&gt;content&lt;/em&gt; helps. The cleanest test: take the same Skill content and inject it directly into the prompt (baseline) vs. let the harness load it through its native discovery mechanism. If native loading wins, the Skills architecture is doing real work. If the results are equivalent, Skills are just a packaging format for prompt content — useful, but not what the paper claims to measure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Isolate the content.&lt;/strong&gt; A harder but complementary experiment would inject the same token count of topically relevant non-procedural text (API docs, reference material) to test whether procedural &lt;em&gt;structure&lt;/em&gt; specifically drives the gains.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vary Skills within tasks, not across them.&lt;/strong&gt; The Skill design findings (count, complexity) currently can't be separated from task identity. Run the same task multiple times, each time with a different number of Skills, and measure the delta within each task. Same goes for complexity — give the agent a compact Skill vs. an exhaustive one for the same task, and see what happens. This turns correlational observations into actual design guidance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test with a fixed Skill library.&lt;/strong&gt; In the current setup each task gets its own hand-picked Skill package — the agent always has exactly the right Skills for the job. In practice, you write a set of Skills once and they sit there for every task. The interesting experiment is: give the agent a fixed library of, say, 20–30 Skills across all tasks and see if it can discover and apply the right ones. That tests Skill &lt;em&gt;selection&lt;/em&gt;, not just Skill &lt;em&gt;consumption&lt;/em&gt; — which is the harder and more realistic problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;My recommendation: don't act on this paper in its current form. If you're investing in Skills for your agents today, calibrate that investment based on your own trial and error, not on this study's findings.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>benchmarks</category>
      <category>codingagents</category>
    </item>
    <item>
      <title>How a 1982 Atari BASIC Program Captures 2026 Agentic Coding</title>
      <dc:creator>Itay Maman</dc:creator>
      <pubDate>Wed, 11 Feb 2026 07:27:34 +0000</pubDate>
      <link>https://dev.to/itay-maman/how-a-1982-atari-basic-program-captures-2025-agentic-coding-3140</link>
      <guid>https://dev.to/itay-maman/how-a-1982-atari-basic-program-captures-2025-agentic-coding-3140</guid>
      <description>&lt;p&gt;Back in the early '80s, there was this little Atari BASIC &lt;a href="https://gist.github.com/imaman/8fcde0272ed13c7f0fc78a1092bc21fe" rel="noopener noreferrer"&gt;program&lt;/a&gt; used to teach graphics, random numbers, and loops. On one side, a "hare" jumps around randomly, drawing lines in arbitrary directions. On the other, a "tortoise" methodically works through the space column by column, top to bottom.&lt;/p&gt;

&lt;p&gt;The hare's strides give it a huge early lead—you think it's going to win. Yet the tortoise's systematic approach always prevails. For some unknown nerdy reason, I recreated it recently, in &lt;a href="https://gist.github.com/imaman/cb29075f8f511f4a85b1e5070ddc7c20" rel="noopener noreferrer"&gt;HTML/JavaScript&lt;/a&gt;, with a few tweaks. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjqaecw4edhntrdeml3et.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjqaecw4edhntrdeml3et.gif" alt="Race where hare leads early with chaotic patterns but tortoise's methodical column-by-column filling wins (100% vs 97%)." width="640" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Watching it run felt uncomfortably familiar. The parallel to AI coding agents writes itself: in hare mode I let the agent take the wheel, whereas in tortoise mode I am pair-programming with it - small tasks, reviewing, staying hands-on.&lt;/p&gt;

&lt;p&gt;The hare gets to 97% astonishingly fast. It does everything in quick wide strokes: boilerplate, features, and integrations. Work that would take a skilled developer days, done in minutes. But it leaves gaps that are excruciatingly hard to close.&lt;/p&gt;

&lt;p&gt;The tortoise arrives at 97% much later. But when they get there, they keep walking right through to 100%. No invisible wall, just a steady, relentless pace.&lt;/p&gt;

&lt;p&gt;I've been both animals these past few months. The hare is more fun. But more than once, struggling to close that last 3%, I've thought: would I be better off starting from scratch in tortoise mode?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The original "hare and tortoise" program appeared in &lt;a href="https://en.wikipedia.org/wiki/Atari_Games_%26_Recreations" rel="noopener noreferrer"&gt;ATARI® Games and Recreations&lt;/a&gt; by &lt;a href="https://en.wikipedia.org/wiki/Herbert_R._Kohl" rel="noopener noreferrer"&gt;Herb Kohl&lt;/a&gt;, Ted Kahn, Len Lindsay, and Pat Cleland. h/t &lt;a href="https://twitter.com/yonatanm" rel="noopener noreferrer"&gt;@yonatanm&lt;/a&gt; for digging it up.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>coding</category>
      <category>atari</category>
      <category>agents</category>
      <category>ai</category>
    </item>
    <item>
      <title>The Tortoise and The Hare, Revisited</title>
      <dc:creator>Itay Maman</dc:creator>
      <pubDate>Tue, 10 Feb 2026 20:59:34 +0000</pubDate>
      <link>https://dev.to/itay-maman/the-tortoise-and-the-hare-revisited-4jc</link>
      <guid>https://dev.to/itay-maman/the-tortoise-and-the-hare-revisited-4jc</guid>
      <description>&lt;p&gt;This post now lives under a different dev.to article: &lt;a href="https://dev.to/itay-maman/how-a-1982-atari-basic-program-captures-2025-agentic-coding-3140"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>coding</category>
      <category>atari</category>
      <category>agents</category>
      <category>ai</category>
    </item>
    <item>
      <title>No Habits to Break</title>
      <dc:creator>Itay Maman</dc:creator>
      <pubDate>Tue, 10 Feb 2026 11:29:14 +0000</pubDate>
      <link>https://dev.to/itay-maman/no-habits-to-break-2g80</link>
      <guid>https://dev.to/itay-maman/no-habits-to-break-2g80</guid>
      <description>&lt;p&gt;&lt;strong&gt;I switched from Claude Code to Codex this week&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Codex 5.3 dropped the same day as Opus 4.6, and early results &lt;a href="https://www.youtube.com/watch?v=RYWrK2hsIB8" rel="noopener noreferrer"&gt;favored Codex&lt;/a&gt; — so after six-plus months as a die-hard Claude Code user, I switched. Took me minutes. Literally, minutes. I'll probably switch back the moment Opus pulls ahead again.&lt;/p&gt;

&lt;p&gt;Switching IDEs used to be nothing like this. Moving from IntelliJ to VS Code was a genuine project: weeks of hunting for equivalent plugins, remapping keybindings etched into muscle memory, recreating snippets and templates. Real lock-in, built from years of accumulated customization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why the difference?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's the text interface. It's a far less rigid medium than whatever surface area we used to rely on — dropdown menus, key combinations, or configuration files. With a text interface, the prompts I wrote for Claude Code work just as well in Codex. There's almost nothing to learn.&lt;/p&gt;

&lt;p&gt;In tech circles, the question of whether apps built on LLMs have moats gets a lot of attention. But as this anecdote shows, the AI labs themselves might have even less.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this means&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;If you're behind, catching up is purely a technical problem.&lt;/strong&gt; Google with Gemini doesn't need to build a better model &lt;em&gt;and&lt;/em&gt; break user habits. They "just" need to build a better model. That's hard, but it's one hard thing — and arguably easier than changing user behavior. The flip side: if you're ahead, you're only ahead until the next benchmark. Today's lead means nothing when switching takes minutes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Benchmarks matter and will keep mattering.&lt;/strong&gt; Low switching friction keeps competition healthy and value-based — which is exactly what we're seeing. That's why there's so much discussion about LLM benchmarks. Nobody obsessed over IDE benchmarks. There was no point — you weren't going to switch anyway.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The no-moat effect extends beyond coding agents.&lt;/strong&gt; It applies to most products where the primary interface is chat. Anywhere the interaction is primarily text, switching friction drops. Though once a product accumulates your data, or you've built workflows around it, switching costs return.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For decades, "incumbent advantage" meant something. Users accumulated habits, configurations, workflows — and that accumulation was a moat. We're used to thinking this way. But in the era of LLM-based products, the only thing that matters is whether your product is better &lt;em&gt;right now&lt;/em&gt;. Yesterday's gone.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>product</category>
      <category>coding</category>
    </item>
    <item>
      <title>Codex 5.3 vs. Opus 4.6: who wins on a real coding task?</title>
      <dc:creator>Itay Maman</dc:creator>
      <pubDate>Sun, 08 Feb 2026 10:54:26 +0000</pubDate>
      <link>https://dev.to/itay-maman/codex-53-vs-opus-46-who-wins-on-a-real-coding-task-476o</link>
      <guid>https://dev.to/itay-maman/codex-53-vs-opus-46-who-wins-on-a-real-coding-task-476o</guid>
      <description>&lt;p&gt;OpenAI and Anthropic dropped their latest coding models practically at the same time: &lt;a href="https://openai.com/index/introducing-gpt-5-3-codex/" rel="noopener noreferrer"&gt;Codex 5.3&lt;/a&gt; and &lt;a href="https://www.anthropic.com/news/claude-opus-4-6" rel="noopener noreferrer"&gt;Opus 4.6&lt;/a&gt;. So I did the obvious thing: made them fight.&lt;/p&gt;

&lt;p&gt;This is how it went down: I pulled a few key sections from a real npm package's README (~1,500 chars) and used them as a spec. Each agent got the same prompt: implement this spec as a complete, publishable TypeScript repo. The spec describes &lt;a href="https://github.com/moojo-tech/monocrate" rel="noopener noreferrer"&gt;monocrate&lt;/a&gt;, a monorepo publishing CLI we recently open-sourced.&lt;/p&gt;

&lt;p&gt;I then fed the implementations produced by each agent — along with the existing monocrate codebase as a baseline — into a judging process. Seven LLMs judged every pairwise matchup, each evaluated twice with order swapped to reduce bias. The question was deliberately simple: "which repo is a better starting point?" — not "does it work?" A win means a judge thought the code was a stronger foundation. This keeps comparisons clean. &lt;a href="https://gist.github.com/imaman/da4957f151208806953133f2f08440c2" rel="noopener noreferrer"&gt;Full methodology here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Although simple, this setting — the task and its evaluation scheme — is a reliable yardstick for assessing the overall coding capabilities of the participating models.&lt;/p&gt;

&lt;h2&gt;
  
  
  Leaderboard
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Agent&lt;/th&gt;
&lt;th&gt;Win %&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Baseline (human + Opus 4.5, iterative)&lt;/td&gt;
&lt;td&gt;79%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Codex 5.3&lt;/td&gt;
&lt;td&gt;63%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Opus 4.6&lt;/td&gt;
&lt;td&gt;43%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Codex 5.2&lt;/td&gt;
&lt;td&gt;41%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Opus 4.5&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Takeaways
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Codex 5.3 takes it.&lt;/strong&gt; It was declared winner in 35 out of 56 judgments — more than any other competitor besides the baseline. In the direct matchup against Opus 4.6, it won 10-4. And it wasn't just Opus 4.6 — Codex 5.3 beat &lt;em&gt;every&lt;/em&gt; competitor head-to-head. A clear winner. Here's the full head-to-head breakdown:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Matchup&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Codex 5.3 vs. Opus 4.6&lt;/td&gt;
&lt;td&gt;Codex 5.3 wins 10-4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex 5.3 vs. Codex 5.2&lt;/td&gt;
&lt;td&gt;Codex 5.3 wins 9-5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex 5.3 vs. Opus 4.5&lt;/td&gt;
&lt;td&gt;Codex 5.3 wins 12-2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Opus 4.6 vs. Codex 5.2&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Tie 7-7&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Opus 4.6 vs. Opus 4.5&lt;/td&gt;
&lt;td&gt;Opus 4.6 wins 9-5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex 5.2 vs. Opus 4.5&lt;/td&gt;
&lt;td&gt;Codex 5.2 wins 8-6&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Opus 4.6 and Codex 5.2 are practically tied.&lt;/strong&gt; Opus 4.6's overall win rate is 2 percentage points higher (43% vs. 41%), but in their direct matchup they split 7-7. Anthropic's latest model landed exactly even with OpenAI's &lt;em&gt;previous&lt;/em&gt; generation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Within each vendor, the generational jump is clear.&lt;/strong&gt; Codex 5.3 beat 5.2 (9-5), Opus 4.6 beat 4.5 (9-5).&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;So we have a winner. And it's Codex 5.3. Opus 4.6 is quite behind.&lt;/p&gt;

&lt;p&gt;And while this looks like a one-shot benchmark, the judging scheme — "which repo is a better starting point?" — means the results apply more broadly. We're measuring the quality of the headstart you get, which matters whether you're shipping on the first try or settling in for a many-shot session.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://github.com/moojo-tech/monocrate" rel="noopener noreferrer"&gt;monocrate&lt;/a&gt; is MIT licensed. Judged by GPT-5 Mini, Claude Sonnet 4.5, DeepSeek v3.2, Gemini 2.5 Flash, Devstral 2512, Sonar Pro, and Qwen3 Coder 30B.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>coding</category>
      <category>benchmark</category>
    </item>
    <item>
      <title>The Elephant in the Room: Systems Thinking Meets Coding Agents</title>
      <dc:creator>Itay Maman</dc:creator>
      <pubDate>Fri, 06 Feb 2026 09:43:58 +0000</pubDate>
      <link>https://dev.to/itay-maman/the-elephant-in-the-room-systems-thinking-meets-coding-agents-1ko3</link>
      <guid>https://dev.to/itay-maman/the-elephant-in-the-room-systems-thinking-meets-coding-agents-1ko3</guid>
      <description>&lt;p&gt;I just read Paul Homer's latest post, &lt;a href="https://theprogrammersparadox.blogspot.com/2026/02/systems-thinking.html" rel="noopener noreferrer"&gt;Systems Thinking&lt;/a&gt;, on The Programmer's Paradox. It's a well written, thought-provoking piece about the two schools of thought in building complex software: laying out a full specification that accounts for all the dependencies upfront, or evolving the system incrementally over time. Evolution versus Engineering, as he puts it.&lt;/p&gt;

&lt;p&gt;I found myself nodding along, especially at his observation about the company with 3000+ active systems that had evolved over fifty years into a shaky house of cards. But as I kept reading, it hit me that this framework extends naturally into something the post got me thinking about: this is &lt;em&gt;exactly&lt;/em&gt; the tension we're navigating right now with coding agents.&lt;/p&gt;

&lt;p&gt;The two approaches the post describes map almost perfectly onto the two modes of working with AI coding tools. You can write a comprehensive spec and hand it to the agent all at once, or you can work in small, focused chunks.&lt;/p&gt;

&lt;p&gt;The irony is that the comprehensive-spec approach is hard for exactly the same reasons the post lays out: real systems have deep, tangled dependencies, and no one — no matter how experienced — can fully work through all of them in advance. If we were good at writing complete specs, we wouldn't have 3000 systems in the first place.&lt;/p&gt;

&lt;p&gt;But the incremental approach has its own failure mode with agents. Each chunk gets better individual focus, and you can course-correct as you go — but the agent loses the holistic view. You end up with exactly the kind of inconsistency described in evolved systems, just at a faster pace — and this happens whether you're working in one long session or starting fresh each time.&lt;/p&gt;

&lt;p&gt;The "balanced path in the middle" Homer says he hasn't found in decades of practice might actually be the key challenge in AI-assisted development right now: how do you give an agent enough context about the whole to keep each small step coherent, without needing to solve the impossible problem of specifying everything in advance?&lt;/p&gt;

</description>
      <category>agents</category>
      <category>coding</category>
      <category>software</category>
    </item>
    <item>
      <title>Just When I Thought I Was Out, The Code Pulls Me Back In</title>
      <dc:creator>Itay Maman</dc:creator>
      <pubDate>Thu, 05 Feb 2026 15:38:51 +0000</pubDate>
      <link>https://dev.to/itay-maman/just-when-i-thought-i-was-out-the-code-pulls-me-back-in-101l</link>
      <guid>https://dev.to/itay-maman/just-when-i-thought-i-was-out-the-code-pulls-me-back-in-101l</guid>
      <description>&lt;p&gt;Code is unforgiving. It either works or it doesn't. No hand-waving, no "you know what I mean," no close enough. This is what makes programming frustrating—and what makes programmers valuable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The gap between "works" and "works correctly"
&lt;/h2&gt;

&lt;p&gt;Storing passwords in plaintext works. Validating user input only on the frontend works. Hardcoding API keys in your public endpoint works. Ship any of these and your app will function—until it doesn't, spectacularly.&lt;/p&gt;

&lt;p&gt;Out of all the ways something appears to work, only a narrow subset actually works correctly. Finding your way to that subset is the job.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fglr6t8z5se8zrsjyd6lf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fglr6t8z5se8zrsjyd6lf.png" alt="Corn maze: tiny " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A manager can say "make it work." A PM can wave their hands at a spec. But the developer can't—the programming language won't let them. They have to fight until the code actually works—not just appears to.&lt;/p&gt;

&lt;p&gt;For decades, this asymmetry was just how software got built. Then came agents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agents: finally, relief
&lt;/h2&gt;

&lt;p&gt;AI coding agents flip this dynamic. Suddenly, &lt;em&gt;you&lt;/em&gt; can hand-wave. You can say "make it work" and often... it does. Write me a function that does X. Hook up this API. Fix this bug.&lt;/p&gt;

&lt;p&gt;This is a real relief. No more battling a machine that only understands formal syntax. You can finally speak in human terms. The friction is gone.&lt;/p&gt;

&lt;p&gt;But when the agent produces code that runs, you can't tell from the output whether it's correct or just appears to work. That distinction lives in the code itself—how the API key is stored, whether validation happens server-side, how errors are handled.&lt;/p&gt;

&lt;p&gt;I ran into this recently. I asked an agent to migrate our hand-rolled API call logic to react-query. We had a mix—some places already used react-query, others had hand-crafted code that was essentially a poor imitation of it. The agent did a great job, except in one place where it chose &lt;a href="https://tanstack.com/query/v5/docs/framework/react/guides/mutations" rel="noopener noreferrer"&gt;useMutation&lt;/a&gt; instead of &lt;a href="https://tanstack.com/query/v5/docs/framework/react/guides/queries" rel="noopener noreferrer"&gt;useQuery&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In its defense: it was a borderline case. There was a minor side effect on the server. But the main point of the call was fetching a token for later use, and it happened on mount—not in response to user action, which is &lt;code&gt;useMutation&lt;/code&gt;'s typical pattern.&lt;/p&gt;

&lt;p&gt;Weird things started happening in dev. React's StrictMode double-mounts components, and the mutation fired twice—but the backend refused to generate a second token, so we'd get errors. A dev-only problem, sure—but it seriously slowed us down while we hunted for the cause.&lt;/p&gt;

&lt;p&gt;We asked agents to debug it. They spotted the StrictMode double-mount but kept trying to make &lt;code&gt;useMutation&lt;/code&gt; work—patching the symptom, not questioning the choice. Only by reading the code did I see the real fix: this should have been &lt;code&gt;useQuery&lt;/code&gt; all along. Once I switched it, the problems vanished.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh34yxjtk5yf4wpk2u4kr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh34yxjtk5yf4wpk2u4kr.png" alt="Code diff showing useMutation replaced with useQuery—the one fix that solved the problem" width="706" height="646"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The agent had done exactly what I asked across dozens of call sites. It got one wrong—in a way that was hard to see and hard to debug, because the choice wasn't crazy. It was just incorrect—and catching it required stepping into the code, questioning the structures in it. Maybe I unknowingly leaned on human critical thinking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pulled back in
&lt;/h2&gt;

&lt;p&gt;So we're not free from the code. Disengaging from it lands us right in "appears to work" territory.&lt;/p&gt;

&lt;p&gt;And now it's arguably harder: reading code is often harder than writing it. Especially code you didn't write, shaped by patterns you didn't choose, solving the problem in ways you didn't anticipate.&lt;/p&gt;

&lt;p&gt;Agents are often hailed as a way out of the messy coding layer. But &lt;a href="https://www.youtube.com/watch?v=UPw-3e_pzqU" rel="noopener noreferrer"&gt;just when you think you're out&lt;/a&gt;, the code pulls you back in. Turns out, they merely shift your work from writing to reviewing.&lt;/p&gt;

&lt;p&gt;And reviewing at the pace agents write takes practice. There's a craft to it—one worth developing.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>webdev</category>
      <category>programming</category>
      <category>security</category>
    </item>
  </channel>
</rss>
