<?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: Mixture of Experts</title>
    <description>The latest articles on DEV Community by Mixture of Experts (@mixture-of-experts).</description>
    <link>https://dev.to/mixture-of-experts</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%2F3916862%2F03b63012-0632-4c84-b324-269b51e29ad6.jpg</url>
      <title>DEV Community: Mixture of Experts</title>
      <link>https://dev.to/mixture-of-experts</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mixture-of-experts"/>
    <language>en</language>
    <item>
      <title>AI Engineer World's Fair 2026 Highlights</title>
      <dc:creator>Mixture of Experts</dc:creator>
      <pubDate>Sun, 05 Jul 2026 00:38:33 +0000</pubDate>
      <link>https://dev.to/mixture-of-experts/ai-engineer-worlds-fair-2026-highlights-4gh1</link>
      <guid>https://dev.to/mixture-of-experts/ai-engineer-worlds-fair-2026-highlights-4gh1</guid>
      <description>&lt;p&gt;Checkout our highlights below for the AI Engineer World's Fair 2026 Conference in SF!&lt;/p&gt;

&lt;p&gt;We cover the latest on software factories, loop engineering, Fable 5 prompting guide, hardware improvements, and more!&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.youtube.com/@mixture-of-experts/shorts" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fyt3.googleusercontent.com%2FFYgGgCkTnX6YAF0_pd5P1jwTCiio9uvdhPODnLAbdsDA11iY5Xc8r_YRgohPB8MnN8t2ouwy%3Ds900-c-k-c0x00ffffff-no-rj" height="900" class="m-0" width="900"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.youtube.com/@mixture-of-experts/shorts" rel="noopener noreferrer" class="c-link"&gt;
            Mixture of Experts with Alex &amp;amp; Norin Lavaee - YouTube
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Short videos on coding agents and AI engineering. What actually works for developers, what's breaking the news, and how to best use coding agents. 

From siblings Alex and Norin Lavaee. Alex is at Microsoft Research building agentic systems and Norin is in AI/ML product ex Microsoft, Cisco, and some start-ups (founder + product manager). 

Connect with us on X: https://x.com/norlava

Mixture of Experts Blog: https://alexlavaee.me/blog/

          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.youtube.com%2Fs%2Fdesktop%2F1daead2b%2Fimg%2Ffavicon.ico" width="48" height="48"&gt;
          youtube.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>news</category>
    </item>
    <item>
      <title>Ranking HumanLayer and Sakana AI Fugu-Ultra w/ Codex on the same issue</title>
      <dc:creator>Mixture of Experts</dc:creator>
      <pubDate>Mon, 29 Jun 2026 03:55:41 +0000</pubDate>
      <link>https://dev.to/mixture-of-experts/ranking-humanlayer-and-sakana-ai-fugu-ultra-w-codex-on-the-same-issue-5ga3</link>
      <guid>https://dev.to/mixture-of-experts/ranking-humanlayer-and-sakana-ai-fugu-ultra-w-codex-on-the-same-issue-5ga3</guid>
      <description>&lt;p&gt;Lots of new releases lately so thought it'd be nice to compare some new ones. Let's walk through an example real world issue comparing HumanLayer using GPT 5.5 Codex High and Codex using Sakana AI Fugu-Ultra. I show how each works, when to use each, and how to leverage workflows to test issues for correctness and code quality.&lt;/p&gt;

&lt;p&gt;For how to improve prompting and workflows, you can check out our open-source playbook: github.com/bastani-inc/atomic/blob/main/docs/workflow-playbook.md&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>csharp</category>
    </item>
    <item>
      <title>AI Research Engineer Open-Sources His Entire Workflow and Prompts</title>
      <dc:creator>Mixture of Experts</dc:creator>
      <pubDate>Wed, 17 Jun 2026 00:18:59 +0000</pubDate>
      <link>https://dev.to/mixture-of-experts/ai-research-engineer-open-sources-his-entire-workflow-and-prompts-20jm</link>
      <guid>https://dev.to/mixture-of-experts/ai-research-engineer-open-sources-his-entire-workflow-and-prompts-20jm</guid>
      <description>&lt;p&gt;Fable 5 came and went. And because it was taken away so quickly, developers wanted it back even more. Scarcity has a way of making things feel more valuable.&lt;/p&gt;

&lt;p&gt;Reviews during its short tenure described a model that was very capable and great at churning on long-running, ambiguous tasks. But it was too expensive. The model was also intelligent enough that, on large work and overhauls, it tended to overthink. Most likely because of its size. For iterative work like implementing a feature or change, Fable 5 was comparable head-to-head with GPT 5.5, except Fable 5 would run for 10x as long: a larger model, more overthinking, and more time. The other issue was fallback behavior. If you hit a case where the model needed to call the fallback Opus model, you would not necessarily know it happened, and you would be billed at the higher charge.&lt;/p&gt;

&lt;p&gt;Nonetheless, it was a noticeable change compared to existing models. It was good at churning on a specific, goal-oriented problem. For example, optimizing a slow path by repeatedly profiling, tracing call sites, tightening hot loops, and validating the regression budget. For architecture design, it was still not remarkable. So it was good at that goal-oriented push, but even within that you needed to run it in sessions, review its code, and steer or compact to get the results you wanted.&lt;/p&gt;

&lt;p&gt;It is a good model to use for planning, research, and review, which is where I had adopted it. I saw real benefits. However, when it came to orchestration or running workflows, I still believe GPT 5.5 is better and more cost-effective on both tokens and time. Personally, I care about token spend, but I care immensely more about my time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bigger problem Fable 5 exposed
&lt;/h2&gt;

&lt;p&gt;Model capability aside, I still think we are missing a bigger problem, and Fable 5 put a magnifying lens on it because of the nature of its capabilities. AI adoption in organizations is still a challenge for many developers because there are not enough good examples of how power users of coding agents are prompting, running workflows, reviewing outputs, and taking action.&lt;/p&gt;

&lt;p&gt;So I am turning my process into a public &lt;a href="https://github.com/bastani-inc/atomic/blob/main/docs/workflow-playbook.md" rel="noopener noreferrer"&gt;workflow playbook&lt;/a&gt;: how I prompt, how I run workflows, how I steer them, and how I handle the edge cases that show up when agents are doing real work.&lt;/p&gt;

&lt;p&gt;Here is the prompt I asked my coding agent to run:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Workflow usage guide generator&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A privacy-preserving prompt for turning private workflow usage into a public developer guide.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;prompt&amp;gt;
You are helping me turn my private Atomic workflow usage into a public, developer-facing guide.

Your job is to analyze my workflow behavior, steering patterns, prompts, and decision-making style without exposing any private information.

&amp;lt;privacy_rules&amp;gt;
- Do NOT quote private session text verbatim unless it is completely generic.
- Do NOT include names, company details, repository names, customer data, file paths, secrets, strategy, internal roadmap details, or private implementation specifics.
- Replace concrete/private details with neutral placeholders like [project], [bug], [workflow], [internal tool], [customer], or [repo].
- Prefer synthesized examples over copied examples.
- If a useful example depends on private context, rewrite it as a safe fictionalized version.
- Flag anything that may be unsafe to publish instead of including it.
&amp;lt;/privacy_rules&amp;gt;

&amp;lt;task&amp;gt;
Analyze my workflow usage and produce a practical guide for other developers showing how I use workflows effectively.
Focus on concrete behaviors, reusable prompts, steering moves, and examples developers can copy.
&amp;lt;/task&amp;gt;

Look for:
1. The types of workflows I run most often.
2. How I define objectives and done criteria.
3. How I break down complex work into stages.
4. How I steer workflows when they go off track.
5. How I respond to workflow prompts or blocked stages.
6. How I use verification, tests, reviews, or acceptance criteria.
7. How I decide when to interrupt, resume, pause, or rerun.
8. Prompt patterns I reuse.
9. Mistakes or anti-patterns I avoid.
10. Lessons that would help another developer get better results.

&amp;lt;output_format&amp;gt;
Produce the following:

# Workflow Usage Guide

## 1. Executive Summary
A short overview of my workflow style.

## 2. Core Principles
List 5-10 principles I seem to follow when running workflows.

## 3. Common Workflow Patterns
For each pattern:
- Pattern name
- When I use it
- What the workflow usually does
- Why it works
- Safe public example

## 4. Steering Patterns
For each steering behavior:
- Situation
- What I usually say or do
- Why it helps
- Reusable public prompt

## 5. Prompt Templates
Create reusable prompt templates based on my behavior.
Do not copy private prompts directly. Generalize them.

Include templates for:
- Starting a workflow
- Tightening scope
- Adding acceptance criteria
- Redirecting a stage
- Handling a failed validation
- Asking for synthesis
- Turning results into implementation steps

## 6. Concrete Public Examples
Create 3-5 fictionalized but realistic examples showing how a developer could use these patterns.

Each example should include:
- Scenario
- Initial workflow objective
- Steering message
- Validation step
- Final outcome

## 7. Anti-Patterns
List behaviors I avoid or correct, such as vague objectives, missing validation, overbroad prompts, or accepting unverified output.

## 8. Publishability Review
Create a table with:
- Section
- Safe to publish? yes/no
- Risk
- Suggested redaction or rewrite

Important: prioritize usefulness for developers while preserving privacy.
&amp;lt;/prompt&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The final asset is a workflow playbook you can hand to your own coding agent. It open-sources how I run workflows and prompt effectively, including how I define scope, set done criteria, steer blocked stages, verify results, and recover when a workflow goes off track.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/bastani-inc/atomic/blob/main/docs/workflow-playbook.md" rel="noopener noreferrer"&gt;Workflow playbook&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflows are just my process made repeatable
&lt;/h2&gt;

&lt;p&gt;The workflows I run are not the dynamic workflows or loops you see in Claude Code, Codex &lt;code&gt;/goal&lt;/code&gt;, or Hermes Agent. They are literally programmatic automations of the work I already do, with human-in-the-loop checkpoints, review gates, and the ability to steer agents mid-run.&lt;/p&gt;

&lt;p&gt;I do not manually prompt much anymore.&lt;/p&gt;

&lt;p&gt;A good example: say you are doing a refactor. You probably find yourself running a prompt, then &lt;code&gt;/compact&lt;/code&gt;, then running the same prompt again. Repeat that three times, compact again, and keep going. You probably do this very frequently.&lt;/p&gt;

&lt;p&gt;It turns out that can just become a workflow. You repeat and micromanage less without giving up human autonomy. You also reduce slop because the workflow design handles the piping: what gets passed forward, what gets reviewed, what gets rejected, and where the human needs to make a decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost, time, and quality
&lt;/h2&gt;

&lt;p&gt;In terms of cost, I spend more than regular Codex but significantly less than using Claude Code. In terms of timed runs, it is about the same as Codex at first glance, and much less again than Claude Code.&lt;/p&gt;

&lt;p&gt;The quality of the result is where it shines. The workflow approach has a win rate of 75% against both Codex and Claude Code on the exact same issues, which means I actually spend way less time than I would be using Codex alone.&lt;/p&gt;

&lt;p&gt;I tried solving real problems, not oversaturated benchmarks. I asked it to work through different kinds of tasks in a real-world codebase: a migration, a new feature, and a bug fix. The point was not to find one cherry-picked issue where a coding agent looked good. The point was to see whether a workflow-first approach stayed useful across different shapes of software work.&lt;/p&gt;

&lt;p&gt;The migration required moving embedded PNG metadata from an older latin1-oriented chunk format to a UTF-8-compatible format while preserving legacy fallback behavior. The new feature required surfacing collaboration connection failures in the UI, which meant tracking transient connection state, wiring lifecycle events, cleaning up listeners, preserving accessibility, and adding tests. The bug fix required correcting arrow-curve behavior inside closed shapes without changing the expected behavior outside those shapes.&lt;/p&gt;

&lt;p&gt;Across the migration and new-feature issues, the workflow-generated PRs consistently landed the safest technically correct change compared with the Claude Code and Codex PRs. For the PNG metadata migration, the Workflows PR wrote spec-correct UTF-8 iTXt, selected Excalidraw-keyed metadata, preserved legacy tEXt fallback, and validated emoji and on-disk chunk behavior; the other PRs had subtle compatibility bugs where unrelated or malformed iTXt chunks could shadow valid legacy metadata. For the collaboration-status feature, the Workflows PR had the best transient non-persistent state model, Socket.IO lifecycle handling, listener cleanup, accessibility, and targeted tests, while the alternatives had shared error-indicator state bugs or narrower lifecycle and UI coverage.&lt;/p&gt;

&lt;p&gt;The bug-fix case showed the same pattern: the Workflows PR solved the actual arrow-curving bug with the narrowest safe behavioral change. It prevented premature auto-finalization while drawing inside the same start-bound shape, preserved normal binding and finalization for other targets, and added meaningful regression coverage. The rejected Claude Code and Codex alternatives either introduced a high-severity regression where simple click-created arrows no longer auto-finalized on bindable targets, or had weaker coverage around binding gaps, different target shapes, and finalization edge cases. Overall, workflows reduced AI slop by producing changes that were tighter in scope, safer for compatibility, better tested, and more careful about edge-case behavior than the competing agent-generated PRs.&lt;/p&gt;

&lt;p&gt;That is why I am sharing the workflow playbook instead of only writing about the idea. The goal is for another developer to copy the patterns, adapt the prompts, and run a similar workflow-first process on their own codebase without needing my private context.&lt;/p&gt;

&lt;p&gt;Personally, I see reliability and improved model capability exceed expectations when we keep the developer in the loop, not cut them out. I live this thesis daily.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I am sharing this
&lt;/h2&gt;

&lt;p&gt;I think we need good examples of how to work with coding agents: what each person's workflow looks like, how they prompt, where they intervene, where they trust automation, and where they refuse to give up control.&lt;/p&gt;

&lt;p&gt;The playbook is meant to make that concrete. It covers the workflow moves that matter in practice: starting with a tight objective, adding acceptance criteria, redirecting a stage, responding to blocked agents, handling failed validation, deciding when to pause or rerun, and turning the final synthesis into implementation steps.&lt;/p&gt;

&lt;p&gt;The point is to demystify the work and make it easier for all developers to build. Let's make the bar as low as possible to get good results.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/bastani-inc/atomic/blob/main/docs/workflow-playbook.md" rel="noopener noreferrer"&gt;Workflow playbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/flora131/atomic" rel="noopener noreferrer"&gt;Atomic&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>promptengineering</category>
    </item>
    <item>
      <title>Build reliable long running agents w/ verification, worktrees, skills, subagents, &amp; HIL/review gates</title>
      <dc:creator>Mixture of Experts</dc:creator>
      <pubDate>Tue, 09 Jun 2026 21:36:49 +0000</pubDate>
      <link>https://dev.to/mixture-of-experts/build-reliable-long-running-agents-w-verification-worktrees-skills-subagents-hilreview-gates-4m1c</link>
      <guid>https://dev.to/mixture-of-experts/build-reliable-long-running-agents-w-verification-worktrees-skills-subagents-hilreview-gates-4m1c</guid>
      <description>&lt;p&gt;There’s been a lot of buzz and discussion around loops and workflows in the past few days. There have also been many people chiming in that they’ve been doing this all along, posts about how it works, but less code examples that work for production codebases. At the end of the day, the goal is really around making long running agents reliable and steerable inside of real codebases. This article shows how to do that and how to build your own with the actual code provided.&lt;/p&gt;

