<?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: Abhishek Gahlot</title>
    <description>The latest articles on DEV Community by Abhishek Gahlot (@abhishek_gahlot).</description>
    <link>https://dev.to/abhishek_gahlot</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%2F4097137%2F7c375d27-65ae-483b-ae52-4bb6b2ad4ff5.jpg</url>
      <title>DEV Community: Abhishek Gahlot</title>
      <link>https://dev.to/abhishek_gahlot</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abhishek_gahlot"/>
    <language>en</language>
    <item>
      <title>I open-sourced UseAgent: turn Claude Code, Codex or OpenCode into a coworker with its own computer</title>
      <dc:creator>Abhishek Gahlot</dc:creator>
      <pubDate>Tue, 01 Sep 2026 15:05:33 +0000</pubDate>
      <link>https://dev.to/abhishek_gahlot/i-open-sourced-useagent-turn-claude-code-codex-or-opencode-into-a-coworker-with-its-own-computer-2iib</link>
      <guid>https://dev.to/abhishek_gahlot/i-open-sourced-useagent-turn-claude-code-codex-or-opencode-into-a-coworker-with-its-own-computer-2iib</guid>
      <description>&lt;p&gt;I open-sourced UseAgent this week. Built it over the last few months to run my own daily work.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/useagenthq/useagent" rel="noopener noreferrer"&gt;https://github.com/useagenthq/useagent&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Short version: it takes Claude Code, Codex, or OpenCode and gives each one a real cloud computer. What comes back is finished work. PRs, spreadsheets, decks, PDFs, screen recordings of it clicking through a browser. Not a chat transcript.&lt;/p&gt;

&lt;p&gt;There's a live demo with no signup: &lt;strong&gt;&lt;a href="https://demo.useagent.org" rel="noopener noreferrer"&gt;https://demo.useagent.org&lt;/a&gt;&lt;/strong&gt;. The demo itself is the most interesting engineering artifact here, but I'll get to that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbc68bfksw1lzz2yrw47t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbc68bfksw1lzz2yrw47t.png" alt="UseAgent home" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🖥 Hand it work, watch it work
&lt;/h2&gt;

&lt;p&gt;You send a task from the web app or Slack. It gets a sandbox: terminal, files, a visible desktop. You can watch it open a browser and click around. Or ignore it and scrub the recording later.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqri9hv3qy9wajybslhea.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqri9hv3qy9wajybslhea.png" alt="The agent building and testing an app in its own desktop" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It plans, then checks things off as it goes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fywn75izqax4c9sdjv91k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fywn75izqax4c9sdjv91k.png" alt="Live plan with tasks checking off" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔁 The engine is a dropdown
&lt;/h2&gt;

&lt;p&gt;Every agent speaks its own dialect. Codex has its app-server RPC. Claude Code has its own agent protocol. OpenCode is an HTTP/SSE server. Pi has its own RPC. Wire your product straight to one of them and you've married it: your threads, your storage, your UI quietly take that agent's shape.&lt;/p&gt;

&lt;p&gt;So the rule in UseAgent is that nothing downstream knows which engine is running. Each engine gets an adapter that speaks its native protocol and translates it into one canonical event stream. There is an ACP adapter too, for agents that already speak it, but the native drivers are the real path. The UI, memory, artifacts, Slack - they only ever see canonical events. Switching Claude Code to Codex is a dropdown. Your threads and files don't move.&lt;/p&gt;

&lt;p&gt;The interface is small. The translation fidelity is the hard part: every harness has different ideas about tool-call boundaries, streaming, what "done" means. The adapters own that mess in one place.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fezfpqhbewdgjo1nztvkn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fezfpqhbewdgjo1nztvkn.png" alt="Pick your engine mid-thread" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧾 The important part: runs are event logs
&lt;/h2&gt;

&lt;p&gt;Most agent tools treat a run as a live process. Close the tab, lose the plot. Backend restarts mid-run, gone.&lt;/p&gt;

