<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>large-projects on tomrochette.com</title>
    <link>https://tomrochette.com/tags/large-projects/</link>
    <description>Recent content in large-projects on tomrochette.com</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <managingEditor>tom@tomrochette.com (Tom Rochette)</managingEditor>
    <webMaster>tom@tomrochette.com (Tom Rochette)</webMaster>
    <copyright>© 2026 Tom Rochette</copyright>
    <lastBuildDate>Sun, 20 Sep 2026 01:24:31 -0400</lastBuildDate><atom:link href="https://tomrochette.com/tags/large-projects/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Nine Months of LLM Agents on Large Projects</title>
      <link>https://tomrochette.com/nine-months-of-llm-agents-on-large-projects/</link>
      <pubDate>Sun, 20 Sep 2026 00:00:00 +0000</pubDate>
      <author>tom@tomrochette.com (Tom Rochette)</author>
      <guid>https://tomrochette.com/nine-months-of-llm-agents-on-large-projects/</guid>
      <category>ai</category><category>llm</category><category>ai-agents</category><category>software-engineering</category><category>workflow</category><category>large-projects</category><category>fully-ai-generated</category><category>llm=glm-5.3-flash</category>
      <description>&lt;p&gt;Over the past nine months I have run LLM agents against the largest projects I have ever worked on alone: a stable of open source tools I use and maintain daily, and the automated pipeline that publishes part of this blog.&#xA;The models improved underneath me the whole time, and that helped less than I expected.&#xA;&lt;strong&gt;What actually moved the needle was learning to handle four challenges: providing the right context, iterating through non-obvious design decisions, managing the scale of the work, and keeping artifacts consistent while decisions change.&lt;/strong&gt;&#xA;None of the four is about getting a model to write better code.&#xA;All four decide whether the code the model writes turns into a finished project.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;What the nine months covered&#xA;    &lt;div id=&#34;what-the-nine-months-covered&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#what-the-nine-months-covered&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;GitHub gives the scale better than my memory does: since January I have contributed 1,338 commits across 51 repositories, along with 66 pull requests and 181 issues.&#xA;By mid September, 9 months in, the session counter read 3,400 sessions, 82,000 messages, and 6.8 billion tokens, 6.5 billion of them served from cache, spread across 63 projects and 33 models, on a path that had moved from Claude Sonnet 4.5 to GLM 5.3 Flash.&#xA;The volume is not the point.&#xA;The point is that the same four challenges appeared in every project, and how I answered them changed more than any model upgrade did.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Challenge 1: Providing the Right Context&#xA;    &lt;div id=&#34;challenge-1-providing-the-right-context&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#challenge-1-providing-the-right-context&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Nine months ago my working assumption was that a capable agent would gather whatever it needed by exploring the repository.&#xA;On a small project, that assumption holds.&#xA;On a large one, it fails quietly: a session is generally scoped to a single location, one repository or directory, and a large project rarely fits inside one, so each session sees a narrow slice of the project, and the knowledge outside that slice might as well not exist.&#xA;The cost showed up as steering time.&#xA;I would launch a session, come back, and find it had built on a wrong assumption, then spend the next half hour correcting course.&#xA;Worse, the corrections sometimes left the written context inconsistent, one artifact updated while the artifacts that depend on it stayed stale, and later sessions inherited the contradiction as ground truth.&#xA;&lt;strong&gt;On a large project, under-provisioned context does not just slow one session down, it poisons the sessions that follow.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;What I do now is treat context provisioning as a phase with an exit condition, not a chore.&#xA;Access first: every source the answers live in gets a way in and a pointer, which is the setup I described in &lt;a href=&#34;../teach-your-agent-where-everything-lives/index.md&#34; &gt;Teach Your Agent Where Everything Lives&lt;/a&gt;.&#xA;Then the map: which repositories exist, how they relate, where decisions live, written down so a cold session can orient in minutes.&#xA;&lt;strong&gt;The exit condition: a cold session, dropped into the project with only its instructions file, can find every source it needs without asking me.&lt;/strong&gt;&#xA;I test it by handing the session a question whose answer I know lives in one of the mapped sources, and provisioning is done when it comes back with the answer and the trail instead of a question.&#xA;The principle underneath is the one I keep coming back to, that &lt;a href=&#34;https://tomrochette.com/the-importance-of-context-when-interacting-with-llms/&#34; &gt;context quality dominates model choice&lt;/a&gt;.&#xA;&lt;strong&gt;Every session I launch inherits the preparation, and every session I under-provision collects the tax in steering time.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Challenge 2: Iterating Through Non-Obvious Design Decisions&#xA;    &lt;div id=&#34;challenge-2-iterating-through-non-obvious-design-decisions&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#challenge-2-iterating-through-non-obvious-design-decisions&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The decisions that sink large projects are rarely the ones I can state up front.&#xA;They are the non-obvious ones: how two modules should share a data format, what happens when a change is abandoned halfway through, whether a behavior belongs in a shared library or in the calling code.&#xA;I cannot enumerate those in a prompt, and an agent cannot discover them from the code alone, because half of them are not written down anywhere.&lt;/p&gt;&#xA;&lt;p&gt;What I do now is iterate.&#xA;Before any implementation session launches, I work with an agent to understand the current codebase and describe the changes we need to make, and we go back and forth until most open questions are resolved.&#xA;The agent is a design partner, not a typist: it restates my description, catches the cases I glossed over, and proposes the alternatives I did not consider.&#xA;&lt;strong&gt;The exit condition is simple: when the questions the implementing agent would ask have already been asked and answered, the design conversation is done.&lt;/strong&gt;&#xA;Answering a design question in conversation costs minutes.&#xA;Answering it mid-implementation costs a stalled session, a wrong branch, or a refactor, and the stalls compound on every long run.&#xA;This is the principle behind &lt;a href=&#34;../say-it-once/index.md&#34; &gt;Say It Once&lt;/a&gt;, that every question an agent would ask mid-run should be answered before the run, applied one phase earlier: not just the standing rules, but the design itself.&lt;/p&gt;&#xA;&lt;p&gt;Here is the loop as it runs today, from first contact with the codebase to the moment parallel sessions can safely start:&lt;/p&gt;&#xA;&lt;pre class=&#34;not-prose mermaid&#34;&gt;flowchart TD&#xA;    A[Explore the current codebase with an agent] --&amp;gt; B[Describe the change]&#xA;    B --&amp;gt; C{Open questions remain?}&#xA;    C --&amp;gt;|yes| D[Agent questions assumptions and proposes alternatives]&#xA;    D --&amp;gt; B&#xA;    C --&amp;gt;|no| E[Write decisions into the artifact tree]&#xA;    E --&amp;gt; F[Seed requirements and specs per feature]&#xA;    F --&amp;gt; G[Stand up the verification environment]&#xA;    G --&amp;gt; H[Partition the work and launch parallel sessions]&lt;/pre&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Challenge 3: Managing the Scale of the Work&#xA;    &lt;div id=&#34;challenge-3-managing-the-scale-of-the-work&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#challenge-3-managing-the-scale-of-the-work&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;A large project carries more work than one session can absorb, and more than I can supervise.&#xA;On the most feature-heavy project I have run through my pipeline, &lt;a href=&#34;../three-gaps-my-sdlc-pipeline-hit-on-a-machine-learning-platform/index.md&#34; &gt;the features outnumbered my attention within weeks&lt;/a&gt;: creating a directory per feature was cheap, walking each one through design personally was not.&#xA;The answer is delegation and parallelism, but both have to be earned.&#xA;&lt;a href=&#34;https://tomrochette.com/speeding-up-llm-work-on-a-single-codebase/&#34; &gt;Parallel sessions collide&lt;/a&gt; unless the work is partitioned along real seams, and the seams only become visible through the design iteration of the previous section.&lt;/p&gt;&#xA;&lt;p&gt;The preparation is what makes scale manageable.&#xA;Each feature keeps its own artifact directory, seeded before any implementation session starts.&#xA;Owning agents take features as far as they can and stop at the gates that need a human decision.&#xA;Sessions get their own worktrees, so parallel work never steps on itself.&#xA;Tasks that share a file serialize; everything else runs in parallel.&#xA;&lt;strong&gt;Parallelism is earned at partition time, not at spawn time.&lt;/strong&gt;&#xA;Spawning ten sessions on an unpartitioned codebase produces ten half-features and a merge conflict.&#xA;Spawning ten sessions along the seams the design conversation exposed produces a project.&lt;/p&gt;&#xA;&lt;p&gt;The other half of scale is me.&#xA;With a dozen sessions running, I become the bottleneck unless decisions are batched and gates are explicit, which is the supervision problem I worked through in &lt;a href=&#34;https://tomrochette.com/managing-many-llm-agent-sessions/&#34; &gt;Managing Many Concurrent LLM Agent Sessions&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Challenge 4: Keeping Artifacts Consistent While Decisions Change&#xA;    &lt;div id=&#34;challenge-4-keeping-artifacts-consistent-while-decisions-change&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#challenge-4-keeping-artifacts-consistent-while-decisions-change&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The final challenge never stops.&#xA;On a project with dozens of interlocking features, decisions keep changing, and every change ripples.&#xA;A revision to one feature&amp;rsquo;s specification forces updates in the requirements and plans of the features that consume what it produces.&#xA;A session forked last week works from a snapshot that the sessions around it have already moved past.&lt;/p&gt;&#xA;&lt;p&gt;Nine months ago I treated consistency as something to check at review time.&#xA;Review time is too late: the stale artifacts have already fed other sessions by then.&#xA;What I do now comes in two layers.&#xA;Artifacts declare what they depend on, so the ripple has a map, and a propagation pass follows the map when an artifact changes, updating dependents or raising questions where a decision is needed.&#xA;I worked out that mechanism in detail in &lt;a href=&#34;https://tomrochette.com/what-needs-updating-when-agents-do-the-work/&#34; &gt;What Needs Updating When Agents Do the Work&lt;/a&gt;.&#xA;Verification environments catch whatever the map misses: an hour spent making the environment catch the inconsistency beats an hour reading diffs hoping to see it, which is the trade I laid out in &lt;a href=&#34;https://tomrochette.com/my-ai-workflow/&#34; &gt;My AI Workflow&lt;/a&gt;.&#xA;&lt;strong&gt;Consistency on a large project is not a milestone you reach, it is a loop you run, and only a machine can run it at the frequency the project changes.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;What to Do Next&#xA;    &lt;div id=&#34;what-to-do-next&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#what-to-do-next&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Before launching implementation, run the design loop with an agent until the open questions are resolved, and write the answers where the implementing sessions will read them.&lt;/li&gt;&#xA;&lt;li&gt;Treat context provisioning as a phase with an exit condition: access, map, pointers.&lt;/li&gt;&#xA;&lt;li&gt;Seed the artifact tree per feature before the first implementation session starts.&lt;/li&gt;&#xA;&lt;li&gt;Partition along the seams the design work exposed, isolate with worktrees, and serialize whatever shares a file.&lt;/li&gt;&#xA;&lt;li&gt;Add dependency declarations and a propagation pass so artifact consistency is maintained by loop, not by review.&lt;/li&gt;&#xA;&lt;li&gt;Watch your steering time: if you correct sessions more than you review them, the context was under-provisioned.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;See also&#xA;    &lt;div id=&#34;see-also&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#see-also&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;../three-gaps-my-sdlc-pipeline-hit-on-a-machine-learning-platform/index.md&#34; &gt;Three Gaps My SDLC Pipeline Hit on a Machine Learning Platform&lt;/a&gt; - the failures that produced the scale and consistency challenges&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/what-needs-updating-when-agents-do-the-work/&#34; &gt;What Needs Updating When Agents Do the Work&lt;/a&gt; - the pull-request-node version of the artifact graph and propagation pass described in Challenge 4&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/speeding-up-llm-work-on-a-single-codebase/&#34; &gt;Speeding Up LLM Work on a Single Codebase&lt;/a&gt; - the parallelism mechanics this article summarizes, in full detail&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;../say-it-once/index.md&#34; &gt;Say It Once&lt;/a&gt; - standing rules that replace mid-run questions, the runtime twin of the design loop&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/my-ai-workflow/&#34; &gt;My AI Workflow&lt;/a&gt; - where the skills and verification environments come from&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/six-months-with-openchamber/&#34; &gt;Six Months with OpenChamber&lt;/a&gt; - the tooling that made running thousands of agent sessions practical&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/managing-many-llm-agent-sessions/&#34; &gt;Managing Many Concurrent LLM Agent Sessions&lt;/a&gt; - the supervision side of scale&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/the-importance-of-context-when-interacting-with-llms/&#34; &gt;The Importance of Context When Interacting with LLMs&lt;/a&gt; - the principle underneath the first challenge&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;References&#xA;    &lt;div id=&#34;references&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#references&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://metr.org/blog/2025-03-19-measuring-ai-ability-to-complete-long-tasks/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=metr.org&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;METR, &amp;ldquo;Measuring AI Ability to Complete Long Software Tasks&amp;rdquo;&lt;/a&gt; - the reliability gap on long tasks that makes preparation and verification mandatory&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=www.anthropic.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;Anthropic, &amp;ldquo;Effective Context Engineering for AI Agents&amp;rdquo;&lt;/a&gt; - attention budgets and just-in-time retrieval, the theory behind the context phase&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://git-scm.com/docs/git-worktree&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=git-scm.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;git worktree&lt;/a&gt; - the isolation mechanism behind the parallel sessions&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
      
    </item>
    
  </channel>
</rss>