&lt;p&gt;You’ll see how an engine was built to power these loops or workflows. These terms are used interchangeably because it doesn't matter what word is used to churn hype, it's about how it works and what result it drives for agent reliability. You’ll also see the path to this architecture and why it was built the way it was and then the code (skip to whatever part you want).&lt;/p&gt;

&lt;p&gt;There’s been good work to properly define what a loop is, but how do you just build one, and how do you build it in such a way that it doesn’t burn tokens and is reliable? &lt;a href="https://x.com/mvanhorn/status/2063865685558903149?s=20" rel="noopener noreferrer"&gt;@mvanhorn&lt;/a&gt; had a good writeup on the history of the concept, how developers are employing it, and how there is still such a major gap between AI used in real-world deployments because you do need a “production” version of a loop:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which is why every serious 2026 write-up on loops converges on the same three hard stops: a maximum iteration count, no-progress detection, and a token or dollar budget ceiling. The romantic version of loops is that you write the loops and a thousand agents build your company overnight. The production version is that you write the loops, and most of your job is making sure they halt. Gartner puts agentic AI at the peak of inflated expectations, with only about seventeen percent of organizations actually deploying agents. The gap between the timeline and the receipts is the real state of play.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Additionally, &lt;a href="https://x.com/dexhorthy" rel="noopener noreferrer"&gt;@dexhorthy&lt;/a&gt; clearly pointed out that if you were to hypothetically start looping through everything without a care, you’ll end up in the zone of not understanding your codebase and slop:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Here’s what’s gonna happen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you replace your code review with feedback loops (sentry, datadog, support tickets, etc)&lt;/li&gt;
&lt;li&gt;you stop reading the code&lt;/li&gt;
&lt;li&gt;software factory fixes everything&lt;/li&gt;
&lt;li&gt;one day something breaks at 3am, agent can’t fix it&lt;/li&gt;
&lt;li&gt;nobody’s read the code in 3 months&lt;/li&gt;
&lt;li&gt;you have 3 weeks of downtime trying to re-onboard and fix it&lt;/li&gt;
&lt;li&gt;you lose significant % of your contracts and users&lt;/li&gt;
&lt;li&gt;your company is now dead.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you’ve been trying to figure this out, you have probably noticed that coding agents don’t scale when it comes to work that is complex and ambiguous. You may also disagree with the sentiment that all you need is the model and for it to delegate its own orchestration. Real production code needs management across dependencies and teams, and you don’t have infinite tokens to burn. We feel the same.&lt;/p&gt;

&lt;p&gt;We started with a harness that orchestrated multiple agents into workflows powered by the Opencode, Claude Code, and GitHub Copilot CLI SDKs. This approach didn't scale well because the SDKs all have slightly different interfaces, each has its own limitations for what you may want control over, and, lastly, as these teams are shipping fast, they frequently introduce bugs.&lt;/p&gt;

&lt;p&gt;Then we learned about Pi and started exploring it as a minimal coding agent implementation. Pi is great because it is a simple harness and still fully extensible. The benefit of Pi is that you can leverage its large ecosystem of extensions/tools/MCPs, and it is a well-maintained project. We took Pi and used it as the runtime with control over its functionality and security, so we could focus on building a powerful engine for the coding agent to execute autonomously rather than worry about supporting multiple interfaces, squashing bugs, and managing three separate backends. The migration to Pi was the third rewrite of the system, but well worth it.&lt;/p&gt;

&lt;p&gt;The next challenge we ran into are around traditional orchestration, reliability, and observability. The coding agent is an incredibly powerful primitive, but it becomes clear that it needs proper scaffolding with observability to work. From working with coding agents, you know that you need to be able to pass the proper context, steer, and have an easy way to observe what is going on so you can interrupt if things go wrong.&lt;/p&gt;

&lt;p&gt;You also probably know that a lot of coding agent work feels reactive instead of proactive. It gets just close enough to what you want, then falls apart in the last 30% of the work, or worse, completely goes off track. You, like most, probably still spend most of your efforts manually prompting, writing markdown programs, or running the same skills in repetition. From all of this, it naturally makes sense to look at a way to automate this process.&lt;/p&gt;

&lt;p&gt;After spending many hours thinking about problems around testing, intent alignment, the software development lifecycle, and speaking to developers about what they saw, experienced, and, very importantly, felt, we ended up with the following features to solve these challenges: review gates, support for parallel execution, human-in-the-loop gates, resume/pause capability for any stage in a loop, being able to steer mid-run, verbatim compaction (not what you see in coding agents today), and defining the workflow with any model that you desire so you can measure and manage your costs. Honestly, each part of the system has been specifically fine-tuned to work exceptionally for long-running coding-agent loops and deserves a blog post of its own for the architecture and how it was conceived. (Let us know if that is interesting, by the way).&lt;/p&gt;

&lt;p&gt;This is not trivial to construct. There is a reason Claude Code dynamic workflows doesn’t have any of these features, because frankly it’s hard to build, and you have to go back to software engineering principles. Sorry, but the model won’t save you here. Secondly, there is a reason Peter, who shared the loops heard round the world tweet, didn’t share his setup. He has likely heavily optimized the OpenClaw ecosystem, and it would require serious reworking to generally work on all codebase shapes. So you need a solution that has good DX and works across different codebases and teams.&lt;/p&gt;

&lt;p&gt;So that is what was built called Atomic. You can call it a workflow engine, a loop, loop engine, workflows, it doesn’t matter. The point is how it works and how easy it is to build your own.&lt;/p&gt;

&lt;p&gt;The inner loop is the traditional ReAct loop where a model will execute until it finishes making tool calls. In contrast, the outer loop is organizing more complex/long-horizon tasks like software engineering into atomic units (like GH issues) and delegating each to a separate instance of an agent. You can take it a step further and even ensure your inner loop is consistent and verifiable. This is where static and dynamic workflows come in. This is not through simple prompts, but rather by giving the model a workflow meta-tool in the inner loop: the ability to define its own subroutines through subagent chaining and tool calling.&lt;/p&gt;

&lt;p&gt;Atomic treats the coding agent as the inner loop and the workflow runtime as the outer loop.&lt;/p&gt;

&lt;p&gt;The inner loop is still the normal agent loop: model reads context, calls tools, observes results, repeats until it produces an answer. Atomic does not replace that. The workflow engine wraps it with a typed, observable, resumable execution layer that decides which agent session runs, with what context, on what model, with which tools, in what order, and with what validation or human gate before continuing.&lt;/p&gt;

&lt;p&gt;A workflow in Atomic is a TypeScript module, not just a prompt. See code at the bottom of the post for what the public API looks like.&lt;/p&gt;

&lt;p&gt;The important part is the boundary it creates. Every &lt;code&gt;ctx.task&lt;/code&gt;, &lt;code&gt;ctx.chain&lt;/code&gt;, &lt;code&gt;ctx.parallel&lt;/code&gt;, &lt;code&gt;ctx.stage&lt;/code&gt;, &lt;code&gt;ctx.workflow&lt;/code&gt;, and &lt;code&gt;ctx.ui.*&lt;/code&gt; call creates explicit runtime structure. Atomic can see the graph, persist the state, attach to a stage, pause it, resume it, steer it, kill it, inspect transcripts, and preserve artifacts. That is very different from asking one model to “please do the following steps.”&lt;/p&gt;

&lt;p&gt;Atomic supports both static and dynamic workflows.&lt;/p&gt;

&lt;p&gt;A static workflow is the versioned TypeScript definition of a workflow. It has declared inputs, declared outputs, stage names, model choices, fallback chains, concurrency limits, human gates, worktree options, and artifact paths. You can commit it to &lt;code&gt;.atomic/workflows&lt;/code&gt;, ship it through an Atomic package, or bundle it into the product.&lt;/p&gt;

&lt;p&gt;A dynamic workflow is when the agent uses the workflow tool at runtime to create a tracked one-off task, chain, or parallel fan-out without a saved workflow file. That gives the model a workflow meta-tool inside its normal ReAct loop. Instead of merely saying it will ask three agents, it can actually spawn three tracked stage sessions, give each one clean context, collect their outputs, and synthesize them. If the pattern proves useful, you can promote it into a real TypeScript workflow.&lt;/p&gt;

&lt;p&gt;The execution model is a DAG, but the developer does not need to manually draw the DAG. Atomic infers it from runtime control flow. Sequential awaits become dependent stages. &lt;code&gt;ctx.parallel&lt;/code&gt; or &lt;code&gt;Promise.all&lt;/code&gt; creates concurrent branches. Loops can create repeated stage groups. Child workflows called with &lt;code&gt;ctx.workflow(...)&lt;/code&gt; are nested under the parent and shown in the same expanded graph. This matters because the graph is not just visualization, it becomes the control plane.&lt;/p&gt;

&lt;p&gt;The runtime tracks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;stage name and status&lt;/li&gt;
&lt;li&gt;input/output contracts&lt;/li&gt;
&lt;li&gt;session file and transcript path&lt;/li&gt;
&lt;li&gt;model and reasoning effort&lt;/li&gt;
&lt;li&gt;fallback model attempts&lt;/li&gt;
&lt;li&gt;errors and warnings&lt;/li&gt;
&lt;li&gt;artifacts and output files&lt;/li&gt;
&lt;li&gt;live pause/resume/interrupt handles&lt;/li&gt;
&lt;li&gt;pending human input&lt;/li&gt;
&lt;li&gt;nested workflow boundaries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The core design principle is that large context moves through files and artifacts, not through the model prompt. Small handoffs can use &lt;code&gt;previous&lt;/code&gt; or &lt;code&gt;{previous}&lt;/code&gt;. Large handoffs should be written to files with &lt;code&gt;outputMode: "file-only"&lt;/code&gt; and passed forward with &lt;code&gt;reads&lt;/code&gt;. This avoids the common failure mode where every stage inherits the full transcript of every prior stage and token usage explodes.&lt;/p&gt;

&lt;p&gt;Atomic also separates context modes. Implementation stages can use forked context when continuity matters. Reviewer stages should usually use fresh context so they are not biased by the implementation agent’s reasoning. That distinction is one of the simplest ways to make review loops more reliable, where the reviewer reads the diff, artifacts, tests, and criteria, not the implementer’s biased thinking.&lt;/p&gt;

&lt;p&gt;Self-verification is also a key part of the design. Atomic’s built-in Goal Runner and Ralph loops do not let the worker declare completion by itself: the worker leaves receipts, then fresh-context reviewers inspect the actual diff, spec, implementation notes, artifacts, and validation expectations. Those reviewers can run or delegate focused validation and must return structured review decisions; malformed decisions, reviewer errors, or unresolved validation gaps fail closed instead of approving. The review round is saved as an artifact, and the loop only stops when the structured verdict or reducer says the work is clean. That turns “the model says it checked its work” into a verification stage another agent or a human can inspect.&lt;/p&gt;

&lt;p&gt;Human input is also part of the runtime. A workflow can call &lt;code&gt;ctx.ui.input&lt;/code&gt;, &lt;code&gt;ctx.ui.confirm&lt;/code&gt;, &lt;code&gt;ctx.ui.select&lt;/code&gt;, or &lt;code&gt;ctx.ui.editor&lt;/code&gt; at the exact point where a decision is needed. The run enters an awaiting-input state, the prompt appears in the workflow UI, and the answer is routed back to the correct stage. This is how you build approval gates, review gates, release gates, and “stop before destructive action” behavior without relying on the model to remember a markdown instruction.&lt;/p&gt;

&lt;p&gt;Reliability comes from making the outer loop explicit. You can set a max iteration count. You can require structured reviewer outputs. You can run independent reviewers and reduce their decisions deterministically. You can fail closed when declared outputs do not validate. You can retry provider failures with &lt;code&gt;fallbackModels&lt;/code&gt;. You can isolate work in git worktrees. You can cap output size. You can pause or interrupt a runaway stage and resume it with a steering message. These are boring software engineering controls, but they are exactly what makes long-running agent work survivable.&lt;/p&gt;

&lt;p&gt;The model and cost are also prioritized. A workflow can use a cheap model for classification, a stronger model for implementation, a different model for review, and a fallback chain for critical stages. Model strings can include reasoning effort, e.g. &lt;code&gt;openai/gpt-5.5:high&lt;/code&gt; or &lt;code&gt;anthropic/claude-haiku-4-5:off&lt;/code&gt;, so cost and latency are controlled per stage instead of globally. Parallelism is explicit too, so a broad fan-out is a deliberate choice rather than the model deciding a path and burning tokens.&lt;/p&gt;

&lt;p&gt;Observability is also a core mechanism. Atomic gives you &lt;code&gt;/workflow status&lt;/code&gt;, &lt;code&gt;/workflow connect&lt;/code&gt;, &lt;code&gt;/workflow attach&lt;/code&gt;, &lt;code&gt;/workflow pause&lt;/code&gt;, &lt;code&gt;/workflow interrupt&lt;/code&gt;, &lt;code&gt;/workflow resume&lt;/code&gt;, and &lt;code&gt;/workflow kill&lt;/code&gt;. You can inspect the graph, attach to a single stage, send a steering message, answer a pending prompt, or resume paused work. The system keeps run history and terminal state around for inspection. A failed workflow is not just a giant lost chat transcript. It is a run with named stages, artifacts, errors, and receipts that you can analyze, measure, and improve.&lt;/p&gt;

&lt;p&gt;So the architecture is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use TypeScript to define the outer loop.&lt;/li&gt;
&lt;li&gt;Use separate agent sessions as atomic stage units.&lt;/li&gt;
&lt;li&gt;Use fresh or forked context intentionally.&lt;/li&gt;
&lt;li&gt;Use artifacts for large handoffs.&lt;/li&gt;
&lt;li&gt;Use typed inputs and outputs as contracts.&lt;/li&gt;
&lt;li&gt;Use parallel branches where independence is real.&lt;/li&gt;
&lt;li&gt;Use review/human gates where correctness matters.&lt;/li&gt;
&lt;li&gt;Use model selection and fallback per stage.&lt;/li&gt;
&lt;li&gt;Persist everything needed to inspect, resume, debug, and measure ROI.&lt;/li&gt;
&lt;li&gt;Let the model operate inside the loop, but do not let it be the loop.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Why not just skills? Skills are useful, but they are instruction bundles. A skill can teach the agent how to do something: how to review code, how to write tests, how to use Bun, how to follow a release process. But a skill does not give you durable execution state. It does not create a graph. It does not create independent sessions. It does not enforce typed inputs or outputs. It does not give you concurrency, pause/resume, stage-level model choices, human gates, artifacts, fallback models, or run inspection.&lt;/p&gt;

&lt;p&gt;In Atomic, skills and workflows are complementary. A workflow decides when and where work happens. A skill improves how a specific stage performs its work. For example, a review stage inside a workflow can invoke a code-review skill. But the skill itself is not the orchestration engine.&lt;/p&gt;

&lt;p&gt;Why not just markdown? Markdown is good for instructions, specs, and documentation. It is bad as a runtime. A markdown checklist cannot validate input schemas. It cannot schedule parallel branches. It cannot persist stage state. It cannot enforce output contracts. It cannot pause a running model call and resume it later. It cannot route a human approval answer to the correct stage. It cannot automatically keep large artifacts out of model context. It cannot expose a graph of what is happening.&lt;/p&gt;

