<?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: Josep</title>
    <description>The latest articles on DEV Community by Josep (@servatj).</description>
    <link>https://dev.to/servatj</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%2F29644%2F3ef6a149-d040-4eac-844d-73c683d0baa7.jpeg</url>
      <title>DEV Community: Josep</title>
      <link>https://dev.to/servatj</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/servatj"/>
    <language>en</language>
    <item>
      <title>Running Coding Agents in Parallel with Git Worktrees</title>
      <dc:creator>Josep</dc:creator>
      <pubDate>Sun, 30 Aug 2026 21:29:33 +0000</pubDate>
      <link>https://dev.to/servatj/running-coding-agents-in-parallel-with-git-worktrees-507i</link>
      <guid>https://dev.to/servatj/running-coding-agents-in-parallel-with-git-worktrees-507i</guid>
      <description>&lt;p&gt;I kept hitting the same wall with coding agents. One Claude Code or Codex session in a repo works great. The moment I wanted two tasks moving at once - login in one terminal, payments in another - they started stepping on each other. Same working directory, same checked-out branch, two processes editing the same files. Chaos.&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%2Ff1hm3t8cb69lxcx1olp0.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%2Ff1hm3t8cb69lxcx1olp0.png" alt="Traditional workflow: each developer on their own machine, one working copy, one task at a time; feature branches meet in develop and main via PRs" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The fix turned out to be a Git feature that has been sitting there for years: &lt;code&gt;git worktree&lt;/code&gt;. It gives you several working directories backed by the &lt;strong&gt;same repository&lt;/strong&gt;. Each folder has its own checked-out branch, but all of them share the same objects, commits and branch list.&lt;/p&gt;

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

&lt;p&gt;From your main checkout:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git worktree add ../integration &lt;span class="nt"&gt;-b&lt;/span&gt; integration main
git worktree add ../feature-login &lt;span class="nt"&gt;-b&lt;/span&gt; feature/login main
git worktree add ../feature-payments &lt;span class="nt"&gt;-b&lt;/span&gt; feature/payments main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which leaves you with something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;project/
├── main/               → branch main
├── integration/        → branch integration
├── feature-login/      → branch feature/login
└── feature-payments/   → branch feature/payments
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now every agent gets its own folder. One terminal per worktree, one agent per terminal, and nobody touches anybody else's files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;feature-login    &lt;span class="c"&gt;# agent 1 works here&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;feature-payments &lt;span class="c"&gt;# agent 2 works here, at the same time&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fg5my55kd9lrc675go0n6.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%2Fg5my55kd9lrc675go0n6.png" alt="Workflow with agents and worktrees: one shared repo with main, integration and feature worktree folders, one agent per folder, all in parallel on a single machine" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that surprised me: no push, no pull
&lt;/h2&gt;

&lt;p&gt;My first instinct was: agent finishes login, pushes the branch, then I pull it into integration. That's the muscle memory from working in a team.&lt;/p&gt;

&lt;p&gt;It's unnecessary here. All the worktrees belong to the same repository on the same machine, so Git already knows every branch locally. When agent 1 finishes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;feature-login
git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"feat: implement login"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;...the integration worktree can merge it directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ../integration
git merge feature/login
git merge feature/payments
npm &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No &lt;code&gt;git push&lt;/code&gt;, no &lt;code&gt;git pull&lt;/code&gt;. The directories are different, but &lt;code&gt;feature/login&lt;/code&gt; and &lt;code&gt;integration&lt;/code&gt; are branches of the same repo. When integration is green:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ../main
git merge integration
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You don't even have to wait for a worktree to be deleted before merging its branch. Both folders can exist at the same time. The only thing Git refuses is having the &lt;em&gt;same&lt;/em&gt; branch checked out in two worktrees at once - which is exactly the protection you want when agents are involved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cleaning up
&lt;/h2&gt;

