<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mike</title>
    <description>The latest articles on DEV Community by Mike (@ruthlessdeveloper).</description>
    <link>https://dev.to/ruthlessdeveloper</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4175849%2F0199d056-3bcf-4b4a-8191-a47e6aa657ee.png</url>
      <title>DEV Community: Mike</title>
      <link>https://dev.to/ruthlessdeveloper</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ruthlessdeveloper"/>
    <language>en</language>
    <item>
      <title>I let 9 AI agents loose on the same project. Here's what they did to my files.</title>
      <dc:creator>Mike</dc:creator>
      <pubDate>Tue, 13 Oct 2026 15:40:40 +0000</pubDate>
      <link>https://dev.to/ruthlessdeveloper/i-let-9-ai-agents-loose-on-the-same-project-heres-what-they-did-to-my-files-39el</link>
      <guid>https://dev.to/ruthlessdeveloper/i-let-9-ai-agents-loose-on-the-same-project-heres-what-they-did-to-my-files-39el</guid>
      <description>&lt;p&gt;Over one week in October 2026 I pointed nine AI coding agents at the same small project on my Windows PC and recorded the file activity in that project while each one worked. I wasn't trying to rank them on code quality. I wanted to know what actually happens on disk when an agent "edits a few files", and whether I could put everything back exactly as it was afterwards.&lt;/p&gt;

&lt;p&gt;Full disclosure up front: I'm building a Windows tool that records which program changed which file and can undo an agent's session. That tool is what did the recording here, and this testing was its release gate. So read this as one developer's logs, not an independent benchmark.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The project:&lt;/strong&gt; a small .NET notes app with a &lt;code&gt;src&lt;/code&gt; folder and a &lt;code&gt;tests&lt;/code&gt; folder, in its own local git repository. Before every run I made a commit, so afterwards &lt;code&gt;git status&lt;/code&gt; and &lt;code&gt;git diff&lt;/code&gt; showed exactly what had changed and whether the undo really put everything back.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The task:&lt;/strong&gt; seven of the agents got the same task: add &lt;code&gt;DeleteCommand.cs&lt;/code&gt;, rename &lt;code&gt;AddCommand.cs&lt;/code&gt; to &lt;code&gt;NewCommand.cs&lt;/code&gt;, delete &lt;code&gt;ListCommand.cs&lt;/code&gt; (moving its code into &lt;code&gt;Program.cs&lt;/code&gt;), and add a line to &lt;code&gt;README.md&lt;/code&gt;. Claude Code and OpenAI Codex had run earlier, during a previous gate, on different refactoring tasks in the same project (adding commands, moving a class into a new folder, updating the checks and README).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The rule for a pass:&lt;/strong&gt; the agent's changes had to be recognized as that agent's work with no setup, and undoing the session had to leave the folder matching git exactly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How I tested.&lt;/strong&gt; The seven ran on 7–8 October 2026. Each agent had only a few runs. Where testing turned up issues in the recorder, I fixed them and re-ran those tests.&lt;/p&gt;

&lt;p&gt;The nine: Claude Code, OpenAI Codex, Claude Desktop (Cowork), GitHub Copilot in VS Code, GitHub Copilot in Visual Studio, Cursor, Windsurf (now Devin), Gemini CLI and Aider. In the end all nine passed. Getting there was more interesting than the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  At a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Agent&lt;/th&gt;
&lt;th&gt;What wrote the files&lt;/th&gt;
&lt;th&gt;What surprised me&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;Claude Code, saving "atomically" (new copy swapped in)&lt;/td&gt;
&lt;td&gt;Forcing an undo through a conflict also took my own README edit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI Codex&lt;/td&gt;
&lt;td&gt;A fresh &lt;code&gt;codex.exe&lt;/code&gt; for each edit&lt;/td&gt;
&lt;td&gt;One run first showed up as several sessions; it repaired a build a partial undo had broken&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Desktop (Cowork)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;claude.exe&lt;/code&gt; on the PC, despite the sandbox&lt;/td&gt;
&lt;td&gt;It skipped the delete and the rename&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Copilot in VS Code&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;copilot-runtime.exe&lt;/code&gt; (VS Code itself a week earlier)&lt;/td&gt;
&lt;td&gt;8 files touched for 4 requested changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Copilot in Visual Studio&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;devenv.exe&lt;/code&gt;, Visual Studio itself&lt;/td&gt;
&lt;td&gt;Saves via temp files, so existing files first looked newly created&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cursor&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Cursor.exe&lt;/code&gt; itself&lt;/td&gt;
&lt;td&gt;Without a repository, its Agents window worked on a copy in another app's folder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windsurf, now Devin&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;devin.exe&lt;/code&gt;, with PowerShell for deletes&lt;/td&gt;
&lt;td&gt;My recorder first credited its edits to Cursor, because I'd downloaded it from a link in Cursor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini CLI&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Google sign-in no longer works for individuals; the free key's daily allowance ran out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aider&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Commits to git by default, and left its own &lt;code&gt;.aider*&lt;/code&gt; files behind&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What each one did
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Claude Code
&lt;/h3&gt;