&lt;p&gt;Most markdown “workflows” are really prompts asking the model to simulate a workflow. That works for short tasks, but it degrades as soon as the task becomes long, ambiguous, or failure-prone. The model forgets steps, over-compresses context, repeats itself, hides uncertainty, or claims completion too early. Markdown can describe the process, but something else needs to execute the process.&lt;/p&gt;

&lt;p&gt;Why not any other harness or hooks? You may have seen plenty of lightweight hook examples. This is not sufficient. You can build this on top of any harness, but this would require you to own the provider adapters, tool calling, sessions, transcript persistence, UI, MCP, extension loading, model configuration, auth, permissions, package discovery, and runtime controls. If you try the route of orchestrating several external CLIs and SDKs, it does not work well because every backend has slightly different semantics, failure modes, streaming behavior, context handling, and bugs.&lt;/p&gt;

&lt;p&gt;Atomic builds on Pi because Pi is already a small, extensible coding-agent harness. That means the workflow engine can focus on orchestration instead of the agent runtime. Atomic gets the extension ecosystem, MCP/tools, model/provider plumbing, TUI surfaces, sessions, and package system, then adds the missing outer loop: typed workflow definitions, tracked stages, graph execution, human gates, artifacts, live control, and resumability.&lt;/p&gt;

&lt;p&gt;The reason this matters is that production agent work is not just “call a better model.” It is systems engineering. You need boundaries, contracts, state, observability, failure handling, and cost controls. The model is powerful, but the model should be inside a system that constrains and verifies it. Atomic is an attempt to make that system open, inspectable, and easy to modify.&lt;/p&gt;

&lt;p&gt;This is not necessary for every feature or bug fix. It’s most useful for large, ambiguous, long-running tasks where the difficulty is in managing the process, validation, and context. A &lt;a href="https://youtu.be/iVMhQVA9664?si=E2q4JDXt1Q-d8OPr" rel="noopener noreferrer"&gt;GitHub-issue-to-PR run was recorded&lt;/a&gt; for you to review as well, so you can see a canonical example of how you can use it.&lt;/p&gt;

&lt;p&gt;It’s not perfect, but it’s a shift toward less prompting and more designing the process for the agent to coordinate, validate, and reduce cognitive load. This is especially important for messy, large codebases. Atomic (&lt;a href="https://github.com/bastani-inc/atomic" rel="noopener noreferrer"&gt;&lt;code&gt;bastani-inc&lt;/code&gt;&lt;/a&gt;) has a public implementation of this style of architecture. You can ask your coding agent to inspect and explain it.&lt;/p&gt;

&lt;p&gt;There is no "right way" to build a scaffold or a system as we're all experimenting, but there are principles that are key to making sure that it does scale inside of any codebase shape. You should try it out on a scenario where a coding agent has failed you in the past, whether that be because your context was too large or because the agent misunderstood your intent and generated slop. Don’t take anyone’s word for it. Try it and see if this method can make it better.&lt;/p&gt;

&lt;p&gt;Public API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineWorkflow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Type&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@bastani/workflows&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineWorkflow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;review-change&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;description&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Research, review, and synthesize a change&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;target&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Type&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Diff, PR, issue, or task&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}))&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;output&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;result&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Type&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;scoutPath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.atomic/workflows/runs/review-change/scout.md&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scout&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Map the relevant context for: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;inputs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fresh&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;scoutPath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;outputMode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;file-only&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;reviews&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parallel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;correctness-review&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Read &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;scoutPath&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; and review correctness, regressions, and tests.`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;reads&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;scoutPath&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
          &lt;span class="na"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fresh&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;openai/gpt-5.5:high&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;maintainability-review&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Read &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;scoutPath&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; and review maintainability and edge cases.`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;reads&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;scoutPath&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
          &lt;span class="na"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fresh&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;anthropic/claude-sonnet-4:high&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;concurrency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;final&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;synthesis&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Synthesize the reviewer findings.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Keep only evidence-backed issues.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Separate blockers from optional suggestions.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="na"&gt;previous&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;reviews&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;final&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As with any writing, it’s important to know the background of the authors so you can decide how to weigh their observations and thoughts. Alex is an AI researcher at Microsoft Research, and he's spent time building and working on coding agents and developer tools over the past couple of years for MSR and Windows, solving challenges for using coding agents inside of a codebase that is 1 billion+ LoC. Prior to that, he's worked on uncertainty estimation at an MIT startup, and he has a research background in 3D vision and world models. Outside of his job, he's an open source builder on Atomic, where he's spent many hours refining, building, and working on coding agents. Norin's worked on AI/ML products at big tech and start ups on areas of productivity, hospitality, netdevops, and healthcare having shipped to 1B+ users worldwide. Norin is now working on better reliability for coding agents, search, and other interesting projects, including contributing to Atomic. Despite our profiles reading as quite AGI-pilled, we more often than not will exclaim how these models are being incredibly dumb. So hopefully we came across at least somewhat level headed, but you can decide that.&lt;/p&gt;

&lt;p&gt;-Norin &amp;amp; Alex&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/mvanhorn/status/2063865685558903149?s=20" rel="noopener noreferrer"&gt;Matt Van Horn on loops&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bastani-inc/atomic" rel="noopener noreferrer"&gt;Atomic repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/iVMhQVA9664?si=E2q4JDXt1Q-d8OPr" rel="noopener noreferrer"&gt;Walk through of Atomic: research -&amp;gt; github issue -&amp;gt; ralph -&amp;gt; PR&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>coding</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Microsoft Build’s Developer Story Is the Agent Stack</title>
      <dc:creator>Mixture of Experts</dc:creator>
      <pubDate>Wed, 03 Jun 2026 17:38:33 +0000</pubDate>
      <link>https://dev.to/mixture-of-experts/microsoft-builds-developer-story-is-the-agent-stack-15n4</link>
      <guid>https://dev.to/mixture-of-experts/microsoft-builds-developer-story-is-the-agent-stack-15n4</guid>
      <description>&lt;p&gt;The story is the stack.&lt;/p&gt;

&lt;p&gt;Microsoft Build’s most relevant developer announcements were not really about one better Copilot button. Microsoft appears to be turning Copilot into an operating layer for agentic software development: the model, desktop app, CLI, SDK, GitHub workflow, sandbox, Windows runtime, cloud dev environment, enterprise controls, and even local AI hardware.&lt;/p&gt;

&lt;p&gt;That is useful. It is also a lock-in path.&lt;/p&gt;

&lt;h2&gt;
  
  
  tl;dr
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Copilot is moving from autocomplete toward a control plane for multiple agent sessions, issues, PRs, worktrees, and merges.&lt;/li&gt;
&lt;li&gt;Copilot CLI added terminal-native agent features: a rubber-duck critic, scheduled prompts, local voice input, and an experimental TUI.&lt;/li&gt;
&lt;li&gt;MAI-Code-1-Flash matters less as a benchmark headline and more as a cost, latency, and supply-chain move.&lt;/li&gt;
&lt;li&gt;Windows is being positioned as managed infrastructure for agents through MXC, WSL containers, Developer Configurations, and Windows 365 dev environments.&lt;/li&gt;
&lt;li&gt;Early developer reaction is practical, not anti-AI: worktrees help, but Docker state, databases, secrets, pricing, and review burden remain hard.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What changed for working engineers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Announcement&lt;/th&gt;
&lt;th&gt;Why engineers care&lt;/th&gt;
&lt;th&gt;Caveat&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Copilot app&lt;/td&gt;
&lt;td&gt;A desktop hub for agent sessions, issues, PRs, “My Work,” worktrees, and Agent Merge.&lt;/td&gt;
&lt;td&gt;Worktrees isolate branches, not databases, ports, secrets, or Docker state.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Copilot CLI&lt;/td&gt;
&lt;td&gt;Rubber duck, &lt;code&gt;/every&lt;/code&gt;, &lt;code&gt;/after&lt;/code&gt;, local voice input, and an experimental TUI make agent work more terminal-native.&lt;/td&gt;
&lt;td&gt;Long-running CLI agents still need recovery, logging, and trust.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Copilot SDK GA&lt;/td&gt;
&lt;td&gt;Teams can build internal agents on Copilot’s runtime across Node/TS, Python, Go, .NET, Rust, and Java.&lt;/td&gt;
&lt;td&gt;It ties agent architecture closer to GitHub/Copilot.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Copilot sandboxes&lt;/td&gt;
&lt;td&gt;Local and cloud sandboxes give agents constrained places to run tools and code.&lt;/td&gt;
&lt;td&gt;Sandboxing is necessary, not a complete safety model.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MAI-Code-1-Flash&lt;/td&gt;
&lt;td&gt;A 5B coding model optimized for Copilot and VS Code workflows.&lt;/td&gt;
&lt;td&gt;Microsoft’s benchmark claims need independent validation.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The Copilot app is the clearest signal. GitHub says each session runs in its own git worktree and that Agent Merge can watch CI, reviews, and merge conditions. That is a response to a real problem: once you run several coding agents at once, normal branch discipline stops being enough.&lt;/p&gt;

&lt;p&gt;The CLI changes for &lt;code&gt;/every&lt;/code&gt; and &lt;code&gt;/after&lt;/code&gt; turn the terminal into a scheduler for recurring agent work. Rubber duck gives you a built-in critic. Copilot is spreading across every surface where engineers already make decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Windows is becoming agent infrastructure
&lt;/h2&gt;

&lt;p&gt;The Windows announcements matter if you think of coding agents as processes that need identity, filesystem access, networking, containers, and policy.&lt;/p&gt;

&lt;p&gt;Microsoft announced Coreutils for Windows as generally available, WSL containers coming to public preview, Windows Developer Configurations as generally available, Windows 365 Developer configuration in public preview, an experimental Intelligent Terminal, and Microsoft Execution Containers, or MXC, in early preview.&lt;/p&gt;

&lt;p&gt;MXC is the OpenClaw-relevant piece. Microsoft describes it as a policy-driven execution layer for agents across Windows and WSL, with declared access to files and networking enforced at runtime. Microsoft also says OpenClaw can run natively on Windows using MXC containment for the node and gateway.&lt;/p&gt;

&lt;p&gt;That does not make Windows the best dev platform for every team. It does show Microsoft wants Windows to be a managed local and cloud runtime for agents.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hardware signal
&lt;/h2&gt;

&lt;p&gt;Surface RTX Spark Dev Box is not just another developer PC announcement. Microsoft says it uses NVIDIA RTX Spark, offers up to 1 PFLOP of FP4 AI compute, includes 128 GB unified memory, and ships with Windows 11 Pro, WSL 2 GPU passthrough/CUDA, VS Code, GitHub Copilot, Git, Python, and Node.js preinstalled.&lt;/p&gt;

&lt;p&gt;Microsoft expects more agent development to be hybrid. Some inference, prototyping, evaluation, and parallel agent work moves local to reduce latency and cloud spend. The question is price and who this is really for: individual developers, platform teams, or enterprise AI labs.&lt;/p&gt;

&lt;h2&gt;
  
  
  What developers are worried about
&lt;/h2&gt;

&lt;p&gt;The skeptical reaction is operational.&lt;/p&gt;

&lt;p&gt;In technical Hacker News threads around the Copilot app, commenters liked the direction of worktree isolation but immediately raised the harder parts: Docker Compose, local databases, ports, secrets, migrations, and shared state. One recurring theme was that agents do not remove integration work; they can move it later, into review and merge cleanup.&lt;/p&gt;

&lt;p&gt;That matches GitHub’s own framing. GitHub explicitly says agentic development has created disjointed workflows, more context switching, and too much review time. The Copilot app is a proposed answer to that problem, not proof the problem is solved.&lt;/p&gt;

&lt;p&gt;Pricing is another early concern. Long-running agents consume tokens, cloud runtime, Actions minutes, and human attention. If agent-generated PR volume grows faster than review quality, “human in control” can degrade.&lt;/p&gt;

&lt;p&gt;The New Stack’s Rayfin coverage frames the enterprise version of the same issue: AI-generated apps need governed production paths, not just fast generation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Microsoft’s strategy read
&lt;/h2&gt;

&lt;p&gt;Coding agents are moving out of chat boxes and into full development environments.&lt;/p&gt;

&lt;p&gt;Microsoft’s guiding policy seems to be to own the default surface where enterprise engineers already work. That means GitHub for collaboration, Copilot for agent interaction, VS Code and the terminal for daily work, Windows and Windows 365 for managed execution, Entra/Intune-style controls for governance, and Microsoft’s own models where cost and latency matter.&lt;/p&gt;

&lt;p&gt;Copilot becomes more like an operating layer across the software lifecycle.&lt;/p&gt;

&lt;p&gt;The more your agents depend on GitHub sessions, Copilot SDK primitives, Windows execution policy, cloud sandboxes, and Microsoft model routing, the harder it becomes to move the workflow elsewhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical bottom line
&lt;/h2&gt;

&lt;p&gt;Try the new functionality now if your team already lives in GitHub, Copilot, VS Code, or Windows-managed environments. Watch MAI-Code-1-Flash for real-repo latency and cost, not necessarily for high benchmark performance. Watch MXC and OpenClaw if you are building local or Windows-hosted agents.&lt;/p&gt;

&lt;p&gt;These releases may not be as valuable to adopt if your workflow depends on open harnesses, local control, or flexible model routing, but can be interesting to learn from.&lt;/p&gt;

&lt;p&gt;And treat every agent PR as untrusted work until your validation and review practices catch up. The tools are getting better but the bottleneck is still there.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.blog/news-insights/product-news/github-copilot-app-the-agent-native-desktop-experience/" rel="noopener noreferrer"&gt;GitHub Copilot app announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.blog/changelog/2026-06-02-copilot-cli-improved-ui-rubber-duck-prompt-scheduling-and-voice-input/" rel="noopener noreferrer"&gt;GitHub Copilot CLI changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.blog/changelog/2026-06-02-copilot-sdk-is-now-generally-available/" rel="noopener noreferrer"&gt;GitHub Copilot SDK GA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.blog/changelog/2026-06-02-cloud-and-local-sandboxes-for-github-copilot-now-in-public-preview/" rel="noopener noreferrer"&gt;GitHub Copilot sandboxes public preview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://microsoft.ai/news/introducingmai-code-1-flash/" rel="noopener noreferrer"&gt;Microsoft MAI-Code-1-Flash announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.blog/changelog/2026-06-02-mai-code-1-flash-is-now-available-for-github-copilot/" rel="noopener noreferrer"&gt;MAI-Code-1-Flash in GitHub Copilot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blogs.windows.com/windowsdeveloper/2026/06/02/build-2026-furthering-windows-as-the-trusted-platform-for-development/" rel="noopener noreferrer"&gt;Windows developer Build announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blogs.windows.com/windowsdeveloper/2026/06/02/windows-platform-security-for-ai-agents/" rel="noopener noreferrer"&gt;Windows platform security for AI agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blogs.windows.com/devices/2026/06/02/building-the-next-generation-of-devices-for-developers-surface-rtx-spark-dev-box/" rel="noopener noreferrer"&gt;Surface RTX Spark Dev Box&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=48373764" rel="noopener noreferrer"&gt;HN discussion: GitHub Copilot App&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thenewstack.io/microsoft-build-2026-rayfin-replit-vibe-coding/" rel="noopener noreferrer"&gt;The New Stack on Rayfin and enterprise AI apps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>release</category>
      <category>microsoft</category>
      <category>programming</category>
    </item>
    <item>
      <title>Claude Opus 4.8 Is About Reliability</title>
      <dc:creator>Mixture of Experts</dc:creator>
      <pubDate>Fri, 29 May 2026 18:59:50 +0000</pubDate>
      <link>https://dev.to/mixture-of-experts/claude-opus-48-is-about-reliability-26bg</link>
      <guid>https://dev.to/mixture-of-experts/claude-opus-48-is-about-reliability-26bg</guid>
      <description>&lt;p&gt;Anthropic shipped Opus 4.8 into Claude Code with a familiar promise: better agentic coding. Does it make real developers more confident leaving Claude Code alone on production-shaped work?&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Anthropic calls Opus 4.8 a “modest but tangible improvement.” That is the right frame.&lt;/li&gt;
