13 Research Agents Told Me My Feature Was Already Free
On the evening of 27 September, 13 research agents and a second pass that tried to refute them agreed on one thing. The feature I was about to build, a window where you tell Claude Code or Codex what to do instead of using a terminal, is already included in the apps people pay for.
Refmade is a desktop app I'm building that reads your Claude Code and Codex session logs and draws them as a pixel office. It is an independent project, not affiliated with Anthropic or OpenAI. Claude Code and Codex agents wrote most of the code at my direction; I planned, decided and reviewed. This is part 8 of the series. The UI is Korean right now; that changes later in this series.
What I asked for
On 25 September I had cut the mini-homepages, guestbook, gifts and gacha draws and gone back to my original plan. On the evening of 27 September I wrote down what I wanted next: a desktop app with no work content sent to a server, the dashboard as the main thing and orchestration as an option. People who find the terminal hard should be able to type a request into the app and watch the work happen. Then I asked for market size, viability and targets.
The agents produced a memo with about 60 sources. Numbers in it carried one of six labels: measured, announced, reported, estimated, assumed or proposed. I recommend the labels more than any other part of the process. They made it obvious that the last steps of my market-size funnel were assumptions nobody had measured, so the high and low ends of the estimate differed by a factor of tens.
What was already free
I rechecked the claims that matter most against the vendors' own pages while writing this post.
| Tool | What it covers | What it leaves out |
|---|---|---|
| Claude Desktop, Code tab | Sessions with their own history and folder, several in parallel in a sidebar | Claude only |
| claude agents | Background sessions grouped by state (Needs input, Working, Completed and a few others); you can send new tasks | Terminal sessions appear only after you move them to the background; subagents are not listed as separate rows |
| ChatGPT desktop app | Codex merged into the app on 9 July 2026, available on every plan with some feature limits | Codex only |
| Pixel Agents | Pixel-art office for agents, MIT license, VS Code extension or npx | Claude Code is the only implemented integration; Codex is listed as roadmap |
| Munder Difflin | Electron app, MIT, runs a dozen CLIs including both of ours | The page does not say whether sessions started outside the app show up |
Pixel Agents had 9,419 GitHub stars when the agents counted on 27 September (GitHub API) and about 9.6k when I looked again for this post.
The business side was worse than the feature side. Vibe Kanban announced its shutdown on 10 April 2026: "the vast majority are free users and we couldn't find a business model that we could get excited about." Tools in this area that individuals run locally were almost all free. The paid plans I found were mostly attached to cloud, team or remote features.
The slot that was left
The memo's finding was that every first-party tool shows its own company's sessions. Reduced to a grid:
shows Claude sessions shows Codex sessions
Anthropic apps yes no
OpenAI apps no yes
Pixel Agents yes not yet
Refmade (goal) yes yes
The empty cell is one screen for both vendors, reading the logs both CLIs already write, wherever you started the session. The memo added a limit I should repeat: it found no tool in its search range that does this, and that is different from proof that none exists. Two free open-source session monitors already cover parts of the same ground, so the slot is narrower than the grid suggests.
The memo narrowed the gap to a combination of four things it could not find together in anything widely used. The tool works from logs alone, with no hooks installed, so it sees a session wherever it was started. It shows subagents and workflow steps as teammates. It is a native app on Mac and Windows. And it is in Korean. The memo also warned that the first point matters less than it sounds: from logs alone you can guess that an approval is pending, but you cannot answer it.
The pain was also thin evidence. The people complaining about losing track of tabs were individual developers, in posts with a handful of comments, and each of them had already solved it with a free tool. Nobody had measured how common the problem is. On the Hacker News thread for Munder Difflin, comments ranged from praise for being cute and useful to calling it cringe. I read all of that as a reason to keep the first version small.
What I did with it
The memo recommended a first version that is only a free read-only dashboard, with the "do the work for you" part decided later, after a price test and a look at the terms. I did not follow all of that. I decided the first version is the dashboard plus a local way to send work, aimed at people who are uncomfortable in a terminal. That was why I wanted the app in the first place. The memo itself rated that part as mostly overlapping with the official apps, so I went in knowing it would not set Refmade apart. The app is free.
!A first-run screen in a pink and white pixel style. The title says to get an AI ready first. Two cards sit side by side: Claude Code with a green 'Ready' badge, and Codex with a yellow 'Login needed' badge and a login button.
The first screen of a late-September build, cropped; no user data is on it. Visible Korean text: "Let's get an AI ready first." / "Refmade is a window for handing work to the AI helper on this computer. Prepare just one of the two below." Claude Code: "Ready", "Works with a Claude account (Pro or higher plan) or pay-as-you-go. Ready to use. Logged in with a Claude account." Codex: "Login needed", "Works with a ChatGPT Plus or higher plan or pay-as-you-go. The amount you can use differs by plan. A login screen opens in your web browser. Log in, press Allow, and come back to this window; it confirms automatically." Button: "Log in". "You can do this later."
The same evening I decided friend sharing was not needed, which is the reversal in post 6. Whether "send work" was technically possible through each vendor's supported interfaces was the next thing I checked, and post 9 covers that.
The memo listed risks. Two of them shaped the app.
- Log formats. Both CLIs write internal formats, and either can change between versions. The office depends on reading them.
- Measurement. The app has no telemetry and reports no usage. It only asks my server for the newest version number and, in the Mac build, for the settings of the ad boards that show my other services in the office view. So I have no usage numbers. Downloads and whatever people tell me are what I will have.
What I would repeat
Label every number with its source type. Write down which recommendation you are overriding and why, so the override is on paper when the result comes in. Open the primary sources again before you publish a table.
The app link comes in the last post of the series.
If you run Claude Code and Codex side by side, how do you keep track of which session is waiting on you?
Your AI agents are building on code that changed. Neo catches it before the edit published: false
AI coding agents are fast. They are also confidently wrong about code they read five minutes ago.
An agent reads a function, makes a plan, and edits. If another developer or agent changed a function it depends on in the meantime, the agent has no way to know. It writes new code on top of the broken version. The mistake doesn’t surface until the tests run, or until two branches try to merge, and by then you’re paying twice: once for the bad generation and once for the cleanup.
I built Neo to move that check to the exact moment of the edit.
Repo: jaykrishna316/Neo
!Image description
What Neo does
Neo is a set of hooks for Claude Code. Before and after each read, edit, shell command and prompt, it:
Records intent. Your prompt is saved as the reason for the edit, so the shared record says who is doing what and why.
Takes a lock on the file being edited, so a second developer or agent can’t edit it at the same time.
Blocks stale edits. If the file changed after you last read it, the edit is stopped until you re-read it.
Blocks edits to broken code. If a function’s signature changed and a caller no longer matches it, the edit to that function is stopped and the broken caller is named. Fix the caller, and the block clears.
Logs everything to a shared activity log, so you can see what happened afterwards.
The demo
The demo is a small Python project: a price() function and a total() function that calls it. A previous developer changed price() to require a tax_rate and left the caller broken. Then a single developer, Jim, starts work:
Intent is recorded. Neo logs intent set for jim before anything else happens.
The edit is blocked. Neo sees that checkout.py line 5 calls price() without tax_rate, and it stops the edit before the file changes.
The fix clears the block. Jim updates total() to pass tax_rate through. Neo confirms downstream breakage resolved.
A teammate changes the file. Someone adds discount() to the same file after Jim has read it.
A stale edit is blocked. Jim tries to edit without re-reading. Neo stops it: changed after you last read it.
The edit goes through after a re-read. Neo takes the lock, logs the edit, and releases the lock at the end of the turn.
You can see every step in the Claude session as a Neo: line. The activity log records each lock and edit, and the session transcript records each freshness check. So you can verify the stale block after the fact, not just trust the output.
Add Neo to any repo
You need git, Python 3, and Claude Code. The steps below use the command line, and they work in any git repo.
1. Get Neo
git clone --depth 1 https://github.com/jaykrishna316/Neo ~/neo-src
2. Install the hooks into your repo
bash ~/neo-src/scripts/install_neo.sh ~/path/to/your-repo
This copies the hook into .neo/ in your repo, adds its entries to .claude/settings.json (keeping any hooks you already have), and ignores Neo’s state folders in .gitignore. Run it again any time to update.
3. Review and commit
cd ~/path/to/your-repo
git status
git add .neo .claude/settings.json .gitignore
git commit -m "Install Neo hooks"
Your teammates get the hooks when they pull.
4. Set a name, then start Claude Code
Neo does nothing until each session has a developer name:
cd ~/path/to/your-repo && NEO_DEVELOPER=alice claude
5. Check it’s running
Inside Claude Code, type /hooks and look for Neo’s entries. Then send a prompt such as What is 2 + 2?. You should see Neo: intent set for alice.
To see Neo’s state, run ls .neo_state/ in your repo. You should see an intent_alice.txt file.
6. Try the demo (optional)
.neo/scripts/neo_repo_demo.sh setup
This adds a small neo_demo/ folder with the breaking change left open, so you can run the six steps above yourself. When you’re done:
.neo/scripts/neo_repo_demo.sh cleanup
**What’s proven, and what isn’t
**
Everything above is shown in a single-developer run. The checks are also covered by automated tests, which run on every change.
What I haven’t shown yet: how Neo behaves with several agents editing the same code at the same time, and how much it saves in tokens. Those tests are running now, and I’ll post the numbers when they’re done. Neo coordinates developers who share one machine. Coordination across machines isn’t built yet.
Built on Munder Difflin
The multi-agent setup in this work runs on Munder Difflin, an open-source desktop app that runs an office of coding agents on your own machine. Thanks to its authors for making it free and open to build on. The Neo integration into the app is still in progress, so it isn’t part of their release yet.
If you’re building with several agents, ask yourself one question: how do they know the code they’re working on has changed? That’s the question Neo is built to answer.
!Image description
!Image description
!Image description
P.S: I <3 HarnessMD/munder-difflin
Mentions
Día 2 de orquestación multi-agente con Munder Difflin HarnessMD/munder-difflin Open 5.5 y Glm 5.3 flash t.co
13 Research Agents Told Me My Feature Was Already Free On the evening of 27 September, 13 research agents and a second pass that tried to refute them agreed on one thing. The feature I was about to build, a window where you tell Claude Code or Codex what to do instead of using a terminal, is already included in the apps people pay for. Refmade is a desktop app I'm building that reads your Claude Code and Codex session logs and draws them as a pixel office. It is an independent project, not affiliated with Anthropic or OpenAI. Claude Code and Codex agents wrote most of the code at my direction; I planned, decided and reviewed. This is part 8 of the series. The UI is Korean right now; that changes later in this series. What I asked for On 25 September I had cut the mini-homepages, guestbook, gifts and gacha draws and gone back to my original plan. On the evening of 27 September I wrote down what I wanted next: a desktop app with no work content sent to a server, the dashboard as the main thing and orchestration as an option. People who find the terminal hard should be able to type a request into the app and watch the work happen. Then I asked for market size, viability and targets. The agents produced a memo with about 60 sources. Numbers in it carried one of six labels: measured, announced, reported, estimated, assumed or proposed. I recommend the labels more than any other part of the process. They made it obvious that the last steps of my market-size funnel were assumptions nobody had measured, so the high and low ends of the estimate differed by a factor of tens. What was already free I rechecked the claims that matter most against the vendors' own pages while writing this post. | Tool | What it covers | What it leaves out | |---|---|---| | Claude Desktop, Code tab | Sessions with their own history and folder, several in parallel in a sidebar | Claude only | | claude agents | Background sessions grouped by state (Needs input, Working, Completed and a few others); you can send new tasks | Terminal sessions appear only after you move them to the background; subagents are not listed as separate rows | | ChatGPT desktop app | Codex merged into the app on 9 July 2026, available on every plan with some feature limits | Codex only | | Pixel Agents | Pixel-art office for agents, MIT license, VS Code extension or npx | Claude Code is the only implemented integration; Codex is listed as roadmap | | Munder Difflin | Electron app, MIT, runs a dozen CLIs including both of ours | The page does not say whether sessions started outside the app show up | Pixel Agents had 9,419 GitHub stars when the agents counted on 27 September (GitHub API) and about 9.6k when I looked again for this post. The business side was worse than the feature side. Vibe Kanban announced its shutdown on 10 April 2026: "the vast majority are free users and we couldn't find a business model that we could get excited about." Tools in this area that individuals run locally were almost all free. The paid plans I found were mostly attached to cloud, team or remote features. The slot that was left The memo's finding was that every first-party tool shows its own company's sessions. Reduced to a grid: shows Claude sessions shows Codex sessions Anthropic apps yes no OpenAI apps no yes Pixel Agents yes not yet Refmade (goal) yes yes The empty cell is one screen for both vendors, reading the logs both CLIs already write, wherever you started the session. The memo added a limit I should repeat: it found no tool in its search range that does this, and that is different from proof that none exists. Two free open-source session monitors already cover parts of the same ground, so the slot is narrower than the grid suggests. The memo narrowed the gap to a combination of four things it could not find together in anything widely used. The tool works from logs alone, with no hooks installed, so it sees a session wherever it was started. It shows subagents and workflow steps as teammates. It is a native app on Mac and Windows. And it is in Korean. The memo also warned that the first point matters less than it sounds: from logs alone you can guess that an approval is pending, but you cannot answer it. The pain was also thin evidence. The people complaining about losing track of tabs were individual developers, in posts with a handful of comments, and each of them had already solved it with a free tool. Nobody had measured how common the problem is. On the Hacker News thread for Munder Difflin, comments ranged from praise for being cute and useful to calling it cringe. I read all of that as a reason to keep the first version small. What I did with it The memo recommended a first version that is only a free read-only dashboard, with the "do the work for you" part decided later, after a price test and a look at the terms. I did not follow all of that. I decided the first version is the dashboard plus a local way to send work, aimed at people who are uncomfortable in a terminal. That was why I wanted the app in the first place. The memo itself rated that part as mostly overlapping with the official apps, so I went in knowing it would not set Refmade apart. The app is free. !A first-run screen in a pink and white pixel style. The title says to get an AI ready first. Two cards sit side by side: Claude Code with a green 'Ready' badge, and Codex with a yellow 'Login needed' badge and a login button. The first screen of a late-September build, cropped; no user data is on it. Visible Korean text: "Let's get an AI ready first." / "Refmade is a window for handing work to the AI helper on this computer. Prepare just one of the two below." Claude Code: "Ready", "Works with a Claude account (Pro or higher plan) or pay-as-you-go. Ready to use. Logged in with a Claude account." Codex: "Login needed", "Works with a ChatGPT Plus or higher plan or pay-as-you-go. The amount you can use differs by plan. A login screen opens in your web browser. Log in, press Allow, and come back to this window; it confirms automatically." Button: "Log in". "You can do this later." The same evening I decided friend sharing was not needed, which is the reversal in post 6. Whether "send work" was technically possible through each vendor's supported interfaces was the next thing I checked, and post 9 covers that. The memo listed risks. Two of them shaped the app. - Log formats. Both CLIs write internal formats, and either can change between versions. The office depends on reading them. - Measurement. The app has no telemetry and reports no usage. It only asks my server for the newest version number and, in the Mac build, for the settings of the ad boards that show my other services in the office view. So I have no usage numbers. Downloads and whatever people tell me are what I will have. What I would repeat Label every number with its source type. Write down which recommendation you are overriding and why, so the override is on paper when the result comes in. Open the primary sources again before you publish a table. The app link comes in the last post of the series. If you run Claude Code and Codex side by side, how do you keep track of which session is waiting on you?
Your AI agents are building on code that changed. Neo catches it before the edit published: false AI coding agents are fast. They are also confidently wrong about code they read five minutes ago. An agent reads a function, makes a plan, and edits. If another developer or agent changed a function it depends on in the meantime, the agent has no way to know. It writes new code on top of the broken version. The mistake doesn’t surface until the tests run, or until two branches try to merge, and by then you’re paying twice: once for the bad generation and once for the cleanup. I built Neo to move that check to the exact moment of the edit. Repo: jaykrishna316/Neo !Image description What Neo does Neo is a set of hooks for Claude Code. Before and after each read, edit, shell command and prompt, it: Records intent. Your prompt is saved as the reason for the edit, so the shared record says who is doing what and why. Takes a lock on the file being edited, so a second developer or agent can’t edit it at the same time. Blocks stale edits. If the file changed after you last read it, the edit is stopped until you re-read it. Blocks edits to broken code. If a function’s signature changed and a caller no longer matches it, the edit to that function is stopped and the broken caller is named. Fix the caller, and the block clears. Logs everything to a shared activity log, so you can see what happened afterwards. The demo The demo is a small Python project: a price() function and a total() function that calls it. A previous developer changed price() to require a tax_rate and left the caller broken. Then a single developer, Jim, starts work: Intent is recorded. Neo logs intent set for jim before anything else happens. The edit is blocked. Neo sees that checkout.py line 5 calls price() without tax_rate, and it stops the edit before the file changes. The fix clears the block. Jim updates total() to pass tax_rate through. Neo confirms downstream breakage resolved. A teammate changes the file. Someone adds discount() to the same file after Jim has read it. A stale edit is blocked. Jim tries to edit without re-reading. Neo stops it: changed after you last read it. The edit goes through after a re-read. Neo takes the lock, logs the edit, and releases the lock at the end of the turn. You can see every step in the Claude session as a Neo: line. The activity log records each lock and edit, and the session transcript records each freshness check. So you can verify the stale block after the fact, not just trust the output. Add Neo to any repo You need git, Python 3, and Claude Code. The steps below use the command line, and they work in any git repo. 1. Get Neo git clone --depth 1 https://github.com/jaykrishna316/Neo ~/neo-src 2. Install the hooks into your repo bash ~/neo-src/scripts/install_neo.sh ~/path/to/your-repo This copies the hook into .neo/ in your repo, adds its entries to .claude/settings.json (keeping any hooks you already have), and ignores Neo’s state folders in .gitignore. Run it again any time to update. 3. Review and commit cd ~/path/to/your-repo git status git add .neo .claude/settings.json .gitignore git commit -m "Install Neo hooks" Your teammates get the hooks when they pull. 4. Set a name, then start Claude Code Neo does nothing until each session has a developer name: cd ~/path/to/your-repo && NEO_DEVELOPER=alice claude 5. Check it’s running Inside Claude Code, type /hooks and look for Neo’s entries. Then send a prompt such as What is 2 + 2?. You should see Neo: intent set for alice. To see Neo’s state, run ls .neo_state/ in your repo. You should see an intent_alice.txt file. 6. Try the demo (optional) .neo/scripts/neo_repo_demo.sh setup This adds a small neo_demo/ folder with the breaking change left open, so you can run the six steps above yourself. When you’re done: .neo/scripts/neo_repo_demo.sh cleanup **What’s proven, and what isn’t ** Everything above is shown in a single-developer run. The checks are also covered by automated tests, which run on every change. What I haven’t shown yet: how Neo behaves with several agents editing the same code at the same time, and how much it saves in tokens. Those tests are running now, and I’ll post the numbers when they’re done. Neo coordinates developers who share one machine. Coordination across machines isn’t built yet. Built on Munder Difflin The multi-agent setup in this work runs on Munder Difflin, an open-source desktop app that runs an office of coding agents on your own machine. Thanks to its authors for making it free and open to build on. The Neo integration into the app is still in progress, so it isn’t part of their release yet. If you’re building with several agents, ask yourself one question: how do they know the code they’re working on has changed? That’s the question Neo is built to answer. !Image description !Image description !Image description P.S: I <3 HarnessMD/munder-difflin
8519 颗星。有人把「AI 办公室」开源了:写手、审核、调研各是一个 agent,各跑各的活还能交接。 一个人撑团队,卡点不是不会用 AI,是不知道怎么分工。 HarnessMD/munder-difflin