<?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: TaskHandoff</title>
    <description>The latest articles on DEV Community by TaskHandoff (@edgestorage1).</description>
    <link>https://dev.to/edgestorage1</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%2F4175501%2Fec0d9d08-ce57-4e40-8e40-beead3c54367.png</url>
      <title>DEV Community: TaskHandoff</title>
      <link>https://dev.to/edgestorage1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/edgestorage1"/>
    <language>en</language>
    <item>
      <title>Codex on Windows keeps fighting PowerShell — run it in a Linux container instead</title>
      <dc:creator>TaskHandoff</dc:creator>
      <pubDate>Sat, 10 Oct 2026 17:17:29 +0000</pubDate>
      <link>https://dev.to/edgestorage1/codex-on-windows-keeps-fighting-powershell-run-it-in-a-linux-container-instead-3njb</link>
      <guid>https://dev.to/edgestorage1/codex-on-windows-keeps-fighting-powershell-run-it-in-a-linux-container-instead-3njb</guid>
      <description>&lt;p&gt;If you run a coding agent on Windows for long enough, you'll notice a pattern: the agent writes a shell&lt;br&gt;
command, it fails, it rewrites the command, it fails again — three or four times — and only then finds&lt;br&gt;
something that works. On macOS or Linux the same task usually goes through on the first try.&lt;/p&gt;

&lt;p&gt;It's tempting to blame the model. Usually it isn't the model. It's the shell layer underneath it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's actually happening
&lt;/h2&gt;