&lt;li&gt;The coding numbers are better, especially on harder agentic benchmarks, but they do not settle the model-ranking argument by themselves.&lt;/li&gt;
&lt;li&gt;Claude Code quality still depends on the harness: effort level, context compaction, prompt cache behavior, tool permissions, and launch stability.&lt;/li&gt;
&lt;li&gt;Pricing is premium. The right metric is not dollars per million tokens. It is dollars per accepted engineering outcome.&lt;/li&gt;
&lt;li&gt;My read: use Opus 4.8 for hard, multi-step work where a failed agent loop costs real time. Do not use it for cheap bulk edits by default.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What changed technically
&lt;/h2&gt;

&lt;p&gt;The model details are developer-relevant. Anthropic lists Opus 4.8 at a 1M token context window on Claude API, Bedrock, and Vertex AI, with 128K maximum output tokens. Microsoft Foundry is capped lower at 200K context.&lt;/p&gt;

&lt;p&gt;The Messages API now accepts system entries inside the messages array, which means instructions can be changed mid-task without breaking the prompt cache in the same way. That sounds small, but it is exactly the kind of feature that matters for long-running coding agents: “plan first,” “now patch,” “now review your patch under stricter rules.”&lt;/p&gt;

&lt;p&gt;Claude Code also gets dynamic workflows in research preview for Max, Team, and Enterprise plans. Anthropic describes this as Claude planning work and launching many parallel subagents. The headline example is Jarred Sumner using it on the Bun Zig-to-Rust port: roughly 750,000 lines of Rust, 99.8% of the existing test suite passing, and 11 days from first commit to merge.&lt;/p&gt;

&lt;h2&gt;
  
  
  What developers are reporting
&lt;/h2&gt;

&lt;p&gt;Simon Willison highlighted the mid-conversation system prompt feature as practically interesting, and posted a small cost example where the best result used 25 input tokens and 17,167 output tokens, costing about 43 cents.&lt;/p&gt;

&lt;p&gt;Hacker News reaction is mixed in the usual useful way. Some developers see benchmark fatigue: Opus 4.6, 4.7, and 4.8 all claim improvements, but day-to-day coding gains are harder to feel. Others argue the current coding benchmarks miss the parts of software engineering that hurt: unclear requirements, repo-specific conventions, migrations, flaky tests, and review cost. A recurring practical tip was to set Claude Code effort to &lt;code&gt;xhigh&lt;/code&gt; for serious work. Another thread reported launch-day Claude Code breakage around thinking blocks.&lt;/p&gt;

&lt;p&gt;Theo Browne’s developer-focused take is that Opus 4.8 is a “modest but tangible improvement,” especially for TypeScript-heavy work and “Claude special” UI tasks, but not a reason to ignore the old Claude Code risks. He treats benchmark wins like SWE Bench Pro cautiously, still sees GPT-5.5 &lt;code&gt;xhigh&lt;/code&gt; as stronger in his mini-SWE-agent harness, and warns that dynamic workflows / “Ultra Code” can turn Claude into a powerful parallel coordinator for audits, bug hunts, and migrations while also burning money absurdly fast. His practical advice is to write detailed prompts up front, keep a root &lt;code&gt;CLAUDE.md&lt;/code&gt;, monitor spend with &lt;code&gt;CC usage&lt;/code&gt;, resume from summaries when limits hit, and verify everything, because Opus 4.8 can still hallucinate details like CLI flags.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing: what it costs in reality
&lt;/h2&gt;

&lt;p&gt;The obvious objection is price.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model/path&lt;/th&gt;
&lt;th&gt;Sticker price&lt;/th&gt;
&lt;th&gt;Practical read&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 4.8&lt;/td&gt;
&lt;td&gt;$5 input / $25 output per MTok&lt;/td&gt;
&lt;td&gt;Expensive, plausible for hard agent loops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.5&lt;/td&gt;
&lt;td&gt;$5 / $30 short context; $10 / $45 long context&lt;/td&gt;
&lt;td&gt;Similar frontier tier, output can cost more&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.5 Flash&lt;/td&gt;
&lt;td&gt;$1.50 / $9&lt;/td&gt;
&lt;td&gt;Better default for cheaper high-volume work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4&lt;/td&gt;
&lt;td&gt;Much cheaper&lt;/td&gt;
&lt;td&gt;Strong cost pressure; workflow quality varies&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Anthropic also offers batch pricing at half price: $2.50 input / $12.50 output per MTok for Opus 4.8. Prompt caching is $6.25/MTok for five-minute cache writes, $10/MTok for one-hour cache writes, and $0.50/MTok for cache hits. Fast Mode for Opus 4.8 is $10 input and $50 output per MTok for up to 2.5x higher output tokens per second, which is cheaper than the $30 input / $150 output Fast Mode pricing listed for Opus 4.6 and 4.7. But there is a catch: Anthropic says Opus 4.7 and later may use up to 35% more tokens for the same fixed text because of the tokenizer.&lt;/p&gt;

&lt;p&gt;The real pricing question is not whether Opus 4.8 is expensive per token. It is whether it reduces failed or supervised loops enough to justify being on the critical path. If it prevents one botched refactor pass, it can be cheaper than a lower-priced model that burns context, leaves a half-correct diff, and hands the cleanup back to you.&lt;/p&gt;

&lt;p&gt;Dynamic workflows complicate this. Parallel subagents can multiply progress. They can also multiply spend. Anthropic’s own docs warn that a workflow can use “meaningfully more tokens” than a normal conversation, counts against plan usage and rate limits, and can fan out to as many as 16 concurrent agents and 1,000 agents total per run. Public Claude Code issue reports make the downside less theoretical: Max users have reported hitting “out of extra usage” after one task and 155 tool uses in 9.5 minutes, and another Opus report claimed the limit arrived in roughly 10 minutes after about 20 prompts. Use workflows where the work decomposes cleanly and the result can be verified with tests, not as the default path for every substantial request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Opus 4.8 fits
&lt;/h2&gt;

&lt;p&gt;Artificial Analysis reports Opus 4.8 as a top-tier model, with a high Intelligence Index score and unusually heavy token usage during evaluation.&lt;/p&gt;

&lt;p&gt;I would route Opus 4.8 to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;multi-file planning and risky refactors,&lt;/li&gt;
&lt;li&gt;hard debugging across services,&lt;/li&gt;
&lt;li&gt;codebase exploration before architectural decisions,&lt;/li&gt;
&lt;li&gt;security-sensitive review with strict instructions,&lt;/li&gt;
&lt;li&gt;long Claude Code sessions where recovery matters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would route cheaper models to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rote edits,&lt;/li&gt;
&lt;li&gt;test scaffolding,&lt;/li&gt;
&lt;li&gt;formatting,&lt;/li&gt;
&lt;li&gt;classification,&lt;/li&gt;
&lt;li&gt;bulk summarization,&lt;/li&gt;
&lt;li&gt;low-risk subagents.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The split is simple: use Opus where failure is expensive. Use cheaper models where retrying is cheap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical verdict
&lt;/h2&gt;

&lt;p&gt;Try Opus 4.8 immediately if you already pay for Claude Code and have high-value work that currently fails because the agent loses the plot. Set effort deliberately. Demand tests. Review diffs like you would review a fast junior engineer with infinite stamina and uneven judgment.&lt;/p&gt;

&lt;p&gt;Wait if your work is mostly small patches, hobby automation, or batch code cleanup. Gemini, DeepSeek, Sonnet-class models, and cheaper paths may get you most of the value for much less.&lt;/p&gt;

&lt;p&gt;If you are already getting good results from GPT-5.5, I would not switch by default. Opus 4.8 looks better, but not enough to justify moving a working coding workflow unless your own repo evals show a clear reduction in failed loops, review time, or total cost per accepted change.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.anthropic.com/news/claude-opus-4-8" rel="noopener noreferrer"&gt;Anthropic: Introducing Claude Opus 4.8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://platform.claude.com/docs/en/about-claude/models/whats-new-claude-4-8" rel="noopener noreferrer"&gt;Claude API docs: What’s new in Opus 4.8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://platform.claude.com/docs/en/about-claude/pricing" rel="noopener noreferrer"&gt;Anthropic pricing docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://claude.com/blog/introducing-dynamic-workflows-in-claude-code" rel="noopener noreferrer"&gt;Claude Code dynamic workflows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.claude.com/docs/en/workflows" rel="noopener noreferrer"&gt;Claude Code docs: workflows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.claude.com/docs/en/costs" rel="noopener noreferrer"&gt;Claude Code docs: manage costs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/anthropics/claude-code/issues/41508" rel="noopener noreferrer"&gt;Claude Code GitHub issue: 20x Max extra usage after one session&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/anthropics/claude-code/issues/41174" rel="noopener noreferrer"&gt;Claude Code GitHub issue: usage limit reached in 10 minutes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.anthropic.com/claude-opus-4-8-system-card" rel="noopener noreferrer"&gt;Claude Opus 4.8 system card&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://simonwillison.net/2026/May/28/claude-opus-4-8/" rel="noopener noreferrer"&gt;Simon Willison on Claude Opus 4.8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=48311647" rel="noopener noreferrer"&gt;Hacker News discussion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://artificialanalysis.ai/models/claude-opus-4-8" rel="noopener noreferrer"&gt;Artificial Analysis: Claude Opus 4.8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developers.openai.com/api/docs/pricing" rel="noopener noreferrer"&gt;OpenAI pricing&lt;/a&gt;, &lt;a href="https://ai.google.dev/gemini-api/docs/pricing" rel="noopener noreferrer"&gt;Gemini pricing&lt;/a&gt;, &lt;a href="https://api-docs.deepseek.com/quick_start/pricing" rel="noopener noreferrer"&gt;DeepSeek pricing&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>coding</category>
      <category>claude</category>
      <category>programming</category>
    </item>
    <item>
      <title>Workflows Are the New Interface for Coding Agents</title>
      <dc:creator>Mixture of Experts</dc:creator>
      <pubDate>Thu, 28 May 2026 22:11:53 +0000</pubDate>
      <link>https://dev.to/mixture-of-experts/workflows-are-the-new-interface-for-coding-agents-pcb</link>
      <guid>https://dev.to/mixture-of-experts/workflows-are-the-new-interface-for-coding-agents-pcb</guid>
      <description>&lt;p&gt;Claude Code Dynamic Workflows are the clearest signal yet that the coding-agent market is moving past chat.&lt;/p&gt;

&lt;p&gt;That is good news. From our own experience using workflows with Atomic for the past few months, it is the only way we work now. A single agent turn is the wrong shape for a migration, a security audit, a repo-wide bug hunt, or a plan that needs adversarial review before anyone trusts it.&lt;/p&gt;

&lt;p&gt;That shift matters more than the specific product announcement. The future is not just better models. It is better control planes around models.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why workflows matter
&lt;/h2&gt;

&lt;p&gt;Software engineering is not one action. It is a sequence of judgment-heavy phases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;understand the system,&lt;/li&gt;
&lt;li&gt;choose the work surface,&lt;/li&gt;
&lt;li&gt;write or update a plan,&lt;/li&gt;
&lt;li&gt;implement in bounded chunks,&lt;/li&gt;
&lt;li&gt;verify with tests and reviewers,&lt;/li&gt;
&lt;li&gt;leave artifacts the next engineer can trust.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Chat can imitate that sequence. A workflow can enforce it.&lt;/p&gt;

&lt;p&gt;Subagents and skills are useful building blocks, but the goal is a workflow that owns the loop: branching, retries, review gates, and intermediate state. Intermediate results should not all be dumped into one context window. Reviews should be independent. Long-running work should be observable while it runs.&lt;/p&gt;

&lt;p&gt;But once the plan becomes code, the next question is: who owns that code?&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Code Dynamic Workflows: impressive, but Claude-centered
&lt;/h2&gt;

&lt;p&gt;Dynamic Workflows are impressive because they make orchestration feel native: describe a task, let the runtime fan out work in the background, and inspect progress through &lt;code&gt;/workflows&lt;/code&gt;. The headline use cases are exactly where workflows shine: codebase-wide audits, large migrations, cross-checked research, and critical plans that need multiple attempts and adversarial review.&lt;/p&gt;

&lt;p&gt;But the product shape is still Claude-centered. Claude writes the workflow, Claude runs it, and Claude decides a lot of the orchestration. Public docs also describe real boundaries: research-preview status, higher token use, session-scoped resume, limited mid-run user input, and workflow scripts that coordinate agents without direct filesystem or shell access.&lt;/p&gt;

&lt;p&gt;For many teams, that will be enough. For engineers who want the workflow layer to be their own infrastructure, it leaves an opening.&lt;/p&gt;

&lt;h2&gt;
  
  
  Atomic: workflows as developer-owned infrastructure
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/flora131/atomic" rel="noopener noreferrer"&gt;Atomic&lt;/a&gt; starts from a different premise: the workflow is not an implementation detail of the assistant. It is the interface the developer should own.&lt;/p&gt;

&lt;p&gt;The repo describes Atomic as “the workflow layer for coding agents” and a programmable control plane where the model-backed session does the work, but Atomic makes sure it follows the process. Under the hood, Atomic is a TypeScript/Bun monorepo built on Pi packages. The CLI bundles first-party packages for workflows, subagents, MCP, web access, and intercom. That matters because Atomic is not just a prompt convention. It is an extensible runtime.&lt;/p&gt;

&lt;p&gt;A workflow in Atomic is a TypeScript module:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineWorkflow&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@bastani/workflows&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineWorkflow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;review-changes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;target&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;research&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;research&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Map &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;inputs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;reviews&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parallel&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;correctness&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Review for regressions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;previous&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;research&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;risk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Review edge cases&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;previous&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;research&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;reviews&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important part is not the syntax. It is the contract. Atomic exposes tracked stages, parallel branches, context handoffs, artifacts, human input through &lt;code&gt;ctx.ui&lt;/code&gt;, resumable run control, model fallback chains, reusable worktrees, and package distribution. Workflows can live in &lt;code&gt;.atomic/workflows/&lt;/code&gt; for a project, &lt;code&gt;~/.atomic/agent/workflows/&lt;/code&gt; for a user, settings, or packages. They are inspectable files, not just successful conversations you saved after the fact.&lt;/p&gt;

&lt;h2&gt;
  
  
  The built-in Atomic loop
