<?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: Anoosh Ohadi</title>
    <description>The latest articles on DEV Community by Anoosh Ohadi (@anoushohadi).</description>
    <link>https://dev.to/anoushohadi</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%2F4220048%2F83e2811f-5d26-4cb2-9079-dfd61006a1fc.jpg</url>
      <title>DEV Community: Anoosh Ohadi</title>
      <link>https://dev.to/anoushohadi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anoushohadi"/>
    <language>en</language>
    <item>
      <title>Testing Desktop Apps with AI Without Blocking Your Main Computer</title>
      <dc:creator>Anoosh Ohadi</dc:creator>
      <pubDate>Mon, 02 Nov 2026 13:05:50 +0000</pubDate>
      <link>https://dev.to/anoushohadi/testing-desktop-apps-with-ai-without-blocking-your-main-computer-35gb</link>
      <guid>https://dev.to/anoushohadi/testing-desktop-apps-with-ai-without-blocking-your-main-computer-35gb</guid>
      <description>&lt;p&gt;A practical workflow for moving interactive tests to spare machines, checking prerequisites, and getting useful test reports back.&lt;/p&gt;

&lt;p&gt;There were days when I could barely use my own computer because an AI agent was testing an application I was building.&lt;/p&gt;

&lt;p&gt;It would launch the app, move the mouse, click through the interface, and type. I had to leave the controls alone. If I clicked somewhere else or brought another window forward, I could interrupt the test.&lt;/p&gt;

&lt;p&gt;Meanwhile, I had other projects to work on.&lt;/p&gt;

&lt;p&gt;Several coding sessions could make progress in parallel. But once they needed to interact with applications on my desktop, they were competing for the same workspace.&lt;/p&gt;

&lt;h2&gt;
  
  
  A successful build still left work to do
&lt;/h2&gt;

&lt;p&gt;I develop desktop applications, including a screen recorder. After an agent changed an interface, I wanted it to open the application and check what it had made.&lt;/p&gt;

&lt;p&gt;Was the control visible? Did the interaction work? Had a layout change broken something elsewhere?&lt;/p&gt;

&lt;p&gt;Reading the source and completing a build could answer some questions. They could not tell me everything I wanted to know about the running application.&lt;/p&gt;

&lt;p&gt;This depends on how the test is run. Some desktop checks can run without taking over a user’s input, and browser automation can also interfere with someone’s desktop. My problem was specifically the tests that needed control of the same interactive environment I was trying to use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two agents could interrupt each other
&lt;/h2&gt;

&lt;p&gt;With one application, I could sometimes step away and let the agent finish.&lt;/p&gt;

&lt;p&gt;With several projects, that became harder. One agent could be interacting with an application while another brought its own window forward. The first agent’s next click might then land in the wrong place.&lt;/p&gt;

&lt;p&gt;Opening another terminal did not give the agent another desktop.&lt;/p&gt;

&lt;p&gt;I was already dealing with the overhead of finding the right project and session. Now, even after finding the work I wanted to continue, I sometimes could not use the computer to do it.&lt;/p&gt;

&lt;p&gt;At one point, this constrained my work for much of a day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Move execution to another computer
&lt;/h2&gt;

&lt;p&gt;I had spare machines available. I wanted to move a project’s code and sessions to another computer and let development and interactive testing continue there.&lt;/p&gt;

&lt;p&gt;The application could open on that machine. Its agent could use that desktop. I could keep using mine.&lt;/p&gt;

&lt;p&gt;I developed a transfer workflow around that requirement: the destination needed the project files, the context required to continue the task, and an environment that could actually run the application.&lt;/p&gt;

&lt;p&gt;A friend later mentioned an unused laptop at home. I connected that machine as well, so some work could run there over the internet.&lt;/p&gt;

&lt;p&gt;The important part was where the application actually ran. Viewing my main computer remotely would still leave its desktop occupied. Running the project on another machine gave the test its own place to work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Unity project exposed a missing dependency
&lt;/h2&gt;

&lt;p&gt;One of the projects I moved was a game I was building with Unity.&lt;/p&gt;

&lt;p&gt;The destination laptop did not have Unity and some of the other prerequisites available on my main computer. Transferring the project files had not made it ready to continue the work.&lt;/p&gt;

&lt;p&gt;I asked the AI to help extend the workflow to handle that setup as well. In the Unity case I worked through, this included preparing the destination with the tools the project needed.&lt;/p&gt;

&lt;p&gt;That does not mean I have automated installation of every development tool. An unfamiliar dependency may still need additional setup, with AI assistance or manually. Required access and software licensing also need to be handled for the destination machine.&lt;/p&gt;