&lt;p&gt;On native Windows, Codex doesn't hand your command to the OS as a plain &lt;code&gt;argv&lt;/code&gt; list. External CLI&lt;br&gt;
commands get wrapped and executed through PowerShell — closer to&lt;br&gt;
&lt;code&gt;pwsh.exe -Command "your-command ..."&lt;/code&gt; than a direct invocation&lt;br&gt;
(&lt;a href="https://github.com/openai/codex/issues/15294" rel="noopener noreferrer"&gt;#15294&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;That single design decision cascades:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Quoting and escaping.&lt;/strong&gt; PowerShell has its own quoting rules. A command that's perfectly valid in
bash can need different escaping here — and the model has to guess which dialect it's writing for.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permission rules stop matching.&lt;/strong&gt; Because every command is rewritten into a PowerShell wrapper,
allow-rules like "everything starting with &lt;code&gt;dotnet&lt;/code&gt;" don't match reliably
(&lt;a href="https://github.com/openai/codex/issues/8537" rel="noopener noreferrer"&gt;#8537&lt;/a&gt;), which is why so many Windows users end up approving
every single command (&lt;a href="https://github.com/openai/codex/issues/2860" rel="noopener noreferrer"&gt;#2860&lt;/a&gt;, 77 comments).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Basic file operations go through the shell too.&lt;/strong&gt; Even read/write/search were reported as
PowerShell operations rather than internal tools (&lt;a href="https://github.com/openai/codex/issues/3800" rel="noopener noreferrer"&gt;#3800&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment leaks.&lt;/strong&gt; A child &lt;code&gt;powershell.exe&lt;/code&gt; can inherit PowerShell 7's &lt;code&gt;PSModulePath&lt;/code&gt;, which breaks
module discovery and makes even &lt;code&gt;Get-FileHash&lt;/code&gt; unavailable (&lt;a href="https://github.com/openai/codex/issues/27117" rel="noopener noreferrer"&gt;#27117&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sandboxing is flaky.&lt;/strong&gt; Sandboxed PowerShell commands intermittently fail before the command even runs
(&lt;a href="https://github.com/openai/codex/issues/25497" rel="noopener noreferrer"&gt;#25497&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's noisy.&lt;/strong&gt; Every command can flash a console window (&lt;a href="https://github.com/openai/codex/issues/48074" rel="noopener noreferrer"&gt;#48074&lt;/a&gt;,
&lt;a href="https://github.com/openai/codex/issues/48422" rel="noopener noreferrer"&gt;#48422&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The requests keep coming: people have asked, repeatedly, for a configurable Windows shell&lt;br&gt;
(&lt;a href="https://github.com/openai/codex/issues/16717" rel="noopener noreferrer"&gt;#16717&lt;/a&gt;, &lt;a href="https://github.com/openai/codex/issues/31548" rel="noopener noreferrer"&gt;#31548&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://github.com/openai/codex/issues/16579" rel="noopener noreferrer"&gt;#16579&lt;/a&gt;). Which tells you the community has already reached the&lt;br&gt;
obvious conclusion: &lt;strong&gt;the shell layer is the problem, not the task.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The retry loop is what actually costs you
&lt;/h2&gt;

&lt;p&gt;A failed command isn't just a wasted second. The agent has to reason about &lt;em&gt;why&lt;/em&gt; it failed, produce a&lt;br&gt;
different command, and try again — each round trip carries the whole context with it. On Windows this&lt;br&gt;
can happen several times per task, and you pay for all of it in tokens and in your own attention.&lt;/p&gt;

&lt;h2&gt;
  
  
  The usual workarounds, and what they cost
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WSL.&lt;/strong&gt; Works, but now you maintain two environments, and the agent may or may not be running where your
project actually lives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Switch to Git Bash as the primary shell.&lt;/strong&gt; Codex has been reported to chain Git Bash → PowerShell in
confusing ways (&lt;a href="https://github.com/openai/codex/issues/7298" rel="noopener noreferrer"&gt;#7298&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Approve everything.&lt;/strong&gt; Fast, and exactly as bad an idea as it sounds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wait for a config option.&lt;/strong&gt; Reasonable, but you're blocked on someone else's roadmap.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A different move: stop running your agent on Windows
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TaskHandoff&lt;/strong&gt; is an open-source control plane (Apache-2.0) for running and managing AI/Codex workspaces&lt;br&gt;
across local and remote machines. Instead of fighting the host shell, each session runs inside a &lt;strong&gt;managed&lt;br&gt;
Linux Docker workspace&lt;/strong&gt; — and you drive it from one console.&lt;/p&gt;

&lt;p&gt;Concretely, that means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The agent always sees the &lt;strong&gt;same bash environment&lt;/strong&gt;, whether the machine underneath is Windows, macOS,
or Linux.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker workspaces&lt;/strong&gt; are created, started, stopped and restored as first-class objects — no more
"it worked on my other machine".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment templates&lt;/strong&gt; let you snapshot a container's toolchain and reuse it, so a working setup
doesn't have to be rediscovered per project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-node management&lt;/strong&gt; puts local and remote machines on one board — run heavy work on a Linux box and
still drive it from your Windows laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI session center&lt;/strong&gt; streams session state in real time over WebSocket.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don't need to teach the model PowerShell. You just stop asking it to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://github.com/edgestorage/task-handoff/releases/latest/download/install-server.sh | &lt;span class="nb"&gt;sudo &lt;/span&gt;sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ships as a Desktop app and a server (systemd on Debian/Ubuntu), with an English/Chinese UI.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repo: &lt;a href="https://github.com/edgestorage/task-handoff" rel="noopener noreferrer"&gt;https://github.com/edgestorage/task-handoff&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Docs: &lt;a href="https://docs.thandoff.com/" rel="noopener noreferrer"&gt;https://docs.thandoff.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Honest caveats
&lt;/h2&gt;

&lt;p&gt;Running your workspace in a container doesn't magically fix every Windows problem — if your project&lt;br&gt;
genuinely needs Windows-only tooling, you'll want a Windows node. But for the large class of tasks where&lt;br&gt;
the agent is looping on shell syntax and permissions, removing the host shell from the equation is the&lt;br&gt;
cheapest fix available today.&lt;/p&gt;




</description>
      <category>ai</category>
      <category>docker</category>
      <category>devtools</category>
      <category>opensource</category>
    </item>
    <item>
      <title>TaskHandoff: one console for AI coding workspaces across local and remote machines</title>
      <dc:creator>TaskHandoff</dc:creator>
      <pubDate>Sat, 10 Oct 2026 15:23:04 +0000</pubDate>
      <link>https://dev.to/edgestorage1/taskhandoff-one-console-for-ai-coding-workspaces-across-local-and-remote-machines-ie3</link>
      <guid>https://dev.to/edgestorage1/taskhandoff-one-console-for-ai-coding-workspaces-across-local-and-remote-machines-ie3</guid>
      <description>&lt;p&gt;If you run AI coding sessions (Codex, agents, background jobs) for more than a few weeks, they start to sprawl. One session on the laptop, one on a home server, a couple inside Docker containers on a remote VM — and no single place that tells you &lt;em&gt;what is running, where it lives, and how to hand it off&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TaskHandoff&lt;/strong&gt; is an open-source control plane (Apache-2.0, TypeScript) that pulls those AI workspaces into one board. I've been using it to keep local and remote machines in the same view, and it's finally at a state worth sharing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Once AI sessions spread across machines, you end up juggling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSH tabs, container shells, and a half-dozen config files&lt;/li&gt;
&lt;li&gt;No shared view of "what's running where"&lt;/li&gt;
&lt;li&gt;Rebuilding the same container toolchain over and over&lt;/li&gt;
&lt;li&gt;Copy-pasting context between a chat app and the machine that actually does the work&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-node management&lt;/strong&gt; — local and remote machines in a single board&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Managed Docker workspaces&lt;/strong&gt; — create, run, and restore workspaces as first-class objects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment templates&lt;/strong&gt; — snapshot a container's tools + config and reuse it elsewhere&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI session center&lt;/strong&gt; — real-time sessions over WebSocket, attach/detach at will&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repository workflows&lt;/strong&gt; — files, changes, branches, and git worktrees from the UI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scoped Git credentials&lt;/strong&gt; — hand each workspace only the credentials it needs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chat integrations&lt;/strong&gt; — route tasks from Telegram, DingTalk, WeChat, or Lark&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;App catalog + mobile client&lt;/strong&gt; — plus a Desktop app and a server, with an English/Chinese UI&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://github.com/edgestorage/task-handoff/releases/latest/download/install-server.sh | &lt;span class="nb"&gt;sudo &lt;/span&gt;sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ships as a Desktop client and a server (systemd on Debian/Ubuntu). Once the server is up, open the console and add your machines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it exists
&lt;/h2&gt;

&lt;p&gt;Most AI tooling optimizes the &lt;em&gt;model&lt;/em&gt;. TaskHandoff optimizes the &lt;em&gt;plumbing&lt;/em&gt; — the boring, error-prone part of running those models somewhere real, across more than one box, without losing track of your sessions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Repo: &lt;a href="https://github.com/edgestorage/task-handoff" rel="noopener noreferrer"&gt;https://github.com/edgestorage/task-handoff&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Docs: &lt;a href="https://docs.thandoff.com/" rel="noopener noreferrer"&gt;https://docs.thandoff.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Apache-2.0. Stars, issues, and PRs are all welcome — and I'd love to hear how you're juggling multi-machine AI sessions today.&lt;/p&gt;

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