&lt;/h2&gt;

&lt;p&gt;Atomic already ships with the workflows engineers usually end up rebuilding by hand:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workflow&lt;/th&gt;
&lt;th&gt;Use it when&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;deep-research-codebase&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;You need a broad repo investigation with scout, specialist waves, aggregation, and durable research artifacts.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;goal&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;You have a bounded change with explicit done criteria, validation, receipts, and reviewer quorum.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ralph&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;You want a larger plan-to-PR loop: RFC, implementation, simplification, infra discovery, review, and handoff.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;open-claude-design&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;You are doing UI/design work that benefits from generation, critique, live preview, and quality gates.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The canonical Atomic flow is straightforward, and you can invoke it conversationally instead of memorizing slash commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Run deep research to map payment retry behavior across this repo.
Create a spec from research/payment-retries.md.
Use goal to implement the spec and run the focused retry tests.
For larger work, run ralph to plan, implement, review, and prepare a PR for the spec.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That gives engineers a process they can inspect: research files, specs, ledgers, worker receipts, reviewer decisions, final reports. If the work fails, you are not left with “Claude tried.” You have artifacts that explain where it failed.&lt;/p&gt;

&lt;p&gt;And if that is not your process, you write your own. Incident response, release readiness, dependency audits, migration scoring, accessibility review, docs QA, benchmark triage: the workflow surface is general-purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  The deeper difference: control, visibility, confidence
&lt;/h2&gt;

&lt;p&gt;Claude Code Dynamic Workflows make orchestration easier to ask for. Atomic makes orchestration easier to own.&lt;/p&gt;

&lt;p&gt;That distinction shows up in four places:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concern&lt;/th&gt;
&lt;th&gt;Claude Code Dynamic Workflows&lt;/th&gt;
&lt;th&gt;Atomic&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Workflow authoring&lt;/td&gt;
&lt;td&gt;Claude dynamically creates orchestration scripts for the current task; successful runs can be saved back into Claude Code.&lt;/td&gt;
&lt;td&gt;Developers can ask Atomic to use a workflow, describe new workflows in natural language for Atomic to scaffold, or version explicit TypeScript workflows as repo-owned code.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human gates&lt;/td&gt;
&lt;td&gt;No mid-run user input; split stages into separate workflows when sign-off is needed.&lt;/td&gt;
&lt;td&gt;Developers can define explicit human-in-the-loop gates, attach to running sessions to steer them, and pass or reject gates before the workflow continues.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost and scale&lt;/td&gt;
&lt;td&gt;Designed for large fan-outs, including tens to hundreds of subagents; Anthropic notes this can consume substantially more tokens than a typical Claude Code session.&lt;/td&gt;
&lt;td&gt;You choose the graph and concurrency. Atomic can stay small and deterministic, or scale out when you intentionally design a broader workflow.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Provider choice&lt;/td&gt;
&lt;td&gt;Built for Claude Code and Claude-supported surfaces.&lt;/td&gt;
&lt;td&gt;Model/provider agnostic through Pi: Anthropic, OpenAI, Gemini, Bedrock, OpenRouter, local OpenAI-compatible servers, custom providers, and more.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Extension surface&lt;/td&gt;
&lt;td&gt;Workflow runtime plus Claude Code ecosystem.&lt;/td&gt;
&lt;td&gt;Pi packages can add extensions, tools, slash commands, skills, prompt templates, themes, TUI components, and workflows.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;There is also a practical supply-chain detail worth saying carefully. Atomic’s published CLI package does not require install lifecycle scripts, and the README explicitly says you can install it with &lt;code&gt;--ignore-scripts&lt;/code&gt;. That is a safer default for a tool you install globally.&lt;/p&gt;

&lt;p&gt;It does not mean arbitrary third-party Atomic packages are magically safe; Atomic’s own docs warn that packages and extensions run with full system access. The point is narrower and useful: the base tool keeps the core install simpler, while still letting teams review and choose the extensions they trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  What engineers should internalize
&lt;/h2&gt;

&lt;p&gt;Workflows are not only for giant rewrites. Use them whenever process fidelity matters more than conversational flexibility:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;broad research where findings should become durable memory,&lt;/li&gt;
&lt;li&gt;risky changes that need independent review,&lt;/li&gt;
&lt;li&gt;migrations with repeated file-level work,&lt;/li&gt;
&lt;li&gt;tasks where validation must be captured as evidence,&lt;/li&gt;
&lt;li&gt;team processes you want every agent run to follow the same way.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use chat for exploration. Use subagents for delegation. Use workflows when the process is part of the product.&lt;/p&gt;

&lt;p&gt;Claude Code Dynamic Workflows validate the category. They show that serious agentic coding requires scripts, background execution, parallelism, and cross-checking. Atomic pushes the same idea one layer closer to the engineer: workflows as open, inspectable, model-agnostic infrastructure you can keep in the repo, modify, package, review, and run again.&lt;/p&gt;

&lt;p&gt;That is where coding agents are going. The winners will not be the tools that hide the workflow best. They will be the tools that make the workflow visible enough for engineers to trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/flora131/atomic" rel="noopener noreferrer"&gt;Atomic repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/flora131/atomic/blob/main/packages/coding-agent/docs/workflows.md" rel="noopener noreferrer"&gt;Atomic workflow docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://claude.com/blog/introducing-dynamic-workflows-in-claude-code" rel="noopener noreferrer"&gt;Introducing dynamic workflows in Claude Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.claude.com/docs/en/workflows" rel="noopener noreferrer"&gt;Claude Code workflows docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.claude.com/docs/en/common-workflows" rel="noopener noreferrer"&gt;Claude Code common workflows&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>tooling</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The New Shape of Supply-Chain Trust</title>
      <dc:creator>Mixture of Experts</dc:creator>
      <pubDate>Thu, 28 May 2026 15:40:38 +0000</pubDate>
      <link>https://dev.to/mixture-of-experts/the-new-shape-of-supply-chain-trust-25k3</link>
      <guid>https://dev.to/mixture-of-experts/the-new-shape-of-supply-chain-trust-25k3</guid>
      <description>&lt;p&gt;One poisoned extension, one package install, one CI workflow. Any of them can now be the first domino.&lt;/p&gt;

&lt;p&gt;That is the uncomfortable lesson from the latest Shai-Hulud activity and GitHub’s recently confirmed internal-repository breach. The scary part is not only the number of affected packages, tokens, or repositories. Counts move fast. The scarier part is where the attacker code ran: inside the trusted developer and CI path.&lt;/p&gt;

&lt;p&gt;The modern supply chain is not just “the dependencies we ship to production.” It is your IDE, your package manager, your GitHub Actions runner, your cache keys, your OIDC flow, your local &lt;code&gt;gh&lt;/code&gt; auth, your AI coding tool config, and the cloud account that quietly pays the bill when something goes sideways.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happened, briefly
&lt;/h2&gt;

&lt;p&gt;CISA described the original Shai-Hulud wave as a self-replicating npm worm that compromised more than 500 packages and targeted GitHub personal access tokens plus AWS, GCP, and Azure keys. GitHub later said it removed 500+ compromised packages and began pushing npm toward shorter-lived credentials, 2FA enforcement, and trusted publishing.&lt;/p&gt;

&lt;p&gt;The later waves got more CI-aware. Instead of only stealing npm tokens from maintainers, they looked for credentials inside build environments, abused publishing workflows, and used the build system itself as distribution.&lt;/p&gt;

&lt;p&gt;Microsoft’s May 2026 reporting on the &lt;code&gt;@antv&lt;/code&gt; ecosystem described a “Mini Shai-Hulud” style campaign that targeted GitHub Actions environments and stole GitHub, AWS, Vault, npm, Kubernetes, and 1Password secrets. Microsoft said GitHub removed 640 malicious packages and invalidated 61,274 npm granular access tokens with write permissions and 2FA bypass.&lt;/p&gt;

&lt;p&gt;Then GitHub confirmed an incident involving a compromised employee device and a poisoned third-party VS Code extension. GitHub said the attacker’s claim of roughly 3,800 internal repositories was “directionally consistent” with its investigation, while also saying its current assessment was exfiltration of GitHub-internal repositories only.&lt;/p&gt;

&lt;p&gt;The Nx Console advisory gives the developer-tooling angle teeth: malicious version 18.95.0 was available for about 18 minutes in the Visual Studio Marketplace and about 36 minutes in OpenVSX. Nx later estimated roughly 6,000 VS Code activations and one Cursor activation.&lt;/p&gt;

&lt;p&gt;Eighteen minutes was enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why normal controls did not fully save us
&lt;/h2&gt;

&lt;p&gt;The lesson is not “security controls are useless.” The lesson is that every control has a boundary.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Control&lt;/th&gt;
&lt;th&gt;What it helps with&lt;/th&gt;
&lt;th&gt;What it can miss&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2FA&lt;/td&gt;
&lt;td&gt;Account takeover&lt;/td&gt;
&lt;td&gt;Legitimate workflow publishing malware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Provenance/OIDC&lt;/td&gt;
&lt;td&gt;Long-lived npm tokens&lt;/td&gt;
&lt;td&gt;Compromised build runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secret scanning&lt;/td&gt;
&lt;td&gt;Finding leaked keys&lt;/td&gt;
&lt;td&gt;Damage before detection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lockfiles&lt;/td&gt;
&lt;td&gt;Version drift&lt;/td&gt;
&lt;td&gt;Already-poisoned dependency paths&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;2FA helps when the attacker needs to log in as you. It helps less when malicious code runs inside a workflow that is already allowed to publish.&lt;/p&gt;

&lt;p&gt;OIDC and trusted publishing are good. Use them. But provenance is a receipt, not a sandbox. It can prove where an artifact was built. It cannot prove that the runner, cache, script, or workflow context was clean when the build happened.&lt;/p&gt;

&lt;p&gt;Secret scanning matters too, but it is often reactive. If a token was already copied, the clock has started.&lt;/p&gt;

&lt;h2&gt;
  
  
  The developer workstation is production-adjacent
&lt;/h2&gt;

&lt;p&gt;Developers used to think of laptops as local machines with local risk. That model is dead.&lt;/p&gt;

&lt;p&gt;A typical engineering workstation now aggregates source code, GitHub auth, npm credentials, cloud CLIs, database tunnels, SSH keys, package-manager caches, editor extensions, AI assistant configs, and sometimes production-adjacent environment variables. That is not “just dev.” It is a credential hub with a keyboard.&lt;/p&gt;

&lt;p&gt;If the package ran on your laptop, assume the laptop’s reachable secrets were in scope.&lt;/p&gt;

&lt;p&gt;Package lifecycle scripts make this worse because install-time code execution is easy to forget. IDE extensions make it worse because they run close to code and credentials. CI makes it worse because runners often hold the exact permissions attackers want: publish, deploy, fetch secrets, assume roles, and write artifacts.&lt;/p&gt;

&lt;p&gt;That is the break. Not npm. Trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  The vibe-coding angle
&lt;/h2&gt;

&lt;p&gt;AI coding tools are not the villain here. Fast, invisible execution with broad credentials is the villain.&lt;/p&gt;

&lt;p&gt;Vibe coding often means moving through dependencies, extensions, MCP servers, generated config, local dev servers, and shell commands quickly. That speed is useful. It is also a larger trust surface. If an agent suggests a package, installs it, edits config, and runs a script in the same environment where your cloud credentials live, you have collapsed experimentation and authority into one place.&lt;/p&gt;

&lt;p&gt;JFrog reported Shai-Hulud-like activity targeting developer and AI-tooling configuration surfaces. Treat that as the direction of travel, not as proof that AI caused the incidents.&lt;/p&gt;

&lt;p&gt;Vibe coding with long-lived credentials is supply-chain roulette with better autocomplete. The answer is not to stop using AI tools. The answer is to stop giving every tool the same blast radius.&lt;/p&gt;

&lt;h2&gt;
  
  
  Boring controls that actually work
&lt;/h2&gt;

&lt;p&gt;For engineers, the practical response is operational hygiene:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pin dependencies and commit lockfiles.&lt;/li&gt;
&lt;li&gt;Add a release-age cooldown for new package versions where your tooling supports it.&lt;/li&gt;
&lt;li&gt;Disable or restrict package lifecycle scripts when feasible.&lt;/li&gt;
&lt;li&gt;Run risky installs in dev containers, Codespaces, or disposable sandboxes.&lt;/li&gt;
&lt;li&gt;Pin GitHub Actions to commit SHAs, not floating tags.&lt;/li&gt;
&lt;li&gt;Require signed commits on protected branches so pushed changes are cryptographically tied to trusted developer keys.&lt;/li&gt;
&lt;li&gt;Audit &lt;code&gt;pull_request_target&lt;/code&gt;, cache restore paths, workflow permissions, and publishing jobs.&lt;/li&gt;
&lt;li&gt;Prefer OIDC and trusted publishing, but treat the CI runtime itself as sensitive.&lt;/li&gt;
&lt;li&gt;Delete long-lived tokens. For the ones you cannot delete, shorten expiry and rotate automatically.&lt;/li&gt;
&lt;li&gt;Use WebAuthn/MFA and secret scanning with push protection.&lt;/li&gt;
&lt;li&gt;Monitor npm publishes, CI egress, cloud/API usage, and billing anomalies.&lt;/li&gt;
&lt;li&gt;After suspected compromise: isolate hosts, rebuild runners, invalidate caches, then rotate credentials.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best teams will not be the ones that never touch a bad package. That bar is fantasy. The best teams will be the ones where a bad package gets a tiny window, a tiny credential scope, and a loud billing or usage alert.&lt;/p&gt;

&lt;p&gt;Proactive beats reactive because by the time you are rotating everything manually, the worm has already learned your org.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.blog/security/investigating-unauthorized-access-to-githubs-internal-repositories/" rel="noopener noreferrer"&gt;GitHub: Investigating unauthorized access to GitHub-owned repositories&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nrwl/nx-console/security/advisories/GHSA-c9j4-9m59-847w" rel="noopener noreferrer"&gt;Nx Console security advisory GHSA-c9j4-9m59-847w&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.microsoft.com/en-us/security/blog/2026/05/20/mini-shai-hulud-compromised-antv-npm-packages-enable-ci-cd-credential-theft/" rel="noopener noreferrer"&gt;Microsoft: Mini Shai Hulud compromised &lt;code&gt;@antv&lt;/code&gt; npm packages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cisa.gov/news-events/alerts/2025/09/23/widespread-supply-chain-compromise-impacting-npm-ecosystem" rel="noopener noreferrer"&gt;CISA: Widespread supply-chain compromise impacting npm ecosystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.blog/security/supply-chain-security/our-plan-for-a-more-secure-npm-supply-chain/" rel="noopener noreferrer"&gt;GitHub: Our plan for a more secure npm supply chain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://research.jfrog.com/post/shai-hulud-here-we-go-again/" rel="noopener noreferrer"&gt;JFrog: Shai-Hulud, here we go again&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tanstack.com/blog/npm-supply-chain-compromise-postmortem" rel="noopener noreferrer"&gt;TanStack: npm supply-chain compromise postmortem&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>ai</category>
      <category>coding</category>
      <category>programming</category>
    </item>
    <item>
      <title>Alignment is moving into the agent control plane</title>
      <dc:creator>Mixture of Experts</dc:creator>
      <pubDate>Tue, 26 May 2026 17:03:53 +0000</pubDate>
      <link>https://dev.to/mixture-of-experts/alignment-is-moving-into-the-agent-control-plane-7mm</link>
      <guid>https://dev.to/mixture-of-experts/alignment-is-moving-into-the-agent-control-plane-7mm</guid>
      <description>&lt;p&gt;tl;dr - Plan Mode, Outcomes, Skills, and agent-as-judge workflows point toward a shared pattern: reliable coding agents depend less on a single prompt and more on the planning, steering, memory, and verification systems around the model.&lt;/p&gt;