&lt;p&gt;I asked it to add delete and find commands, move the &lt;code&gt;NoteStore&lt;/code&gt; class into a new &lt;code&gt;Storage\&lt;/code&gt; folder, and update &lt;code&gt;Program&lt;/code&gt;, the checks and the README, then build and run the checks. It moved &lt;code&gt;NoteStore&lt;/code&gt; and then edited it in its new place. Undoing the session took eight actions with no failures, and the project matched the commit afterwards.&lt;/p&gt;

&lt;p&gt;In this run it saved files "atomically" (write a new copy, then swap it in) rather than editing in place, which matters if you're trying to tell what changed.&lt;/p&gt;

&lt;p&gt;In a second round I let Claude Code edit some files and then edited the README myself in VS Code. When I undid the agent's work but kept one of its files, my own README line went with the undo, because I'd told it to overwrite the conflict. That's what forcing means, but it's a reminder that "undo the agent" and "undo everything since the agent started" aren't the same thing.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenAI Codex (CLI 0.159)
&lt;/h3&gt;

&lt;p&gt;Same kind of task: add an edit command, a check and a README line, then run the checks. Codex's process model surprised me: each edit was made by a fresh &lt;code&gt;codex.exe&lt;/code&gt; started under a command runner, so on my first attempt one Codex run showed up as several separate sessions.&lt;/p&gt;

