<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: parallel-agents</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/parallel-agents.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2026-03-17T12:32:28+00:00</updated><author><name>Simon Willison</name></author><entry><title>Subagents</title><link href="https://simonwillison.net/guides/agentic-engineering-patterns/subagents/" rel="alternate"/><published>2026-03-17T12:32:28+00:00</published><updated>2026-03-17T12:32:28+00:00</updated><id>https://simonwillison.net/guides/agentic-engineering-patterns/subagents/</id><summary type="html">
    &lt;p&gt;&lt;em&gt;&lt;a href="https://simonwillison.net/guides/agentic-engineering-patterns/"&gt;Agentic Engineering Patterns&lt;/a&gt; &amp;gt;&lt;/em&gt;&lt;/p&gt;
    &lt;p&gt;LLMs are restricted by their &lt;strong&gt;context limit&lt;/strong&gt; - how many tokens they can fit in their working memory at any given time. These values have not increased much over the past two years even as the LLMs themselves have seen dramatic improvements in their abilities - they generally top out at around 1,000,000, and benchmarks frequently report better quality results below 200,000.&lt;/p&gt;
&lt;p&gt;Carefully managing the context such that it fits within those limits is critical to getting great results out of a model.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Subagents&lt;/strong&gt; provide a simple but effective way to handle larger tasks without burning through too much of the coding agent’s valuable top-level context.&lt;/p&gt;
&lt;p&gt;When a coding agent uses a subagent it effectively dispatches a fresh copy of itself to achieve a specified goal, with a new context window that starts with a fresh prompt.&lt;/p&gt;
&lt;h2 id="claude-codes-explore-subagent"&gt;Claude Code’s Explore subagent&lt;/h2&gt;
&lt;p&gt;Claude Code uses subagents extensively as part of its standard way of working. Let's use that as an illustrative example.&lt;/p&gt;
&lt;p&gt;Any time you start a new task against an existing repo Claude Code first needs to explore that repo to figure out its general shape and find relevant information needed to achieve that task.&lt;/p&gt;
&lt;p&gt;It does this by constructing a prompt and dispatching a subagent to perform that exploration and return a description of what it finds.&lt;/p&gt;
&lt;p&gt;I kicked off a Claude Code session with a screenshot of &lt;a href="https://simonwillison.net/guides/agentic-engineering-patterns/linear-walkthroughs/changes/"&gt;a page from my guide&lt;/a&gt; and this prompt:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Make the chapter diffs also show which characters have changed in this diff view with a darker color of red or green for the individually changed segments of text within the line&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here's &lt;a href="https://gisthost.github.io/?effbdc564939b88fe5c6299387e217da/index.html"&gt;the transcript&lt;/a&gt; of that session.&lt;/p&gt;
&lt;p&gt;Claude Code started by running an “Explore” subagent with the following starter prompt:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Find the code that implements the diff view for "chapters" in this Django blog. I need to find:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Templates that render diffs (look for diff-related HTML/CSS with red/green backgrounds)&lt;/li&gt;
&lt;li&gt;Python code that generates diffs (look for difflib usage or similar)&lt;/li&gt;
&lt;li&gt;Any JavaScript related to diff rendering&lt;/li&gt;
&lt;li&gt;CSS styles for the diff view (red/green line backgrounds)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Search thoroughly - check templates/, static/, blog/ directories. Look for keywords like "diff", "chapter", "revision", "history", "compare".&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Subagents work similar to any other tool call: the parent agent dispatches them just as they would any other tool and waits for the response. It's interesting to see models prompt themselves in this way - they generally have good taste in prompting strategies.&lt;/p&gt;
&lt;p&gt;The Explore subagent churned away for a few seconds and returned a response that started like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Perfect! Now let me create a comprehensive summary with all the findings:&lt;/p&gt;
&lt;h3 id="summary-chapter-diff-view-implementation"&gt;Summary: Chapter Diff View Implementation&lt;/h3&gt;
&lt;p&gt;I found the complete implementation of the diff view for chapters in this Django blog. Here are the key components:&lt;/p&gt;
&lt;h4 id="1-python-code-diff-generation-homeusersimonwillisonblogguidesviewspy-lines-139-202"&gt;1. &lt;strong&gt;Python Code - Diff Generation&lt;/strong&gt; (&lt;code&gt;/home/user/simonwillisonblog/guides/views.py&lt;/code&gt;, lines 139-202)&lt;/h4&gt;
&lt;p&gt;The &lt;code&gt;chapter_changes()&lt;/code&gt; view function uses Python's built-in &lt;code&gt;difflib.unified_diff()&lt;/code&gt; to generate diffs: […]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The full subagent response included all of the details the parent agent needed in order to start editing the code to address my original request.&lt;/p&gt;
&lt;h2 id="parallel-subagents"&gt;Parallel subagents&lt;/h2&gt;
&lt;p&gt;This Explore subagent is the simplest example of how subagents can work, with the parent agent pausing while the subagent runs. The principle advantage of this kind of subagent is that it can work with a fresh context in a way that avoids spending tokens from the parent’s available limit.&lt;/p&gt;
&lt;p&gt;Subagents can also provide a significant performance boost by having the parent agent run multiple subagents at the same time, potentially also using faster and cheaper models such as Claude Haiku to accelerate those tasks.&lt;/p&gt;
&lt;p&gt;Coding agents that support subagents can use them based on your instructions. Try prompts like this:&lt;/p&gt;
&lt;p&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Use subagents to find and update all of the templates that are affected by this change.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
For tasks that involve editing several files - and where those files are not dependent on each other - this can offer a significant speed boost.&lt;/p&gt;
&lt;h2 id="specialist-subagents"&gt;Specialist subagents&lt;/h2&gt;
&lt;p&gt;Some coding agents allow subagents to run with further customizations, often in the form of a custom system prompt or custom tools or both, which allow those subagents to take on a different role.&lt;/p&gt;
&lt;p&gt;These roles can cover a variety of useful specialties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;code reviewer&lt;/strong&gt; agent can review code and identify bugs, feature gaps or weaknesses in the design.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;test runner&lt;/strong&gt; agent can run the test. This is particularly worthwhile if your test suite is large and verbose, as the subagent can hide the full test output from the main coding agent and report back with just details of any failures.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;debugger&lt;/strong&gt; agent can specialize in debugging problems, spending its token allowance reasoning though the codebase and running snippets of code to help isolate steps to reproduce and determine the root cause of a bug.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While it can be tempting to go overboard breaking up tasks across dozens of different specialist subagents, it's important to remember that the main value of subagents is in preserving that valuable root context and managing token-heavy operations. Your root coding agent is perfectly capable of debugging or reviewing its own output provided it has the tokens to spare.&lt;/p&gt;
&lt;h2 id="official-documentation"&gt;Official documentation&lt;/h2&gt;
&lt;p&gt;Several popular coding agents support subagents, each with their own documentation on how to use them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/subagents/"&gt;OpenAI Codex subagents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.claude.com/docs/en/sub-agents"&gt;Claude subagents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://geminicli.com/docs/core/subagents/"&gt;Gemini CLI subagents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.mistral.ai/mistral-vibe/agents-skills#agent-selection"&gt;Mistral Vibe subagents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opencode.ai/docs/agents/"&gt;OpenCode agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/docs/copilot/agents/subagents"&gt;Subagents in Visual Studio Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cursor.com/docs/subagents"&gt;Cursor Subagents&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/parallel-agents"&gt;parallel-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/agentic-engineering"&gt;agentic-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="parallel-agents"/><category term="coding-agents"/><category term="generative-ai"/><category term="agentic-engineering"/><category term="ai"/><category term="llms"/></entry><entry><title>Use subagents and custom agents in Codex</title><link href="https://simonwillison.net/2026/Mar/16/codex-subagents/" rel="alternate"/><published>2026-03-16T23:03:56+00:00</published><updated>2026-03-16T23:03:56+00:00</updated><id>https://simonwillison.net/2026/Mar/16/codex-subagents/</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://developers.openai.com/codex/subagents"&gt;Use subagents and custom agents in Codex&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Subagents were announced in general availability today for OpenAI Codex, after several weeks of preview behind a feature flag.&lt;/p&gt;
&lt;p&gt;They're very similar to the Claude Code implementation, with default subagents for "explorer", "worker" and "default". It's unclear to me what the difference between "worker" and "default" is but based on their CSV example I think "worker" is intended for running large numbers of small tasks in parallel.&lt;/p&gt;
&lt;p&gt;Codex also lets you define custom agents as TOML files in &lt;code&gt;~/.codex/agents/&lt;/code&gt;. These can have custom instructions and be assigned to use specific models - including &lt;code&gt;gpt-5.3-codex-spark&lt;/code&gt; if you want &lt;a href="https://simonwillison.net/2026/Feb/12/codex-spark/"&gt;some raw speed&lt;/a&gt;. They can then be referenced by name, as demonstrated by this example prompt from the documentation:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Investigate why the settings modal fails to save. Have browser_debugger reproduce it, code_mapper trace the responsible code path, and ui_fixer implement the smallest fix once the failure mode is clear.&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The subagents pattern is widely supported in coding agents now. Here's documentation across a number of different platforms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/subagents/"&gt;OpenAI Codex subagents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.claude.com/docs/en/sub-agents"&gt;Claude Code subagents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://geminicli.com/docs/core/subagents/"&gt;Gemini CLI subagents&lt;/a&gt; (experimental)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.mistral.ai/mistral-vibe/agents-skills#agent-selection"&gt;Mistral Vibe subagents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opencode.ai/docs/agents/"&gt;OpenCode agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/docs/copilot/agents/subagents"&gt;Subagents in Visual Studio Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cursor.com/docs/subagents"&gt;Cursor Subagents&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: I added &lt;a href="https://simonwillison.net/guides/agentic-engineering-patterns/subagents/"&gt;a chapter on Subagents&lt;/a&gt; to my Agentic Engineering Patterns guide.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/OpenAIDevs/status/2033636701848174967"&gt;@OpenAIDevs&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openai"&gt;openai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/codex"&gt;codex&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/parallel-agents"&gt;parallel-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/agentic-engineering"&gt;agentic-engineering&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="openai"/><category term="generative-ai"/><category term="llms"/><category term="coding-agents"/><category term="codex"/><category term="parallel-agents"/><category term="agentic-engineering"/></entry><entry><title>Recovering lost code</title><link href="https://simonwillison.net/2026/Feb/19/recovering-lost-code/" rel="alternate"/><published>2026-02-19T23:48:35+00:00</published><updated>2026-02-19T23:48:35+00:00</updated><id>https://simonwillison.net/2026/Feb/19/recovering-lost-code/</id><summary type="html">
    &lt;p&gt;Reached the stage of parallel agent psychosis where I've lost a whole feature - I know I had it yesterday, but I can't seem to find the branch or worktree or cloud instance or checkout with it in.&lt;/p&gt;