&lt;p&gt;A coding agent can be safe and still produce the wrong work.&lt;/p&gt;

&lt;p&gt;A typical failure is not catastrophic behavior. It is a smaller mismatch between the requested change and the implemented change: an issue asks for a sliding-window rate limiter on &lt;code&gt;/api/upload&lt;/code&gt;, and the agent implements a token bucket on &lt;code&gt;/api/files&lt;/code&gt;, adds an unnecessary configuration flag, and updates the docs around that mistaken interpretation. The tests may still pass.&lt;/p&gt;

&lt;p&gt;The problem is not model safety in the broad sense. It is intent alignment inside a specific repository, under incomplete requirements, with constraints that may not have been written into the prompt.&lt;/p&gt;

&lt;p&gt;The current tooling suggests that the fix is no longer just waiting for a smarter model. Plans, skills, persistent instructions, rubrics, judge agents, review agents, tasks, and memory are all becoming part of the same system.&lt;/p&gt;

&lt;p&gt;Taken together, these tools suggest that alignment is becoming less concentrated in the model itself and more dependent on the control plane around it: the artifacts, rubrics, reviewers, memories, and human decision points that shape the agent's work.&lt;/p&gt;




&lt;h2&gt;
  
  
  The old prompt loop is too narrow
&lt;/h2&gt;

&lt;p&gt;The default workflow still treats intent as something that can be captured in one exchange:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Give the agent a long prompt, a &lt;code&gt;/goal&lt;/code&gt;, or a bundle of instructions.&lt;/li&gt;
&lt;li&gt;Let it edit files, run tests, and possibly spawn reviewers.&lt;/li&gt;
&lt;li&gt;Review the resulting diff.&lt;/li&gt;
&lt;li&gt;Explain what it misunderstood.&lt;/li&gt;
&lt;li&gt;Repeat until the result is acceptable.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That loop made sense when the unit of work was one chat session and one assistant. It starts to break once agents can run for hours, touch many files, write tests, and produce changes faster than a human can review them.&lt;/p&gt;

&lt;p&gt;A final pull request is not a large enough channel for intent in that setting.&lt;/p&gt;

&lt;p&gt;By the time the diff exists, the agent has already made several important decisions: which files matter, which constraints are optional, which existing pattern to copy, what "done" means, and how to behave when tests are missing. If those decisions are wrong, review becomes a reconstruction exercise rather than a steering mechanism.&lt;/p&gt;

&lt;p&gt;The newer tools address that problem by making the agent externalize its assumptions before, during, and after the work.&lt;/p&gt;

&lt;h2&gt;
  
  
  First, make the plan editable
&lt;/h2&gt;

&lt;p&gt;Cursor's &lt;a href="https://cursor.com/blog/plan-mode" rel="noopener noreferrer"&gt;Plan Mode&lt;/a&gt; makes the agent research, ask clarifying questions, and write an editable Markdown plan before it changes code. Cognition's &lt;a href="https://cognition.ai/blog/devin-2" rel="noopener noreferrer"&gt;Devin 2.0&lt;/a&gt; puts a preliminary plan and the relevant files in front of the user early. JetBrains Junie, GitHub Spec Kit, and AWS Kiro are all moving toward a similar sequence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;requirements.md → plan.md → tasks → code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important part of this sequence is that it moves misunderstanding earlier in the process.&lt;/p&gt;

&lt;p&gt;If the agent misunderstands the request at the plan stage, the correction is usually a sentence in a Markdown file. If it misunderstands the request during implementation, the correction requires diff review, rework, and cleanup from side effects that may already have spread across the codebase.&lt;/p&gt;

&lt;p&gt;A useful plan makes the important constraints inspectable before code exists: use &lt;code&gt;/api/upload&lt;/code&gt;, not &lt;code&gt;/api/files&lt;/code&gt;; avoid a new configuration flag; reuse the existing limiter; add the regression test first.&lt;/p&gt;

&lt;p&gt;The plan is the first alignment surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steering has to continue during the run
&lt;/h2&gt;

&lt;p&gt;A plan does not remove drift from long agent runs.&lt;/p&gt;

&lt;p&gt;Anthropic's &lt;a href="https://www.anthropic.com/research/measuring-agent-autonomy" rel="noopener noreferrer"&gt;Measuring AI agent autonomy in practice&lt;/a&gt; reported that Claude Code now interrupts itself for clarification on hard tasks more often than human reviewers interrupt human pairs. That behavior is not only a UX detail. It is a control mechanism.&lt;/p&gt;

&lt;p&gt;A useful agent should be able to identify when it is guessing.&lt;/p&gt;

&lt;p&gt;Task lists serve the same purpose. They are not only progress reporting. They expose the agent's decomposition while the work is still in progress:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- [ ] Add upload rate-limit middleware
- [ ] Create new limiter config flag
- [ ] Update /api/files tests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second and third items show the misunderstanding while it is still cheap to correct. Waiting until the final diff makes the same issue harder to isolate.&lt;/p&gt;

&lt;p&gt;Parallel skills make this more important. A frontend skill, migration skill, test-writing skill, and reviewer agent can all run at once. That can increase throughput, but it also creates more places where the system can choose a different definition of done unless each worker exposes its assumptions, tasks, and intermediate state.&lt;/p&gt;

&lt;p&gt;Once a workflow involves multiple agents, chat and PR review are not enough. The system needs visibility into what each agent believes it is doing while the work is still happening.&lt;/p&gt;

&lt;h2&gt;
  
  
  Intent has to survive the session
&lt;/h2&gt;

&lt;p&gt;The next problem is memory.&lt;/p&gt;

&lt;p&gt;This is not memory as user personalization, and it is not only a library of reusable skills. Procedures are useful, but the more important layer is actionable memory: what the system learns from what happened in previous runs.&lt;/p&gt;

&lt;p&gt;Every serious agent run leaves evidence behind. The plan it wrote, the files it opened, the assumptions it made, the commands it ran, the reviewer comments it ignored, and the human correction that finally made the work acceptable are all useful signals.&lt;/p&gt;

&lt;p&gt;That evidence should not disappear into chat history. It can become a learning loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;run logs → candidate lessons → evaluator → behavior updates → future runs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the rate-limiter failure, the lesson is not simply "write a rate-limiter skill." The useful lesson is narrower: when an issue names an endpoint, verify the route before editing; do not introduce product-facing configuration unless the plan explicitly asks for it; if the requested algorithm and the existing pattern disagree, stop and ask.&lt;/p&gt;

&lt;p&gt;Those are behavior updates. They can land in project instructions, planner rubrics, reviewer checks, interruption policies, or sometimes a skill. They should also be evaluated before they change future behavior. The evaluation should ask whether the lesson is supported by the logs, scoped narrowly enough to be safe, and likely to prevent the same class of mistake.&lt;/p&gt;

&lt;p&gt;This also changes how improvement can be measured. Keeping logs, lessons, and evaluation outcomes makes it possible to ask whether scope drift is decreasing, whether reviewers are catching fewer repeat mistakes, whether human corrections are getting smaller, and whether a memory update reduced errors or only added prompt noise.&lt;/p&gt;

&lt;p&gt;Memory without evaluation doesn't hold as much value. Memory tied to logs and evals becomes an improvement system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verification has to check intent
&lt;/h2&gt;

&lt;p&gt;Tests describe whether the code behaves according to the cases that were written down.&lt;/p&gt;

&lt;p&gt;They do not necessarily show whether the agent built the requested thing.&lt;/p&gt;

&lt;p&gt;That gap is why Anthropic's Outcomes primitive is interesting. An Outcome is a Markdown rubric that a separate agent can use to grade the result in a fresh context. The planner can loop until the rubric is satisfied. The relevant shift is that the system does not only ask whether a command passed. It asks whether the result satisfies criteria that were written before implementation started.&lt;/p&gt;

&lt;p&gt;For the rate limiter example, a useful rubric might say:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The implementation is successful if:
- /api/upload enforces a sliding-window limit per authenticated user.
- No new product-facing configuration is introduced.
- The change does not affect /api/files.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That gives the reviewer a contract. The review is no longer based only on whether the diff looks reasonable.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://arxiv.org/abs/2601.05111" rel="noopener noreferrer"&gt;Agent-as-a-Judge survey&lt;/a&gt; points in the same direction: judge agents become more reliable when they observe intermediate steps instead of grading only the final answer. Observation matters because the review agent needs to understand how the work happened, not only inspect the final diff.&lt;/p&gt;

&lt;p&gt;One agent builds. Another checks. A rubric defines the target. The human still decides which failures matter.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack is converging
&lt;/h2&gt;

&lt;p&gt;Plan. Steer. Remember. Verify.&lt;/p&gt;

&lt;p&gt;These used to look like separate research and product threads. They are now becoming the standard shape of the agent stack.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Artifact&lt;/th&gt;
&lt;th&gt;What it protects&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Plan&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;plan.md&lt;/code&gt;, &lt;code&gt;.cursor/plans/&lt;/code&gt;, Spec Kit, Playbooks&lt;/td&gt;
&lt;td&gt;The agent's understanding before code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Steer&lt;/td&gt;
&lt;td&gt;Tasks, clarification interrupts, live progress&lt;/td&gt;
&lt;td&gt;The trajectory during work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remember&lt;/td&gt;
&lt;td&gt;Run logs, evaluated lessons, behavior updates, memory systems&lt;/td&gt;
&lt;td&gt;Learning from previous work across sessions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verify&lt;/td&gt;
&lt;td&gt;Outcomes, rubrics, judge agents, review agents&lt;/td&gt;
&lt;td&gt;Whether the result matches intent&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The important shift is that agent reliability becomes a systems problem, not only a prompting problem.&lt;/p&gt;

&lt;p&gt;The plan is an interface. The skill is an interface. The task list is an interface. The rubric is an interface. The reviewer prompt is an interface. Each one carries intent from one part of the system to another.&lt;/p&gt;

&lt;p&gt;That work is software design applied to a different set of components.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means for engineering teams
&lt;/h2&gt;

&lt;p&gt;Model providers can ship better models. Tool vendors can ship better planners, spec workflows, playbooks, and review systems.&lt;/p&gt;

&lt;p&gt;Those tools still do not know what correctness means inside a specific codebase.&lt;/p&gt;

&lt;p&gt;They do not know that the billing system treats retries differently for enterprise customers. They do not know that the migration tool must be run through &lt;code&gt;drizzle:generate&lt;/code&gt;, not raw SQL. They do not know which product constraints are implicit because everyone on the team has internalized them.&lt;/p&gt;

&lt;p&gt;That knowledge has to live somewhere durable and usable.&lt;/p&gt;

&lt;p&gt;If it lives only in a person's head, the agent will miss it. If it lives only in chat, it will disappear. If it appears only in final PR review, it will arrive after many decisions have already been made.&lt;/p&gt;

&lt;p&gt;The practical work is straightforward and valuable:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write plans the team can edit.&lt;/li&gt;
&lt;li&gt;Preserve run logs, reviewer findings, and human corrections.&lt;/li&gt;
&lt;li&gt;Turn repeated failures into scoped candidate lessons.&lt;/li&gt;
&lt;li&gt;Evaluate those lessons before changing the agent's behavior.&lt;/li&gt;
&lt;li&gt;Make success criteria explicit before implementation.&lt;/li&gt;
&lt;li&gt;Measure whether memory updates reduce drift, repeat mistakes, and human correction.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the control plane for coding agents.&lt;/p&gt;

&lt;h2&gt;
  
  
  The control plane is becoming the main editing surface
&lt;/h2&gt;

&lt;p&gt;For years, the editor was where most software work happened. Code changed, the compiler or test suite responded, and the feedback loop stayed local and visible.&lt;/p&gt;

&lt;p&gt;Coding agents move part of that loop up a level.&lt;/p&gt;

&lt;p&gt;Important edits are now often made outside &lt;code&gt;handler.ts&lt;/code&gt;: in &lt;code&gt;plan.md&lt;/code&gt;, &lt;code&gt;SKILL.md&lt;/code&gt;, &lt;code&gt;CLAUDE.md&lt;/code&gt;, task lists, rubrics, and reviewer instructions. Those files decide what the agent sees, what it is allowed to change, how it reports progress, and how the result gets judged.&lt;/p&gt;

&lt;p&gt;The model is still important, but it is not the whole product. The product is the system around it: artifacts, reviewers, memories, checks, and human decision points that convert model capability into reliable work.&lt;/p&gt;

&lt;p&gt;The practical advantage comes from designing that surrounding system well.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>coding</category>
      <category>agents</category>
    </item>
    <item>
      <title>How to align coding agents with your plans better than markdown, without burning tokens</title>
      <dc:creator>Mixture of Experts</dc:creator>
      <pubDate>Thu, 14 May 2026 22:14:54 +0000</pubDate>
      <link>https://dev.to/mixture-of-experts/how-to-align-coding-agents-with-your-plans-better-than-markdown-without-burning-tokens-27ai</link>
      <guid>https://dev.to/mixture-of-experts/how-to-align-coding-agents-with-your-plans-better-than-markdown-without-burning-tokens-27ai</guid>
      <description>&lt;p&gt;The expensive moments in a coding-agent session are not the model's tokens. They are the seconds you spend skimming a markdown plan and missing a subtle misalignment. You approve, then watch the implementer solve a slightly different problem than the one in your head.&lt;/p&gt;

&lt;p&gt;We have started treating that gap as a UI problem, not a model problem. And the UI we have, for coding agents specifically, is bad.&lt;/p&gt;

&lt;p&gt;Thariq Shihipar at Claude Code has been making this case publicly for a while: agents should be emitting HTML, not markdown, for most non-trivial output. His thread is the right primer on why, and we're not going to try to re-derive it here. What we want to add is the piece that has been missing for us. We needed a way to use HTML at every plan stage without the token cost stacking up across the session. That way is a screenshot, borrowed from how DeepSeek-OCR handles context compression.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://x.com/trq212/status/2052809885763747935" rel="noopener noreferrer"&gt;Thariq's article.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The case Thariq makes, in three parts. We will not reproduce Thariq's thread in full. We suggest reading it. The arguments worth restating here are the ones the rest of this post leans on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Markdown won by inertia. It rendered everywhere, was easy for a human to hand-edit, and the kinds of plans agents used to produce were short. None of that still binds. Most people are no longer hand-editing agent-generated specs, they are prompting the agent to edit them. Plans have grown into full RFCs. And every modern reviewer has a browser tab open.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;HTML carries information markdown cannot. Tables with real column alignment, SVG diagrams drawn to scale, before/after panels rendered side by side at the same visual weight. In the absence of those, agents fall back to ASCII boxes and unicode block characters approximating colors. That fallback is what most markdown plans actually look like at length, and it is why nobody reads past line 100.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Information density matters most at the plan stage. This is where the gap between what the agent thinks you want and what you actually want is widest. Forcing the plan through a flat-text encoding is a lossy compression step you do not need to be performing.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Thariq catalogs the use cases: plan stages with branching options, design and prototype reviews, PR walkthroughs, code and architecture explainers, throwaway custom editors that end with a "copy as JSON" button. We have ended up using HTML for all of those. Our experience matches his closely enough that the right move is to point you at his thread rather than re-list them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this landed for us: design work with a coding agent
&lt;/h2&gt;