&lt;p&gt;The more instructive part: the previous round had ended with a &lt;em&gt;partial&lt;/em&gt; undo (one of Claude Code's files kept, the rest reverted), which left the project not building. In this case, Codex repaired the resulting build failure as part of its task. Lesson: a partial undo can leave code half-changed, and whatever runs next inherits it.&lt;/p&gt;

&lt;p&gt;Codex also supports a hook that runs before each edit; in my test it fired 2 seconds before the edit landed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Desktop (Cowork)
&lt;/h3&gt;

&lt;p&gt;Cowork changed 4 files, all written by &lt;code&gt;claude.exe&lt;/code&gt; on the PC itself, even though Cowork works in a sandbox. In this run, with manual approval on, Cowork created and changed files but did neither the deletion of &lt;code&gt;ListCommand.cs&lt;/code&gt; nor the rename of &lt;code&gt;AddCommand.cs&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub Copilot in VS Code (Agent mode)
&lt;/h3&gt;

&lt;p&gt;Copilot touched 8 files for a task that named 4 changes: it also edited &lt;code&gt;NoteStore.cs&lt;/code&gt; and the checks without being asked. "It changed more than I asked" is worth knowing before you hit Keep.&lt;/p&gt;

&lt;p&gt;The writes came from &lt;code&gt;copilot-runtime.exe&lt;/code&gt;. In an earlier run on 1 October, Copilot's writes came from VS Code's own process instead. Agents can change how they work between runs without telling you.&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub Copilot in Visual Studio (Agent mode)
&lt;/h3&gt;

&lt;p&gt;Every change was made by &lt;code&gt;devenv.exe&lt;/code&gt;, Visual Studio itself, so there is no separate "Copilot" process to point at. Visual Studio also saves by writing a temporary file and renaming it over the original, so existing files like &lt;code&gt;Program.cs&lt;/code&gt; first looked newly created, and temp files with names like &lt;code&gt;54u00h4d.hp4~&lt;/code&gt; appeared alongside them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cursor 3.22
&lt;/h3&gt;

&lt;p&gt;My first try was in Cursor's Agents window with no repository attached. Nothing happened in my project, because the agent picked up a copy of the project in another app's scratch folder and did all its work there. Opened properly in the editor (Agent mode, folder open), it changed 7 files, all written by &lt;code&gt;Cursor.exe&lt;/code&gt; itself, so on disk the agent's edits can't be told apart from your own typing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Windsurf, now Devin 3.10
&lt;/h3&gt;

&lt;p&gt;Windsurf had been renamed: the app is now &lt;code&gt;Devin.exe&lt;/code&gt;, and its agent runs as a child &lt;code&gt;devin.exe&lt;/code&gt; that starts PowerShell to delete files.&lt;/p&gt;

&lt;p&gt;In this run it renamed &lt;code&gt;AddCommand.cs&lt;/code&gt; using PowerShell and then edited it. It also edited &lt;code&gt;NoteStore.cs&lt;/code&gt;, which wasn't in the task, and then put it back.&lt;/p&gt;

&lt;p&gt;The odd part: I'd downloaded the Devin installer by clicking a link inside Cursor. Following the chain of processes (Devin, its installer, my web browser, Cursor), Devin's edits were first credited to &lt;em&gt;Cursor&lt;/em&gt;, and landed in Cursor's session. If you ever wonder why "which agent did this?" is harder than it sounds, that's why.&lt;/p&gt;

&lt;p&gt;My recorder had followed that process chain too literally. I fixed its attribution rules and repeated the test on version 0.10.3 of the recorder, with my hand-made rule deleted and Devin started from the Start menu. Devin's edits were now credited correctly as one session, and undo matched git exactly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemini CLI 0.63
&lt;/h3&gt;

&lt;p&gt;When I tried Google sign-in, Gemini CLI told me it no longer works for individuals and to "migrate to Antigravity", so I ran it on a free AI Studio API key. The key's daily allowance ran out on the first model, so a second model did the round. It changed 8 files.&lt;/p&gt;

&lt;h3&gt;
  
  
  Aider 0.86.2
&lt;/h3&gt;

&lt;p&gt;By default Aider commits to git by itself. Even with &lt;code&gt;--no-auto-commits&lt;/code&gt; it still stages new files with &lt;code&gt;git add&lt;/code&gt;. I ran it with &lt;code&gt;--no-auto-commits&lt;/code&gt;. It renamed &lt;code&gt;AddCommand.cs&lt;/code&gt; to &lt;code&gt;NewCommand.cs&lt;/code&gt;, and it left its own &lt;code&gt;.aider*&lt;/code&gt; files in the project. Some of those were cache files Aider still had open while running; they could only be cleaned up after I closed Aider.&lt;/p&gt;

&lt;p&gt;If you use Aider with auto-commits on, remember that putting your files back leaves git's history and index alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I took away
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Commit before every agent session.&lt;/strong&gt; It cost seconds and made every undo checkable against &lt;code&gt;git diff&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agents do more than you asked.&lt;/strong&gt; Copilot in VS Code and Devin both touched &lt;code&gt;NoteStore.cs&lt;/code&gt;, which wasn't in the task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"The agent" is often just your editor.&lt;/strong&gt; In Visual Studio and Cursor, the agent's edits come from the same process as your own typing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Partial undos are risky.&lt;/strong&gt; Keeping one file from an agent's change left my project not building; in my case, the next agent happened to repair it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Know where your agent is actually working.&lt;/strong&gt; Cursor's Agents window without a repository did its work in a different folder entirely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agents change under you.&lt;/strong&gt; During that week's tests I found Windsurf running as &lt;code&gt;Devin.exe&lt;/code&gt;, Copilot writing from a different process than a week before, and Gemini CLI turning away Google sign-in for individuals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aider and git:&lt;/strong&gt; know whether auto-commits are on before you run it.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The tool
&lt;/h2&gt;

&lt;p&gt;The recorder and undo I used is &lt;a href="https://filesquirrelai.com" rel="noopener noreferrer"&gt;FileSquirrelAI&lt;/a&gt;, a Windows app I'm building, currently in free public beta. It records which agent changed which file and can put a session back. It has been tested with all nine agents above, in the way described here. If you try it, I'd like to hear how it works with your setup: &lt;a href="mailto:beta@filesquirrelai.com"&gt;beta@filesquirrelai.com&lt;/a&gt;.&lt;/p&gt;

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