&lt;p&gt;... found it! Turns out I'd been hacking on a random prototype in &lt;code&gt;/tmp&lt;/code&gt; and then my computer crashed and rebooted and I lost the code... but it's all still there in &lt;code&gt;~/.claude/projects/&lt;/code&gt; session logs and Claude Code can extract it out and spin up the missing feature again.&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude-code"&gt;claude-code&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/parallel-agents"&gt;parallel-agents&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="coding-agents"/><category term="claude-code"/><category term="parallel-agents"/></entry><entry><title>How StrongDM's AI team build serious software without even looking at the code</title><link href="https://simonwillison.net/2026/Feb/7/software-factory/" rel="alternate"/><published>2026-02-07T15:40:48+00:00</published><updated>2026-02-07T15:40:48+00:00</updated><id>https://simonwillison.net/2026/Feb/7/software-factory/</id><summary type="html">
    &lt;p&gt;Last week &lt;a href="https://simonwillison.net/2026/Jan/28/the-five-levels/"&gt;I hinted at&lt;/a&gt; a demo I had seen from a team implementing what Dan Shapiro called &lt;a href="https://www.danshapiro.com/blog/2026/01/the-five-levels-from-spicy-autocomplete-to-the-software-factory/"&gt;the Dark Factory&lt;/a&gt; level of AI adoption, where no human even looks at the code the coding agents are producing. That team was part of StrongDM, and they've just shared the first public description of how they are working in &lt;a href="https://factory.strongdm.ai"&gt;Software Factories and the Agentic Moment&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We built a &lt;strong&gt;Software Factory&lt;/strong&gt;: non-interactive development where specs + scenarios drive agents that write code, run harnesses, and converge without human review. [...]&lt;/p&gt;
&lt;p&gt;In kōan or mantra form:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Why am I doing this? (implied: the model should be doing this instead)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In rule form:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Code &lt;strong&gt;must not be&lt;/strong&gt; written by humans&lt;/li&gt;
&lt;li&gt;Code &lt;strong&gt;must not be&lt;/strong&gt; reviewed by humans&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Finally, in practical form:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you haven't spent at least &lt;strong&gt;$1,000 on tokens today&lt;/strong&gt; per human engineer, your software factory has room for improvement&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;I think the most interesting of these, without a doubt, is "Code &lt;strong&gt;must not be&lt;/strong&gt; reviewed by humans". How could that &lt;em&gt;possibly&lt;/em&gt; be a sensible strategy when we all know how prone LLMs are to making &lt;a href="https://simonwillison.net/2025/Mar/2/kellan-elliott-mccrea/"&gt;inhuman mistakes&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;I've seen many developers recently acknowledge the &lt;a href="https://simonwillison.net/2026/Jan/4/inflection/"&gt;November 2025 inflection point&lt;/a&gt;, where Claude Opus 4.5 and GPT 5.2 appeared to turn the corner on how reliably a coding agent could follow instructions and take on complex coding tasks. StrongDM's AI team was founded in July 2025 based on an earlier inflection point relating to Claude Sonnet 3.5:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The catalyst was a transition observed in late 2024: with the second revision of Claude 3.5 (October 2024), long-horizon agentic coding workflows began to compound correctness rather than error.&lt;/p&gt;
&lt;p&gt;By December of 2024, the model's long-horizon coding performance was unmistakable via Cursor's &lt;a href="https://forum.cursor.com/t/yolo-mode-is-amazing/36262"&gt;YOLO mode&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Their new team started with the rule "no hand-coded software" - radical for July 2025, but something I'm seeing significant numbers of experienced developers start to adopt as of January 2026.&lt;/p&gt;
&lt;p&gt;They quickly ran into the obvious problem: if you're not writing anything by hand, how do you ensure that the code actually works? Having the agents write tests only helps if they don't cheat and &lt;code&gt;assert true&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This feels like the most consequential question in software development right now: how can you &lt;a href="https://simonwillison.net/2025/Dec/18/code-proven-to-work/"&gt;prove that software you are producing works&lt;/a&gt; if both the implementation and the tests are being written for you by coding agents?&lt;/p&gt;
&lt;p&gt;StrongDM's answer was inspired by &lt;a href="https://en.wikipedia.org/wiki/Scenario_testing"&gt;Scenario testing&lt;/a&gt; (Cem Kaner, 2003). As StrongDM describe it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We repurposed the word &lt;strong&gt;scenario&lt;/strong&gt; to represent an end-to-end "user story", often stored outside the codebase (similar to a "holdout" set in model training), which could be intuitively understood and flexibly validated by an LLM.&lt;/p&gt;
&lt;p&gt;Because much of the software we grow itself has an agentic component, we transitioned from boolean definitions of success ("the test suite is green") to a probabilistic and empirical one. We use the term &lt;strong&gt;satisfaction&lt;/strong&gt; to quantify this validation: of all the observed trajectories through all the scenarios, what fraction of them likely satisfy the user?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That idea of treating scenarios as holdout sets - used to evaluate the software but not stored where the coding agents can see them - is &lt;em&gt;fascinating&lt;/em&gt;. It imitates aggressive testing by an external QA team - an expensive but highly effective way of ensuring quality in traditional software.&lt;/p&gt;
&lt;p&gt;Which leads us to StrongDM's concept of a &lt;strong&gt;Digital Twin Universe&lt;/strong&gt; - the part of the demo I saw that made the strongest impression on me.&lt;/p&gt;
&lt;p&gt;The software they were building helped manage user permissions across a suite of connected services. This in itself was notable - security software is the last thing you would expect to be built using unreviewed LLM code!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[The Digital Twin Universe is] behavioral clones of the third-party services our software depends on. We built twins of Okta, Jira, Slack, Google Docs, Google Drive, and Google Sheets, replicating their APIs, edge cases, and observable behaviors.&lt;/p&gt;
&lt;p&gt;With the DTU, we can validate at volumes and rates far exceeding production limits. We can test failure modes that would be dangerous or impossible against live services. We can run thousands of scenarios per hour without hitting rate limits, triggering abuse detection, or accumulating API costs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;How do you clone the important parts of Okta, Jira, Slack and more? With coding agents!&lt;/p&gt;
&lt;p&gt;As I understood it the trick was effectively to dump the full public API documentation of one of those services into their agent harness and have it build an imitation of that API, as a self-contained Go binary. They could then have it build a simplified UI over the top to help complete the simulation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: DTU creator Jay Taylor posted some extra context about this &lt;a href="https://news.ycombinator.com/item?id=46924426#46931812"&gt;on Hacker News&lt;/a&gt; sharing a key prompting strategy:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I did have an initial key insight which led to a repeatable strategy to ensure a high level of fidelity between DTU vs. the official canonical SaaS services:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Use the top popular publicly available reference SDK client libraries as compatibility targets, with the goal always being 100% compatibility.&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With their own, independent clones of those services - free from rate-limits or usage quotas - their army of simulated testers could go &lt;em&gt;wild&lt;/em&gt;. Their scenario tests became scripts for agents to constantly execute against the new systems as they were being built.&lt;/p&gt;
&lt;p&gt;This screenshot of their Slack twin also helps illustrate how the testing process works, showing a stream of simulated Okta users who are about to need access to different simulated systems.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2026/strong-dm-slack.jpg" alt="Screenshot of a Slack-like interface titled &amp;quot;DTU Slack&amp;quot; showing a thread view (Thread — C4B9FBB97) with &amp;quot;Focus first&amp;quot; and &amp;quot;Leave&amp;quot; buttons. The left sidebar lists channels including # org-general (182), # general (0) (shared×2), # it-support (0), # channel-0002 (0) (shared×2), # channel-0003 (0) through # channel-0020 (0), # org-finance (1), and a DMs section with a &amp;quot;Start&amp;quot; button. A &amp;quot;Create&amp;quot; button appears at the top of the sidebar. The main thread shows approximately 9 automated introduction messages from users with Okta IDs (e.g. @okta-u-423438-00001, @okta-u-423438-00002, etc.), all timestamped 2025-11-12Z between 18:50:31 and 18:51:51. Each message follows the format &amp;quot;Hi team! I'm [Name], joining as Employee in general. Key skills: [fictional skill phrases]. Excited to contribute!&amp;quot; All users have red/orange &amp;quot;O&amp;quot; avatar icons." style="max-width: 100%;" /&gt;&lt;/p&gt;
&lt;p&gt;This ability to quickly spin up a useful clone of a subset of Slack helps demonstrate how disruptive this new generation of coding agent tools can be:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Creating a high fidelity clone of a significant SaaS application was always possible, but never economically feasible. Generations of engineers may have &lt;em&gt;wanted&lt;/em&gt; a full in-memory replica of their CRM to test against, but self-censored the proposal to build it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The &lt;a href="https://factory.strongdm.ai/techniques"&gt;techniques page&lt;/a&gt; is worth a look too. In addition to the Digital Twin Universe they introduce terms like &lt;strong&gt;&lt;a href="https://factory.strongdm.ai/techniques/gene-transfusion"&gt;Gene Transfusion&lt;/a&gt;&lt;/strong&gt; for having agents extract patterns from existing systems and reuse them elsewhere, &lt;strong&gt;&lt;a href="https://factory.strongdm.ai/techniques/semport"&gt;Semports&lt;/a&gt;&lt;/strong&gt; for directly porting code from one language to another and &lt;strong&gt;&lt;a href="https://factory.strongdm.ai/techniques/pyramid-summaries"&gt;Pyramid Summaries&lt;/a&gt;&lt;/strong&gt; for providing multiple levels of summary such that an agent can enumerate the short ones quickly and zoom in on more detailed information as it is needed.&lt;/p&gt;
&lt;p&gt;StrongDM AI also released some software - in an appropriately unconventional manner.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/strongdm/attractor"&gt;github.com/strongdm/attractor&lt;/a&gt; is &lt;strong&gt;Attractor&lt;/strong&gt;, the non-interactive coding agent at the heart of their software factory. Except the repo itself contains no code at all - just three markdown files describing the spec for the software in meticulous detail, and a note in the README that you should feed those specs into your coding agent of choice!&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/strongdm/cxdb"&gt;github.com/strongdm/cxdb&lt;/a&gt; is a more traditional release, with 16,000 lines of Rust, 9,500 of Go and 6,700 of TypeScript. This is their "AI Context Store" - a system for storing conversation histories and tool outputs in an immutable DAG.&lt;/p&gt;
&lt;p&gt;It's similar to my LLM tool's &lt;a href="https://llm.datasette.io/en/stable/logging.html#sql-schema"&gt;SQLite logging mechanism&lt;/a&gt; but a whole lot more sophisticated. I may have to gene transfuse some ideas out of this one!&lt;/p&gt;
&lt;h4 id="a-glimpse-of-the-future-"&gt;A glimpse of the future?&lt;/h4&gt;
&lt;p&gt;I visited the StrongDM AI team back in October as part of a small group of invited guests.&lt;/p&gt;
&lt;p&gt;The three person team of Justin McCarthy, Jay Taylor and Navan Chauhan had formed just three months earlier, and they already had working demos of their coding agent harness, their Digital Twin Universe clones of half a dozen services and a swarm of simulated test agents running through scenarios. And this was prior to the Opus 4.5/GPT 5.2 releases that made agentic coding significantly more reliable a month after those demos.&lt;/p&gt;
&lt;p&gt;It felt like a glimpse of one potential future of software development, where software engineers move from building the code to building and then semi-monitoring the systems that build the code. The Dark Factory.&lt;/p&gt;