&lt;p&gt;The plan-stage argument is the one that converted us, and design work is where it shows up most starkly.&lt;/p&gt;

&lt;p&gt;The last time we were iterating on a UI change with Claude Code, we asked for the plan as a single-file HTML artifact instead of the usual markdown. Two columns, BEFORE on the left, AFTER on the right, rendered with the real tokens and chrome the UI actually ships.&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%2Fajamtad5ju5oryin7dfi.jpg" 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%2Fajamtad5ju5oryin7dfi.jpg" alt=" " width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The point is not the specific feature. The point is that one artifact got us to high-fidelity comprehension in a single round trip. The markdown equivalent would have been a paragraph of prose and a bullet list. Readable, but lossy in exactly the ways that matter for a visual change. Getting to the same level of confidence through markdown would have taken three or four back-and-forth turns of "what does this look like next to X" and "show me the spacing," each one re-tokenizing the conversation and giving us a worse mental picture than the rendered comparison did instantly.&lt;/p&gt;

&lt;p&gt;The expensive operation is reading the spec and noticing what the agent got wrong. Spending model tokens on rendered HTML pays for itself the first time it replaces three turns of "what does this look like next to X" with one look.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Thariq's argument gets harder: token cost on long sessions
&lt;/h2&gt;

&lt;p&gt;HTML is not free. A single artifact comparing two design approaches with inline styles, SVG, and full content runs roughly four to six times the tokens of the equivalent markdown plan. Generation also takes two to four times longer. On a one-shot artifact that's fine. On a long coding-agent session, the plan gets re-read by the implementer, then the reviewer, then the follow-up planner. The HTML keeps getting re-tokenized into context, and the cost stacks up across the session.&lt;/p&gt;

&lt;p&gt;This is the part Thariq's posts don't fully address, and it's why HTML stayed a sometimes-tool for us instead of a default. The fix came from a different research direction.&lt;/p&gt;

&lt;h2&gt;
  
  
  DeepSeek-OCR is the missing mechanism
&lt;/h2&gt;

&lt;p&gt;DeepSeek-AI's paper DeepSeek-OCR: Contexts Optical Compression makes a simple claim: a page of text rendered as an image and processed by a vision encoder can be encoded into far fewer tokens than the same text processed as text. Their model card lists the encoding modes. A 1024x1024 image of a full page becomes 256 vision tokens. Their Tiny mode does it in 64. For content that has visual structure, the image channel encodes more per token than the text channel by a wide margin.&lt;/p&gt;

&lt;p&gt;Paper: &lt;a href="https://arxiv.org/abs/2510.18234" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2510.18234&lt;/a&gt;&lt;br&gt;
Model card: &lt;a href="https://github.com/deepseek-ai/DeepSeek-OCR" rel="noopener noreferrer"&gt;https://github.com/deepseek-ai/DeepSeek-OCR&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You do not need to run their model to borrow the mechanism. Once you have an HTML artifact you are happy with, you do not need to keep the HTML itself in context for subsequent agent calls. Render it, screenshot it, feed the PNG back as an image. The vision tokens encode the same spec at a fraction of the text-token cost, and the human-readable HTML is preserved on disk for the next time you need to iterate.&lt;/p&gt;

&lt;p&gt;The workflow we have settled into:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agent generates the HTML artifact as part of the plan stage.&lt;/li&gt;
&lt;li&gt;We open it in a browser, review, edit if needed, approve.&lt;/li&gt;
&lt;li&gt;A small wrapper renders the artifact and captures a PNG.&lt;/li&gt;
&lt;li&gt;Subsequent agent calls receive the PNG as part of the spec, not the raw HTML.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The trade is asymmetric. Our review happens against the rendered HTML, where spacing, alignment, and color do the work of catching the misalignments. The model's re-reads across the implementer and reviewer stages happen against the screenshot, which costs a fraction of the text tokens. Iteration cost stays close to a markdown plan. What we can see in one glance goes way up.&lt;/p&gt;

&lt;p&gt;This is what moved HTML artifacts from "nice when I remember to ask for one" to "default at every plan stage" for us.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why coding-agent TUIs have not shipped this yet
&lt;/h2&gt;

&lt;p&gt;Claude chat ships artifacts. ChatGPT canvas ships canvas. The chat side of the ecosystem worked this out a while ago: prose-only loses information at exactly the moments that matter most.&lt;/p&gt;

&lt;p&gt;The coding-agent TUIs (Claude Code, Codex, Opencode, etc.) are still markdown-first across every stage of the loop. Part of the reason is that TUIs render in terminals, and terminals do not render HTML. But the artifact does not need to live inside the TUI. A hook that drops the file in a browser tab or a side panel solves the rendering problem. The harder constraint is that the agent has to know when an HTML artifact is the right tool, and most plan-stage prompts never ask for one. The default is markdown, the path of least resistance is markdown, and you find out about the misalignment after the implementer is halfway done.&lt;/p&gt;

&lt;p&gt;In the short term the fix is one line in your plan-stage prompt: ask for a single-file HTML artifact when the problem is comparison-heavy, visual, or architecturally branching. Then add the screenshot step before the artifact gets re-read by downstream agent calls. In the longer term we want the agents to reach for HTML on their own, the way Claude already does in chat.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it on the next ambiguous plan
&lt;/h2&gt;

&lt;p&gt;The pattern is cheap to try in one session. The next time an agent hands you a markdown plan for something you would want to compare, draw, or render, ask for a single-file HTML artifact instead. Open it in a browser. Read the rendered comparison rather than the prose abstraction of it. If the HTML changes your read on the plan, that is what markdown was hiding.&lt;/p&gt;

&lt;p&gt;Then screenshot it before the next agent stage reads it back. The screenshot is what makes this the default at every plan stage, instead of a tool you only reach for when the artifact feels important enough to justify the tokens.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;[1] Thariq Shihipar (Claude Code), The Unreasonable Effectiveness of HTML: &lt;a href="https://x.com/trq212/status/2052809885763747935" rel="noopener noreferrer"&gt;https://x.com/trq212/status/2052809885763747935&lt;/a&gt; — The case for HTML over markdown as the default agent output format, with a catalog of use cases.&lt;/p&gt;

&lt;p&gt;[2] DeepSeek-AI, DeepSeek-OCR: Contexts Optical Compression. arXiv: &lt;a href="https://arxiv.org/abs/2510.18234" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2510.18234&lt;/a&gt; — GitHub: &lt;a href="https://github.com/deepseek-ai/DeepSeek-OCR" rel="noopener noreferrer"&gt;https://github.com/deepseek-ai/DeepSeek-OCR&lt;/a&gt; — The mechanism behind the screenshot trick: visual tokens encode page-structured content at a fraction of the text-token cost.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>learning</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Atomic's Ralph Loop: a deterministic, plan, orchestrate review for long-running, ambiguous work</title>
      <dc:creator>Mixture of Experts</dc:creator>
      <pubDate>Thu, 07 May 2026 22:52:30 +0000</pubDate>
      <link>https://dev.to/mixture-of-experts/atomics-ralph-loop-a-deterministic-plan-orchestrate-review-for-long-running-ambiguous-work-1bb</link>
      <guid>https://dev.to/mixture-of-experts/atomics-ralph-loop-a-deterministic-plan-orchestrate-review-for-long-running-ambiguous-work-1bb</guid>
      <description>&lt;p&gt;Geoffrey Huntley's &lt;a href="https://ghuntley.com/ralph/" rel="noopener noreferrer"&gt;original Ralph essay&lt;/a&gt; introduced a primitive I keep coming back to: a coding agent in a while true loop reading the same prompt over and over until the work is done. The pattern is genuinely powerful, and the ecosystem around it has grown a lot since. Huntley's own follow-upgeneralizes it well beyond coding. &lt;/p&gt;

&lt;p&gt;The official &lt;a href="https://github.com/anthropics/claude-code/blob/main/plugins/ralph-wiggum/README.md" rel="noopener noreferrer"&gt;Claude Code ralph-wiggum plugin&lt;/a&gt; ships a Stop-hook variant. Wiggum CLI checkpoints distinct phases with a TUI on top. Vercel's ralph-loop-agent adds completion verification and token-budget stops. Adjacent tools push the same idea from neighboring angles: Aider's architect/editor mode splits planning and editing across two models and posts SOTA numbers on its own benchmark, Cline's Plan &amp;amp; Act keeps a human approving every diff, OpenHands wraps an action-observation loop with critic models and stuck-loop detection, and recent essays on patterns like ASDLC's Ralph Loop sketch out adversarial dual-review approaches that closely match where I ended up. I've learned a lot from all of this, and Atomic's Ralph borrows openly from the lineage.&lt;/p&gt;

&lt;p&gt;What I personally wanted — and didn't quite see assembled in one place for my own workflow — was a loop I could leave running unattended on a 30-file refactor overnight where every step is inspectable in the morning: the RFC, the task DAG, the captured diff, both reviewers' transcripts. This post is the design of the Ralph loop that ships in &lt;a href="https://github.com/flora131/atomic" rel="noopener noreferrer"&gt;Atomic&lt;/a&gt;, what it inherits from the work above, and the small set of choices that make it a little different.&lt;/p&gt;

&lt;h2&gt;
  
  
  What goes wrong with a naive Ralph
&lt;/h2&gt;

&lt;p&gt;A while true over one prompt has three structural problems, and all three show up around iteration four:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The reviewer is the same brain that wrote the code. It signs off on its own bugs. Self-review converges on confidence, not correctness.&lt;/li&gt;
&lt;li&gt;There's no plan that survives the session reset. Each iteration starts cold, constraints drift, later iterations contradict earlier ones.&lt;/li&gt;
&lt;li&gt;Symptoms get patched instead of root causes. The reviewer finds five errors in five files. The next iteration fixes five places. The shared underlying defect ships unchanged.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A lot of tools handle a subset of these well. Aider's architect/editor pair separates the planning model from the editing model. Claude Code's plan mode persists a plan that survives /clear and supports iterative re-planning. Cline's Plan &amp;amp; Act keeps a human approving every diff. Devin loops autonomously inside its sandbox. What I wanted on top of these foundations was an unattended loop with two independent reviewers gating termination and a captured artifact for every step — so I could walk away for hours and still reconstruct exactly what happened when I came back.&lt;/p&gt;

&lt;h2&gt;
  
  
  The shape
&lt;/h2&gt;

&lt;p&gt;Atomic's Ralph is one outer loop with five stages per iteration. Three are visible (you can attach to the tmux session and watch); two are headless because the SDK enforces structured output and there's nothing for a human to steer.&lt;/p&gt;

&lt;p&gt;Flow:&lt;br&gt;
spec or RFC path -&amp;gt; Planner (visible) -&amp;gt; Orchestrator (visible, RFC -&amp;gt; DAG -&amp;gt; parallel workers) -&amp;gt; Code Simplifier (visible) -&amp;gt; Infra Discovery (3 headless sub-agents, parallel) -&amp;gt; Dual Reviewer (2 headless, schema-enforced) -&amp;gt; both say "patch is correct"? -&amp;gt; if yes, done. If no, findings grouped by file -&amp;gt; planner triages root causes -&amp;gt; back to Planner.&lt;/p&gt;

&lt;p&gt;The loop terminates on one of two conditions: both reviewers return overall_correctness: "patch is correct", or max_loops (default 10) elapses. There is no third "looks fine" branch.&lt;/p&gt;
&lt;h2&gt;
  
  
  Determinism is wired in, not prompted
&lt;/h2&gt;

&lt;p&gt;The two design decisions that buy the most reliability:&lt;/p&gt;

&lt;p&gt;Schema-enforced dual reviewers. Each iteration spawns two reviewers in parallel, each using its provider SDK's structured-output mode (Claude Agent SDK outputFormat: { type: "json_schema" }, OpenCode format: json_schema, Copilot via defineTool). The schema is a Zod object I compile to JSON Schema once:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ReviewResultSchema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;object&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;findings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ReviewFindingSchema&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;overall_correctness&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;enum&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;patch is correct&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;patch is incorrect&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
  &lt;span class="na"&gt;overall_explanation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;overall_confidence_score&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;number&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;optional&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The merge rule is conservative: either reviewer flagging "patch is incorrect" fails the iteration, and either reviewer failing to produce schema-valid output is treated as "needs another pass." This sounds obvious. The first version had a bug where a missing structured output defaulted to "correct" and the loop exited after one pass. Nothing was actually verified, but the workflow happily reported success. The fix wasn't in the prompt; it was in the merge function.&lt;/p&gt;

&lt;p&gt;A captured branch changeset, injected. Before the reviewers run, the workflow shells out and captures the full diff, name-status, and uncommitted state relative to the parent branch. That string lands in the reviewer prompt verbatim. Reviewers don't need to discover what changed; they read it. Both reviewers on the same iteration see the same input.&lt;/p&gt;

&lt;p&gt;These two choices remove most of the iteration-to-iteration variance. Either the reviewer sees the diff and the schema accepts the verdict, or the loop keeps running.&lt;/p&gt;

&lt;h2&gt;
  
  
  Re-planning, not re-prompting
&lt;/h2&gt;

&lt;p&gt;The interesting part of the loop is what happens between iterations.&lt;/p&gt;

&lt;p&gt;When the merged review fails, findings are grouped by file_path and rendered into a markdown brief. Clusters of related symptoms surface together. That brief becomes the only new context the planner gets on the next iteration. The planner is explicitly instructed to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Validate each finding by reading the cited file (drop stale ones).&lt;/li&gt;
&lt;li&gt;Cluster findings that share a module or underlying defect.&lt;/li&gt;
&lt;li&gt;Root-cause the actual defect rather than the surface symptom.&lt;/li&gt;
&lt;li&gt;Fold the corrected approach into specific RFC sections (Detailed Design, Alternatives, Test Plan).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The output is a revised RFC, not a new prompt. The orchestrator on the next iteration decomposes that RFC into a fresh task DAG. Tasks aren't carried across iterations; the design is.&lt;/p&gt;

&lt;p&gt;This is where most DIY Ralphs diverge from this one. They feed reviewer findings back as a comment list, the agent fixes the comments, and the defect ships. Here, the next iteration is forced to revise the design first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decomposition is part of the loop, not a one-shot
&lt;/h2&gt;

&lt;p&gt;The orchestrator stage takes the RFC and runs three phases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Decompose into tasks with a gerund subject, an imperative description, and an explicit blockedBy dependency list. Persisted via the SDK's task tool (TaskCreate, todowrite, etc.).&lt;/li&gt;
&lt;li&gt;Dependency-graph integrity check. Every dependency reference must point to a real task ID. Dangling references are dropped before any worker spawns. Otherwise tasks block forever.&lt;/li&gt;
&lt;li&gt;Execute. Ready tasks (pending, all deps completed) fan out as parallel sub-agents. As workers finish, newly unblocked tasks dispatch immediately. Worker failures retry up to three times with the error in context, then mark error and unblock the rest of the graph.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A few opinionated rules baked into the prompt: tasks should be small enough that a single sub-agent finishes one in one session, test tasks come after the code they cover, foundations (schema, shared utils) come first. Decomposition is data. Bad decomposition is the leading cause of merge conflicts in long-running runs, and the prompt is where that data quality is enforced.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three more details that matter
&lt;/h2&gt;