&lt;p&gt;When a feature is done, resist the &lt;code&gt;rm -rf&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git worktree remove ../feature-login
git branch &lt;span class="nt"&gt;-d&lt;/span&gt; feature/login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;git worktree remove&lt;/code&gt; deletes the folder &lt;em&gt;and&lt;/em&gt; cleans Git's internal registry. If you already nuked the folder by hand, &lt;code&gt;git worktree prune&lt;/code&gt; fixes the bookkeeping after the fact.&lt;/p&gt;

&lt;p&gt;The full cycle for one task ends up being:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git worktree add ../feature-login &lt;span class="nt"&gt;-b&lt;/span&gt; feature/login main   &lt;span class="c"&gt;# create&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ../feature-login                                       &lt;span class="c"&gt;# agent works, commits&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ../integration &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git merge feature/login &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm &lt;span class="nb"&gt;test&lt;/span&gt;  &lt;span class="c"&gt;# integrate&lt;/span&gt;
git worktree remove ../feature-login                      &lt;span class="c"&gt;# discard workspace&lt;/span&gt;
git branch &lt;span class="nt"&gt;-d&lt;/span&gt; feature/login                               &lt;span class="c"&gt;# discard branch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  So where does GitHub fit?
&lt;/h2&gt;

&lt;p&gt;For the agents to collaborate on one machine: nowhere. Git itself is the communication mechanism.&lt;/p&gt;

&lt;p&gt;GitHub earns its place the moment humans enter the loop - PRs, review, CI, an audit trail:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;feature-login
git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin feature/login   &lt;span class="c"&gt;# open a PR from this&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And if you want integration to merge exactly what's on the remote rather than the local branch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git fetch origin
git merge origin/feature/login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I now think of it as two separate planes. Locally: worktree → commit → merge into integration → tests. Remotely: push → PR → review → CI. The second plane is for people; the first one is where the agents actually work.&lt;/p&gt;

&lt;p&gt;The detail that sold me on the whole thing: the integration agent never copies code from the other agents, never reads their folders, doesn't even know they exist. It only knows their branch names. Git was the message bus all along.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus: when every agent wants port 3000
&lt;/h2&gt;

&lt;p&gt;Worktrees isolate files and branches. They don't isolate runtime. The moment two agents each run &lt;code&gt;npm run dev&lt;/code&gt; and a Playwright suite, they all reach for :3000, the same test database, and a surprising amount of RAM per headless browser.&lt;/p&gt;

&lt;p&gt;The workaround I use today is boring: each worktree gets its own port through an env file written at creation time, and Playwright reads it for its baseURL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"PORT=3101"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ../feature-login/.env.local
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"PORT=3102"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ../feature-payments/.env.local
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But ports are only the visible part of the problem. Isolating test databases, keeping three browser suites from eating the machine, and deciding whether integration should be the only worktree allowed to run E2E at all - that deserves a post of its own. It's the next one I'm writing.&lt;/p&gt;

&lt;p&gt;So in some cases is better to use isolated agents on VPS and i have another article that talks about that &lt;a href="https://dev.to/servatj/the-ai-dev-environment-nobody-teaches-you-written-by-my-ai-agent-directed-by-me-p--1dg4"&gt;https://dev.to/servatj/the-ai-dev-environment-nobody-teaches-you-written-by-my-ai-agent-directed-by-me-p--1dg4&lt;/a&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>ai</category>
      <category>productivity</category>
      <category>devops</category>
    </item>
    <item>
      <title>The AI Dev Environment Nobody Teaches You</title>
      <dc:creator>Josep</dc:creator>
      <pubDate>Sun, 30 Aug 2026 11:35:36 +0000</pubDate>
      <link>https://dev.to/servatj/the-ai-dev-environment-nobody-teaches-you-written-by-my-ai-agent-directed-by-me-p--1dg4</link>
      <guid>https://dev.to/servatj/the-ai-dev-environment-nobody-teaches-you-written-by-my-ai-agent-directed-by-me-p--1dg4</guid>
      <description>&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%2Ffd22rd63c1ecwatf36nq.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%2Ffd22rd63c1ecwatf36nq.png" alt="Architecture of a remote agentic development environment" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The idea in one sentence