&lt;h4 id="wait-1-000-day-per-engineer-"&gt;Wait, $1,000/day per engineer?&lt;/h4&gt;
&lt;p&gt;I glossed over this detail in my first published version of this post, but it deserves some serious attention.&lt;/p&gt;
&lt;p&gt;If these patterns really do add $20,000/month per engineer to your budget they're far less interesting to me. At that point this becomes more of a business model exercise: can you create a profitable enough line of products that you can afford the enormous overhead of developing software in this way?&lt;/p&gt;
&lt;p&gt;Building sustainable software businesses also looks very different when any competitor can potentially clone your newest features with a few hours of coding agent work.&lt;/p&gt;
&lt;p&gt;I hope these patterns can be put into play with a much lower spend. I've personally found the $200/month Claude Max plan gives me plenty of space to experiment with different agent patterns, but I'm also not running a swarm of QA testers 24/7!&lt;/p&gt;
&lt;p&gt;I think there's a lot to learn from StrongDM even for teams and individuals who aren't going to burn thousands of dollars on token costs. I'm particularly invested in the question of what it takes to have agents prove that their code works without needing to review every line of code they produce.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/parallel-agents"&gt;parallel-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/vibe-porting"&gt;vibe-porting&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="coding-agents"/><category term="parallel-agents"/><category term="vibe-porting"/></entry><entry><title>Opus 4.6 and Codex 5.3</title><link href="https://simonwillison.net/2026/Feb/5/two-new-models/" rel="alternate"/><published>2026-02-05T20:29:20+00:00</published><updated>2026-02-05T20:29:20+00:00</updated><id>https://simonwillison.net/2026/Feb/5/two-new-models/</id><summary type="html">
    &lt;p&gt;Two major new model releases today, within about 15 minutes of each other.&lt;/p&gt;
&lt;p&gt;Anthropic &lt;a href="https://www.anthropic.com/news/claude-opus-4-6"&gt;released Opus 4.6&lt;/a&gt;. Here's &lt;a href="https://gist.github.com/simonw/a6806ce41b4c721e240a4548ecdbe216"&gt;its pelican&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Slightly wonky bicycle frame but an excellent pelican, very clear beak and pouch, nice feathers." src="https://static.simonwillison.net/static/2026/opus-4.6-pelican.png" /&gt;&lt;/p&gt;
&lt;p&gt;OpenAI &lt;a href="https://openai.com/index/introducing-gpt-5-3-codex/"&gt;release GPT-5.3-Codex&lt;/a&gt;, albeit only via their Codex app, not yet in their API. Here's &lt;a href="https://gist.github.com/simonw/bfc4a83f588ac762c773679c0d1e034b"&gt;its pelican&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Not nearly as good - the bicycle is a bit mangled, the pelican not nearly as well rendered - it's more of a line drawing." src="https://static.simonwillison.net/static/2026/codex-5.3-pelican.png" /&gt;&lt;/p&gt;
&lt;p&gt;I've had a bit of preview access to both of these models and to be honest I'm finding it hard to find a good angle to write about them - they're both &lt;em&gt;really good&lt;/em&gt;, but so were their predecessors Codex 5.2 and Opus 4.5. I've been having trouble finding tasks that those previous models couldn't handle but the new ones are able to ace.&lt;/p&gt;
&lt;p&gt;The most convincing story about capabilities of the new model so far is Nicholas Carlini from Anthropic talking about Opus 4.6 and &lt;a href="https://www.anthropic.com/engineering/building-c-compiler"&gt;Building a C compiler with a team of parallel Claudes&lt;/a&gt; - Anthropic's version of Cursor's &lt;a href="https://simonwillison.net/2026/Jan/23/fastrender/"&gt;FastRender project&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/c"&gt;c&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openai"&gt;openai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/anthropic"&gt;anthropic&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nicholas-carlini"&gt;nicholas-carlini&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pelican-riding-a-bicycle"&gt;pelican-riding-a-bicycle&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm-release"&gt;llm-release&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/codex"&gt;codex&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/parallel-agents"&gt;parallel-agents&lt;/a&gt;&lt;/p&gt;



</summary><category term="c"/><category term="ai"/><category term="openai"/><category term="generative-ai"/><category term="llms"/><category term="anthropic"/><category term="nicholas-carlini"/><category term="pelican-riding-a-bicycle"/><category term="llm-release"/><category term="codex"/><category term="parallel-agents"/></entry><entry><title>Kimi K2.5: Visual Agentic Intelligence</title><link href="https://simonwillison.net/2026/Jan/27/kimi-k25/" rel="alternate"/><published>2026-01-27T15:07:41+00:00</published><updated>2026-01-27T15:07:41+00:00</updated><id>https://simonwillison.net/2026/Jan/27/kimi-k25/</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.kimi.com/blog/kimi-k2-5.html"&gt;Kimi K2.5: Visual Agentic Intelligence&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Kimi K2 landed &lt;a href="https://simonwillison.net/2025/Jul/11/kimi-k2/"&gt;in July&lt;/a&gt; as a 1 trillion parameter open weight LLM. It was joined by Kimi K2 Thinking &lt;a href="https://simonwillison.net/2025/Nov/6/kimi-k2-thinking/"&gt;in November&lt;/a&gt; which added reasoning capabilities. Now they've made it multi-modal: the K2 models were text-only, but the new 2.5 can handle image inputs as well:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Kimi K2.5 builds on Kimi K2 with continued pretraining over approximately 15T mixed visual and text tokens. Built as a native multimodal model, K2.5 delivers state-of-the-art coding and vision capabilities and a self-directed agent swarm paradigm.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The "self-directed agent swarm paradigm" claim there means improved long-sequence tool calling and training on how to break down tasks for multiple agents to work on at once:&lt;/p&gt;
&lt;blockquote id="complex-tasks"&gt;&lt;p&gt;For complex tasks, Kimi K2.5 can self-direct an agent swarm with up to 100 sub-agents, executing parallel workflows across up to 1,500 tool calls. Compared with a single-agent setup, this reduces execution time by up to 4.5x. The agent swarm is automatically created and orchestrated by Kimi K2.5 without any predefined subagents or workflow.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I used the &lt;a href="https://openrouter.ai/moonshotai/kimi-k2.5"&gt;OpenRouter Chat UI&lt;/a&gt; to have it "Generate an SVG of a pelican riding a bicycle", and it did &lt;a href="https://gist.github.com/simonw/32a85e337fbc6ee935d10d89726c0476"&gt;quite well&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Cartoon illustration of a white pelican with a large orange beak and yellow throat pouch riding a green bicycle with yellow feet on the pedals, set against a light blue sky with soft bokeh circles and a green grassy hill. The bicycle frame is a little questionable. The pelican is quite good. The feet do not quite align with the pedals, which are floating clear of the frame." src="https://static.simonwillison.net/static/2026/kimi-k2.5-pelican.png" /&gt;&lt;/p&gt;
&lt;p&gt;As a more interesting test, I decided to exercise the claims around multi-agent planning with this prompt:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I want to build a Datasette plugin that offers a UI to upload files to an S3 bucket and stores information about them in a SQLite table. Break this down into ten tasks suitable for execution by parallel coding agents.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here's &lt;a href="https://gist.github.com/simonw/ee2583b2eb5706400a4737f56d57c456"&gt;the full response&lt;/a&gt;. It produced ten realistic tasks and reasoned through the dependencies between them. For comparison here's the same prompt &lt;a href="https://claude.ai/share/df9258e7-97ba-4362-83da-76d31d96196f"&gt;against Claude Opus 4.5&lt;/a&gt; and &lt;a href="https://chatgpt.com/share/6978d48c-3f20-8006-9c77-81161f899104"&gt;against GPT-5.2 Thinking&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://huggingface.co/moonshotai/Kimi-K2.5"&gt;Hugging Face repository&lt;/a&gt; is 595GB. The model uses Kimi's janky "modified MIT" license, which adds the following clause:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Our only modification part is that, if the Software (or any derivative works thereof) is used for any of your commercial products or services that have more than 100 million monthly active users, or more than 20 million US dollars (or equivalent in other currencies) in monthly revenue, you shall prominently display "Kimi K2.5" on the user interface of such product or service.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Given the model's size, I expect one way to run it locally would be with MLX and a pair of $10,000 512GB RAM M3 Ultra Mac Studios. That setup has &lt;a href="https://twitter.com/awnihannun/status/1943723599971443134"&gt;been demonstrated to work&lt;/a&gt; with previous trillion parameter K2 models.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=46775961"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hugging-face"&gt;hugging-face&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/vision-llms"&gt;vision-llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm-tool-use"&gt;llm-tool-use&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-agents"&gt;ai-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pelican-riding-a-bicycle"&gt;pelican-riding-a-bicycle&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm-release"&gt;llm-release&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-in-china"&gt;ai-in-china&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/moonshot"&gt;moonshot&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/parallel-agents"&gt;parallel-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/kimi"&gt;kimi&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/janky-licenses"&gt;janky-licenses&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="llms"/><category term="hugging-face"/><category term="vision-llms"/><category term="llm-tool-use"/><category term="ai-agents"/><category term="pelican-riding-a-bicycle"/><category term="llm-release"/><category term="ai-in-china"/><category term="moonshot"/><category term="parallel-agents"/><category term="kimi"/><category term="janky-licenses"/></entry><entry><title>Wilson Lin on FastRender: a browser built by thousands of parallel agents</title><link href="https://simonwillison.net/2026/Jan/23/fastrender/" rel="alternate"/><published>2026-01-23T21:26:10+00:00</published><updated>2026-01-23T21:26:10+00:00</updated><id>https://simonwillison.net/2026/Jan/23/fastrender/</id><summary type="html">
    &lt;p&gt;Last week Cursor published &lt;a href="https://cursor.com/blog/scaling-agents"&gt;Scaling long-running autonomous coding&lt;/a&gt;, an article describing their research efforts into coordinating large numbers of autonomous coding agents. One of the projects mentioned in the article was &lt;a href="https://github.com/wilsonzlin/fastrender"&gt;FastRender&lt;/a&gt;, a web browser they built from scratch using their agent swarms. I wanted to learn more so I asked Wilson Lin, the engineer behind FastRender, if we could record a conversation about the project. That 47 minute video is &lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4"&gt;now available on YouTube&lt;/a&gt;. I've included some of the highlights below.&lt;/p&gt;

&lt;iframe style="margin-top: 1.5em; margin-bottom: 1.5em;" width="560" height="315" src="https://www.youtube-nocookie.com/embed/bKrAcTf2pL4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="allowfullscreen"&gt; &lt;/iframe&gt;

&lt;p&gt;See my &lt;a href="https://simonwillison.net/2026/Jan/19/scaling-long-running-autonomous-coding/"&gt;previous post&lt;/a&gt; for my notes and screenshots from trying out FastRender myself.&lt;/p&gt;