&lt;p&gt;In UseAgent a run is an append-only log of canonical events in Postgres. The UI never renders a live process. It renders the log. Every tool call, every file change, every status flip is a row, in order, forever.&lt;/p&gt;

&lt;p&gt;That one decision pays for everything else. Runs survive backend restarts. You can reconnect from another device and the thread rebuilds from a cursor. You can audit what an agent did last Tuesday, tool call by tool call.&lt;/p&gt;

&lt;p&gt;And here's the receipt: &lt;strong&gt;the demo at &lt;a href="https://demo.useagent.org" rel="noopener noreferrer"&gt;demo.useagent.org&lt;/a&gt; is a static site&lt;/strong&gt;. No backend. No database behind it. Every session you click through is a real event log replaying in your browser: timelines, artifacts, the multi-agent runs, all of it. If runs weren't event-sourced that demo could not exist. I didn't build the demo as a marketing asset, I exported the logs and they just worked. That was the moment I knew the architecture was right.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs4qre9g8gi6n3bityrvb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs4qre9g8gi6n3bityrvb.png" alt="A full session rendered from its event log" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  📄 Real files back
&lt;/h2&gt;

&lt;p&gt;Deliverables land as actual files you open and edit in the browser. Spreadsheets with formulas, PDFs, decks, code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8n8hfi4ue3emmyodygpq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8n8hfi4ue3emmyodygpq.png" alt="A spreadsheet the agent produced, editable in the workspace" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1qzk6er5ertknq2cxsro.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1qzk6er5ertknq2cxsro.png" alt="A PDF report delivered as a real file" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔐 Keys never enter the sandbox
&lt;/h2&gt;

&lt;p&gt;The agent's computer is disposable. Slack and GitHub credentials stay on the control plane behind a typed tool gateway. The agent calls the tool, the gateway holds the token.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuf0dxdd8ywwyvaf60c28.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuf0dxdd8ywwyvaf60c28.png" alt="How UseAgent runs your work" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/useagenthq/useagent &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;useagent
&lt;span class="c"&gt;# needs bun + Postgres with pgvector (README has a one-line docker for it)&lt;/span&gt;
bun run dev:backend    &lt;span class="c"&gt;# :3201&lt;/span&gt;
bun run dev:frontend   &lt;span class="c"&gt;# :3400&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cold clone to running app was under a minute on my machine.&lt;/p&gt;

&lt;p&gt;It's alpha. It runs my daily workloads. Real runs, real sandboxes, Slack in and out. APIs still move between releases though, so pin a tag if you need stability. Approval gates exist in the UI and aren't wired to the backend yet. That's next.&lt;/p&gt;

&lt;p&gt;If something breaks in your first ten minutes, tell me. That's exactly the feedback I want.&lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/useagenthq/useagent" rel="noopener noreferrer"&gt;https://github.com/useagenthq/useagent&lt;/a&gt;&lt;br&gt;
🌐 &lt;strong&gt;Site:&lt;/strong&gt; &lt;a href="https://useagent.org" rel="noopener noreferrer"&gt;https://useagent.org&lt;/a&gt;&lt;br&gt;
🧪 &lt;strong&gt;Demo:&lt;/strong&gt; &lt;a href="https://demo.useagent.org" rel="noopener noreferrer"&gt;https://demo.useagent.org&lt;/a&gt;&lt;br&gt;
🐦 &lt;strong&gt;X:&lt;/strong&gt; &lt;a href="https://x.com/useagenthq" rel="noopener noreferrer"&gt;@useagenthq&lt;/a&gt;&lt;br&gt;
😺 &lt;strong&gt;Product Hunt:&lt;/strong&gt; &lt;a href="https://www.producthunt.com/products/useagent" rel="noopener noreferrer"&gt;https://www.producthunt.com/products/useagent&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>showdev</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