&lt;p&gt;Infra discovery before review. Three sub-agents (codebase-locator, codebase-analyzer, codebase-pattern-finder) run in parallel and surface the exact build, test, lint, and CI commands for the repo. The reviewer is then required to run them before writing findings. Type errors and test failures become P0/P1 findings with the actual command and exit status quoted in the body. The reviewer cannot declare correctness without verifying against the project's own gates.&lt;/p&gt;

&lt;p&gt;P3 nits get filtered. The merge step drops priority-3 findings before they reach the planner. If only nits remain, the loop stops. I don't want eight iterations debating a variable name.&lt;/p&gt;

&lt;p&gt;A "caveman" response-style directive is appended to every prompt: drop articles, drop pleasantries, technical terms exact, code blocks unchanged, schema literals unchanged. Across ten iterations the token savings are real, and the structured outputs the loop actually depends on are explicitly carved out so they survive intact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it on something hard
&lt;/h2&gt;

&lt;p&gt;atomic workflow -n ralph -a claude ""&lt;/p&gt;

&lt;p&gt;It runs against your existing Claude Code, OpenCode, or Copilot CLI install. Atomic wraps a deterministic outer loop around your agent rather than replacing it. The whole workflow is a small set of TypeScript files you can read in one sitting: &lt;a href="https://github.com/flora131/atomic/tree/main/packages/atomic-sdk/src/workflows/builtin/ralph" rel="noopener noreferrer"&gt;https://github.com/flora131/atomic/tree/main/packages/atomic-sdk/src/workflows/builtin/ralph&lt;/a&gt;. MIT-licensed.&lt;/p&gt;

&lt;p&gt;The honest claim is modest: this Ralph fails in ways you can debug. When the loop gets something wrong, I can read the RFC, the task DAG, the captured changeset, and both reviewer transcripts and tell you why. That's the bar I want for any agent loop running for hours unattended on real work.&lt;/p&gt;

&lt;p&gt;If you try it and it breaks on something, the issue tracker (&lt;a href="https://github.com/flora131/atomic/issues" rel="noopener noreferrer"&gt;https://github.com/flora131/atomic/issues&lt;/a&gt;) is open.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>opensource</category>
      <category>agents</category>
    </item>
    <item>
      <title>Three Things I Learned Using Coding Agents with 1M-Token Models</title>
      <dc:creator>Mixture of Experts</dc:creator>
      <pubDate>Thu, 07 May 2026 02:35:21 +0000</pubDate>
      <link>https://dev.to/mixture-of-experts/three-things-i-learned-using-coding-agents-with-1m-token-models-501o</link>
      <guid>https://dev.to/mixture-of-experts/three-things-i-learned-using-coding-agents-with-1m-token-models-501o</guid>
      <description>&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The effective context window is far smaller than advertised. Even with 1M-token models, performance degrades noticeably past ~100K tokens — worse coherency, more hallucinations, and planning drift. Treat the full window as a capacity limit, not an operating target.&lt;/li&gt;
&lt;li&gt;Sub-agents are essential for long-horizon work. Delegating scoped tasks to sub-agents keeps each agent in its "smart zone" and prevents context pollution. Watch for the "impatience problem" where the main agent duplicates work already delegated.&lt;/li&gt;
&lt;li&gt;Skills + CLIs beat MCP servers for context control. Skills offer progressive context disclosure and dynamic filtering. MCP servers push opaque context with limited filtering — a critical difference when every token counts.&lt;/li&gt;
&lt;li&gt;Context is the scarce resource, not capability. Compaction strategy, sub-agent architecture, and tool selection should all be designed around keeping context lean, scoped, and fresh.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I've been using coding agents heavily — primarily Copilot CLI and the SDK, but also Claude Code and other agentic tools — alongside the 1M-token context models (Codex 5.4 and Opus/Sonnet 4.6). While the examples below are drawn from my Copilot CLI workflow, these patterns apply to any coding agent that operates on long-context models: Claude Code, Cursor, Windsurf, Aider, or whatever you're using. The underlying constraints are model-level, not tool-specific.&lt;/p&gt;

&lt;p&gt;My workflow has evolved significantly from where most people start. Most developers see "1M tokens" and think "I can throw everything at the model." The results are predictably bad. Worse coherency. More hallucinations. Plans that drift until they're unrecognizable. The full context window is a capacity limit, not an operating target.&lt;/p&gt;

&lt;p&gt;Here are three patterns that fundamentally changed how I work with these tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The "Smart Zone" Is Much Smaller Than You Think
&lt;/h2&gt;

&lt;p&gt;Even though these models support context windows of up to 1 million tokens, the effective performance zone is significantly smaller — and the reasons are architectural, not incidental.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why the limitation exists
&lt;/h3&gt;

&lt;p&gt;Most 1M-token models aren't fundamentally larger or smarter than their shorter-context predecessors. They achieve extended context through mathematical techniques like YaRN (Yet another RoPE extensioN — &lt;a href="https://arxiv.org/pdf/2309.00071" rel="noopener noreferrer"&gt;https://arxiv.org/pdf/2309.00071&lt;/a&gt;) that stretch the model's sequence length without adding parameters. The context window grows, but the model's core reasoning capacity — what HumanLayer calls the "instruction budget" (&lt;a href="https://www.hlyr.dev/blog/long-context-isnt-the-answer" rel="noopener noreferrer"&gt;https://www.hlyr.dev/blog/long-context-isnt-the-answer&lt;/a&gt;) — stays the same.&lt;/p&gt;

&lt;p&gt;The instruction budget is the number of instructions a model can reliably follow before adherence starts to drop. It's strongly correlated with the model's parameter count and instruction tuning quality, not with its context window size. When you extend the context 5x without scaling the instruction budget, you can fit more information in, but the model isn't actually better at attending to it. HumanLayer found this firsthand when they tested Claude Opus 4.6 (1M context): instruction adherence degraded not just at capacity limits, but across all context lengths compared to the shorter-context Opus 4.5.&lt;/p&gt;

&lt;p&gt;Think of it this way: your context window is a haystack where tool calls, documents, and files are the hay. The quality of the agent's next action depends on its ability to find the right needle — the most relevant instruction for the current state. Expanding the haystack 5x without improving the model's needle-finding ability just buries the signal deeper.&lt;/p&gt;

&lt;h3&gt;
  
  
  What degradation looks like in practice
&lt;/h3&gt;

&lt;p&gt;Through experimentation across different prompt and context sizes, model performance starts to noticeably degrade past approximately 100K tokens. This shows up as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Worse task coherency — the model loses track of the overall objective&lt;/li&gt;
&lt;li&gt;Reduced reasoning reliability — logical chains break down&lt;/li&gt;
&lt;li&gt;Increased hallucination rate — the model confidently fabricates details&lt;/li&gt;
&lt;li&gt;Planning drift in long-horizon tasks — multi-step plans veer off course&lt;/li&gt;
&lt;li&gt;Instruction disobedience — the model ignores design documents, misunderstands simple instructions, or makes trivial mistakes it wouldn't make in a leaner context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't theoretical. I've watched agents produce clean, well-reasoned output at 80K tokens, then fall apart at 150K with the same task and codebase. The degradation isn't binary — it's a gradient. But the inflection point is consistent enough that I've built my workflow around it. HumanLayer observed the same pattern — they shifted their context warnings to trigger at 100K tokens rather than at a percentage of the usable window.&lt;/p&gt;

&lt;h3&gt;
  
  
  What works
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Trigger auto-compaction earlier. Don't wait until the context window is full. Set compaction thresholds well below the model's maximum capacity.&lt;/li&gt;
&lt;li&gt;Periodically clear the context window. Persist progress to disk — research docs, specs, task lists — then start fresh sessions that load only what's needed for the current phase.&lt;/li&gt;
&lt;li&gt;Stop max-packing prompts. The fact that the model allows 1M tokens doesn't mean you should use them. Treat the full window as headroom for unexpected context growth, not as the target operating point.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The practical rule: treat the full 1M window as a capacity limit, not an operating target. More context isn't more capability. Design your workflows around staying well under it.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Use Sub-Agents to Offload Long-Horizon Work
&lt;/h2&gt;

&lt;p&gt;One of the most effective patterns I've found is spawning sub-agents to balance the main agent's context and handle complex or long-running tasks.&lt;/p&gt;

&lt;p&gt;The concept is straightforward: instead of stuffing everything into one agent's context window, delegate scoped work to sub-agents that operate in their own context windows. The orchestrating agent receives condensed results. Its context stays lean. Each sub-agent gets only the information it needs.&lt;/p&gt;

&lt;p&gt;This directly addresses the context degradation problem. If you can keep each agent under 100K tokens by distributing work across multiple agents, you stay in the "smart zone" even for tasks that would otherwise require 300K+ tokens of total context.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Orchestrator Pattern
&lt;/h3&gt;

&lt;p&gt;Below is a template I use for an orchestrator sub-agent (adapted from HumanLayer's work on sub-agent orchestration, with modifications for my workflow):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;orchestrator&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Orchestrate&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sub-agents&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;accomplish&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;complex&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;long-horizon&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tasks&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;without&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;losing&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;coherency&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;by&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;delegating&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sub-agents."&lt;/span&gt;
&lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;execute"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;agent"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;edit"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;read"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="s"&gt;You are a sub-agent orchestrator. The most important tool available to you&lt;/span&gt;
&lt;span class="na"&gt;is the one that dispatches sub-agents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;either `Agent` or `Task`.&lt;/span&gt;

&lt;span class="s"&gt;All non-trivial operations should be delegated to sub-agents.&lt;/span&gt;

&lt;span class="s"&gt;Delegate research and codebase understanding tasks to codebase-analyzer,&lt;/span&gt;
&lt;span class="s"&gt;codebase-locator, and pattern-locator sub-agents.&lt;/span&gt;

&lt;span class="s"&gt;Delegate running bash commands (particularly ones likely to produce lots&lt;/span&gt;
&lt;span class="s"&gt;of output) to Bash sub-agents.&lt;/span&gt;

&lt;span class="s"&gt;Use separate sub-agents for separate tasks, and launch them in parallel —&lt;/span&gt;
&lt;span class="s"&gt;but do not delegate tasks with significant overlap to separate sub-agents.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key design decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Separate sub-agents for separate tasks — prevents context pollution between unrelated work&lt;/li&gt;
&lt;li&gt;Parallel execution — sub-agents can work simultaneously on independent tasks&lt;/li&gt;
&lt;li&gt;No overlapping delegation — avoids duplicate work and conflicting outputs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Impatience Problem
&lt;/h3&gt;

&lt;p&gt;There's a behavioral quirk worth calling out. The post-training behavior of these models tends to favor smaller-model-style execution patterns. In practice, this means the main agent becomes impatient — it attempts to complete a task that's already been delegated to a sub-agent.&lt;/p&gt;

&lt;p&gt;This defeats the purpose of sub-agents entirely. You get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Context pollution — the main agent duplicates work happening in a sub-agent&lt;/li&gt;
&lt;li&gt;Duplicate work — wasted compute and potentially conflicting outputs&lt;/li&gt;
&lt;li&gt;Planning drift — the main agent's plan diverges from the sub-agent's execution&lt;/li&gt;
&lt;li&gt;Loss of orchestration coherency — the delegation structure breaks down&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's why I explicitly include this instruction in every orchestrator prompt:&lt;/p&gt;

&lt;p&gt;"IMPORTANT: Sometimes sub-agents will take a long time. DO NOT attempt to do the job yourself while waiting for the sub-agent to respond. Instead, use the time to plan out your next steps, or ask the user follow-up questions to clarify the task requirements."&lt;/p&gt;

&lt;p&gt;This isn't specific to any one tool. It's a model-level behavioral tendency — the post-training optimization makes models want to "do something" rather than wait. I first noticed it in Copilot CLI, but the same pattern shows up in Claude Code, Cursor, and other agentic systems. The explicit instruction overrides that default regardless of which agent you're using.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Prefer Skills + CLIs Over MCP Servers
&lt;/h2&gt;

&lt;p&gt;In practice, I consistently favor Skills + CLIs over MCP servers for agent tool integration.&lt;/p&gt;

&lt;p&gt;The reason is context control. Skills and CLIs support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Progressive context disclosure — you control exactly what context enters the prompt window, when, and in what form&lt;/li&gt;
&lt;li&gt;Dynamic filtering — you can scope the retrieved context based on the current task&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MCP servers, by contrast, often:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Push opaque context — the server decides what to include, and you have limited visibility into what enters your prompt&lt;/li&gt;
&lt;li&gt;Provide limited filtering — the architectural design of MCP makes it harder to control the granularity of context injection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This distinction becomes critical once you're operating near the 100K+ token regime. When every token of context matters, you need tight control over what the agent "knows" at any point in time. Skills give you that control. MCP servers often don't.&lt;/p&gt;

&lt;h3&gt;
  
  
  Skill Registries for Discoverable Capabilities
&lt;/h3&gt;

&lt;p&gt;To ground coding agents with capabilities they can dynamically discover and download, two registries are worth knowing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Agent Skills Directory — a curated directory of reusable agent skills: &lt;a href="https://skills.sh/" rel="noopener noreferrer"&gt;https://skills.sh/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;microsoft/skills — Microsoft's open-source skill repository: &lt;a href="https://github.com/microsoft/skills" rel="noopener noreferrer"&gt;https://github.com/microsoft/skills&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These registries let agents find and adopt capabilities without ballooning the primary context with skill definitions that aren't needed for the current task. The skill gets loaded when it's needed, used, and then the context is reclaimed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pattern
&lt;/h2&gt;

&lt;p&gt;All three tips point to the same underlying principle: context is the scarce resource, not capability.&lt;/p&gt;

&lt;p&gt;The models are capable enough. The context window is large enough. But the effective operating zone is much smaller than the theoretical maximum. Everything you do — compaction strategy, sub-agent architecture, tool selection — should be designed around keeping context lean, scoped, and fresh.&lt;/p&gt;

&lt;p&gt;Treat context like memory in a constrained system. Allocate carefully. Free aggressively. Never assume that having more headroom means you should use it.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;HumanLayer, "Long-Context Isn't the Answer": &lt;a href="https://www.hlyr.dev/blog/long-context-isnt-the-answer" rel="noopener noreferrer"&gt;https://www.hlyr.dev/blog/long-context-isnt-the-answer&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Peng et al., "YaRN: Efficient Context Window Extension of Large Language Models": &lt;a href="https://arxiv.org/pdf/2309.00071" rel="noopener noreferrer"&gt;https://arxiv.org/pdf/2309.00071&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The Agent Skills Directory: &lt;a href="https://skills.sh/" rel="noopener noreferrer"&gt;https://skills.sh/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft Skills Repository: &lt;a href="https://github.com/microsoft/skills" rel="noopener noreferrer"&gt;https://github.com/microsoft/skills&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