&lt;p&gt;The transfer needed to account for the environment as well as the files.&lt;/p&gt;

&lt;h2&gt;
  
  
  A preflight checklist for the destination
&lt;/h2&gt;

&lt;p&gt;For someone trying a similar arrangement, I would start with one project and one spare machine.&lt;/p&gt;

&lt;p&gt;Before assigning several tasks, establish that the destination can complete one small, useful check.&lt;/p&gt;

&lt;p&gt;My checklist would be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code state:&lt;/strong&gt; Identify the branch or revision, including any local changes that need to travel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Toolchain:&lt;/strong&gt; Record the editor, SDK, runtime, and versions the project requires.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Launch procedure:&lt;/strong&gt; Explain how to build and open the application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Task boundary:&lt;/strong&gt; Say what the agent should test and what it is allowed to change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence:&lt;/strong&gt; Specify where to return logs, screenshots, and a short account of what happened.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Access should be arranged for the destination rather than assumed to exist. A handoff can record where approved credentials are managed without copying secret values into its notes.&lt;/p&gt;

&lt;p&gt;Here is an example of the first task I would give the destination. This is a suggested brief, not a transcript from an actual run:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Open the project and report missing prerequisites before changing anything. Once the environment is ready, build the application, launch it, and open its settings panel. Check that the new control appears and responds to a click. Return the code revision, build result, a screenshot, and any errors. If you cannot complete the interactive check, say where you stopped.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A report that says the build passed should not leave me assuming the agent also opened and tested the interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep parallel work separate
&lt;/h2&gt;

&lt;p&gt;Moving a task to another computer addresses the input conflict. Other parts of the work can still collide.&lt;/p&gt;

&lt;p&gt;Two agents might edit the same files, use the same test account, or write their results to the same location.&lt;/p&gt;

&lt;p&gt;I would give parallel tasks a clear code state and separate output locations. Where appropriate, separate working copies or worktrees can help keep changes attributable to the task that made them.&lt;/p&gt;

&lt;p&gt;Git’s worktree documentation explains how separate working trees work within a repository:&lt;br&gt;
&lt;a href="https://git-scm.com/docs/git-worktree" rel="noopener noreferrer"&gt;https://git-scm.com/docs/git-worktree&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A linked worktree on one machine is not itself a transfer mechanism to a different computer.&lt;/p&gt;

&lt;p&gt;I would also ask the test report to identify the machine and revision it tested. A screenshot becomes more useful when I can connect it to the build I asked the agent to check.&lt;/p&gt;

&lt;h2&gt;
  
  
  Match the machine to the test
&lt;/h2&gt;

&lt;p&gt;An available laptop is a starting point. Whether it can do the work still needs to be checked.&lt;/p&gt;

&lt;p&gt;Opening a settings panel is a different job from testing a demanding Unity scene or investigating recording behavior on particular hardware.&lt;/p&gt;

&lt;p&gt;For Unity projects, the Hub documentation covers managing Editor installations, modules, projects, and licenses:&lt;br&gt;
&lt;a href="https://docs.unity.com/en-us/hub" rel="noopener noreferrer"&gt;https://docs.unity.com/en-us/hub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I would establish the required environment before assuming the project is ready for unattended work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with one task on one spare machine
&lt;/h2&gt;

&lt;p&gt;I have not attached a timing study to this article, and I cannot give a measured percentage improvement.&lt;/p&gt;

&lt;p&gt;The change I noticed was that I could continue working while an agent interacted with an application on another computer.&lt;/p&gt;

&lt;p&gt;I could review another session, respond to a problem, or do my own work without worrying about interrupting the test with a click.&lt;/p&gt;

&lt;p&gt;For a first attempt, I would pick a familiar project, identify its code state, prepare the destination, and ask for one small interactive check. Once the result can be traced back to the right machine and revision, there is a basis for adding more tasks.&lt;/p&gt;