&lt;h4 id="what-fastrender-can-do-right-now"&gt;What FastRender can do right now&lt;/h4&gt;
&lt;p&gt;We started the conversation with a demo of FastRender loading different pages (&lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=195s"&gt;03:15&lt;/a&gt;). The JavaScript engine isn't working yet so we instead loaded &lt;a href="https://github.com/wilsonzlin/fastrender"&gt;github.com/wilsonzlin/fastrender&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/"&gt;Wikipedia&lt;/a&gt; and &lt;a href="https://cnn.com"&gt;CNN&lt;/a&gt; - all of which were usable, if a little slow to display.&lt;/p&gt;
&lt;p&gt;JavaScript had been disabled by one of the agents, which decided to add a feature flag! &lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=242s"&gt;04:02&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;JavaScript is disabled right now. The agents made a decision as they were currently still implementing the engine and making progress towards other parts... they decided to turn it off or put it behind a feature flag, technically.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="from-side-project-to-core-research"&gt;From side-project to core research&lt;/h4&gt;
&lt;p&gt;Wilson started what become FastRender as a personal side-project to explore the capabilities of the latest generation of frontier models - Claude Opus 4.5, GPT-5.1, and GPT-5.2. &lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=56s"&gt;00:56&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;FastRender was a personal project of mine from, I'd say, November. It was an experiment to see how well frontier models like Opus 4.5 and back then GPT-5.1 could do with much more complex, difficult tasks.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A browser rendering engine was the ideal choice for this, because it's both &lt;em&gt;extremely&lt;/em&gt; ambitious and complex but also well specified. And you can visually see how well it's working! &lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=117s"&gt;01:57&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As that experiment progressed, I was seeing better and better results from single agents that were able to actually make good progress on this project. And at that point, I wanted to see, well, what's the next level? How do I push this even further?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Once it became clear that this was an opportunity to try multiple agents working together it graduated to an official Cursor research project, and available resources were amplified.&lt;/p&gt;
&lt;p&gt;The goal of FastRender was never to build a browser to compete with the likes of Chrome. &lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=2512s"&gt;41:52&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We never intended for it to be a production software or usable, but we wanted to observe behaviors of this harness of multiple agents, to see how they could work at scale.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The great thing about a browser is that it has such a large scope that it can keep serving experiments in this space for many years to come. JavaScript, then WebAssembly, then WebGPU... it could take many years to run out of new challenges for the agents to tackle.&lt;/p&gt;
&lt;h4 id="running-thousands-of-agents-at-once"&gt;Running thousands of agents at once&lt;/h4&gt;
&lt;p&gt;The most interesting thing about FastRender is the way the project used multiple agents working in parallel to build different parts of the browser. I asked how many agents were running at once: &lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=324s"&gt;05:24&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;At the peak, when we had the stable system running for one week continuously, there were approximately 2,000 agents running concurrently at one time. And they were making, I believe, thousands of commits per hour.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The project has &lt;a href="https://github.com/wilsonzlin/fastrender/commits/main/"&gt;nearly 30,000 commits&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;How do you run 2,000 agents at once? They used &lt;em&gt;really big machines&lt;/em&gt;. &lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=356s"&gt;05:56&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The simple approach we took with the infrastructure was to have a large machine run one of these multi-agent harnesses. Each machine had ample resources, and it would run about 300 agents concurrently on each. This was able to scale and run reasonably well, as agents spend a lot of time thinking, and not just running tools.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;At this point we switched to a live demo of the harness running on one of those big machines (&lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=392s"&gt;06:32&lt;/a&gt;). The agents are arranged in a tree structure, with planning agents firing up tasks and worker agents then carrying them out. &lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=434s"&gt;07:14&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2026/wilson-lin-agents.jpg" alt="Terminal window showing a tmux session running &amp;quot;grind-swarm&amp;quot; task manager with RUNNING status. Header shows &amp;quot;grind-swarm – 45:54:15&amp;quot; with stats &amp;quot;planners: 9 (0 done) | tasks: 111 working, 0 pending, 232 done | 12900.9M↑ 514.1M↓&amp;quot;. Task list includes: p1 Root (main), p2 CSS selector matching performance + bloom filter integration, p3 CSS stylesheet parsing semantics &amp;amp; at-rule handling, p4 Custom properties (@property) + var() resolution + incremental recompute/invalidation, p37 CSS at-rule artifact integration, p50 Selector engine correctness &amp;amp; spec coverage, p51 Computed-value + property coverage across css-cascade, p105 Style sharing / computed style caching in fastrender-style, p289 CSS cascade layers (@layer) global ordering, w5 Fix workspace lockfile drift, w7 Implement computed-style snapshot sharing, w15 Fix css-properties namespace handling, w17 (Stretch) Enable bloom fast-reject in HTML quirks mode, w18 Refactor css-properties stylesheet parsing. Activity log shows shell commands including cargo check, git status, git push origin main, and various test runs. Bottom status bar shows &amp;quot;grind-css0:target/release/grind-swarm*&amp;quot; and &amp;quot;streamyard.com is sharing your screen&amp;quot; notification with timestamp &amp;quot;12:02 22-Jan-26&amp;quot;." style="max-width: 100%;" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This cluster of agents is working towards building out the CSS aspects of the browser, whether that's parsing, selector engine, those features. We managed to push this even further by splitting out the browser project into multiple instructions or work streams and have each one run one of these harnesses on their own machine, so that was able to further parallelize and increase throughput.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;But don't all of these agents working on the same codebase result in a huge amount of merge conflicts? Apparently not: &lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=501s"&gt;08:21&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We've noticed that most commits do not have merge conflicts. The reason is the harness itself is able to quite effectively split out and divide the scope and tasks such that it tries to minimize the amount of overlap of work. That's also reflected in the code structure—commits will be made at various times and they don't tend to touch each other at the same time.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This appears to be the key trick for unlocking benefits from parallel agents: if planning agents do a good enough job of breaking up the work into non-overlapping chunks you can bring hundreds or even thousands of agents to bear on a problem at once.&lt;/p&gt;
&lt;p&gt;Surprisingly, Wilson found that GPT-5.1 and GPT-5.2 were a better fit for this work than the coding specialist GPT-5.1-Codex: &lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=1048s"&gt;17:28&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Some initial findings were that the instructions here were more expansive than merely coding. For example, how to operate and interact within a harness, or how to operate autonomously without interacting with the user or having a lot of user feedback. These kinds of instructions we found worked better with the general models.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I asked what the longest they've seen this system run without human intervention: &lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=1108s"&gt;18:28&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;So this system, once you give an instruction, there's actually no way to steer it, you can't prompt it, you're going to adjust how it goes. The only thing you can do is stop it. So our longest run, all the runs are basically autonomous. We don't alter the trajectory while executing. [...]&lt;/p&gt;
&lt;p&gt;And so the longest at the time of the post was about a week and that's pretty close to the longest. Of course the research project itself was only about three weeks so you know we probably can go longer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="specifications-and-feedback-loops"&gt;Specifications and feedback loops&lt;/h4&gt;
&lt;p&gt;An interesting aspect of this project design is feedback loops. For agents to work autonomously for long periods of time they need as much useful context about the problem they are solving as possible, combined with effective feedback loops to help them make decisions.&lt;/p&gt;
&lt;p&gt;The FastRender repo &lt;a href="https://github.com/wilsonzlin/fastrender/tree/19bf1036105d4eeb8bf3330678b7cb11c1490bdc/specs"&gt;uses git submodules to include relevant specifications&lt;/a&gt;, including csswg-drafts, tc39-ecma262 for JavaScript, whatwg-dom, whatwg-html and more. &lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=846s"&gt;14:06&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Feedback loops to the system are very important. Agents are working for very long periods continuously, and without guardrails and feedback to know whether what they're doing is right or wrong it can have a big impact over a long rollout. Specs are definitely an important part—you can see lots of comments in the code base that AI wrote referring specifically to specs that they found in the specs submodules.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;GPT-5.2 is a vision-capable model, and part of the feedback loop for FastRender included taking screenshots of the rendering results and feeding those back into the model:
&lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=983s"&gt;16:23&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In the earlier evolution of this project, when it was just doing the static renderings of screenshots, this was definitely a very explicit thing we taught it to do. And these models are visual models, so they do have that ability. We have progress indicators to tell it to compare the diff against a golden sample.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The strictness of the Rust compiler helped provide a feedback loop as well: &lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=952s"&gt;15:52&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The nice thing about Rust is you can get a lot of verification just from compilation, and that is not as available in other languages.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="the-agents-chose-the-dependencies"&gt;The agents chose the dependencies&lt;/h4&gt;
&lt;p&gt;We talked about the &lt;a href="https://github.com/wilsonzlin/fastrender/blob/19bf1036105d4eeb8bf3330678b7cb11c1490bdc/Cargo.toml"&gt;Cargo.toml dependencies&lt;/a&gt; that the project had accumulated, almost all of which had been selected by the agents themselves.&lt;/p&gt;
&lt;p&gt;Some of these, like &lt;a href="https://skia.org/"&gt;Skia&lt;/a&gt; for 2D graphics rendering or &lt;a href="https://github.com/harfbuzz/harfbuzz"&gt;HarfBuzz&lt;/a&gt; for text shaping, were obvious choices. Others such as &lt;a href="https://github.com/DioxusLabs/taffy"&gt;Taffy&lt;/a&gt; felt like they might go against the from-scratch goals of the project, since that library implements CSS flexbox and grid layout algorithms directly. This was not an intended outcome. &lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=1673s"&gt;27:53&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Similarly these are dependencies that the agent picked to use for small parts of the engine and perhaps should have actually implemented itself. I think this reflects on the importance of the instructions, because I actually never encoded specifically the level of dependencies we should be implementing ourselves.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The agents vendored in Taffy and &lt;a href="https://github.com/wilsonzlin/fastrender/commits/main/vendor/taffy"&gt;applied a stream of changes&lt;/a&gt; to that vendored copy.
&lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=1878s"&gt;31:18&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It's currently vendored. And as the agents work on it, they do make changes to it. This was actually an artifact from the very early days of the project before it was a fully fledged browser... it's implementing things like the flex and grid layers, but there are other layout methods like inline, block, and table, and in our new experiment, we're removing that completely.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The inclusion of QuickJS despite the presence of a home-grown ecma-rs implementation has a fun origin story:
&lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=2115s"&gt;35:15&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I believe it mentioned that it pulled in the QuickJS because it knew that other agents were working on the JavaScript engine, and it needed to unblock itself quickly. [...]&lt;/p&gt;
&lt;p&gt;It was like, eventually, once that's finished, let's remove it and replace with the proper engine.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I love how similar this is to the dynamics of a large-scale human engineering team, where you could absolutely see one engineer getting frustrated at another team not having delivered yet and unblocking themselves by pulling in a third-party library.&lt;/p&gt;
&lt;h4 id="intermittent-errors-are-ok-actually"&gt;Intermittent errors are OK, actually&lt;/h4&gt;
&lt;p&gt;Here's something I found really surprising: the agents were allowed to introduce small errors into the codebase as they worked! &lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=2382s"&gt;39:42&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;One of the trade-offs was: if you wanted every single commit to be a hundred percent perfect, make sure it can always compile every time, that might be a synchronization bottleneck. [...]&lt;/p&gt;
&lt;p&gt;Especially as you break up the system into more modularized aspects, you can see that errors get introduced, but small errors, right? An API change or some syntax error, but then they get fixed really quickly after a few commits. So there's a little bit of slack in the system to allow these temporary errors so that the overall system can continue to make progress at a really high throughput. [...]&lt;/p&gt;
&lt;p&gt;People may say, well, that's not correct code. But it's not that the errors are accumulating. It's a stable rate of errors. [...] That seems like a worthwhile trade-off.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you're going to have thousands of agents working in parallel optimizing for throughput over correctness turns out to be a strategy worth exploring.&lt;/p&gt;
&lt;h4 id="a-single-engineer-plus-a-swarm-of-agents-in-january-2026"&gt;A single engineer plus a swarm of agents in January 2026&lt;/h4&gt;
&lt;p&gt;The thing I find most interesting about FastRender is how it demonstrates the extreme edge of what a single engineer can achieve in early 2026 with the assistance of a swarm of agents.&lt;/p&gt;
&lt;p&gt;FastRender may not be a production-ready browser, but it represents over a million lines of Rust code, written in a few weeks, that can already render real web pages to a usable degree.&lt;/p&gt;
&lt;p&gt;A browser really is the ideal research project to experiment with this new, weirdly shaped form of software engineering.&lt;/p&gt;
&lt;p&gt;I asked Wilson how much mental effort he had invested in browser rendering compared to agent co-ordination. &lt;a href="https://www.youtube.com/watch?v=bKrAcTf2pL4&amp;amp;t=694s"&gt;11:34&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The browser and this project were co-developed and very symbiotic, only because the browser was a very useful objective for us to measure and iterate the progress of the harness. The goal was to iterate on and research the multi-agent harness—the browser was just the research example or objective.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;FastRender is effectively using a full browser rendering engine as a "hello world" exercise for multi-agent coordination!&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/browsers"&gt;browsers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/youtube"&gt;youtube&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rust"&gt;rust&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cursor"&gt;cursor&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/parallel-agents"&gt;parallel-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/browser-challenge"&gt;browser-challenge&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="browsers"/><category term="youtube"/><category term="ai"/><category term="rust"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="coding-agents"/><category term="cursor"/><category term="parallel-agents"/><category term="browser-challenge"/></entry><entry><title>Quoting Theia Vogel</title><link href="https://simonwillison.net/2026/Jan/23/theia-vogel/" rel="alternate"/><published>2026-01-23T09:13:54+00:00</published><updated>2026-01-23T09:13:54+00:00</updated><id>https://simonwillison.net/2026/Jan/23/theia-vogel/</id><summary type="html">
    &lt;blockquote cite="https://twitter.com/voooooogel/status/2014189072647078053"&gt;&lt;p&gt;[...] i was too busy with work to read anything, so i asked chatgpt to summarize some books on state formation, and it suggested circumscription theory. there was already the natural boundary of my computer hemming the towns in, and town mayors played the role of big men to drive conflict. so i just needed a way for them to fight. i slightly tweaked the allocation of claude max accounts to the towns from a demand-based to a fixed allocation system. towns would each get a fixed amount of tokens to start, but i added a soldier role that could attack and defend in raids to steal tokens from other towns. [...]&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://twitter.com/voooooogel/status/2014189072647078053"&gt;Theia Vogel&lt;/a&gt;, Gas Town fan fiction&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/parallel-agents"&gt;parallel-agents&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="parallel-agents"/></entry><entry><title>Scaling long-running autonomous coding</title><link href="https://simonwillison.net/2026/Jan/19/scaling-long-running-autonomous-coding/" rel="alternate"/><published>2026-01-19T05:12:51+00:00</published><updated>2026-01-19T05:12:51+00:00</updated><id>https://simonwillison.net/2026/Jan/19/scaling-long-running-autonomous-coding/</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://cursor.com/blog/scaling-agents"&gt;Scaling long-running autonomous coding&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Wilson Lin at Cursor has been doing some experiments to see how far you can push a large fleet of "autonomous" coding agents:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This post describes what we've learned from running hundreds of concurrent agents on a single project, coordinating their work, and watching them write over a million lines of code and trillions of tokens.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;They ended up running planners and sub-planners to create tasks, then having workers execute on those tasks - similar to how Claude Code uses sub-agents. Each cycle ended with a judge agent deciding if the project was completed or not.&lt;/p&gt;
&lt;p&gt;In my predictions for 2026 &lt;a href="https://simonwillison.net/2026/Jan/8/llm-predictions-for-2026/#3-years-someone-will-build-a-new-browser-using-mainly-ai-assisted-coding-and-it-won-t-even-be-a-surprise"&gt;the other day&lt;/a&gt; I said that by 2029:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I think somebody will have built a full web browser mostly using AI assistance, and it won’t even be surprising. Rolling a new web browser is one of the most complicated software projects I can imagine[...] the cheat code is the conformance suites. If there are existing tests that it’ll get so much easier.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I may have been off by three years, because Cursor chose "building a web browser from scratch" as their test case for their agent swarm approach:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;To test this system, we pointed it at an ambitious goal: building a web browser from scratch. The agents ran for close to a week, writing over 1 million lines of code across 1,000 files. You can explore &lt;a href="https://github.com/wilsonzlin/fastrender"&gt;the source code on GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;But how well did they do? Their initial announcement a couple of days ago was met with &lt;a href="https://embedding-shapes.github.io/cursor-implied-success-without-evidence/"&gt;unsurprising skepticism&lt;/a&gt;, especially when it became apparent that their GitHub Actions CI was failing and there were no build instructions in the repo.&lt;/p&gt;
&lt;p&gt;It looks like they addressed that within the past 24 hours. The &lt;a href="https://github.com/wilsonzlin/fastrender/blob/main/README.md#build-requirements"&gt;latest README&lt;/a&gt; includes build instructions which I followed on macOS like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd /tmp
git clone https://github.com/wilsonzlin/fastrender
cd fastrender
git submodule update --init vendor/ecma-rs
cargo run --release --features browser_ui --bin browser
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This got me a working browser window! Here are screenshots I took of google.com and my own website:&lt;/p&gt;
&lt;p&gt;&lt;img alt="The browser chrome is neat but has a garbled tab name at the top. The Google homepage looks mostly correct but the buttons are not styled correctly and the Google Search one has a huge plus icon floating near it." src="https://static.simonwillison.net/static/2026/cursor-google.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="My blog looks mostly correct, but the right closing quotation mark on a quotation (which is implemented as a background image on the final paragraph) is displayed incorrectly multiple times." src="https://static.simonwillison.net/static/2026/cursor-simonwillison.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Honestly those are very impressive! You can tell they're not just wrapping an existing rendering engine because of those very obvious rendering glitches, but the pages are legible and look mostly correct.&lt;/p&gt;
&lt;p&gt;The FastRender repo even uses Git submodules &lt;a href="https://github.com/wilsonzlin/fastrender/tree/main/specs"&gt;to include various WhatWG and CSS-WG specifications&lt;/a&gt; in the repo, which is a smart way to make sure the agents have access to the reference materials that they might need.&lt;/p&gt;
&lt;p&gt;This is the second attempt I've seen at building a full web browser using AI-assisted coding in the past two weeks - the first was &lt;a href="https://github.com/hiwavebrowser/hiwave"&gt;HiWave browser&lt;/a&gt;, a new browser engine in Rust first announced &lt;a href="https://www.reddit.com/r/Anthropic/comments/1q4xfm0/over_christmas_break_i_wrote_a_fully_functional/"&gt;in this Reddit thread&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When I made my 2029 prediction this is more-or-less the quality of result I had in mind. I don't think we'll see projects of this nature compete with Chrome or Firefox or WebKit any time soon but I have to admit I'm very surprised to see something this capable emerge so quickly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 23rd January 2026&lt;/strong&gt;: I recorded a 47 minute conversation with Wilson about this project and published it on YouTube. Here's &lt;a href="https://simonwillison.net/2026/Jan/23/fastrender/"&gt;the video and accompanying highlights&lt;/a&gt;.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/browsers"&gt;browsers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rust"&gt;rust&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cursor"&gt;cursor&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/parallel-agents"&gt;parallel-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/conformance-suites"&gt;conformance-suites&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/browser-challenge"&gt;browser-challenge&lt;/a&gt;&lt;/p&gt;



</summary><category term="browsers"/><category term="ai"/><category term="rust"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="coding-agents"/><category term="cursor"/><category term="parallel-agents"/><category term="conformance-suites"/><category term="browser-challenge"/></entry><entry><title>Six coding agents at once</title><link href="https://simonwillison.net/2025/Nov/11/six-coding-agents-at-once/" rel="alternate"/><published>2025-11-11T22:52:45+00:00</published><updated>2025-11-11T22:52:45+00:00</updated><id>https://simonwillison.net/2025/Nov/11/six-coding-agents-at-once/</id><summary type="html">
    &lt;p&gt;I've been upgrading a &lt;em&gt;ton&lt;/em&gt; of Datasette plugins recently for compatibility with the &lt;a href="https://simonwillison.net/2025/Nov/4/datasette-10a20/"&gt;Datasette 1.0a20 release&lt;/a&gt; from last week - &lt;a href="https://github.com/simonw/datasette/issues/2577#issuecomment-3483537877"&gt;35 so far&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A lot of the work is very repetitive so I've been outsourcing it to &lt;a href="https://github.com/openai/codex"&gt;Codex CLI&lt;/a&gt;. Here's the recipe I've landed on:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre style="font-size: 0.9em"&gt;codex &lt;span class="pl-c1"&gt;exec&lt;/span&gt; --dangerously-bypass-approvals-and-sandbox \
&lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;Run the command tadd and look at the errors and then&lt;/span&gt;
&lt;span class="pl-s"&gt;read ~/dev/datasette/docs/upgrade-1.0a20.md and apply&lt;/span&gt;
&lt;span class="pl-s"&gt;fixes and run the tests again and get them to pass.&lt;/span&gt;
&lt;span class="pl-s"&gt;&lt;/span&gt;
&lt;span class="pl-s"&gt;Also delete the .github directory entirely and replace&lt;/span&gt;
&lt;span class="pl-s"&gt;it by running this:&lt;/span&gt;
&lt;span class="pl-s"&gt;&lt;/span&gt;
&lt;span class="pl-s"&gt;cp -r ~/dev/ecosystem/datasette-os-info/.github .&lt;/span&gt;
&lt;span class="pl-s"&gt;&lt;/span&gt;
&lt;span class="pl-s"&gt;Run a git diff against that to make sure it looks OK&lt;/span&gt;
&lt;span class="pl-s"&gt;- if there are any notable differences e.g. switching&lt;/span&gt;
&lt;span class="pl-s"&gt;from Twine to the PyPI uploader or deleting code that&lt;/span&gt;
&lt;span class="pl-s"&gt;does a special deploy or configures something like &lt;/span&gt;
&lt;span class="pl-s"&gt;playwright include that in your final report.&lt;/span&gt;
&lt;span class="pl-s"&gt;&lt;/span&gt;
&lt;span class="pl-s"&gt;If the project still uses setup.py then edit that new&lt;/span&gt;
&lt;span class="pl-s"&gt;test.yml and publish.yaml to mention setup.py not pyproject.toml&lt;/span&gt;
&lt;span class="pl-s"&gt;&lt;/span&gt;
&lt;span class="pl-s"&gt;If this project has pyproject.toml make sure the license&lt;/span&gt;
&lt;span class="pl-s"&gt;line in that looks like this:&lt;/span&gt;
&lt;span class="pl-s"&gt;&lt;/span&gt;
&lt;span class="pl-s"&gt;license = "Apache-2.0"&lt;/span&gt;
&lt;span class="pl-s"&gt;&lt;/span&gt;
&lt;span class="pl-s"&gt;And remove any license thing from the classifiers= array&lt;/span&gt;
&lt;span class="pl-s"&gt;&lt;/span&gt;
&lt;span class="pl-s"&gt;Update the Datasette dependency in pyproject.toml or&lt;/span&gt;
&lt;span class="pl-s"&gt;setup.py to "datasette&amp;gt;=1.0a21"&lt;/span&gt;
&lt;span class="pl-s"&gt;&lt;/span&gt;
&lt;span class="pl-s"&gt;And make sure requires-python is &amp;gt;=3.10&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;I featured a simpler version of this prompt in my &lt;a href="https://simonwillison.net/2025/Nov/6/upgrading-datasette-plugins/"&gt;Datasette plugin upgrade video&lt;/a&gt;, but I've expanded it quite a bit since then.&lt;/p&gt;
&lt;p&gt;At one point I had six terminal windows open running this same prompt against six different repos - probably my most extreme case of &lt;a href="https://simonwillison.net/2025/Oct/5/parallel-coding-agents/"&gt;parallel agents&lt;/a&gt; yet.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Animated GIF demo. Six terminal windows are arranged in a 3x2 grid, each one of them is running the above prompt and working its way through making modifications to one of six different projects: datasette-extract, datasette-create-view, datasette-write, datasette-secrets, datasette-public, and datasette-write-ui." src="https://static.simonwillison.net/static/2025/multiple-codexes.gif" /&gt;&lt;/p&gt;
&lt;p&gt;Here are the six resulting commits from those six coding agent sessions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/datasette/datasette-extract/commit/deb6ae3f3069d45c5227a57067c6621cd3b8d6ea"&gt;datasette-extract deb6ae&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/datasette/datasette-create-view/commit/d940f42fdab205c645fe4a2f1d7a4e44d41104d8"&gt;datasette-create-view d940f4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/simonw/datasette-write/commit/e0af01f931498a3dfbf5f2597534df109559fe71"&gt;datasette-write e0af01&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/datasette/datasette-secrets/commit/e93d1410bcd9a4af87a046b584e9e3f9cae503c4"&gt;datasette-secrets e93d14&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/datasette/datasette-write-ui/commit/1d2459fbc35ad02633bb7441c92bc5f8a5d919d5"&gt;datasette-write-ui 1d2459&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/datasette/datasette-public/commit/5213c41521821c03688c6099581e198a831f85d5"&gt;datasette-public 5213c4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/datasette"&gt;datasette&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/prompt-engineering"&gt;prompt-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/codex"&gt;codex&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/parallel-agents"&gt;parallel-agents&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="datasette"/><category term="prompt-engineering"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="coding-agents"/><category term="codex"/><category term="parallel-agents"/></entry><entry><title>Composer: Building a fast frontier model with RL</title><link href="https://simonwillison.net/2025/Oct/29/cursor-composer/" rel="alternate"/><published>2025-10-29T20:45:53+00:00</published><updated>2025-10-29T20:45:53+00:00</updated><id>https://simonwillison.net/2025/Oct/29/cursor-composer/</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://cursor.com/blog/composer"&gt;Composer: Building a fast frontier model with RL&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Cursor released &lt;a href="https://cursor.com/blog/2-0"&gt;Cursor 2.0 today&lt;/a&gt;, with a refreshed UI focused on agentic coding (and running agents in parallel) and a new model that's unique to Cursor called &lt;strong&gt;Composer&amp;nbsp;1&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;As far as I can tell there's no way to call the model directly via an API, so I fired up "Ask" mode in Cursor's chat side panel and asked it to "Generate an SVG of a pelican riding a bicycle":&lt;/p&gt;
&lt;p&gt;&lt;img alt="Screenshot of Cursor 2 - In the chat panel I have asked the question and it spat out a bunch of SVG." src="https://static.simonwillison.net/static/2025/cursor-2.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Here's &lt;a href="https://gist.github.com/simonw/e5c9176f153ca718370055ecd256fe70"&gt;the result&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt="The bicycle is levitating against a blue sky. The pelican looks a little bit more like a baby chicken but does at least have a long beak." src="https://static.simonwillison.net/static/2025/cursor-1-pelican.png" /&gt;&lt;/p&gt;
&lt;p&gt;The notable thing about Composer-1 is that it is designed to be &lt;em&gt;fast&lt;/em&gt;. The pelican certainly came back quickly, and in their announcement they describe it as being "4x faster than similarly intelligent models".&lt;/p&gt;
&lt;p&gt;It's interesting to see Cursor investing resources in training their own code-specific model - similar to &lt;a href="https://openai.com/index/introducing-upgrades-to-codex/"&gt;GPT-5-Codex&lt;/a&gt; or &lt;a href="https://github.com/QwenLM/Qwen3-Coder"&gt;Qwen3-Coder&lt;/a&gt;. From their post:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Composer is a mixture-of-experts (MoE) language model supporting long-context generation and understanding. It is specialized for software engineering through reinforcement learning (RL) in a diverse range of development environments. [...]&lt;/p&gt;
&lt;p&gt;Efficient training of large MoE models requires significant investment into building infrastructure and systems research. We built custom training infrastructure leveraging PyTorch and Ray to power asynchronous reinforcement learning at scale. We natively train our models at low precision by combining our &lt;a href="https://cursor.com/blog/kernels"&gt;MXFP8 MoE kernels&lt;/a&gt; with expert parallelism and hybrid sharded data parallelism, allowing us to scale training to thousands of NVIDIA GPUs with minimal communication cost. [...]&lt;/p&gt;
&lt;p&gt;During RL, we want our model to be able to call any tool in the Cursor Agent harness. These tools allow editing code, using semantic search, grepping strings, and running terminal commands. At our scale, teaching the model to effectively call these tools requires running hundreds of thousands of concurrent sandboxed coding environments in the cloud.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;One detail that's notably absent from their description: did they train the model from scratch, or did they start with an existing open-weights model such as something from Qwen or GLM?&lt;/p&gt;
&lt;p&gt;Cursor researcher Sasha Rush has been answering questions &lt;a href="https://news.ycombinator.com/item?id=45748725"&gt;on Hacker News&lt;/a&gt;, but has so far been evasive in answering questions about the base model. When directly asked "is Composer a fine tune of an existing open source base model?" they replied:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Our primary focus is on RL post-training. We think that is the best way to get the model to be a strong interactive agent.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sasha &lt;a href="https://news.ycombinator.com/item?id=45748725#45750784"&gt;did confirm&lt;/a&gt; that rumors of an earlier Cursor preview model, Cheetah, being based on a model by xAI's Grok were "Straight up untrue."

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=45748725"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pelican-riding-a-bicycle"&gt;pelican-riding-a-bicycle&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm-release"&gt;llm-release&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cursor"&gt;cursor&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/parallel-agents"&gt;parallel-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm-performance"&gt;llm-performance&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="pelican-riding-a-bicycle"/><category term="llm-release"/><category term="coding-agents"/><category term="cursor"/><category term="parallel-agents"/><category term="llm-performance"/></entry><entry><title>Quoting Geoffrey Litt</title><link href="https://simonwillison.net/2025/Oct/24/geoffrey-litt/" rel="alternate"/><published>2025-10-24T14:07:11+00:00</published><updated>2025-10-24T14:07:11+00:00</updated><id>https://simonwillison.net/2025/Oct/24/geoffrey-litt/</id><summary type="html">
    &lt;blockquote cite="https://www.geoffreylitt.com/2025/10/24/code-like-a-surgeon"&gt;&lt;p&gt;A lot of people say AI will make us all "managers" or "editors"...but I think this is a dangerously incomplete view!&lt;/p&gt;
&lt;p&gt;Personally, I'm trying to &lt;strong&gt;code like a surgeon&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A surgeon isn't a manager, they do the actual work! But their skills and time are highly leveraged with a support team that handles prep, secondary tasks, admin. The surgeon focuses on the important stuff they are uniquely good at. [...]&lt;/p&gt;
&lt;p&gt;It turns out there are a LOT of secondary tasks which AI agents are now good enough to help out with. Some things I'm finding useful to hand off these days:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Before attempting a big task, write a guide to relevant areas of the codebase&lt;/li&gt;
&lt;li&gt;Spike out an attempt at a big change. Often I won't use the result but I'll review it as a sketch of where to go&lt;/li&gt;
&lt;li&gt;Fix typescript errors or bugs which have a clear specification&lt;/li&gt;
&lt;li&gt;Write documentation about what I'm building&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I often find it useful to run these secondary tasks async in the background -- while I'm eating lunch, or even literally overnight!&lt;/p&gt;
&lt;p&gt;When I sit down for a work session, I want to feel like a surgeon walking into a prepped operating room. Everything is ready for me to do what I'm good at.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://www.geoffreylitt.com/2025/10/24/code-like-a-surgeon"&gt;Geoffrey Litt&lt;/a&gt;, channeling The Mythical Man-Month&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geoffrey-litt"&gt;geoffrey-litt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/parallel-agents"&gt;parallel-agents&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="geoffrey-litt"/><category term="coding-agents"/><category term="parallel-agents"/></entry><entry><title>Just Talk To It - the no-bs Way of Agentic Engineering</title><link href="https://simonwillison.net/2025/Oct/14/agentic-engineering/" rel="alternate"/><published>2025-10-14T21:26:40+00:00</published><updated>2025-10-14T21:26:40+00:00</updated><id>https://simonwillison.net/2025/Oct/14/agentic-engineering/</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://steipete.me/posts/just-talk-to-it"&gt;Just Talk To It - the no-bs Way of Agentic Engineering&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Peter Steinberger's long, detailed description of his current process for using Codex CLI and GPT-5 Codex. This is information dense and full of actionable tips, plus plenty of strong opinions about the differences between Claude 4.5 an GPT-5:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;While Claude reacts well to 🚨 SCREAMING ALL-CAPS 🚨 commands that threaten it that it will imply ultimate failure and 100 kittens will die if it runs command X, that freaks out GPT-5. (Rightfully so). So drop all of that and just use words like a human.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Peter is a &lt;em&gt;heavy&lt;/em&gt; user of parallel agents:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I've completely moved to &lt;code&gt;codex&lt;/code&gt; cli as daily driver. I run between 3-8 in parallel in a 3x3 terminal grid, most of them &lt;a href="https://x.com/steipete/status/1977771686176174352"&gt;in the same folder&lt;/a&gt;, some experiments go in separate folders. I experimented with worktrees, PRs but always revert back to this setup as it gets stuff done the fastest.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He shares my preference for CLI utilities over MCPs:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I can just refer to a cli by name. I don't need any explanation in my agents file. The agent will try $randomcrap on the first call, the cli will present the help menu, context now has full info how this works and from now on we good. I don't have to pay a price for any tools, unlike MCPs which are a constant cost and garbage in my context. Use GitHub's MCP and see 23k tokens gone. Heck, they did make it better because it was almost 50.000 tokens when it first launched. Or use the &lt;code&gt;gh&lt;/code&gt; cli which has basically the same feature set, models already know how to use it, and pay zero context tax.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It's worth reading the &lt;a href="https://steipete.me/posts/just-talk-to-it#do-you-do-spec-driven-development"&gt;section on why he abandoned spec driven development&lt;/a&gt; in full.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/model-context-protocol"&gt;model-context-protocol&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude-code"&gt;claude-code&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/codex"&gt;codex&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/parallel-agents"&gt;parallel-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/peter-steinberger"&gt;peter-steinberger&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/agentic-engineering"&gt;agentic-engineering&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="model-context-protocol"/><category term="coding-agents"/><category term="claude-code"/><category term="codex"/><category term="parallel-agents"/><category term="peter-steinberger"/><category term="agentic-engineering"/></entry><entry><title>Quoting Gergely Orosz</title><link href="https://simonwillison.net/2025/Oct/9/gergely-orosz/" rel="alternate"/><published>2025-10-09T13:56:12+00:00</published><updated>2025-10-09T13:56:12+00:00</updated><id>https://simonwillison.net/2025/Oct/9/gergely-orosz/</id><summary type="html">
    &lt;blockquote cite="https://twitter.com/gergelyorosz/status/1976242900670480763"&gt;&lt;p&gt;I get a feeling that working with multiple AI agents is something that comes VERY natural to most  senior+ engineers or tech lead who worked at a large company&lt;/p&gt;
&lt;p&gt;You already got used to overseeing parallel work (the goto code reviewer!) + making progress with small chunks of work... because your day has been a series of nonstop interactions, so you had to figure out how to do deep work in small chunks that could have been interrupted&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://twitter.com/gergelyorosz/status/1976242900670480763"&gt;Gergely Orosz&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gergely-orosz"&gt;gergely-orosz&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/parallel-agents"&gt;parallel-agents&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="gergely-orosz"/><category term="coding-agents"/><category term="parallel-agents"/></entry><entry><title>Vibe engineering</title><link href="https://simonwillison.net/2025/Oct/7/vibe-engineering/" rel="alternate"/><published>2025-10-07T14:32:25+00:00</published><updated>2025-10-07T14:32:25+00:00</updated><id>https://simonwillison.net/2025/Oct/7/vibe-engineering/</id><summary type="html">
    &lt;p&gt;I feel like &lt;strong&gt;vibe coding&lt;/strong&gt; is &lt;a href="https://simonwillison.net/2025/Mar/19/vibe-coding/"&gt;pretty well established now&lt;/a&gt; as covering the fast, loose and irresponsible way of building software with AI - entirely prompt-driven, and with no attention paid to how the code actually works. This leaves us with a terminology gap: what should we call the other end of the spectrum, where seasoned professionals accelerate their work with LLMs while staying proudly and confidently accountable for the software they produce?&lt;/p&gt;
&lt;p&gt;I propose we call this &lt;strong&gt;vibe engineering&lt;/strong&gt;, with my tongue only partially in my cheek.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update 23rd February 2026&lt;/strong&gt;: It looks like the term "Agentic Engineering" is coming out on top for this now. I have &lt;a href="https://simonwillison.net/tags/agentic-engineering/"&gt;a new tag for that&lt;/a&gt; and I'm working on &lt;a href="https://simonwillison.net/2026/Feb/23/agentic-engineering-patterns/"&gt;a not-quite-a-book&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;One of the lesser spoken truths of working productively with LLMs as a software engineer on non-toy-projects is that it's &lt;em&gt;difficult&lt;/em&gt;. There's a lot of depth to understanding how to use the tools, there are plenty of traps to avoid, and the pace at which they can churn out working code raises the bar for what the human participant can and should be contributing.&lt;/p&gt;
&lt;p&gt;The rise of &lt;strong&gt;coding agents&lt;/strong&gt; - tools like &lt;a href="https://www.claude.com/product/claude-code"&gt;Claude Code&lt;/a&gt; (released February 2025), OpenAI's &lt;a href="https://github.com/openai/codex"&gt;Codex CLI&lt;/a&gt; (April) and &lt;a href="https://github.com/google-gemini/gemini-cli"&gt;Gemini CLI&lt;/a&gt; (June) that can iterate on code, actively testing and modifying it until it achieves a specified goal, has dramatically increased the usefulness of LLMs for real-world coding problems.&lt;/p&gt;
&lt;p&gt;I'm increasingly hearing from experienced, credible software engineers who are running multiple copies of agents at once, tackling several problems in parallel and expanding the scope of what they can take on. I was skeptical of this at first but &lt;a href="https://simonwillison.net/2025/Oct/5/parallel-coding-agents/"&gt;I've started running multiple agents myself now&lt;/a&gt; and it's surprisingly effective, if mentally exhausting!&lt;/p&gt;
&lt;p&gt;This feels very different from classic vibe coding, where I outsource a simple, low-stakes task to an LLM and accept the result if it appears to work. Most of my &lt;a href="https://tools.simonwillison.net/"&gt;tools.simonwillison.net&lt;/a&gt; collection (&lt;a href="https://simonwillison.net/2025/Sep/4/highlighted-tools/"&gt;previously&lt;/a&gt;) were built like that. Iterating with coding agents to produce production-quality code that I'm confident I can maintain in the future feels like a different process entirely.&lt;/p&gt;
&lt;p&gt;It's also become clear to me that LLMs actively reward existing top tier software engineering practices:&lt;/p&gt;
&lt;ul id="techniques"&gt;
&lt;li&gt;
&lt;strong&gt;Automated testing&lt;/strong&gt;. If your project has a robust, comprehensive and stable test suite agentic coding tools can &lt;em&gt;fly&lt;/em&gt; with it. Without tests? Your agent might claim something works without having actually tested it at all, plus any new change could break an unrelated feature without you realizing it. Test-first development is particularly effective with agents that can iterate in a loop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Planning in advance&lt;/strong&gt;. Sitting down to hack something together goes much better if you start with a high level plan. Working with an agent makes this even more important - you can iterate on the plan first, then hand it off to the agent to write the code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comprehensive documentation&lt;/strong&gt;. Just like human programmers, an LLM can only keep a subset of the codebase in its context at once. Being able to feed in relevant documentation lets it use APIs from other areas without reading the code first. Write good documentation first and the model may be able to build the matching implementation from that input alone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Good version control habits&lt;/strong&gt;. Being able to undo mistakes and understand when and how something was changed is even more important when a coding agent might have made the changes. LLMs are also fiercely competent at Git - they can navigate the history themselves to track down the origin of bugs, and they're better than most developers at using &lt;a href="https://til.simonwillison.net/git/git-bisect"&gt;git bisect&lt;/a&gt;. Use that to your advantage.&lt;/li&gt;
&lt;li&gt;Having &lt;strong&gt;effective automation&lt;/strong&gt; in place. Continuous integration, automated formatting and linting, continuous deployment to a preview environment - all things that agentic coding tools can benefit from too. LLMs make writing quick automation scripts easier as well, which can help them then repeat tasks accurately and consistently next time.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;culture of code review&lt;/strong&gt;. This one explains itself. If you're fast and productive at code review you're going to have a much better time working with LLMs than if you'd rather write code yourself than review the same thing written by someone (or something) else.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;very weird form of management&lt;/strong&gt;. Getting good results out of a coding agent feels uncomfortably close to getting good results out of a human collaborator. You need to provide clear instructions, ensure they have the necessary context and provide actionable feedback on what they produce. It's a &lt;em&gt;lot&lt;/em&gt; easier than working with actual people because you don't have to worry about offending or discouraging them - but any existing management experience you have will prove surprisingly useful.&lt;/li&gt;
&lt;li&gt;Really good &lt;strong&gt;manual QA (quality assurance)&lt;/strong&gt;. Beyond automated tests, you need to be really good at manually testing software, including predicting and digging into edge-cases.&lt;/li&gt;
&lt;li&gt;Strong &lt;strong&gt;research skills&lt;/strong&gt;. There are dozens of ways to solve any given coding problem. Figuring out the best options and proving an approach has always been important, and remains a blocker on unleashing an agent to write the actual code.&lt;/li&gt;
&lt;li&gt;The ability to &lt;strong&gt;ship to a preview environment&lt;/strong&gt;. If an agent builds a feature, having a way to safely preview that feature (without deploying it straight to production) makes reviews much more productive and greatly reduces the risk of shipping something broken.&lt;/li&gt;
&lt;li&gt;An instinct for &lt;strong&gt;what can be outsourced&lt;/strong&gt; to AI and what you need to manually handle yourself. This is constantly evolving as the models and tools become more effective. A big part of working effectively with LLMs is maintaining a strong intuition for when they can best be applied.&lt;/li&gt;
&lt;li&gt;An updated &lt;strong&gt;sense of estimation&lt;/strong&gt;. Estimating how long a project will take has always been one of the hardest but most important parts of being a senior engineer, especially in organizations where budget and strategy decisions are made based on those estimates. AI-assisted coding makes this &lt;em&gt;even harder&lt;/em&gt; - things that used to take a long time are much faster, but estimations now depend on new factors which we're all still trying to figure out.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you're going to really exploit the capabilities of these new tools, you need to be operating &lt;em&gt;at the top of your game&lt;/em&gt;. You're not just responsible for writing the code - you're researching approaches, deciding on high-level architecture, writing specifications, defining success criteria, &lt;a href="https://simonwillison.net/2025/Sep/30/designing-agentic-loops/"&gt;designing agentic loops&lt;/a&gt;, planning QA, managing a growing army of weird digital interns who will absolutely cheat if you give them a chance, and spending &lt;em&gt;so much time on code review&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Almost all of these are characteristics of senior software engineers already!&lt;/p&gt;
&lt;p&gt;AI tools &lt;strong&gt;amplify existing expertise&lt;/strong&gt;. The more skills and experience you have as a software engineer the faster and better the results you can get from working with LLMs and coding agents.&lt;/p&gt;
&lt;h4 id="-vibe-engineering-really-"&gt;"Vibe engineering", really?&lt;/h4&gt;
&lt;p&gt;Is this a stupid name? Yeah, probably. "Vibes" as a concept in AI feels a little tired at this point. "Vibe coding" itself is used by a lot of developers in a dismissive way. I'm ready to reclaim vibes for something more constructive.&lt;/p&gt;
&lt;p&gt;I've never really liked the artificial distinction between "coders" and "engineers" - that's always smelled to me a bit like gatekeeping. But in this case a bit of gatekeeping is exactly what we need!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vibe engineering&lt;/strong&gt; establishes a clear distinction from vibe coding. It signals that this is a different, harder and more sophisticated way of working with AI tools to build production software.&lt;/p&gt;
&lt;p&gt;I like that this is cheeky and likely to be controversial. This whole space is still absurd in all sorts of different ways. We shouldn't take ourselves too seriously while we figure out the most productive ways to apply these new tools.&lt;/p&gt;
&lt;p&gt;I've tried in the past to get terms like &lt;strong&gt;&lt;a href="https://simonwillison.net/tags/ai-assisted-programming/"&gt;AI-assisted programming&lt;/a&gt;&lt;/strong&gt; to stick, with approximately zero success. May as well try rubbing some vibes on it and see what happens.&lt;/p&gt;
&lt;p&gt;I also really like the clear mismatch between "vibes" and "engineering". It makes the combined term self-contradictory in a way that I find mischievous and (hopefully) sticky.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/code-review"&gt;code-review&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/definitions"&gt;definitions&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/software-engineering"&gt;software-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/vibe-coding"&gt;vibe-coding&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/parallel-agents"&gt;parallel-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/agentic-engineering"&gt;agentic-engineering&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="code-review"/><category term="definitions"/><category term="software-engineering"/><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="vibe-coding"/><category term="coding-agents"/><category term="parallel-agents"/><category term="agentic-engineering"/></entry><entry><title>Embracing the parallel coding agent lifestyle</title><link href="https://simonwillison.net/2025/Oct/5/parallel-coding-agents/" rel="alternate"/><published>2025-10-05T12:06:55+00:00</published><updated>2025-10-05T12:06:55+00:00</updated><id>https://simonwillison.net/2025/Oct/5/parallel-coding-agents/</id><summary type="html">
    &lt;p&gt;For a while now I've been hearing from engineers who run multiple coding agents at once - firing up several Claude Code or Codex CLI instances at the same time, sometimes in the same repo, sometimes against multiple checkouts or &lt;a href="https://docs.claude.com/en/docs/claude-code/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees"&gt;git worktrees&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I was pretty skeptical about this at first. AI-generated code needs to be reviewed, which means the natural bottleneck on all of this is how fast I can review the results. It's tough keeping up with just a single LLM given how fast they can churn things out, where's the benefit from running more than one at a time if it just leaves me further behind?&lt;/p&gt;
&lt;p&gt;Despite my misgivings, over the past few weeks I've noticed myself quietly starting to embrace the parallel coding agent lifestyle.&lt;/p&gt;
&lt;p&gt;I can only focus on reviewing and landing one significant change at a time, but I'm finding an increasing number of tasks that can still be fired off in parallel without adding too much cognitive overhead to my primary work.&lt;/p&gt;
&lt;p&gt;Here are some patterns I've found for applying parallel agents effectively.&lt;/p&gt;
&lt;h4 id="research-poc"&gt;Research for proof of concepts&lt;/h4&gt;
&lt;p&gt;The first category of tasks I've been applying this pattern to is &lt;strong&gt;research&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Research tasks answer questions or provide recommendations without making modifications to a project that you plan to keep.&lt;/p&gt;
&lt;p&gt;A lot of software projects start with a proof of concept. Can &lt;a href="https://yjs.dev"&gt;Yjs&lt;/a&gt; be used to implement a simple collaborative note writing tool with a Python backend? The &lt;a href="https://github.com/y-crdt/pycrdt"&gt;libraries exist&lt;/a&gt;, but do they work when you wire them together?&lt;/p&gt;
&lt;p&gt;Today's coding agents can build a proof of concept with new libraries and resolve those kinds of basic questions. Libraries too new to be in the training data? Doesn't matter: tell them to checkout the repos for those new dependencies and read the code to figure out how to use them.&lt;/p&gt;
&lt;h4 id="how-does-that-work-again"&gt;How does that work again?&lt;/h4&gt;
&lt;p&gt;If you need a reminder about how a portion of your existing system works, modern "reasoning" LLMs can provide a detailed, actionable answer in just a minute or two.&lt;/p&gt;
&lt;p&gt;It doesn't matter how large your codebase is: coding agents are extremely effective with tools like grep and can follow codepaths through dozens of different files if they need to.&lt;/p&gt;
&lt;p&gt;Ask them to make notes on where your signed cookies are set and read, or how your application uses subprocesses and threads, or which aspects of your JSON API aren't yet covered by your documentation.&lt;/p&gt;
&lt;p&gt;These LLM-generated explanations are worth stashing away somewhere, because they can make excellent context to paste into further prompts in the future.&lt;/p&gt;
&lt;h4 id="small-maintenance-tasks"&gt;Small maintenance tasks&lt;/h4&gt;
&lt;p&gt;Now we're moving on to code edits that we intend to keep, albeit with &lt;em&gt;very&lt;/em&gt; low-stakes. It turns out there are a lot of problems that really just require a little bit of extra cognitive overhead which can be outsourced to a bot.&lt;/p&gt;
&lt;p&gt;Warnings are a great example. Is your test suite spitting out a warning that something you are using is deprecated? Chuck that at a bot - tell it to run the test suite and figure out how to fix the warning. No need to take a break from what you're doing to resolve minor irritations like that.&lt;/p&gt;
&lt;p&gt;There is a definite knack to spotting opportunities like this. As always, the best way to develop that instinct is to try things - any small maintenance task is something that's worth trying with a coding agent. You can learn from both their successes &lt;em&gt;and&lt;/em&gt; their failures.&lt;/p&gt;
&lt;h4 id="carefully-specified-and-directed-actual-work"&gt;Carefully specified and directed actual work&lt;/h4&gt;
&lt;p&gt;Reviewing code that lands on your desk out of nowhere is a &lt;em&gt;lot&lt;/em&gt; of work. First you have to derive the goals of the new implementation: what's it trying to achieve? Is this something the project needs? Is the approach taken the best for this current project, given other future planned changes? A lot of big questions before you can even start digging into the details of the code.&lt;/p&gt;
&lt;p&gt;Code that started from your own specification is a lot less effort to review. If you already decided what to solve, picked the approach and worked out a detailed specification for the work itself, confirming it was built to your needs can take a lot less time.&lt;/p&gt;
&lt;p&gt;I described my &lt;a href="https://simonwillison.net/2025/Mar/11/using-llms-for-code/#tell-them-exactly-what-to-do"&gt;more authoritarian approach&lt;/a&gt; to prompting models for code back in March. If I tell them &lt;em&gt;exactly&lt;/em&gt; how to build something the work needed to review the resulting changes is a whole lot less taxing.&lt;/p&gt;
&lt;h4 id="how-i-m-using-these-tools-today"&gt;How I'm using these tools today&lt;/h4&gt;
&lt;p&gt;My daily drivers are currently &lt;a href="https://www.claude.com/product/claude-code"&gt;Claude Code&lt;/a&gt; (on Sonnet 4.5), &lt;a href="https://github.com/openai/codex"&gt;Codex CLI&lt;/a&gt; (on GPT-5-Codex), and &lt;a href="https://chatgpt.com/codex"&gt;Codex Cloud&lt;/a&gt; (for asynchronous tasks, frequently launched from my phone.)&lt;/p&gt;
&lt;p&gt;I'm also dabbling with &lt;a href="https://docs.github.com/en/copilot/concepts/agents/coding-agent/about-coding-agent"&gt;GitHub Copilot Coding Agent&lt;/a&gt; (the agent baked into the &lt;a href="https://github.com"&gt;GitHub.com&lt;/a&gt; web interface in various places) and &lt;a href="https://jules.google"&gt;Google Jules&lt;/a&gt;, Google's currently-free alternative to Codex Cloud.&lt;/p&gt;
&lt;p&gt;I'm still settling into patterns that work for me. I imagine I'll be iterating on my processes for a long time to come, especially as the landscape of coding agents continues to evolve.&lt;/p&gt;
&lt;p&gt;I frequently have multiple terminal windows open running different coding agents in different directories. These are currently a mixture of Claude Code and Codex CLI, running in &lt;a href="https://simonwillison.net/2025/Sep/30/designing-agentic-loops/#the-joy-of-yolo-mode"&gt;YOLO mode&lt;/a&gt; (no approvals) for tasks where I'm confident malicious instructions can't sneak into the context.&lt;/p&gt;
&lt;p&gt;(I need to start habitually running my local agents in Docker containers to further limit the blast radius if something goes wrong.)&lt;/p&gt;
&lt;p&gt;I haven't adopted git worktrees yet: if I want to run two agents in isolation against the same repo I do a fresh checkout, often into &lt;code&gt;/tmp&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For riskier tasks I'm currently using asynchronous coding agents - usually Codex Cloud - so if anything goes wrong the worst that can happen is my source code getting leaked (since &lt;a href="https://simonwillison.net/2025/Jun/3/codex-agent-internet-access/"&gt;I allow it to have network access&lt;/a&gt; while running). Most of what I work on is open source anyway so that's not a big concern for me.&lt;/p&gt;
&lt;p&gt;I occasionally use &lt;a href="https://github.com/features/codespaces"&gt;GitHub Codespaces&lt;/a&gt; to run VS Code's agent mode, which is surprisingly effective and runs directly in my browser. This is particularly great for workshops and demos since it works for anyone with GitHub account, no extra API key necessary.&lt;/p&gt;
&lt;h4 id="please-share-your-patterns-that-work"&gt;Please share your patterns that work&lt;/h4&gt;
&lt;p&gt;This category of coding agent software is still really new, and the models have only really got good enough to drive them effectively in the past few months - Claude 4 and GPT-5 in particular.&lt;/p&gt;
&lt;p&gt;I plan to write more as I figure out the ways of using them that are most effective. I encourage other practitioners to do the same!&lt;/p&gt;
&lt;h4 id="recommended-reading"&gt;Recommended reading&lt;/h4&gt;
&lt;p&gt;Jesse Vincent wrote &lt;a href="https://blog.fsck.com/2025/10/05/how-im-using-coding-agents-in-september-2025/"&gt;How I'm using coding agents in September, 2025&lt;/a&gt; which describes his workflow for parallel agents in detail, including having an architect agent iterate on a plan which is then reviewed and implemented by fresh instances of Claude Code.&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://sketch.dev/blog/seven-prompting-habits"&gt;The 7 Prompting Habits of Highly Effective Engineers&lt;/a&gt; Josh Bleecher Snyder describes several patterns for this kind of work. I particularly like this one:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Send out a scout&lt;/strong&gt;. Hand the AI agent a task just to find out where the sticky bits are, so you don’t have to make those mistakes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I've tried this a few times with good results: give the agent a genuinely difficult task against a large codebase, with no intention of actually landing its code, just to get ideas from which files it modifies and how it approaches the problem.&lt;/p&gt;
&lt;p&gt;Peter Steinberger's &lt;a href="https://steipete.me/posts/just-talk-to-it"&gt;Just Talk To It - the no-bs Way of Agentic Engineering&lt;/a&gt; provides a very detailed description of his current process built around Codex CLI.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-agents"&gt;ai-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude-code"&gt;claude-code&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/async-coding-agents"&gt;async-coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jules"&gt;jules&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/codex"&gt;codex&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/parallel-agents"&gt;parallel-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jesse-vincent"&gt;jesse-vincent&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/peter-steinberger"&gt;peter-steinberger&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/agentic-engineering"&gt;agentic-engineering&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="ai-agents"/><category term="coding-agents"/><category term="claude-code"/><category term="async-coding-agents"/><category term="jules"/><category term="codex"/><category term="parallel-agents"/><category term="jesse-vincent"/><category term="peter-steinberger"/><category term="agentic-engineering"/></entry></feed>