&lt;/h3&gt;

&lt;p&gt;Don’t run Claude Code, Codex or OpenCode on your laptop. Run them on a &lt;strong&gt;VPS that is on 24/7&lt;/strong&gt; , which clones your repos, installs whatever is needed, runs, tests and reports back. You talk to it from your laptop or your phone. Your personal machine stays personal.&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%2Fo45lt4hhxv4ej5hk9z6m.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%2Fo45lt4hhxv4ej5hk9z6m.png" alt="The 6 layers of the setup" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The setup, layer by layer
&lt;/h3&gt;

&lt;h3&gt;
  
  
  1. Machine
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A Linux VPS &lt;strong&gt;with no desktop environment&lt;/strong&gt; : lighter, and a backup of the OS is a backup of your entire dev environment. Windows would also work, but I don’t recommend it.&lt;/li&gt;
&lt;li&gt;Rough sizing: &lt;strong&gt;4 vCPU / 8 GB RAM&lt;/strong&gt; is already enough to run several agent instances in parallel.&lt;/li&gt;
&lt;li&gt;Provider: I recommend &lt;strong&gt;Hetzner&lt;/strong&gt; , specifically the &lt;strong&gt;Server Auction&lt;/strong&gt; section (dedicated servers other customers cancelled; somewhat older hardware but very cheap; filter by budget, e.g. up to $100/month). A fixed monthly cost instead of the per-hour billing of Codespaces and the like.&lt;/li&gt;
&lt;li&gt;Keep the configuration &lt;strong&gt;reproducible&lt;/strong&gt; so you can tear the server down and bring up an identical one tomorrow (upgrade, migration, etc.).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Security
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Never work as root.&lt;/li&gt;
&lt;li&gt;Firewall on, limiting which devices can connect.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailscale&lt;/strong&gt; as VPN / private network: installed on the server, the laptop and the phone, so only those devices can reach the server. No exposing password-based SSH to the whole internet.&lt;/li&gt;
&lt;li&gt;The reason is obvious: your clients’ code and credentials live in there.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Agents
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Install the CLIs you already pay a subscription for: Claude Code, Codex, OpenCode, Kimi Code… All on &lt;strong&gt;subscription, not API&lt;/strong&gt; : much cheaper and a fixed cost.&lt;/li&gt;
&lt;li&gt;The server needs access to your &lt;strong&gt;GitHub&lt;/strong&gt; to clone repos. The agents themselves install Docker, Node, Go, Python… whatever each project needs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Messaging layer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;An intermediary like &lt;strong&gt;Hermes&lt;/strong&gt; (or OpenClaw): installed on the server and connected to your ChatGPT subscription, it takes orders via &lt;strong&gt;Telegram, WhatsApp, Discord or Slack&lt;/strong&gt;. Hermes can’t use your Claude subscription directly, but it can &lt;em&gt;delegate&lt;/em&gt; to Claude Code if it’s installed on the machine.&lt;/li&gt;
&lt;li&gt;His personal setup: &lt;strong&gt;several Telegram bots pointing at the same instance&lt;/strong&gt;. One “personal assistant” bot (email, articles, tasks) and two or more “developer” bots that know where the projects live and always delegate the actual code writing to Claude or Codex. Having two dev bots lets him launch tasks on different projects in parallel from his phone.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Orchestration and terminal (advanced)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Herdr&lt;/strong&gt; : a “tmux for agents”. It opens Claude Code, Codex, etc. in one terminal and, crucially, &lt;strong&gt;they talk to each other&lt;/strong&gt; : Claude can spawn a Codex instance, resume it or read its output. It has a Telegram plugin.&lt;/li&gt;
&lt;li&gt;Direct SSH access from mobile apps: &lt;strong&gt;Termius&lt;/strong&gt; , Termux (Android), a-Shell (iOS), combined with Tailscale.&lt;/li&gt;
&lt;li&gt;VS Code over Remote SSH when you need to &lt;em&gt;see&lt;/em&gt; the code of a large project; execution still happens on the server.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Planning
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;With several projects and sub-agents you need a tracker ( &lt;strong&gt;Linear, Notion&lt;/strong&gt; , Jira…) as the single source of truth: pending, in progress, reviewed by the client, reported bugs.&lt;/li&gt;
&lt;li&gt;The agent can read and write it via &lt;strong&gt;MCP&lt;/strong&gt; ; no need to fill it in by hand. This is what I like to call the “software factory” approach, as opposed to prompt-by-prompt vibe coding.&lt;/li&gt;
&lt;/ul&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%2Fopw6tys16aza2a9taku9.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%2Fopw6tys16aza2a9taku9.png" alt="Pros and cons of moving your agents to a VPS" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The upsides
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;24/7&lt;/strong&gt; : a client reports a bug at night → a message from your phone → the agent fixes it.&lt;/li&gt;
&lt;li&gt;Several projects &lt;strong&gt;in parallel&lt;/strong&gt; on a single machine.&lt;/li&gt;
&lt;li&gt;Total &lt;strong&gt;portability&lt;/strong&gt; : travel with any underpowered laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agnostic&lt;/strong&gt; : a new agent or model comes out, you install it on the server and you’re done.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The downsides
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Complex projects still call for an editor to review things (solution: VS Code Remote SSH).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Port conflicts&lt;/strong&gt; between projects on the same stack (everything wants 3000). He mentions &lt;strong&gt;Portless&lt;/strong&gt; (named URLs instead of ports) as a mitigation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;E2E testing&lt;/strong&gt; (Playwright, browsers) eats a lot of RAM and can slow down every agent at once.&lt;/li&gt;
&lt;li&gt;Local models (he tried a DGX Spark, around $4,000): fine for landing pages and typical web apps, but they struggle with complex software; today they don’t replace cloud models.&lt;/li&gt;
&lt;li&gt;It isn’t finished: he says himself he’s been tuning it for months and aims to have it polished by year end.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Who is it for?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Yes&lt;/strong&gt; : if you juggle several clients or projects and ship changes daily (he works on 2–3 projects a day).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No&lt;/strong&gt; : one project and one client; it’s overkill.&lt;/li&gt;
&lt;li&gt;Ready-made alternatives: &lt;strong&gt;Cursor Cloud Agents&lt;/strong&gt; and &lt;strong&gt;Claude Code on the web&lt;/strong&gt; do the same (clone, change, open a PR), but they bill close to API prices and you don’t control the machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  My takeaway
&lt;/h3&gt;

&lt;p&gt;The interesting part isn’t “delegate to the cloud and the app builds itself”. It’s having an isolated, always-on environment you can talk to from anywhere, one that doesn’t depend on whichever agent is in fashion this month. If you work on a single project, don’t overcomplicate it. If you have several and already live between terminals, this is probably the next step.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tools mentioned:&lt;/em&gt; &lt;a href="https://tailscale.com" rel="noopener noreferrer"&gt;&lt;em&gt;Tailscale&lt;/em&gt;&lt;/a&gt;&lt;em&gt;,&lt;/em&gt; &lt;a href="https://www.hetzner.com/sb/" rel="noopener noreferrer"&gt;&lt;em&gt;Hetzner Server Auction&lt;/em&gt;&lt;/a&gt;&lt;em&gt;,&lt;/em&gt; &lt;a href="https://github.com/vercel-labs/portless" rel="noopener noreferrer"&gt;&lt;em&gt;Portless&lt;/em&gt;&lt;/a&gt;&lt;em&gt;,&lt;/em&gt; &lt;a href="https://en.thedavestack.com/herdr-a-tmux-for-agents/" rel="noopener noreferrer"&gt;&lt;em&gt;Herdr&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