&lt;p&gt;I wrote about the broader experience in &lt;a href="https://medium.com/@ohadi.anoush/my-claude-code-and-codex-workflow-the-problems-i-had-to-solve-myself-8cab221d8a51" rel="noopener noreferrer"&gt;My Claude Code and Codex Workflow: The Problems I Had to Solve Myself&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When I began using AI to build more software, I expected the difficult questions to be about code. I spent considerably more time than I expected figuring out who got to use the mouse.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Author’s note: I am the founder of AigoPilot. The cover is an AI-generated illustration. The example task brief is a proposed workflow, not a transcript or benchmark.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Using CLAUDE.md and AGENTS.md in the Same Project</title>
      <dc:creator>Anoosh Ohadi</dc:creator>
      <pubDate>Sun, 01 Nov 2026 08:04:41 +0000</pubDate>
      <link>https://dev.to/anoushohadi/using-claudemd-and-agentsmd-in-the-same-project-463b</link>
      <guid>https://dev.to/anoushohadi/using-claudemd-and-agentsmd-in-the-same-project-463b</guid>
      <description>&lt;p&gt;&lt;em&gt;Shared project rules for Claude Code and Codex, a small import when needed, and a separate record of unfinished work.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cover: AI-generated illustration.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When I moved work from Codex to Claude Code, I sometimes spent the beginning of a session explaining things the project already knew. The previous conversation had the background. The new one had the code, but finding the same working assumptions took effort.&lt;/p&gt;

&lt;p&gt;That experience helped shape the instruction-sharing workflow in &lt;a href="https://aigopilot.com" rel="noopener noreferrer"&gt;AigoPilot&lt;/a&gt;, which I build and use. I am its founder. The underlying arrangement is also useful without the studio: keep durable project guidance in a shared file, make sure each tool loads it, and record unfinished work separately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check what your version already supports
&lt;/h2&gt;

&lt;p&gt;Codex reads &lt;code&gt;AGENTS.md&lt;/code&gt; for project instructions. Current &lt;a href="https://code.claude.com/docs/en/memory#agentsmd" rel="noopener noreferrer"&gt;Claude Code documentation&lt;/a&gt; describes direct support from v2.1.277, with version and configuration exceptions. Under its default selection, a project or local &lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;.claude/CLAUDE.md&lt;/code&gt;, or &lt;code&gt;CLAUDE.local.md&lt;/code&gt; in or above the working directory takes precedence over direct &lt;code&gt;AGENTS.md&lt;/code&gt; loading.&lt;/p&gt;

&lt;p&gt;That leaves two arrangements I would consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shared file only:&lt;/strong&gt; use &lt;code&gt;AGENTS.md&lt;/code&gt; when both installed tools actually load it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shared file with a wrapper:&lt;/strong&gt; keep &lt;code&gt;AGENTS.md&lt;/code&gt; and a small &lt;code&gt;CLAUDE.md&lt;/code&gt; importing it when that fits the environment or Claude-specific additions are needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before adding a bridge, inspect the existing files and the instructions loaded by your session. Preserve useful rules already in the repository. There is no reason to replace a working setup just to match a diagram in an article.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give the shared file a limited job
&lt;/h2&gt;

&lt;p&gt;The first temptation is to put everything the project has ever discussed in &lt;code&gt;AGENTS.md&lt;/code&gt;. That produces a document nobody can maintain confidently.&lt;/p&gt;

&lt;p&gt;I would start with what a new contributor needs to avoid a predictable mistake: the project's purpose, where its important parts live, the relevant validation commands, and constraints that remain true across tasks.&lt;/p&gt;

&lt;p&gt;Here is an illustrative starter. Replace the descriptions and commands with your repository's real ones before using it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Project instructions&lt;/span&gt;

&lt;span class="gu"&gt;## Purpose&lt;/span&gt;
This repository contains a desktop application and its supporting services.

&lt;span class="gu"&gt;## Working boundaries&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Preserve unrelated changes already present in the workspace.
&lt;span class="p"&gt;-&lt;/span&gt; Read the existing implementation before proposing a replacement.
&lt;span class="p"&gt;-&lt;/span&gt; Keep platform-specific behavior inside the existing platform layer.
&lt;span class="p"&gt;-&lt;/span&gt; Explain a missing dependency or failed check instead of reporting success.

&lt;span class="gu"&gt;## Before making changes&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Identify the UI, platform integration, and test directories.
&lt;span class="p"&gt;-&lt;/span&gt; Read the build and test configuration before choosing commands.
&lt;span class="p"&gt;-&lt;/span&gt; State which files the task is likely to affect.

&lt;span class="gu"&gt;## Validation&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Run checks appropriate to the change.
&lt;span class="p"&gt;-&lt;/span&gt; Report the commands run and their actual results.
&lt;span class="p"&gt;-&lt;/span&gt; If a check cannot run, explain what is missing.

&lt;span class="gu"&gt;## Project-specific facts&lt;/span&gt;
Replace this section with the repository's verified paths,
build commands, and architectural constraints.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a proposed structure, not a description of my private repository. Its useful feature is that each instruction has a reason to be available across sessions. Temporary debugging notes belong elsewhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add a thin Claude-specific wrapper when needed
&lt;/h2&gt;

&lt;p&gt;For a setup that needs the import arrangement, the &lt;code&gt;CLAUDE.md&lt;/code&gt; beside &lt;code&gt;AGENTS.md&lt;/code&gt; can contain just this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;@AGENTS.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is Claude's documented import syntax. A prose reminder to open another file relies on the model deciding to do it. Put any necessary Claude-specific additions below the import.&lt;/p&gt;

&lt;p&gt;Keep the dependency one way. Do not make &lt;code&gt;AGENTS.md&lt;/code&gt; point back to &lt;code&gt;CLAUDE.md&lt;/code&gt;. That makes the arrangement harder to reason about and can create an import loop.&lt;/p&gt;

&lt;p&gt;I would choose this small text file over introducing a filesystem link into a Windows team's setup. If direct loading already gives you what you need, there may be no wrapper to add.&lt;/p&gt;

&lt;p&gt;The import keeps one maintained source of rules. It does not make those rules free of context cost, or carry over a previous conversation's history.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep task state out of the permanent rules
&lt;/h2&gt;

&lt;p&gt;A persistent instruction file answers questions such as which platform layer owns a feature. A handoff answers which change is unfinished today.&lt;/p&gt;

&lt;p&gt;Mixing those two jobs makes old instructions look current. A note saying a test is failing can remain in a shared file long after the test has been repaired.&lt;/p&gt;

&lt;p&gt;I prefer this separation as a starting design:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Durable repository expectations:&lt;/strong&gt; &lt;code&gt;AGENTS.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Necessary tool-specific additions:&lt;/strong&gt; &lt;code&gt;CLAUDE.md&lt;/code&gt; or supported tool configuration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Current task, changed files, next action:&lt;/strong&gt; a dated handoff note.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long background explanation:&lt;/strong&gt; a relevant document referenced from the instructions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use your own filenames for the handoff and background documents. The separation matters more than inventing another file convention.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify by asking a question, not by editing production code
&lt;/h2&gt;

&lt;p&gt;Open a fresh session at the intended project location. I would begin with this read-only check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Before making any changes, identify the instruction files that
apply to this working directory. Distinguish instructions loaded
at startup from files you opened during this check.

Summarize two project constraints and the validation commands
the repository actually defines. If no command is documented,
say so. Name any conflicting instructions you found.

Do not edit files or run build or test commands for this check.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a verification prompt, not a guarantee that a model's account of its own context is complete. Compare its answer with the files and the tool's inspection features.&lt;/p&gt;

&lt;p&gt;In Claude Code, use &lt;code&gt;/context&lt;/code&gt; to inspect memory files. Codex's &lt;a href="https://learn.chatgpt.com/docs/agent-configuration/agents-md" rel="noopener noreferrer"&gt;instruction-discovery guide&lt;/a&gt; describes how its working directory and overriding files affect the result. For example, Codex recognizes &lt;code&gt;AGENTS.override.md&lt;/code&gt;; Claude's direct &lt;code&gt;AGENTS.md&lt;/code&gt; loader does not. Matching filenames do not mean identical discovery rules.&lt;/p&gt;

&lt;p&gt;I would also check one nested part of the project where the rules differ. For example, UI work and a native integration layer may need different validation. Do not assume the two tools resolve every override convention identically.&lt;/p&gt;

&lt;p&gt;For the first real task after switching tools, choose a small change that you can review easily. Check whether the session uses the right paths, preserves unrelated edits, and reports its actual validation. A convincing summary followed by work in the wrong directory is still a failed handoff.&lt;/p&gt;

&lt;p&gt;The aim is a new session that can explain the project's working constraints before touching code. Its conversation history may be empty; the repository guidance should still be available.&lt;/p&gt;

&lt;p&gt;I described the wider experience of managing projects, sessions and desktop tests in &lt;a href="https://medium.com/@ohadi.anoush/my-claude-code-and-codex-workflow-the-problems-i-had-to-solve-myself-8cab221d8a51" rel="noopener noreferrer"&gt;my Claude Code and Codex workflow&lt;/a&gt;. This shared-file arrangement addresses one small part of that experience: the project briefing I want available when another session begins.&lt;/p&gt;

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

&lt;p&gt;Documentation checked November 1, 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.chatgpt.com/docs/agent-configuration/agents-md" rel="noopener noreferrer"&gt;OpenAI: custom instructions with AGENTS.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.claude.com/docs/en/memory" rel="noopener noreferrer"&gt;Anthropic: how Claude remembers your project&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>programming</category>
      <category>softwaredevelopment</category>
    </item>
  </channel>
</rss>
