<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fh="http://purl.org/syndication/history/1.0"><channel><title>wdx | Blog</title><description>Run a team of AI coding agents from one terminal.</description><link>https://srjn45.github.io/</link><language>en</language><fh:complete/><atom:link rel="self" href="https://srjn45.github.io/wdx/blog/rss.xml"/><item><title>Four ways running several AI agents goes wrong, and how wdx fixes each</title><link>https://srjn45.github.io/wdx/blog/four-failures/</link><guid isPermaLink="true">https://srjn45.github.io/wdx/blog/four-failures/</guid><description>Lost terminal tabs, colliding git checkouts, silently blocked agents waiting on prompts, and mystery diffs. Here is how wdx fixes the four classic multi-agent failure modes.</description><pubDate>Fri, 13 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Running one AI coding agent is exciting; running three or four at once is where the developer experience falls off a cliff. Before you know it, you are juggling disappearing terminal tabs, clashing file edits, silently blocked agents waiting on input, and a chaotic mess of mystery diffs.&lt;/p&gt;
&lt;p&gt;Most developers start by opening a handful of terminal tabs or tmux splits, firing up Claude Code, Codex, or Cursor in each, and hoping for the best. Within an hour, concurrency breaks down into confusion:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“agent waiting on response while i’m thinking that the work is progressing happened multiple times, and while running multiple agents manually it happened many times that multiple agents started working in main branch and interfered with each other’s work, moreover, not able to close terminal or shutdown/restart computer for days event months so that the curren work/context is not lost but with wdx i can resume working from where it left”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here are the four classic failure modes of running multiple AI coding agents from plain terminals, why each happens, and the architectural primitives wdx uses to fix each.&lt;/p&gt;
&lt;figure&gt;&lt;div&gt;&lt;svg viewBox=&quot;0 0 720 380&quot; role=&quot;img&quot; aria-label=&quot;Comparison of four multi-agent failure modes in plain terminals vs how wdx resolves each through architectural guarantees.&quot;&gt;&lt;defs&gt;&lt;marker id=&quot;fourf-a&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;fourf-h&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;/defs&gt;&lt;text x=&quot;20&quot; y=&quot;22&quot;&gt;Plain Terminals (Failure Modes)&lt;/text&gt;&lt;text x=&quot;380&quot; y=&quot;22&quot;&gt;wdx Architecture (The Fix)&lt;/text&gt;&lt;g transform=&quot;translate(20, 36)&quot;&gt;&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;310&quot; height=&quot;66&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text font-weight=&quot;bold&quot; x=&quot;14&quot; y=&quot;22&quot;&gt;1. Disappearing Sessions&lt;/text&gt;&lt;text x=&quot;14&quot; y=&quot;40&quot;&gt;Terminal tab closed, SSH drops, or reboot;&lt;/text&gt;&lt;text x=&quot;14&quot; y=&quot;56&quot;&gt;PTY dies and hours of agent context vanish.&lt;/text&gt;&lt;/g&gt;&lt;path d=&quot;M338 69 H368&quot; marker-end=&quot;url(#fourf-h)&quot;&gt;&lt;/path&gt;&lt;g transform=&quot;translate(380, 36)&quot;&gt;&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;320&quot; height=&quot;66&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text font-size=&quot;13&quot; x=&quot;14&quot; y=&quot;22&quot;&gt;Daemon-Managed PTY Holders&lt;/text&gt;&lt;text x=&quot;14&quot; y=&quot;40&quot;&gt;Holders outlive terminal windows &amp;#x26; reboots;&lt;/text&gt;&lt;text x=&quot;14&quot; y=&quot;56&quot;&gt;reconnect anytime with wdx tide or attach.&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(20, 118)&quot;&gt;&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;310&quot; height=&quot;66&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text font-weight=&quot;bold&quot; x=&quot;14&quot; y=&quot;22&quot;&gt;2. Stepped-On Source Tree&lt;/text&gt;&lt;text x=&quot;14&quot; y=&quot;40&quot;&gt;Agents edit same checkout in main branch;&lt;/text&gt;&lt;text x=&quot;14&quot; y=&quot;56&quot;&gt;shared index overwritten and files clobbered.&lt;/text&gt;&lt;/g&gt;&lt;path d=&quot;M338 151 H368&quot; marker-end=&quot;url(#fourf-h)&quot;&gt;&lt;/path&gt;&lt;g transform=&quot;translate(380, 118)&quot;&gt;&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;320&quot; height=&quot;66&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text font-size=&quot;13&quot; x=&quot;14&quot; y=&quot;22&quot;&gt;Isolated Git Worktrees (--worktree)&lt;/text&gt;&lt;text x=&quot;14&quot; y=&quot;40&quot;&gt;Dedicated branch &amp;#x26; directory per agent;&lt;/text&gt;&lt;text x=&quot;14&quot; y=&quot;56&quot;&gt;zero git index collisions; clean main tree.&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(20, 200)&quot;&gt;&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;310&quot; height=&quot;66&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text font-weight=&quot;bold&quot; x=&quot;14&quot; y=&quot;22&quot;&gt;3. The Silent Stoppage&lt;/text&gt;&lt;text x=&quot;14&quot; y=&quot;40&quot;&gt;Agent asks a question 1 min in; sits idle for 1 hr;&lt;/text&gt;&lt;text x=&quot;14&quot; y=&quot;56&quot;&gt;engineer assumes work is progressing.&lt;/text&gt;&lt;/g&gt;&lt;path d=&quot;M338 233 H368&quot; marker-end=&quot;url(#fourf-h)&quot;&gt;&lt;/path&gt;&lt;g transform=&quot;translate(380, 200)&quot;&gt;&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;320&quot; height=&quot;66&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text font-size=&quot;13&quot; x=&quot;14&quot; y=&quot;22&quot;&gt;VT Screen Parser &amp;#x26; TIDE Alerts&lt;/text&gt;&lt;text x=&quot;14&quot; y=&quot;40&quot;&gt;Real-time prompt parsing; amber ? badge in TIDE;&lt;/text&gt;&lt;text x=&quot;14&quot; y=&quot;56&quot;&gt;answer in place instantly or queue via inbox.&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(20, 282)&quot;&gt;&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;310&quot; height=&quot;66&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text font-weight=&quot;bold&quot; x=&quot;14&quot; y=&quot;22&quot;&gt;4. The Blind Merge&lt;/text&gt;&lt;text x=&quot;14&quot; y=&quot;40&quot;&gt;Agent reports &quot;done&quot;, but what actually changed?&lt;/text&gt;&lt;text x=&quot;14&quot; y=&quot;56&quot;&gt;Manual diff archaeology or unreviewed main break.&lt;/text&gt;&lt;/g&gt;&lt;path d=&quot;M338 315 H368&quot; marker-end=&quot;url(#fourf-h)&quot;&gt;&lt;/path&gt;&lt;g transform=&quot;translate(380, 282)&quot;&gt;&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;320&quot; height=&quot;66&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text font-size=&quot;13&quot; x=&quot;14&quot; y=&quot;22&quot;&gt;In-Tab Diff Review &amp;#x26; Guarded Landing&lt;/text&gt;&lt;text x=&quot;14&quot; y=&quot;40&quot;&gt;Review diff (o), leave inline comments (c);&lt;/text&gt;&lt;text x=&quot;14&quot; y=&quot;56&quot;&gt;one-key landing (L) with automated test checks.&lt;/text&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;&lt;figcaption&gt;Running multiple AI agents in plain terminals leads to lost sessions, clashing checkouts, silent stoppages, and mystery diffs. wdx solves each with an architectural primitive.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;failure-1-the-disappearing-session-lost-terminals&quot;&gt;Failure 1: The Disappearing Session (Lost Terminals)&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;the-problem&quot;&gt;The problem&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;When you run an AI agent inside a standard terminal window, tab, or SSH connection, the agent process lives and dies with that pseudo-terminal (PTY) session. If you accidentally close the tab, if your window manager crashes, if an SSH connection times out, or if your laptop forces a reboot, the process terminates abruptly.&lt;/p&gt;
&lt;p&gt;Because of this vulnerability, developers develop coping mechanisms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Leaving terminal windows open for weeks or months at a time, dreading any reboot or system update.&lt;/li&gt;
&lt;li&gt;Cluttering the taskbar with dozens of minimized windows out of fear that closing one loses an agent’s active conversation state.&lt;/li&gt;
&lt;li&gt;Losing half-finished refactorings when a laptop battery dies or network connection resets.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;how-wdx-fixes-it-daemon-managed-pty-holders&quot;&gt;How wdx fixes it: Daemon-Managed PTY Holders&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;In wdx, agents do not run inside your terminal emulator. They execute inside dedicated background &lt;a href=&quot;https://srjn45.github.io/wdx/docs/architecture/holders/&quot;&gt;holder processes&lt;/a&gt; managed by a local background daemon:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Process decoupling:&lt;/strong&gt; The holder owns the PTY, the screen buffer, and the child agent process. When you attach with &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/terminals/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;wdx agent attach&lt;/code&gt;&lt;/a&gt; or view agents in TIDE, you connect to the holder over a Unix socket. Disconnecting (&lt;code dir=&quot;auto&quot;&gt;C-\ d&lt;/code&gt;) or closing your terminal window leaves the agent running unaffected.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reboot recovery via &lt;code dir=&quot;auto&quot;&gt;lost&lt;/code&gt; state:&lt;/strong&gt; Even if your entire machine restarts or the daemon stops, wdx tracks the agent’s identity, directory, worktree, and ACA session in its database. When the daemon restarts, the agent appears in &lt;code dir=&quot;auto&quot;&gt;wdx agent list&lt;/code&gt; as &lt;code dir=&quot;auto&quot;&gt;lost&lt;/code&gt;. Running &lt;code dir=&quot;auto&quot;&gt;wdx agent start --name &amp;#x3C;name&gt;&lt;/code&gt; re-attaches to the exact ACA session and resumes work with full conversation context intact.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure&gt;&lt;video autoplay loop muted playsinline aria-label=&quot;A terminal recording: wdx agent list shows notes-worker running; attaching to it with wdx agent attach and detaching safely with C-\ d; a simulated reboot stops the daemon and kills holders; wdx daemon start restores tracking and wdx agent list flags the agent as lost; running wdx agent start resumes the agent in the same session with all context intact&quot;&gt;&lt;source src=&quot;/wdx/blog/four-failures/lost-terminals.webm&quot; type=&quot;video/webm&quot;&gt;&lt;source src=&quot;/wdx/blog/four-failures/lost-terminals.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/video&gt;&lt;figcaption&gt;Detached PTY holders outlive terminal windows, crashes, and reboots. Re-launching brings the agent straight back into its session.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;failure-2-the-stepped-on-source-tree-clashing-edits&quot;&gt;Failure 2: The Stepped-On Source Tree (Clashing Edits)&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;the-problem-1&quot;&gt;The problem&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;A git repository checkout has exactly one working tree and one staging index (&lt;code dir=&quot;auto&quot;&gt;.git/index&lt;/code&gt;). When you launch multiple agents from the root directory of your project, they all operate on the exact same checkout on &lt;code dir=&quot;auto&quot;&gt;main&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;What follows is an inevitable train wreck:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Overwritten edits:&lt;/strong&gt; Agent A modifies &lt;code dir=&quot;auto&quot;&gt;notes.py&lt;/code&gt; while Agent B is analyzing or rewriting the same file. One agent’s half-finished logic overwrites the other’s.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Corrupted staging index:&lt;/strong&gt; Agent A stages files for a commit; Agent B runs &lt;code dir=&quot;auto&quot;&gt;git commit&lt;/code&gt; or stages unrelated changes, bundling both features into an unparseable franken-commit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tangled &lt;code dir=&quot;auto&quot;&gt;git status&lt;/code&gt;:&lt;/strong&gt; You check the status of your branch and have no idea which modified file belongs to which agent’s prompt.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;how-wdx-fixes-it-isolated-git-worktrees&quot;&gt;How wdx fixes it: Isolated Git Worktrees&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;wdx solves this at the filesystem level using &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/worktrees/&quot;&gt;git worktrees&lt;/a&gt;. Passing &lt;code dir=&quot;auto&quot;&gt;--worktree &amp;#x3C;name&gt;&lt;/code&gt; to &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/agents/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;wdx agent create&lt;/code&gt;&lt;/a&gt; automatically creates a dedicated worktree in &lt;code dir=&quot;auto&quot;&gt;.worktrees/&amp;#x3C;name&gt;&lt;/code&gt; branched from HEAD:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes-delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--worktree&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes-delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--aca&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;claude_code&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Add delete command&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes-search&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--worktree&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes-search&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--aca&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;codex&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Add search command&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Each agent gets:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Its own working directory:&lt;/strong&gt; File modifications happen in complete physical isolation under &lt;code dir=&quot;auto&quot;&gt;.worktrees/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Its own git index and branch:&lt;/strong&gt; Each agent commits to its own dedicated branch. Staging or committing never interferes with other agents.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A pristine main tree:&lt;/strong&gt; Your repository’s main checkout remains 100% clean while multiple agents work concurrently in the background.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero repository lock contention:&lt;/strong&gt; wdx commands read worktree state without taking repository locks, allowing background monitoring to run alongside active git operations.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;&lt;video autoplay loop muted playsinline aria-label=&quot;A terminal recording: wdx agent list shows notes-delete and notes-search running; wdx worktree list displays independent checkouts for each agent; inspecting .worktrees/ reveals physically isolated directories; wdx worktree diff displays individual feature changes; git status on the main branch verifies that the working tree remains completely clean&quot;&gt;&lt;source src=&quot;/wdx/blog/four-failures/clashing-edits.webm&quot; type=&quot;video/webm&quot;&gt;&lt;source src=&quot;/wdx/blog/four-failures/clashing-edits.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/video&gt;&lt;figcaption&gt;Each agent works in an isolated git worktree with its own branch and index. The main branch stays completely clean.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;failure-3-the-silent-stoppage-unanswered-prompts&quot;&gt;Failure 3: The Silent Stoppage (Unanswered Prompts)&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;the-problem-2&quot;&gt;The problem&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Of all the failure modes in multi-agent workflows, &lt;strong&gt;unanswered prompts&lt;/strong&gt; are the single biggest productivity killer.&lt;/p&gt;
&lt;p&gt;You prompt three agents with complex tasks, feel a surge of productivity, and switch to a different screen—reviewing architecture docs or attending a meeting. You assume the agents are deep in execution: parsing files, running tests, refactoring modules.&lt;/p&gt;
&lt;p&gt;In reality, ninety seconds after you switched windows, Agent 2 paused to ask a routine confirmation question:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;“Do you want to run &lt;code dir=&quot;auto&quot;&gt;npm test&lt;/code&gt;? (y/N)”&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;“File &lt;code dir=&quot;auto&quot;&gt;schema.prisma&lt;/code&gt; already exists. Overwrite? [Y/n]”&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;“Do you trust this folder to execute tools? (yes/no)”&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because plain terminal tabs have no notification mechanism, the agent sits completely idle. Forty-five minutes later, you check back expecting a finished implementation, only to find the agent blocked on a prompt that required a single keystroke.&lt;/p&gt;
&lt;p&gt;Multiply this across three or four agents and your multi-agent concurrency collapses. You spend more time manually babysitting and polling terminal tabs than building software.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;how-wdx-fixes-it-real-time-vt-screen-parsing--amber-tide-badges&quot;&gt;How wdx fixes it: Real-Time VT Screen Parsing &amp;#x26; Amber TIDE Badges&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;wdx turns silent stops into immediate, actionable visual alerts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Headless Virtual Terminal (VT) screen engine:&lt;/strong&gt; wdx runs a headless VT state machine for every agent’s PTY. Instead of polling process exit codes or scraping logs after the fact, wdx parses the terminal output stream in real time. It reliably classifies agent activity into three canonical states: &lt;code dir=&quot;auto&quot;&gt;working&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;idle&lt;/code&gt;, or &lt;code dir=&quot;auto&quot;&gt;waiting&lt;/code&gt; on human input.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prominent amber badges in TIDE:&lt;/strong&gt; In TIDE (&lt;code dir=&quot;auto&quot;&gt;wdx tide&lt;/code&gt;), an agent waiting on a question turns into a bright amber row with a &lt;code dir=&quot;auto&quot;&gt;?&lt;/code&gt; badge in the project navigator. You know the exact second an agent needs attention without hunting across tabs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Instant in-place response:&lt;/strong&gt; You do not need to switch terminals. In TIDE, navigate to the amber row and press &lt;code dir=&quot;auto&quot;&gt;o&lt;/code&gt; (or Enter) to open the agent’s live screen. Press the required key (e.g., &lt;code dir=&quot;auto&quot;&gt;y&lt;/code&gt; or Enter), and the agent immediately transitions from amber &lt;code dir=&quot;auto&quot;&gt;waiting&lt;/code&gt; back to green &lt;code dir=&quot;auto&quot;&gt;working&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Safe inbox steering:&lt;/strong&gt; If you prefer working from scripts or the CLI, &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/messages/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;wdx agent send&lt;/code&gt;&lt;/a&gt; queues input in an agent inbox. It waits until the agent’s terminal is in raw mode and ready to accept input before pasting, preventing garbled or dropped keystrokes. Using &lt;code dir=&quot;auto&quot;&gt;--instant&lt;/code&gt; immediately interrupts or prioritizes your input.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure&gt;&lt;video autoplay loop muted playsinline aria-label=&quot;A terminal recording: wdx agent list shows notes-search working and notes-tests in state waiting with yes/no activity; launching wdx tide displays the project pane with notes-tests highlighted as an amber row with a &amp;#x27;?&amp;#x27; badge; opening notes-tests with &amp;#x27;o&amp;#x27; reveals the folder trust prompt; confirming with &amp;#x27;Yes, I trust this folder&amp;#x27; instantly transitions the agent back to green working; exiting TIDE verifies both agents actively working&quot;&gt;&lt;source src=&quot;/wdx/blog/four-failures/unanswered-prompts.webm&quot; type=&quot;video/webm&quot;&gt;&lt;source src=&quot;/wdx/blog/four-failures/unanswered-prompts.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/video&gt;&lt;figcaption&gt;VT screen parsing catches prompts instantly. TIDE flags the agent in amber with a ‘?’ badge, allowing you to answer in seconds.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;aside aria-label=&quot;Catching questions before they stall&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Catching questions before they stall&lt;/p&gt;&lt;div&gt;&lt;p&gt;In multi-agent engineering, the fastest agent is the one that never waits. By elevating prompt detection to a first-class state (&lt;code dir=&quot;auto&quot;&gt;waiting&lt;/code&gt;), wdx ensures you never lose hours to an unread confirmation dialog.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;failure-4-the-blind-merge-mystery-diffs&quot;&gt;Failure 4: The Blind Merge (Mystery Diffs)&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;the-problem-3&quot;&gt;The problem&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;An agent reports: &lt;em&gt;“I have finished adding the search command and all tests pass.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;What did it actually touch? In a traditional terminal workflow, verifying the agent’s work is surprisingly painful:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You have to manually run &lt;code dir=&quot;auto&quot;&gt;git diff &amp;#x3C;branch&gt;..main&lt;/code&gt; in a separate shell.&lt;/li&gt;
&lt;li&gt;If the agent modified multiple files, you have to scroll through raw terminal diffs or open an external GUI diff tool.&lt;/li&gt;
&lt;li&gt;If you notice a minor mistake, you have to craft a follow-up prompt, switch back to the agent’s tab, and explain line-by-line what needs fixing.&lt;/li&gt;
&lt;li&gt;When you are ready to integrate, running &lt;code dir=&quot;auto&quot;&gt;git merge&lt;/code&gt; often introduces unwanted merge commits or undetected regressions.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;how-wdx-fixes-it-in-tab-diff-review--guarded-landing&quot;&gt;How wdx fixes it: In-Tab Diff Review &amp;#x26; Guarded Landing&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;wdx integrates diff review and landing directly into the development workflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;In-tab visual diff (&lt;code dir=&quot;auto&quot;&gt;o&lt;/code&gt;):&lt;/strong&gt; In TIDE, selecting a worktree and pressing &lt;code dir=&quot;auto&quot;&gt;o&lt;/code&gt; opens a color-coded unified diff tab right beside your agents. You can inspect additions, deletions, and modified files with zero context switching.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inline line commenting (&lt;code dir=&quot;auto&quot;&gt;c&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;s&lt;/code&gt;):&lt;/strong&gt; When reviewing an agent’s diff, press &lt;code dir=&quot;auto&quot;&gt;c&lt;/code&gt; on any line to leave a comment. Press &lt;code dir=&quot;auto&quot;&gt;s&lt;/code&gt; to batch-dispatch your review comments back to the agent’s inbox as concrete revision requests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One-key guarded landing (&lt;code dir=&quot;auto&quot;&gt;L&lt;/code&gt;):&lt;/strong&gt; When the diff looks good, press &lt;code dir=&quot;auto&quot;&gt;L&lt;/code&gt;. wdx automatically runs your project’s configured pre-landing test checks (via &lt;code dir=&quot;auto&quot;&gt;wdx project landing&lt;/code&gt;), rebases the commits onto &lt;code dir=&quot;auto&quot;&gt;main&lt;/code&gt; with a clean linear history, and prompts you to remove the temporary worktree.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure&gt;&lt;video autoplay loop muted playsinline aria-label=&quot;A terminal recording: wdx worktree list shows notes-count is one commit ahead; launching wdx tide and navigating to notes-count; pressing &amp;#x27;o&amp;#x27; opens the visual diff tab in the workspace; pressing &amp;#x27;L&amp;#x27; triggers guarded landing which runs tests and rebases cleanly on main; confirming worktree cleanup with &amp;#x27;y&amp;#x27;; exiting TIDE and verifying git log shows a clean linear commit on main with no merge commit&quot;&gt;&lt;source src=&quot;/wdx/blog/four-failures/mystery-diffs.webm&quot; type=&quot;video/webm&quot;&gt;&lt;source src=&quot;/wdx/blog/four-failures/mystery-diffs.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/video&gt;&lt;figcaption&gt;Review diffs visually in TIDE with ‘o’, then land with ‘L’. wdx runs test checks and rebases linearly onto main with zero merge commits.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;comparison-matrix-plain-terminals-vs-wdx&quot;&gt;Comparison Matrix: Plain Terminals vs. wdx&lt;/h2&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Failure Mode&lt;/th&gt;
&lt;th&gt;Plain Terminal Tabs&lt;/th&gt;
&lt;th&gt;wdx Architecture&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Lost Terminals&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Window crash or reboot terminates PTY; sessions lost permanently&lt;/td&gt;
&lt;td&gt;Daemon-managed PTY holders outlive terminals; resumes via &lt;code dir=&quot;auto&quot;&gt;wdx agent start&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Clashing Edits&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agents collide in shared root on &lt;code dir=&quot;auto&quot;&gt;main&lt;/code&gt;; files overwritten &amp;#x26; index dirty&lt;/td&gt;
&lt;td&gt;Isolated git worktrees (&lt;code dir=&quot;auto&quot;&gt;--worktree&lt;/code&gt;) in &lt;code dir=&quot;auto&quot;&gt;.worktrees/&lt;/code&gt;; clean &lt;code dir=&quot;auto&quot;&gt;main&lt;/code&gt; tree&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unanswered Prompts&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agent stalls on prompt silently; hours lost with zero notification&lt;/td&gt;
&lt;td&gt;Real-time VT screen parser flags &lt;code dir=&quot;auto&quot;&gt;waiting&lt;/code&gt;; amber row &amp;#x26; &lt;code dir=&quot;auto&quot;&gt;?&lt;/code&gt; badge in TIDE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mystery Diffs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manual &lt;code dir=&quot;auto&quot;&gt;git diff&lt;/code&gt; archaeology; risky merge commits &amp;#x26; broken builds&lt;/td&gt;
&lt;td&gt;In-tab diff review (&lt;code dir=&quot;auto&quot;&gt;o&lt;/code&gt;), inline comments (&lt;code dir=&quot;auto&quot;&gt;c&lt;/code&gt;), and one-key guarded landing (&lt;code dir=&quot;auto&quot;&gt;L&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it&quot;&gt;Try It&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;You can run your multi-agent workflow under wdx in four simple steps:&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Install wdx:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-fsSL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://srjn45.github.io/wdx/install.sh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Open your project:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;~/dev/my-project&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;project&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Launch agents in isolated worktrees:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;feature-auth&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--worktree&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;auth&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Implement JWT token validation&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;feature-docs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--worktree&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;docs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Update API documentation in docs/&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Open TIDE to steer your fleet:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tide&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Quit TIDE anytime with &lt;code dir=&quot;auto&quot;&gt;C-q q&lt;/code&gt;. Your agents keep executing in the background, their checkouts remain isolated, and any waiting prompt is always flagged before it stalls your day.&lt;/p&gt;
</content:encoded><category>agents</category><category>multi-agent</category><category>workflow</category><category>failure-modes</category><category>tide</category><category>worktrees</category></item><item><title>A tour of TIDE, the terminal IDE for AI agents</title><link>https://srjn45.github.io/wdx/blog/tide-tour/</link><guid isPermaLink="true">https://srjn45.github.io/wdx/blog/tide-tour/</guid><description>Running multiple AI coding agents from raw terminal tabs quickly turns into a blind juggling act. TIDE pulls your agent fleet, worktree diffs, code, docs, and plans into one terminal window with zero context switching.</description><pubDate>Thu, 12 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Running multiple AI coding agents from raw terminal tabs quickly turns into a blind juggling act: you can’t tell who is waiting on a prompt, whose git diff is whose, or which agent is silently burning through its context window.&lt;/p&gt;
&lt;p&gt;TIDE—wdx’s Terminal IDE—pulls your entire agent fleet into one window: agents, worktree diffs, code, docs, plans, and shells, with zero context switching and no mouse required.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;the-problem-with-terminal-tabs&quot;&gt;The problem with terminal tabs&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;When you run three or four AI coding agents across multiple terminal windows or tabs, friction compounds rapidly:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“i use gnome terminal on my ubuntu and iTerm2 on mac on daily basis”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In traditional workflows across GNOME Terminal or iTerm2, running multiple agents usually means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Invisible blockers:&lt;/strong&gt; An agent stops in tab 4 to ask whether it should run a database migration or install a package. Unless you actively cycle through every tab, it sits idle for twenty minutes waiting for a simple &lt;code dir=&quot;auto&quot;&gt;yes&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context fragmentation:&lt;/strong&gt; You lose track of which branch belongs to which prompt, and inspecting an agent’s changes requires leaving the conversation to run manual &lt;code dir=&quot;auto&quot;&gt;git diff&lt;/code&gt; commands in a separate shell.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lost sessions:&lt;/strong&gt; If your terminal closes, SSH drops, or your laptop sleeps, interactive agent sessions running directly in foreground tabs often die abruptly.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;TIDE (&lt;code dir=&quot;auto&quot;&gt;wdx tide&lt;/code&gt;) is designed specifically around how AI coding agents work. Built directly into the &lt;code dir=&quot;auto&quot;&gt;wdx&lt;/code&gt; binary, TIDE is an interactive Bubble Tea terminal application that talks to the local background daemon. Agents and shells run in daemon-managed PTY holders—not inside your terminal window. Quitting TIDE leaves every agent working uninterrupted, and reopening &lt;code dir=&quot;auto&quot;&gt;wdx tide&lt;/code&gt; restores your exact layout, open tabs, cursors, and running processes.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;the-three-pane-layout&quot;&gt;The three-pane layout&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;TIDE replaces ad-hoc tab sprawl with a purposeful three-pane layout that dedicates space to project navigation, agent interaction, and system shells:&lt;/p&gt;
&lt;figure&gt;&lt;div&gt;&lt;svg viewBox=&quot;0 0 720 380&quot; role=&quot;img&quot; aria-label=&quot;TIDE layout architecture: Left is the multipurpose project pane taking 1/4 width, listing agents, worktrees, docs, plans, and code. Right is the agent workspace taking 3/4 width, displaying tabs for live agents, worktree diffs, rendered markdown docs, and in-tab terminal editors. Bottom is the docked terminal drawer taking 1/4 height, toggled with Ctrl+\. The entire interface is navigated via Alt+arrow keys, Ctrl+] zoom, and the Ctrl+q contextual menu.&quot;&gt;&lt;defs&gt;&lt;marker id=&quot;tp-a&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;tp-h&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;/defs&gt;&lt;g transform=&quot;translate(10, 10)&quot;&gt;&lt;rect width=&quot;180&quot; height=&quot;326&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;!-- Header --&gt;&lt;rect width=&quot;180&quot; height=&quot;28&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;rect y=&quot;18&quot; width=&quot;180&quot; height=&quot;10&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;12&quot; y=&quot;19&quot;&gt;Project (1/4)&lt;/text&gt;&lt;!-- Content Sections --&gt;&lt;g transform=&quot;translate(12, 42)&quot;&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot;&gt;▼ Agents&lt;/text&gt;&lt;text x=&quot;6&quot; y=&quot;18&quot;&gt;▼ notes-lead&lt;/text&gt;&lt;text x=&quot;120&quot; y=&quot;18&quot;&gt;work&lt;/text&gt;&lt;text x=&quot;14&quot; y=&quot;34&quot;&gt;└ count&lt;/text&gt;&lt;text font-weight=&quot;bold&quot; x=&quot;114&quot; y=&quot;34&quot;&gt;? yes/no&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;60&quot;&gt;▼ Worktrees&lt;/text&gt;&lt;text x=&quot;6&quot; y=&quot;78&quot;&gt;main&lt;/text&gt;&lt;text x=&quot;136&quot; y=&quot;78&quot;&gt;↑0&lt;/text&gt;&lt;rect x=&quot;0&quot; y=&quot;86&quot; width=&quot;156&quot; height=&quot;20&quot; rx=&quot;3&quot; fill=&quot;rgba(111,211,193,0.12)&quot;&gt;&lt;/rect&gt;&lt;text font-weight=&quot;bold&quot; x=&quot;6&quot; y=&quot;100&quot;&gt;▌ count-feat&lt;/text&gt;&lt;text x=&quot;126&quot; y=&quot;100&quot;&gt;↑1&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;126&quot;&gt;▼ Plans&lt;/text&gt;&lt;text x=&quot;6&quot; y=&quot;144&quot;&gt;release&lt;/text&gt;&lt;text x=&quot;120&quot; y=&quot;144&quot;&gt;● 2/4&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;170&quot;&gt;▼ Docs&lt;/text&gt;&lt;text x=&quot;6&quot; y=&quot;188&quot;&gt;DESIGN&lt;/text&gt;&lt;text x=&quot;98&quot; y=&quot;188&quot;&gt;approved&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;214&quot;&gt;▼ Code&lt;/text&gt;&lt;text x=&quot;6&quot; y=&quot;232&quot;&gt;notes.py&lt;/text&gt;&lt;text x=&quot;136&quot; y=&quot;232&quot;&gt;M&lt;/text&gt;&lt;/g&gt;&lt;!-- Bottom Pane Shortcut Hint --&gt;&lt;line x1=&quot;10&quot; y1=&quot;290&quot; x2=&quot;170&quot; y2=&quot;290&quot;&gt;&lt;/line&gt;&lt;text x=&quot;12&quot; y=&quot;306&quot;&gt;a new agent · t term&lt;/text&gt;&lt;text x=&quot;12&quot; y=&quot;320&quot;&gt;/ filter · s settings&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(200, 10)&quot;&gt;&lt;rect width=&quot;510&quot; height=&quot;234&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;!-- Tabs Header Strip --&gt;&lt;rect width=&quot;510&quot; height=&quot;28&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;rect y=&quot;18&quot; width=&quot;510&quot; height=&quot;10&quot;&gt;&lt;/rect&gt;&lt;!-- Inactive Tab --&gt;&lt;rect x=&quot;6&quot; y=&quot;4&quot; width=&quot;118&quot; height=&quot;22&quot; rx=&quot;4&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;16&quot; y=&quot;19&quot;&gt;notes-lead(-)&lt;/text&gt;&lt;!-- Active Tab (Diff) --&gt;&lt;rect x=&quot;128&quot; y=&quot;4&quot; width=&quot;150&quot; height=&quot;23&quot; rx=&quot;4&quot; fill=&quot;var(--raised)&quot;&gt;&lt;/rect&gt;&lt;text font-weight=&quot;bold&quot; x=&quot;138&quot; y=&quot;19&quot;&gt;diff: count-feat(-)&lt;/text&gt;&lt;!-- Tab 3 (Doc) --&gt;&lt;rect x=&quot;282&quot; y=&quot;4&quot; width=&quot;94&quot; height=&quot;22&quot; rx=&quot;4&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;292&quot; y=&quot;19&quot;&gt;DESIGN(-)&lt;/text&gt;&lt;text x=&quot;466&quot; y=&quot;19&quot;&gt;[⤢] C-]&lt;/text&gt;&lt;!-- Workspace Content (Diff View with inline comment) --&gt;&lt;g transform=&quot;translate(14, 46)&quot;&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot;&gt;@@ -20,6 +20,12 @@ def show():&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;18&quot;&gt;     for i, note in enumerate(load(), 1):&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;36&quot;&gt;+def count():&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;54&quot;&gt;+    print(f&quot;Total notes: {len(load())}&quot;)&lt;/text&gt;&lt;!-- Inline Comment Bubble --&gt;&lt;g transform=&quot;translate(16, 68)&quot;&gt;&lt;rect width=&quot;450&quot; height=&quot;42&quot; rx=&quot;6&quot; fill=&quot;rgba(111,211,193,0.08)&quot;&gt;&lt;/rect&gt;&lt;text font-weight=&quot;bold&quot; x=&quot;12&quot; y=&quot;18&quot;&gt;✎ line 22 · comment (c to write, s to batch send review)&lt;/text&gt;&lt;text x=&quot;12&quot; y=&quot;34&quot;&gt;&quot;Support singular &apos;1 note&apos; vs plural &apos;N notes&apos;&quot;&lt;/text&gt;&lt;/g&gt;&lt;text x=&quot;0&quot; y=&quot;132&quot;&gt; def main(argv):&lt;/text&gt;&lt;/g&gt;&lt;!-- Action Bar inside tab --&gt;&lt;line x1=&quot;10&quot; y1=&quot;206&quot; x2=&quot;500&quot; y2=&quot;206&quot;&gt;&lt;/line&gt;&lt;text x=&quot;14&quot; y=&quot;222&quot;&gt;c comment · s send review · L land worktree · [ ] next diff&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(200, 252)&quot;&gt;&lt;rect width=&quot;510&quot; height=&quot;84&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;!-- Drawer Tab Strip --&gt;&lt;rect width=&quot;510&quot; height=&quot;24&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;rect y=&quot;14&quot; width=&quot;510&quot; height=&quot;10&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;6&quot; y=&quot;3&quot; width=&quot;76&quot; height=&quot;18&quot; rx=&quot;3&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;14&quot; y=&quot;16&quot;&gt;shell(-)&lt;/text&gt;&lt;rect x=&quot;86&quot; y=&quot;3&quot; width=&quot;76&quot; height=&quot;18&quot; rx=&quot;3&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;94&quot; y=&quot;16&quot;&gt;tests(-)&lt;/text&gt;&lt;text x=&quot;444&quot; y=&quot;16&quot;&gt;C-\ drawer&lt;/text&gt;&lt;!-- Shell Content --&gt;&lt;g transform=&quot;translate(14, 40)&quot;&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot;&gt;$ pytest test_notes.py&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;18&quot;&gt;2 passed in 0.04s&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g transform=&quot;translate(10, 344)&quot;&gt;&lt;rect width=&quot;700&quot; height=&quot;26&quot; rx=&quot;4&quot;&gt;&lt;/rect&gt;&lt;text font-weight=&quot;bold&quot; x=&quot;10&quot; y=&quot;18&quot;&gt;notes&lt;/text&gt;&lt;text x=&quot;52&quot; y=&quot;18&quot;&gt;· agent · Alt+← / Alt+→ focus · Alt+↓ terminal · C-q menu · wdx 0.5.0&lt;/text&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;&lt;figcaption&gt;TIDE&apos;s three-pane layout: a 1/4 project navigator on the left, a 3/4 multi-tab agent workspace on the right, and a docked terminal drawer below toggled with C-\.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;The interface is structured into three distinct zones:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The Project pane (left, 1/4 width):&lt;/strong&gt; Your project’s central navigator. It organizes your work into five collapsible sections: &lt;strong&gt;Agents&lt;/strong&gt;, &lt;strong&gt;Worktrees&lt;/strong&gt;, &lt;strong&gt;Plans&lt;/strong&gt;, &lt;strong&gt;Docs&lt;/strong&gt;, and &lt;strong&gt;Code&lt;/strong&gt;. You can reorder or toggle any section with the &lt;code dir=&quot;auto&quot;&gt;tide.section_order&lt;/code&gt; setting.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Agent workspace (right, 3/4 width):&lt;/strong&gt; A tabbed canvas where live work happens. Each tab holds a live agent PTY, a git diff, a rendered Markdown doc, an interactive task graph, or an in-tab terminal editor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Terminal drawer (bottom, 1/4 docked height):&lt;/strong&gt; Project terminals and test runners docked at the bottom. Toggle it into view or hide it instantly with &lt;code dir=&quot;auto&quot;&gt;C-\&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h3 id=&quot;key-interception-philosophy&quot;&gt;Key interception philosophy&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Because agents and terminal editors require direct keystroke passthrough, TIDE takes almost zero global keys for itself:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Shortcut&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;Alt+←&lt;/code&gt; &lt;code dir=&quot;auto&quot;&gt;Alt+→&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cycle focus between the project pane and open workspace tabs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;Alt+↑&lt;/code&gt; &lt;code dir=&quot;auto&quot;&gt;Alt+↓&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Jump into the docked terminal drawer and back to the active workspace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;C-]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Zoom the focused pane to fill the entire window (and back)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;C-\&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Toggle the terminal drawer open or closed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;C-q&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Open the single-letter contextual action menu&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;C-q q&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Quit TIDE (all background agents and holders keep running)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;In the project pane, single letters dispatch common actions directly without &lt;code dir=&quot;auto&quot;&gt;C-q&lt;/code&gt;: &lt;code dir=&quot;auto&quot;&gt;a&lt;/code&gt; creates a new agent, &lt;code dir=&quot;auto&quot;&gt;t&lt;/code&gt; opens a new terminal, &lt;code dir=&quot;auto&quot;&gt;s&lt;/code&gt; jumps to settings, &lt;code dir=&quot;auto&quot;&gt;/&lt;/code&gt; starts fuzzy filtering, and &lt;code dir=&quot;auto&quot;&gt;q&lt;/code&gt; exits. Inside agent and shell panes, every single keypress is forwarded untouched to the underlying program.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;mouse-support-and-persistence&quot;&gt;Mouse support and persistence&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;While optimized for keyboard navigation, TIDE includes full mouse support:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Click any pane to focus it, or click a row or tab to select it.&lt;/li&gt;
&lt;li&gt;Scroll through conversation histories, diffs, and files with the mouse wheel.&lt;/li&gt;
&lt;li&gt;Double-click any pane’s frame (or its &lt;code dir=&quot;auto&quot;&gt;[⤢]&lt;/code&gt; indicator) to toggle full-screen zoom.&lt;/li&gt;
&lt;li&gt;Click and drag text within any pane to select and copy directly to your system clipboard via OSC 52.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;the-full-agent-lifecycle&quot;&gt;The full agent lifecycle&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The core strength of TIDE is orchestrating an agent’s entire lifecycle without ever leaving your terminal:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“agents and plans, mostly the ease of use with tide makes life easier”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“i check the diff and leave comments for the agent”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here is what that lifecycle looks like in action on our toy &lt;code dir=&quot;auto&quot;&gt;notes&lt;/code&gt; repository: a lead coordinator spawns a child agent in an isolated git worktree, the child writes code, you review the live diff and leave inline review comments with &lt;code dir=&quot;auto&quot;&gt;c&lt;/code&gt;, batch-send the review with &lt;code dir=&quot;auto&quot;&gt;s&lt;/code&gt;, the agent addresses the feedback live, and you land the change back to &lt;code dir=&quot;auto&quot;&gt;main&lt;/code&gt; with one key (&lt;code dir=&quot;auto&quot;&gt;L&lt;/code&gt;):&lt;/p&gt;
&lt;figure&gt;&lt;video autoplay loop muted playsinline aria-label=&quot;A terminal recording: wdx agent list shows coordinator and child count agent; TIDE displays the project hierarchy; navigating to notes-count diff; leaving inline review comments with c; batch-sending review with s; the agent addresses feedback live; one-key land with L; removing the worktree and child agent terminates cleanly&quot;&gt;&lt;source src=&quot;/wdx/blog/tide-tour/tide-tour.webm&quot; type=&quot;video/webm&quot;&gt;&lt;source src=&quot;/wdx/blog/tide-tour/tide-tour.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/video&gt;&lt;figcaption&gt;The full agent lifecycle in TIDE: parent coordinator spawns a child in a worktree, user reviews the diff and leaves inline comments (c), batch-sends review (s), agent addresses feedback, one-key land (L), and clean termination.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Here is the step-by-step loop:&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Spawn child agent in a worktree:&lt;/strong&gt; A parent coordinator agent launches a specialized child agent (&lt;code dir=&quot;auto&quot;&gt;count&lt;/code&gt;) in an isolated worktree (&lt;code dir=&quot;auto&quot;&gt;.worktrees/notes-count&lt;/code&gt;). The child appears indented under its parent (&lt;code dir=&quot;auto&quot;&gt;└ count&lt;/code&gt;) in the Agents section.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Review the live git diff:&lt;/strong&gt; You navigate to the &lt;code dir=&quot;auto&quot;&gt;notes-count&lt;/code&gt; worktree in the project pane and press &lt;code dir=&quot;auto&quot;&gt;o&lt;/code&gt; to open its diff tab. TIDE monitors filesystem and git events via inotify—no manual refreshes needed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Leave inline review comments (&lt;code dir=&quot;auto&quot;&gt;c&lt;/code&gt;):&lt;/strong&gt; Position your cursor on any added or modified line in the diff and press &lt;code dir=&quot;auto&quot;&gt;c&lt;/code&gt;. A comment box pops up: type your feedback (such as &lt;em&gt;“Support singular ‘1 note’ vs plural ‘N notes’”&lt;/em&gt;) and press &lt;code dir=&quot;auto&quot;&gt;Enter&lt;/code&gt;. The comment is pinned directly beneath the line with a &lt;code dir=&quot;auto&quot;&gt;✎&lt;/code&gt; indicator.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Batch-send review comments (&lt;code dir=&quot;auto&quot;&gt;s&lt;/code&gt;):&lt;/strong&gt; Rather than interrupting the agent for each individual comment, draft multiple notes across the diff. Press &lt;code dir=&quot;auto&quot;&gt;s&lt;/code&gt; in the worktree tab to bundle all comments into a single review message dispatched to the agent’s inbox.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent resolves feedback and commits (&lt;code dir=&quot;auto&quot;&gt;C&lt;/code&gt;):&lt;/strong&gt; The agent reads the review and updates &lt;code dir=&quot;auto&quot;&gt;notes.py&lt;/code&gt;. TIDE’s inotify watcher updates the live diff on screen in real time. Press &lt;code dir=&quot;auto&quot;&gt;C&lt;/code&gt; in the tab to ask the agent to commit the uncommitted changes, flipping the tab directly to the committed view with &lt;code dir=&quot;auto&quot;&gt;L land&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One-key atomic landing (&lt;code dir=&quot;auto&quot;&gt;L&lt;/code&gt;):&lt;/strong&gt; With changes verified, press &lt;code dir=&quot;auto&quot;&gt;L&lt;/code&gt; inside the worktree tab. TIDE validates project landing checks, executes an atomic rebase onto &lt;code dir=&quot;auto&quot;&gt;main&lt;/code&gt;, and prompts to remove the temporary worktree.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clean termination:&lt;/strong&gt; Confirming worktree removal automatically ends the child agent and frees up disk space, leaving your branch clean and linear.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h2 id=&quot;answering-waiting-agents&quot;&gt;Answering waiting agents&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;AI coding agents frequently stop to ask permission before executing terminal commands or modifying sensitive files.&lt;/p&gt;
&lt;p&gt;In raw terminal tabs, these prompts are silent stalls. In TIDE, any agent waiting on human input immediately highlights in amber:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The agent’s mark changes to &lt;code dir=&quot;auto&quot;&gt;?&lt;/code&gt; and its status row reads &lt;code dir=&quot;auto&quot;&gt;yes/no&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;decision&lt;/code&gt; (for Claude Code), or &lt;code dir=&quot;auto&quot;&gt;waiting&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If child agents are nested under a folded parent, the parent row displays an amber &lt;code dir=&quot;auto&quot;&gt;N waiting&lt;/code&gt; badge so no child agent is overlooked.&lt;/li&gt;
&lt;li&gt;Press &lt;code dir=&quot;auto&quot;&gt;Enter&lt;/code&gt; on the row to preview its session, or &lt;code dir=&quot;auto&quot;&gt;o&lt;/code&gt; to open the tab and switch focus directly into it.&lt;/li&gt;
&lt;li&gt;Answer the prompt using your keyboard as you normally would. The moment the agent resumes work, the row shifts back to green &lt;code dir=&quot;auto&quot;&gt;working&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;browsing-code--in-tab-edits&quot;&gt;Browsing code &amp;#x26; in-tab edits&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Beyond diff reviews, TIDE provides a built-in &lt;strong&gt;Code&lt;/strong&gt; section that lets you explore any worktree as a file tree without switching windows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Git status annotations:&lt;/strong&gt; Files in the tree display their git status flags (&lt;code dir=&quot;auto&quot;&gt;M&lt;/code&gt; for modified, &lt;code dir=&quot;auto&quot;&gt;A&lt;/code&gt; for added, &lt;code dir=&quot;auto&quot;&gt;?&lt;/code&gt; for untracked).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Syntax-highlighted viewing:&lt;/strong&gt; Press &lt;code dir=&quot;auto&quot;&gt;Enter&lt;/code&gt; on any file to open it in a syntax-highlighted read-only viewer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rendered Markdown (&lt;code dir=&quot;auto&quot;&gt;m&lt;/code&gt;):&lt;/strong&gt; When viewing documentation or specs, press &lt;code dir=&quot;auto&quot;&gt;m&lt;/code&gt; to toggle between rich terminal rendering (powered by Glamour) and raw Markdown source.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;In-tab terminal editor (&lt;code dir=&quot;auto&quot;&gt;e&lt;/code&gt;):&lt;/strong&gt; Need to tweak a configuration setting or fix a typo manually? Press &lt;code dir=&quot;auto&quot;&gt;e&lt;/code&gt; to open the file inside your configured editor (&lt;code dir=&quot;auto&quot;&gt;vim&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;nvim&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;nano&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;hx&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;emacs&lt;/code&gt;) directly in a workspace tab. When you save and exit, the tab seamlessly reverts to its read-only viewer and reloads the modified contents.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fuzzy filter (&lt;code dir=&quot;auto&quot;&gt;/&lt;/code&gt;):&lt;/strong&gt; Pressing &lt;code dir=&quot;auto&quot;&gt;/&lt;/code&gt; in the project pane activates an instant fuzzy search that filters across all sections simultaneously—matching agents, worktree paths, doc titles, and plan tasks. Press &lt;code dir=&quot;auto&quot;&gt;Esc&lt;/code&gt; to clear.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;living-docs--ascii-plan-graphs&quot;&gt;Living docs &amp;#x26; ASCII plan graphs&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Complex multi-agent engineering requires shared context. TIDE brings project documentation and orchestration graphs directly into view:&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;living-architecture-specs&quot;&gt;Living architecture specs&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Project docs managed via &lt;code dir=&quot;auto&quot;&gt;wdx doc&lt;/code&gt; live in the project pane’s &lt;strong&gt;Docs&lt;/strong&gt; section. Each doc displays its current revision and status badge (&lt;code dir=&quot;auto&quot;&gt;approved&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;wip&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;review&lt;/code&gt;). Opening a doc renders its formatting, tables, and links cleanly in the terminal, updating automatically whenever an agent updates a spec.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;ascii-plan-graphs&quot;&gt;ASCII plan graphs&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;When running multi-task features via &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/plans/&quot;&gt;wdx plans&lt;/a&gt;, TIDE visualizes the entire execution DAG:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Parallel execution slots are drawn as multi-lane graph rails (reminiscent of &lt;code dir=&quot;auto&quot;&gt;git log --graph&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Task rows display status marks: &lt;code dir=&quot;auto&quot;&gt;✓&lt;/code&gt; done, &lt;code dir=&quot;auto&quot;&gt;●&lt;/code&gt; working, &lt;code dir=&quot;auto&quot;&gt;○&lt;/code&gt; waiting, or &lt;code dir=&quot;auto&quot;&gt;✕&lt;/code&gt; failed.&lt;/li&gt;
&lt;li&gt;The task inspector panel on the right details the selected task’s prompt, requirements (&lt;code dir=&quot;auto&quot;&gt;▲&lt;/code&gt;), unblocked downstream tasks (&lt;code dir=&quot;auto&quot;&gt;▼&lt;/code&gt;), and execution slot.&lt;/li&gt;
&lt;li&gt;Inspect failed tasks, trigger retries (&lt;code dir=&quot;auto&quot;&gt;r&lt;/code&gt;), pause running pipelines (&lt;code dir=&quot;auto&quot;&gt;p&lt;/code&gt;), or view task summaries without leaving TIDE.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;contextual-menu--in-place-settings&quot;&gt;Contextual menu &amp;#x26; in-place settings&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;TIDE never forces you to memorize dozens of esoteric key combinations:&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;the-contextual-menu-c-q&quot;&gt;The contextual menu (&lt;code dir=&quot;auto&quot;&gt;C-q&lt;/code&gt;)&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Pressing &lt;code dir=&quot;auto&quot;&gt;C-q&lt;/code&gt; opens a single-letter action menu tailored specifically to your current focus:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On an agent: &lt;code dir=&quot;auto&quot;&gt;i&lt;/code&gt; for detailed info, &lt;code dir=&quot;auto&quot;&gt;c&lt;/code&gt; to spawn a child, &lt;code dir=&quot;auto&quot;&gt;r&lt;/code&gt; to rename, &lt;code dir=&quot;auto&quot;&gt;R&lt;/code&gt; to start a fresh session, &lt;code dir=&quot;auto&quot;&gt;x&lt;/code&gt; to remove.&lt;/li&gt;
&lt;li&gt;On a worktree: &lt;code dir=&quot;auto&quot;&gt;L&lt;/code&gt; to land, &lt;code dir=&quot;auto&quot;&gt;C&lt;/code&gt; to ask the agent to commit, &lt;code dir=&quot;auto&quot;&gt;R&lt;/code&gt; to rebase, &lt;code dir=&quot;auto&quot;&gt;v&lt;/code&gt; to mark a file verified.&lt;/li&gt;
&lt;li&gt;In Code: &lt;code dir=&quot;auto&quot;&gt;e&lt;/code&gt; to edit, &lt;code dir=&quot;auto&quot;&gt;n&lt;/code&gt; for new file, &lt;code dir=&quot;auto&quot;&gt;N&lt;/code&gt; for new folder, &lt;code dir=&quot;auto&quot;&gt;r&lt;/code&gt; to rename.&lt;/li&gt;
&lt;li&gt;Global commands: &lt;code dir=&quot;auto&quot;&gt;a&lt;/code&gt; for new agent form, &lt;code dir=&quot;auto&quot;&gt;t&lt;/code&gt; for new terminal, &lt;code dir=&quot;auto&quot;&gt;s&lt;/code&gt; for settings, &lt;code dir=&quot;auto&quot;&gt;S&lt;/code&gt; for stats, &lt;code dir=&quot;auto&quot;&gt;q&lt;/code&gt; to quit.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Every menu shortcut executes immediately upon pressing its letter.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;in-place-settings-c-q-s&quot;&gt;In-place settings (&lt;code dir=&quot;auto&quot;&gt;C-q s&lt;/code&gt;)&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Pressing &lt;code dir=&quot;auto&quot;&gt;C-q s&lt;/code&gt; opens an interactive settings tab displaying every wdx configuration option:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cycle through choices for options like &lt;code dir=&quot;auto&quot;&gt;tide.theme&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;tide.section_order&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;editor&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;log.level&lt;/code&gt; using &lt;code dir=&quot;auto&quot;&gt;←&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;→&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Press &lt;code dir=&quot;auto&quot;&gt;Enter&lt;/code&gt; on any text value to edit in place.&lt;/li&gt;
&lt;li&gt;Changes are written atomically to &lt;code dir=&quot;auto&quot;&gt;~/.wdx/config.yaml&lt;/code&gt; and reloaded live by the daemon without requiring a restart.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;account-stats--quotas-c-q-s&quot;&gt;Account stats &amp;#x26; quotas (&lt;code dir=&quot;auto&quot;&gt;C-q S&lt;/code&gt;)&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Running fleets of AI coding agents makes tracking rate limits and account quotas essential.&lt;/p&gt;
&lt;p&gt;Pressing &lt;code dir=&quot;auto&quot;&gt;C-q S&lt;/code&gt; opens the machine-wide &lt;strong&gt;Stats&lt;/strong&gt; tab &lt;span&gt;since 0.5.0&lt;/span&gt;, providing live usage monitoring across all supported AI CLIs:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;┬─[● coordinator(-)]─[stats(-)]──────────────────────────[⤢]─┐&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;claude_code:                available&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Session (5 h):            54% ▰▰▰▰▰▱▱▱▱▱  resets in 2 h 10 min&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Week:                     51% ▰▰▰▰▰▱▱▱▱▱  resets Nov 19 10:00&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;as of:                    12:46&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;antigravity Gemini models:  available&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Session (5 h):            12% ▰▱▱▱▱▱▱▱▱▱  resets in 4 h 02 min&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Week:                     30% ▰▰▰▱▱▱▱▱▱▱  resets Nov 20 08:00&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;as of:                    12:45&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;codex:                      available&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Session (5 h):            16% ▰▰▱▱▱▱▱▱▱▱  resets in 3 h 45 min&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Zero overhead:&lt;/strong&gt; TIDE extracts limits directly from the status lines and session files already maintained by each CLI. It never makes extra API requests or injects prompts into agent sessions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-window tracking:&lt;/strong&gt; View both 5-hour rolling session windows and weekly quotas. Countdown timers update every minute.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automated fleet badges:&lt;/strong&gt; If a quota window is exhausted, any agent relying on that model bucket is automatically tagged with a red &lt;code dir=&quot;auto&quot;&gt;limited&lt;/code&gt; badge in the Agents list, disappearing on its own when the reset window passes.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;remote-access&quot;&gt;Remote access&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Need to check on an agent fleet running on your office workstation or a cloud dev machine?&lt;/p&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;wdx tide --node &amp;#x3C;name&gt;&lt;/code&gt; &lt;span&gt;since 0.5.0&lt;/span&gt; connects to TIDE running on any node associated with your account through the self-hosted &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/hub/&quot;&gt;wdx hub&lt;/a&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tide&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--node&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;desk&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Encrypted tunnel:&lt;/strong&gt; Connections run over an authenticated TLS 1.3 tunnel established with CPace and your host authenticator code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unmistakable remote status:&lt;/strong&gt; The TIDE status line turns bright cyan and displays the remote host prefix (&lt;code dir=&quot;auto&quot;&gt;desk › notes · agent&lt;/code&gt;), and the window title updates to &lt;code dir=&quot;auto&quot;&gt;wdx tide · desk&lt;/code&gt;. You will never confuse a remote environment with your local machine.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Host session oversight:&lt;/strong&gt; While a remote session is connected to your machine, pressing &lt;code dir=&quot;auto&quot;&gt;C-q H&lt;/code&gt; lists active client sessions, and the status bar displays &lt;code dir=&quot;auto&quot;&gt;remote: &amp;#x3C;node&gt;&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;summary--getting-started&quot;&gt;Summary &amp;#x26; Getting Started&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Managing multiple AI coding agents shouldn’t require dozens of disconnected tabs, manual diff checks, or lost terminal sessions.&lt;/p&gt;
&lt;p&gt;TIDE consolidates your entire agent fleet into a fast, keyboard-driven terminal environment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Monitor multiple agents and child processes in a structured tree.&lt;/li&gt;
&lt;li&gt;Review git diffs and leave inline feedback directly where work happens.&lt;/li&gt;
&lt;li&gt;Browse worktree files, edit documentation, and track plans in real time.&lt;/li&gt;
&lt;li&gt;Keep tabs on account quotas and rate limits across Claude Code, Antigravity, Codex, and Cursor.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To install &lt;code dir=&quot;auto&quot;&gt;wdx&lt;/code&gt; and take TIDE for a spin:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Install wdx on macOS or Linux&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-fsSL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://srjn45.github.io/wdx/install.sh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Open your project in TIDE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;your-project&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tide&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;For detailed guides and reference documentation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Explore the &lt;a href=&quot;https://srjn45.github.io/wdx/docs/tide/layout/&quot;&gt;TIDE Layout Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Learn about &lt;a href=&quot;https://srjn45.github.io/wdx/docs/tide/worktrees/&quot;&gt;Worktrees and Diffs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Read about &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/child-agents/&quot;&gt;Child Agents and Orchestration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Check out the project on &lt;a href=&quot;https://github.com/srjn45/wdx&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>tide</category><category>terminal</category><category>agents</category><category>ide</category><category>workflow</category></item><item><title>Claude Code, Codex, Cursor and Antigravity under one tool</title><link>https://srjn45.github.io/wdx/blog/four-acas/</link><guid isPermaLink="true">https://srjn45.github.io/wdx/blog/four-acas/</guid><description>Every AI coding CLI comes with its own terminal quirks, session formats, and permission models. Here is how wdx normalizes Claude Code, Codex, Cursor, and Antigravity into one uniform agent fleet.</description><pubDate>Thu, 12 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Every AI coding CLI makes its own assumptions about terminal screens, keybindings, session files, and permissions. Run four of them on the same machine and you spend more time translating between their quirks than writing code.&lt;/p&gt;
&lt;p&gt;One tool demands alternate screens and mouse tracking; another saves SQLite databases under internal cache paths; a third expects proprietary plugin hooks for context injection; and a fourth reads developer instructions from JSONL rollout logs.&lt;/p&gt;
&lt;p&gt;wdx treats them all as engines behind a single interface. Whether you run Anthropic’s Claude Code, OpenAI’s Codex, Cursor’s CLI agent, or Google’s Antigravity CLI, every agent operates under the same lifecycle: daemon-managed PTY holders, isolated git worktrees, screen-based state detection, non-blocking inbox queues, and unified token and quota telemetry.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;the-fragmentation-of-ai-clis&quot;&gt;The fragmentation of AI CLIs&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The terminal-based AI coding assistant landscape has exploded over the past year. But having access to state-of-the-art models across different providers came with severe operational friction:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Different mental models:&lt;/strong&gt; Each tool invents its own workflow. Some expect you to approve permissions via full-screen terminal dialogs; others require custom command-line flags. Keybindings for interrupting turns, submitting follow-up messages, or clearing context differ wildly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scattered session state:&lt;/strong&gt; When an agent finishes a task, its conversation is locked inside proprietary storage—flat JSONL logs in &lt;code dir=&quot;auto&quot;&gt;~/.codex/sessions/&lt;/code&gt;, SQLite databases in &lt;code dir=&quot;auto&quot;&gt;~/.gemini/antigravity-cli/&lt;/code&gt;, or agent-specific chat directories in &lt;code dir=&quot;auto&quot;&gt;~/.cursor/&lt;/code&gt;. Resuming work or extracting a prompt transcript requires remembering where each CLI hid its data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Provider lock-in vs. personal preference:&lt;/strong&gt; Different developers on a team prefer different tools based on familiarity, token costs, or specific model capabilities:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“I personally use claude code more as compared to others and the reason for preference is just more familiarity with the product, and that is the reason I built wdx to work with multiple ACAs as everyone can have different preference but can still benefit from the wdx”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rather than forcing everyone into one CLI ecosystem, wdx defines a clean abstraction called an &lt;strong&gt;ACA&lt;/strong&gt; (&lt;em&gt;AI Coding Agent&lt;/em&gt;). You choose the CLI per agent (&lt;code dir=&quot;auto&quot;&gt;--aca claude_code&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;--aca codex&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;--aca cursor&lt;/code&gt;, or &lt;code dir=&quot;auto&quot;&gt;--aca antigravity&lt;/code&gt;), and wdx adapts its runtime to fit.&lt;/p&gt;
&lt;figure&gt;&lt;div&gt;&lt;svg viewBox=&quot;0 0 720 380&quot; role=&quot;img&quot; aria-label=&quot;Architecture of wdx multi-ACA support: TIDE and CLI interact with the background daemon and holder PTYs, which adapt Claude Code, Codex, Cursor, and Antigravity into a unified protocol.&quot;&gt;&lt;defs&gt;&lt;marker id=&quot;acas-a&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;acas-h&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;/defs&gt;&lt;text x=&quot;20&quot; y=&quot;22&quot;&gt;User &amp;#x26; Interface Layer&lt;/text&gt;&lt;rect x=&quot;20&quot; y=&quot;34&quot; width=&quot;325&quot; height=&quot;42&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;36&quot; y=&quot;60&quot;&gt;wdx tide&lt;/text&gt;&lt;text x=&quot;120&quot; y=&quot;60&quot;&gt;Terminal IDE · panes &amp;#x26; diff review&lt;/text&gt;&lt;rect x=&quot;375&quot; y=&quot;34&quot; width=&quot;325&quot; height=&quot;42&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;391&quot; y=&quot;60&quot;&gt;wdx CLI &amp;#x26; scripts&lt;/text&gt;&lt;text x=&quot;525&quot; y=&quot;60&quot;&gt;--json · agent fleet orchestration&lt;/text&gt;&lt;path d=&quot;M182 76 V108&quot; marker-end=&quot;url(#acas-a)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M537 76 V108&quot; marker-end=&quot;url(#acas-a)&quot;&gt;&lt;/path&gt;&lt;rect x=&quot;20&quot; y=&quot;110&quot; width=&quot;680&quot; height=&quot;72&quot; rx=&quot;10&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;36&quot; y=&quot;136&quot;&gt;wdx daemon &amp;#x26; PTY holders&lt;/text&gt;&lt;text x=&quot;260&quot; y=&quot;136&quot;&gt;unix domain socket · outlives terminal session&lt;/text&gt;&lt;g transform=&quot;translate(36, 148)&quot; font-family=&quot;var(--mono)&quot; font-size=&quot;11&quot;&gt;&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;145&quot; height=&quot;24&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot; stroke=&quot;var(--line)&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;10&quot; y=&quot;16&quot;&gt;vt screen parser&lt;/text&gt;&lt;rect x=&quot;155&quot; y=&quot;0&quot; width=&quot;155&quot; height=&quot;24&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot; stroke=&quot;var(--line)&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;10&quot; y=&quot;16&quot; transform=&quot;translate(155, 0)&quot;&gt;worktree isolation&lt;/text&gt;&lt;rect x=&quot;320&quot; y=&quot;0&quot; width=&quot;165&quot; height=&quot;24&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot; stroke=&quot;var(--line)&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;10&quot; y=&quot;16&quot; transform=&quot;translate(320, 0)&quot;&gt;inbox steering queue&lt;/text&gt;&lt;rect x=&quot;495&quot; y=&quot;0&quot; width=&quot;155&quot; height=&quot;24&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot; stroke=&quot;var(--line)&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;10&quot; y=&quot;16&quot; transform=&quot;translate(495, 0)&quot;&gt;account usage quota&lt;/text&gt;&lt;/g&gt;&lt;path d=&quot;M100 182 V222&quot; marker-end=&quot;url(#acas-h)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M270 182 V222&quot; marker-end=&quot;url(#acas-h)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M450 182 V222&quot; marker-end=&quot;url(#acas-h)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M620 182 V222&quot; marker-end=&quot;url(#acas-h)&quot;&gt;&lt;/path&gt;&lt;g transform=&quot;translate(20, 224)&quot;&gt;&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;160&quot; height=&quot;136&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;12&quot; y=&quot;24&quot;&gt;Claude Code&lt;/text&gt;&lt;text x=&quot;12&quot; y=&quot;42&quot;&gt;claude (2.1.319)&lt;/text&gt;&lt;line x1=&quot;12&quot; y1=&quot;52&quot; x2=&quot;148&quot; y2=&quot;52&quot; stroke=&quot;var(--line)&quot;&gt;&lt;/line&gt;&lt;text x=&quot;12&quot; y=&quot;70&quot;&gt;· no alt-screen&lt;/text&gt;&lt;text x=&quot;12&quot; y=&quot;88&quot;&gt;· prompt parsing&lt;/text&gt;&lt;text x=&quot;12&quot; y=&quot;106&quot;&gt;· C-x C-s SendNow&lt;/text&gt;&lt;text x=&quot;12&quot; y=&quot;124&quot;&gt;· append sysprompt&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(193, 224)&quot;&gt;&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;160&quot; height=&quot;136&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;12&quot; y=&quot;24&quot;&gt;Codex&lt;/text&gt;&lt;text x=&quot;12&quot; y=&quot;42&quot;&gt;codex (0.163.0)&lt;/text&gt;&lt;line x1=&quot;12&quot; y1=&quot;52&quot; x2=&quot;148&quot; y2=&quot;52&quot; stroke=&quot;var(--line)&quot;&gt;&lt;/line&gt;&lt;text x=&quot;12&quot; y=&quot;70&quot;&gt;· developer_inst&lt;/text&gt;&lt;text x=&quot;12&quot; y=&quot;88&quot;&gt;· rollout jsonl&lt;/text&gt;&lt;text x=&quot;12&quot; y=&quot;106&quot;&gt;· notify turns&lt;/text&gt;&lt;text x=&quot;12&quot; y=&quot;124&quot;&gt;· codex resume&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(366, 224)&quot;&gt;&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;160&quot; height=&quot;136&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;12&quot; y=&quot;24&quot;&gt;Cursor&lt;/text&gt;&lt;text x=&quot;12&quot; y=&quot;42&quot;&gt;cursor-agent&lt;/text&gt;&lt;line x1=&quot;12&quot; y1=&quot;52&quot; x2=&quot;148&quot; y2=&quot;52&quot; stroke=&quot;var(--line)&quot;&gt;&lt;/line&gt;&lt;text x=&quot;12&quot; y=&quot;70&quot;&gt;· config folder&lt;/text&gt;&lt;text x=&quot;12&quot; y=&quot;88&quot;&gt;· plugin hook&lt;/text&gt;&lt;text x=&quot;12&quot; y=&quot;106&quot;&gt;· store.db SQLite&lt;/text&gt;&lt;text x=&quot;12&quot; y=&quot;124&quot;&gt;· synthetic status&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(540, 224)&quot;&gt;&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;160&quot; height=&quot;136&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;12&quot; y=&quot;24&quot;&gt;Antigravity&lt;/text&gt;&lt;text x=&quot;12&quot; y=&quot;42&quot;&gt;agy (1.5.2)&lt;/text&gt;&lt;line x1=&quot;12&quot; y1=&quot;52&quot; x2=&quot;148&quot; y2=&quot;52&quot; stroke=&quot;var(--line)&quot;&gt;&lt;/line&gt;&lt;text x=&quot;12&quot; y=&quot;70&quot;&gt;· AGENTS.md rules&lt;/text&gt;&lt;text x=&quot;12&quot; y=&quot;88&quot;&gt;· SQLite snapshots&lt;/text&gt;&lt;text x=&quot;12&quot; y=&quot;106&quot;&gt;· Alt+M steering&lt;/text&gt;&lt;text x=&quot;12&quot; y=&quot;124&quot;&gt;· statusline token&lt;/text&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;&lt;figcaption&gt;wdx normalizes four distinct AI CLIs into one interface: identical worktree isolation, vt state detection, inbox message delivery, and unified usage tracking.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;one-protocol-for-all-four&quot;&gt;One protocol for all four&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Under the hood, wdx does not rewrite or fork these tools. It runs the exact official CLI binaries you already have installed (&lt;code dir=&quot;auto&quot;&gt;claude&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;codex&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;cursor-agent&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;agy&lt;/code&gt;) inside a managed pseudo-terminal (PTY) owned by a long-running background daemon.&lt;/p&gt;
&lt;p&gt;This architecture gives every agent five core guarantees regardless of which provider runs it:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Terminal isolation:&lt;/strong&gt; Agents run in independent holder processes. If you close your terminal emulator, disconnect SSH, or reboot your window manager, the agents continue working. Reconnecting via &lt;code dir=&quot;auto&quot;&gt;wdx tide&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;wdx agent attach&lt;/code&gt; instantly restores the screen.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Worktree isolation:&lt;/strong&gt; Agents never collide on the filesystem. &lt;code dir=&quot;auto&quot;&gt;--worktree &amp;#x3C;name&gt;&lt;/code&gt; automatically creates a dedicated git worktree in &lt;code dir=&quot;auto&quot;&gt;.worktrees/&amp;#x3C;name&gt;&lt;/code&gt;, branching from HEAD. Claude Code and Codex can modify the same files simultaneously in separate checkouts without dirtying your main tree.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VT-based screen engine:&lt;/strong&gt; Instead of relying on brittle terminal scrapers or vendor-specific telemetry APIs, wdx runs a headless virtual terminal (VT) for each agent. It parses screen output in real time to classify the agent’s state: &lt;code dir=&quot;auto&quot;&gt;working&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;idle&lt;/code&gt;, or &lt;code dir=&quot;auto&quot;&gt;waiting&lt;/code&gt; on human input.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reliable inbox steering:&lt;/strong&gt; When you send an agent instructions with &lt;code dir=&quot;auto&quot;&gt;wdx agent send&lt;/code&gt;, wdx queues the message in an inbox. It waits until the agent’s PTY is in raw mode and capable of accepting keystrokes before pasting the input, preventing dropped keys. For instant interruptions (&lt;code dir=&quot;auto&quot;&gt;--instant&lt;/code&gt;), wdx executes the CLI’s native steering shortcuts to gracefully background running tasks or stop output generation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clean docs and structured plans:&lt;/strong&gt; Running multiple agents quickly produces coordination chaos if task definitions and architecture specs remain unmanaged. wdx stores project documents and dependency-driven task DAGs directly in its daemon database:&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“wdx docs &amp;#x26; plans are really helpful, even if you prefer to keep your shared/published docs in google docs/ notion/ confluence etc, i’d still suggest to utilise wdx for local docs that you generate while planning and brainstroming before publishing to wider audiance, as previously i used to have mess of local uncommitted md files generated temporarily, and then overtime would forget where each file sits and what was the purpose of it, but with wdx docs the git tree is clean, all the files are in one place and is easier to find. and apart from the local docs, the plans really help me get more hands free time, as once i have done a proper planning i can leave it to wdx to execute 1 step after the other”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here is a recording showing all four AI coding agents running together on a demo repository—inspecting available ACAs, checking account usage across providers, viewing active agents in the CLI, and navigating them inside TIDE:&lt;/p&gt;
&lt;figure&gt;&lt;video autoplay loop muted playsinline aria-label=&quot;A terminal recording showing wdx agent acas listing all four CLIs, wdx usage reporting quota windows across Claude, Codex, Cursor, and Antigravity, wdx agent list showing all four agents active, and wdx tide seamlessly navigating between them&quot;&gt;&lt;source src=&quot;/wdx/blog/four-acas/four-acas.webm&quot; type=&quot;video/webm&quot;&gt;&lt;source src=&quot;/wdx/blog/four-acas/four-acas.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/video&gt;&lt;figcaption&gt;Claude Code, Codex, Cursor, and Antigravity running side by side under wdx: unified rate limits, status tracking, and TIDE fleet management.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;under-the-hood-adapting-to-four-different-engines&quot;&gt;Under the hood: Adapting to four different engines&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Translating four distinct AI engines into a uniform protocol requires understanding the exact quirks, flags, and filesystem behaviors of each CLI.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;claude-code-claude_code&quot;&gt;Claude Code (&lt;code dir=&quot;auto&quot;&gt;claude_code&lt;/code&gt;)&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Anthropic’s Claude Code CLI (&lt;code dir=&quot;auto&quot;&gt;claude&lt;/code&gt;) is the default ACA when installed. It exposes the richest terminal interface, which wdx adapts with surgical configuration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Disabling mouse and alternate screen:&lt;/strong&gt; By default, Claude Code hijacks the terminal’s alternate screen buffer and intercepts mouse clicks. wdx launches it with &lt;code dir=&quot;auto&quot;&gt;CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN=1&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;CLAUDE_CODE_DISABLE_MOUSE=1&lt;/code&gt;. This preserves full terminal scrollback and allows TIDE to handle mouse scrolling natively.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interactive prompt parsing:&lt;/strong&gt; Claude Code is currently the only ACA where wdx parses structured question dialogs from the screen buffer. When Claude asks for confirmation (&lt;code dir=&quot;auto&quot;&gt;yes/no&lt;/code&gt;) or presents multiple choices (&lt;code dir=&quot;auto&quot;&gt;decision&lt;/code&gt;), wdx extracts the prompt and options, surfacing them directly in &lt;code dir=&quot;auto&quot;&gt;wdx agent get&lt;/code&gt; and TIDE’s prompt overlay.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SendNow steering:&lt;/strong&gt; To deliver high-priority instructions during a long generation, wdx uses Claude’s &lt;code dir=&quot;auto&quot;&gt;Ctrl+X Ctrl+S&lt;/code&gt; shortcut. A running command is shifted into the background rather than killed, and subsequent follow-up text is injected immediately.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Launch note injection:&lt;/strong&gt; wdx injects its operational rules (&lt;code dir=&quot;auto&quot;&gt;AGENTS.md&lt;/code&gt; instructions on how to use &lt;code dir=&quot;auto&quot;&gt;wdx agent send&lt;/code&gt;, docs, and plans) via &lt;code dir=&quot;auto&quot;&gt;--append-system-prompt&lt;/code&gt; on every start and resume.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;codex-codex&quot;&gt;Codex (&lt;code dir=&quot;auto&quot;&gt;codex&lt;/code&gt;)&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;OpenAI’s Codex CLI (&lt;code dir=&quot;auto&quot;&gt;codex&lt;/code&gt;) operates through dated rollout files and custom turn notifications:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Developer instructions:&lt;/strong&gt; Codex does not provide a direct CLI flag to append system prompts. Instead, wdx feeds its operational guidelines through Codex’s &lt;code dir=&quot;auto&quot;&gt;developer_instructions&lt;/code&gt; configuration, ensuring agents know how to coordinate with child agents and worktrees.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Session tracking via rollout logs:&lt;/strong&gt; Codex writes conversational turns to &lt;code dir=&quot;auto&quot;&gt;~/.codex/sessions/YYYY/MM/DD/rollout-*-&amp;#x3C;id&gt;.jsonl&lt;/code&gt;. wdx monitors these files to track token usage, extract transcripts for &lt;code dir=&quot;auto&quot;&gt;wdx agent transcript&lt;/code&gt;, and restore deleted session files when resuming.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Turn tracking with notify:&lt;/strong&gt; wdx hooks into Codex’s &lt;code dir=&quot;auto&quot;&gt;notify&lt;/code&gt; turn triggers to detect when execution steps begin and end, ensuring accurate state reporting in &lt;code dir=&quot;auto&quot;&gt;wdx agent list&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;cursor-cursor&quot;&gt;Cursor (&lt;code dir=&quot;auto&quot;&gt;cursor&lt;/code&gt;)&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Cursor’s terminal agent (&lt;code dir=&quot;auto&quot;&gt;cursor-agent&lt;/code&gt;) relies on an internal SQLite database and project-level configuration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Isolated configuration directory:&lt;/strong&gt; To prevent concurrent agents from corrupting shared editor settings, wdx launches Cursor with a unique &lt;code dir=&quot;auto&quot;&gt;CURSOR_CONFIG_DIR=&amp;#x3C;backup&gt;/cursor-config&lt;/code&gt;. Each agent receives its own sandboxed copy of &lt;code dir=&quot;auto&quot;&gt;cli-config.json&lt;/code&gt; while inheriting your global authentication and MCP server definitions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plugin session hooks:&lt;/strong&gt; Cursor lacks a system prompt flag. wdx writes a lightweight plugin whose &lt;code dir=&quot;auto&quot;&gt;sessionStart&lt;/code&gt; hook injects wdx’s instructions as initial context whenever a new conversation begins.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Synthetic statusline footer:&lt;/strong&gt; Cursor’s terminal UI does not render its standard footer when a custom &lt;code dir=&quot;auto&quot;&gt;statusLine&lt;/code&gt; command is active. wdx provides a statusline wrapper that computes token usage, renders a synthetic status bar matching Cursor’s visual style, and chains to your personal status script.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Safe workspace trust:&lt;/strong&gt; wdx passes &lt;code dir=&quot;auto&quot;&gt;--trust&lt;/code&gt; on launch, saving trust preferences in &lt;code dir=&quot;auto&quot;&gt;~/.cursor/projects/&amp;#x3C;path&gt;/.workspace-trusted&lt;/code&gt; and preventing unexpected prompts from aborting automated tasks.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;antigravity-antigravity&quot;&gt;Antigravity (&lt;code dir=&quot;auto&quot;&gt;antigravity&lt;/code&gt;)&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Google’s Antigravity CLI (&lt;code dir=&quot;auto&quot;&gt;agy&lt;/code&gt;) organizes its sessions around conversation databases and workspace rule files:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Workspace rules (&lt;code dir=&quot;auto&quot;&gt;AGENTS.md&lt;/code&gt;):&lt;/strong&gt; Antigravity automatically detects and respects &lt;code dir=&quot;auto&quot;&gt;AGENTS.md&lt;/code&gt; files located in project workspaces. wdx injects its rules into a dedicated workspace folder, guiding the agent to use &lt;code dir=&quot;auto&quot;&gt;wdx doc&lt;/code&gt; and child agents rather than ad-hoc scripts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQLite VACUUM snapshots:&lt;/strong&gt; Antigravity stores conversation state in SQLite WAL databases at &lt;code dir=&quot;auto&quot;&gt;~/.gemini/antigravity-cli/conversations/&amp;#x3C;id&gt;.db&lt;/code&gt;. To safely back up and resume conversations across worktrees without locking active writers, wdx takes read-only SQLite snapshots using &lt;code dir=&quot;auto&quot;&gt;VACUUM INTO&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alt+M turn steering:&lt;/strong&gt; When an instant message arrives while Antigravity is processing, wdx delivers &lt;code dir=&quot;auto&quot;&gt;Alt+M&lt;/code&gt;, queuing the new instructions to be handled at the start of the next execution step.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;depth-over-breadth&quot;&gt;Depth over breadth&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Building rock-solid adaptations for four completely different CLI engines requires deep protocol engineering. While the ecosystem is filled with emerging AI coding tools, wdx prioritizes reliability over superficial support:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“every ACA does things differently, you need to understand what each one does how they expose information and then parse it to general contract that wdx can understand. this is the only reason that I’m holding off for now to expand horizintally to more ACAs like Grok Build, Mistral Vibe, Qwen Code, Github Copilot CLI, OpenCode, Aider, Kilo CLI, Goose, crush etc. For now I’m focused on expanding the features that can help engineers use agents momre effectively and easily, and then jump on adding more ACAs support to wdx”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div&gt;&lt;h2 id=&quot;side-by-side-comparison&quot;&gt;Side-by-side comparison&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The following table summarizes how wdx bridges the technical differences between all four supported AI coding CLIs:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Claude Code&lt;/th&gt;
&lt;th&gt;Codex&lt;/th&gt;
&lt;th&gt;Cursor&lt;/th&gt;
&lt;th&gt;Antigravity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CLI binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;claude&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;codex&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;cursor-agent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;agy&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tested version&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2.1.319&lt;/td&gt;
&lt;td&gt;0.163.0&lt;/td&gt;
&lt;td&gt;2026.11.05&lt;/td&gt;
&lt;td&gt;1.5.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Launch note source&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;--append-system-prompt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;developer_instructions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Plugin &lt;code dir=&quot;auto&quot;&gt;sessionStart&lt;/code&gt; hook&lt;/td&gt;
&lt;td&gt;Workspace &lt;code dir=&quot;auto&quot;&gt;AGENTS.md&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Full permissions flag&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;--permission-mode bypassPermissions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;--dangerously-bypass-approvals-and-sandbox&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;--force --sandbox disabled --approve-mcps&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;--dangerously-skip-permissions&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Screen state parsing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Alternate screen off, raw VT parsing&lt;/td&gt;
&lt;td&gt;Input box &amp;#x26; statusline inspection&lt;/td&gt;
&lt;td&gt;Box &amp;#x26; synthetic footer inspection&lt;/td&gt;
&lt;td&gt;Terminal VT buffer parsing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Question extraction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Structured &lt;code dir=&quot;auto&quot;&gt;yes/no&lt;/code&gt; &amp;#x26; &lt;code dir=&quot;auto&quot;&gt;decision&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Generic &lt;code dir=&quot;auto&quot;&gt;waiting&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Generic &lt;code dir=&quot;auto&quot;&gt;waiting&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Generic &lt;code dir=&quot;auto&quot;&gt;waiting&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Turn steering&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;Ctrl+X Ctrl+S&lt;/code&gt; (SendNow)&lt;/td&gt;
&lt;td&gt;Paste + Enter at next step&lt;/td&gt;
&lt;td&gt;Enter x2 at next step&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;Alt+M&lt;/code&gt; at next step&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Context tracking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Statusline JSON telemetry&lt;/td&gt;
&lt;td&gt;Rollout log token count&lt;/td&gt;
&lt;td&gt;Chat &lt;code dir=&quot;auto&quot;&gt;store.db&lt;/code&gt; inspection&lt;/td&gt;
&lt;td&gt;Statusline JSON telemetry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Session storage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;~/.claude/projects/&lt;/code&gt; JSONL&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;~/.codex/sessions/&lt;/code&gt; JSONL&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;cursor-config/chats/&lt;/code&gt; SQLite&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;conversations/*.db&lt;/code&gt; SQLite&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;h2 id=&quot;managing-rate-limits-across-providers&quot;&gt;Managing rate limits across providers&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;One of the largest hurdles when running multi-agent workflows is managing provider rate limits. An intensive refactoring or test generation loop can exhaust an hourly or daily quota window in minutes.&lt;/p&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;wdx usage&lt;/code&gt; aggregates rate limits across all four AI coding agent accounts into a single terminal report. It tracks rolling windows (5-hour session caps, weekly limits, and monthly pools), showing exact usage percentages, time until reset, and whether a model bucket is currently throttled:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;wdx usage&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;antigravity Claude and GPT models  available&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;WINDOW                           USED                          RESETS         AS OF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Session (5 h)                    0%                            in 4 h 57 min  14:17&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Week                             0%                            Nov 14 04:12   14:17&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;antigravity Gemini models          available&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;WINDOW                           USED                          RESETS         AS OF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Session (5 h)                    0%                            in 4 h 45 min  14:17&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Week                             13%                           Nov 14 04:13   14:17&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;antigravity Gemini 4 Argon         limited, resets Nov 17 12:11&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;WINDOW                           USED                          RESETS         AS OF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Week                             100% limited                  Nov 17 12:11   14:17&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;claude_code                        available&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;WINDOW                           USED                          RESETS         AS OF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Session (5 h)                    6%                            in 42 min      13:48&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Week                             1%                            Nov 19 10:00   13:48&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;codex                              available&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;WINDOW                           USED                          RESETS         AS OF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Week                             16%                           now            14:27&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cursor                             available&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;WINDOW                           USED                          RESETS         AS OF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Month                            3%                            Dec 1 19:31    18:08&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This visibility unlocks flexible quota management across subscription tiers:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“when I’m running pro plans in every ACA there is more quick shuffling of ACAs so that the limit is evenly distributed, but when I have heavy work i upgrade claude to max plan which reduces the ACA shuffling, but this is just my preference, everyone can have there own way of working”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When running on Pro tiers, tasks can be distributed across providers—for example, assigning architectural reviews to Claude Code, test coverage sweeps to Codex, documentation generation to Cursor, and background audits to Antigravity. When Claude is upgraded to a Max plan, more tasks can run sequentially on Claude without risking unexpected rate limits.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;one-screen-any-agent&quot;&gt;One screen, any agent&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Inside TIDE (&lt;code dir=&quot;auto&quot;&gt;wdx tide&lt;/code&gt;), all four AI coding agents appear side by side in the project navigator. You can monitor their progress, inspect live worktree diffs, answer questions, and land changes with a single keystroke:&lt;/p&gt;
&lt;figure data-scene=&quot;agents&quot; data-label=&quot;TIDE managing a mixed fleet of Claude Code, Codex, Cursor, and Antigravity agents&quot; data-version=&quot;0.5.0&quot;&gt;&lt;div&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;svg viewBox=&quot;0 10 100 80&quot; aria-hidden=&quot;true&quot;&gt;&lt;rect x=&quot;10&quot; y=&quot;18&quot; width=&quot;80&quot; height=&quot;64&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;8&quot;&gt;&lt;/rect&gt;&lt;polyline points=&quot;30,40 44,52 30,64&quot; fill=&quot;none&quot; stroke-width=&quot;8&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/polyline&gt;&lt;rect x=&quot;53&quot; y=&quot;43&quot; width=&quot;14&quot; height=&quot;22&quot; rx=&quot;2&quot; fill=&quot;currentColor&quot;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;span&gt;wdx tide · shop-api&lt;/span&gt;&lt;button type=&quot;button&quot;&gt;Open larger&lt;/button&gt;&lt;/div&gt;&lt;div tabindex=&quot;0&quot;&gt;&lt;/div&gt;&lt;figcaption&gt;A multi-agent fleet in TIDE: reviewer (Claude Code), reviewer-tests and fix-auth (Codex), docs (Cursor), and checkout-emails (Antigravity) working simultaneously across isolated worktrees. &lt;span&gt;Click, scroll and type: it is live, and runs nothing.&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;You don’t need to choose a single AI vendor or juggle four incompatible terminal setups. Run the tools you already know, distribute workloads across accounts, and let wdx handle the plumbing.&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;Install wdx:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-fsSL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://raw.githubusercontent.com/srjn45/wdx/main/scripts/install.sh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify which AI CLIs wdx detected on your system:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;acas&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Launch your fleet in dedicated worktrees and open TIDE:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;review&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--aca&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;claude_code&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--worktree&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;review-wt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tests&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--aca&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;codex&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--worktree&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tests-wt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tide&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Read more about each CLI adapter in the &lt;a href=&quot;https://srjn45.github.io/wdx/docs/acas/&quot;&gt;AI CLIs Overview&lt;/a&gt;, &lt;a href=&quot;https://srjn45.github.io/wdx/docs/acas/claude-code/&quot;&gt;Claude Code&lt;/a&gt;, &lt;a href=&quot;https://srjn45.github.io/wdx/docs/acas/codex/&quot;&gt;Codex&lt;/a&gt;, &lt;a href=&quot;https://srjn45.github.io/wdx/docs/acas/cursor/&quot;&gt;Cursor&lt;/a&gt;, and &lt;a href=&quot;https://srjn45.github.io/wdx/docs/acas/antigravity/&quot;&gt;Antigravity&lt;/a&gt; documentation. The project is open source on &lt;a href=&quot;https://github.com/srjn45/wdx&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
</content:encoded><category>acas</category><category>claude-code</category><category>codex</category><category>cursor</category><category>antigravity</category><category>multi-agent</category></item><item><title>From one agent to five: what changed in my day</title><link>https://srjn45.github.io/wdx/blog/one-to-five/</link><guid isPermaLink="true">https://srjn45.github.io/wdx/blog/one-to-five/</guid><description>Before wdx: one AI CLI and a row of terminal tabs I lost track of. After: named agents, children under parents, several AI CLIs at once, all on one screen.</description><pubDate>Thu, 12 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Before wdx, running AI agents meant a row of terminal tabs, and after a while I couldn’t remember which tab was doing what. The agents were fine. I was the one getting lost.&lt;/p&gt;
&lt;p&gt;Here’s what changed when they moved onto one screen.&lt;/p&gt;
&lt;figure&gt;&lt;div&gt;&lt;svg viewBox=&quot;0 0 720 330&quot; role=&quot;img&quot; aria-label=&quot;Left, five unlabelled terminal tabs: confusion over which tab is doing what and which agent is waiting on input. Right, the same work in TIDE: named agents in a tree, children indented under their parent, amber highlight when an agent asks a question, and multiple AI CLIs running side by side.&quot;&gt;&lt;defs&gt;&lt;marker id=&quot;t2t-a&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;t2t-h&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;/defs&gt;&lt;text x=&quot;10&quot; y=&quot;20&quot;&gt;Terminal tabs (before)&lt;/text&gt;&lt;rect x=&quot;10&quot; y=&quot;36&quot; width=&quot;310&quot; height=&quot;34&quot; rx=&quot;6&quot;&gt;&lt;/rect&gt;&lt;g&gt;&lt;rect x=&quot;14&quot; y=&quot;40&quot; width=&quot;56&quot; height=&quot;26&quot; rx=&quot;4&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;22&quot; y=&quot;58&quot;&gt;tab 1 &lt;tspan font-weight=&quot;bold&quot;&gt;?&lt;/tspan&gt;&lt;/text&gt;&lt;rect x=&quot;74&quot; y=&quot;40&quot; width=&quot;56&quot; height=&quot;26&quot; rx=&quot;4&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;82&quot; y=&quot;58&quot;&gt;tab 2 &lt;tspan font-weight=&quot;bold&quot;&gt;?&lt;/tspan&gt;&lt;/text&gt;&lt;rect x=&quot;134&quot; y=&quot;40&quot; width=&quot;56&quot; height=&quot;26&quot; rx=&quot;4&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;142&quot; y=&quot;58&quot;&gt;tab 3 &lt;tspan font-weight=&quot;bold&quot;&gt;?&lt;/tspan&gt;&lt;/text&gt;&lt;rect x=&quot;194&quot; y=&quot;40&quot; width=&quot;56&quot; height=&quot;26&quot; rx=&quot;4&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;202&quot; y=&quot;58&quot;&gt;tab 4 &lt;tspan font-weight=&quot;bold&quot;&gt;?&lt;/tspan&gt;&lt;/text&gt;&lt;rect x=&quot;254&quot; y=&quot;40&quot; width=&quot;60&quot; height=&quot;26&quot; rx=&quot;4&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;262&quot; y=&quot;58&quot;&gt;tab 5 &lt;tspan font-weight=&quot;bold&quot;&gt;?&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;rect x=&quot;10&quot; y=&quot;86&quot; width=&quot;310&quot; height=&quot;228&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;22&quot; y=&quot;102&quot; width=&quot;286&quot; height=&quot;42&quot; rx=&quot;6&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;34&quot; y=&quot;128&quot;&gt;Which tab was that again?&lt;/text&gt;&lt;rect x=&quot;22&quot; y=&quot;156&quot; width=&quot;286&quot; height=&quot;42&quot; rx=&quot;6&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;34&quot; y=&quot;182&quot;&gt;Stuck to a single AI CLI&lt;/text&gt;&lt;rect x=&quot;22&quot; y=&quot;210&quot; width=&quot;286&quot; height=&quot;42&quot; rx=&quot;6&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;34&quot; y=&quot;236&quot;&gt;Is this tab waiting or still working?&lt;/text&gt;&lt;rect x=&quot;22&quot; y=&quot;264&quot; width=&quot;286&quot; height=&quot;38&quot; rx=&quot;6&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;34&quot; y=&quot;288&quot;&gt;Sessions lost on reboot&lt;/text&gt;&lt;path d=&quot;M332 170 H368&quot; marker-end=&quot;url(#t2t-h)&quot;&gt;&lt;/path&gt;&lt;text x=&quot;380&quot; y=&quot;20&quot;&gt;TIDE: one screen (after)&lt;/text&gt;&lt;rect x=&quot;380&quot; y=&quot;36&quot; width=&quot;330&quot; height=&quot;278&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;380&quot; y=&quot;36&quot; width=&quot;330&quot; height=&quot;30&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;380&quot; y=&quot;56&quot; width=&quot;330&quot; height=&quot;10&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;394&quot; y=&quot;56&quot;&gt;wdx tide · notes&lt;/text&gt;&lt;text x=&quot;396&quot; y=&quot;94&quot;&gt;▼ notes-cli&lt;/text&gt;&lt;text x=&quot;520&quot; y=&quot;94&quot;&gt;Claude Code&lt;/text&gt;&lt;circle cx=&quot;640&quot; cy=&quot;90&quot; r=&quot;4&quot; fill=&quot;var(--brand)&quot;&gt;&lt;/circle&gt;&lt;text x=&quot;650&quot; y=&quot;94&quot;&gt;working&lt;/text&gt;&lt;text x=&quot;414&quot; y=&quot;128&quot;&gt;├ delete&lt;/text&gt;&lt;text x=&quot;520&quot; y=&quot;128&quot;&gt;notes-delete&lt;/text&gt;&lt;circle cx=&quot;640&quot; cy=&quot;124&quot; r=&quot;4&quot; fill=&quot;var(--brand)&quot;&gt;&lt;/circle&gt;&lt;text x=&quot;650&quot; y=&quot;128&quot;&gt;working&lt;/text&gt;&lt;rect x=&quot;392&quot; y=&quot;142&quot; width=&quot;306&quot; height=&quot;32&quot; rx=&quot;4&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;414&quot; y=&quot;162&quot;&gt;├ search&lt;/text&gt;&lt;text x=&quot;520&quot; y=&quot;162&quot;&gt;notes-search&lt;/text&gt;&lt;text font-weight=&quot;bold&quot; x=&quot;640&quot; y=&quot;162&quot;&gt;? yes/no&lt;/text&gt;&lt;text x=&quot;414&quot; y=&quot;198&quot;&gt;└ tests&lt;/text&gt;&lt;text x=&quot;520&quot; y=&quot;198&quot;&gt;notes-tests&lt;/text&gt;&lt;circle cx=&quot;640&quot; cy=&quot;194&quot; r=&quot;4&quot; fill=&quot;var(--brand)&quot;&gt;&lt;/circle&gt;&lt;text x=&quot;650&quot; y=&quot;198&quot;&gt;working&lt;/text&gt;&lt;text x=&quot;396&quot; y=&quot;234&quot;&gt;● docs&lt;/text&gt;&lt;text x=&quot;520&quot; y=&quot;234&quot;&gt;Codex&lt;/text&gt;&lt;circle cx=&quot;640&quot; cy=&quot;230&quot; r=&quot;4&quot; fill=&quot;var(--brand)&quot;&gt;&lt;/circle&gt;&lt;text x=&quot;650&quot; y=&quot;234&quot;&gt;working&lt;/text&gt;&lt;line x1=&quot;392&quot; y1=&quot;256&quot; x2=&quot;698&quot; y2=&quot;256&quot;&gt;&lt;/line&gt;&lt;text x=&quot;396&quot; y=&quot;278&quot;&gt;C-q S&lt;/text&gt;&lt;text x=&quot;444&quot; y=&quot;278&quot;&gt;stats: Claude 98% · Codex 16%&lt;/text&gt;&lt;text x=&quot;396&quot; y=&quot;298&quot;&gt;named agents · parents &amp;#x26; children · multi-ACA&lt;/text&gt;&lt;/svg&gt;&lt;/div&gt;&lt;figcaption&gt;Left, terminal tabs lose context and stick to one AI CLI. Right, TIDE groups named agents into a tree, highlights questions in amber, and orchestrates multiple AI CLIs on one screen.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;which-tab-was-that-again&quot;&gt;“Which tab was that again?”&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Before wdx, running AI agents meant cycling through a dozen terminal tabs and split panes. The friction wasn’t just the keystrokes; it was the context switching. After an hour of coding, you’d glance across your tab bar and pause: &lt;em&gt;Which tab was running the test suite? Which one was refactoring the parser? And is that third tab stuck waiting for my confirmation, or still thinking?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Because managing multiple terminals was so chaotic, I naturally stuck to a single AI CLI. Even when another tool had a better model for writing documentation or quick codebase exploration, the cognitive cost of juggling different terminal windows with different workflows wasn’t worth it.&lt;/p&gt;
&lt;p&gt;Terminal tabs gave each agent an isolated shell, but they offered zero coordination. The moment you had more than two agents running, you spent more time managing tabs than reviewing code.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;a-name-for-every-agent-and-a-parent-for-its-children&quot;&gt;A name for every agent, and a parent for its children&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;In wdx, agents aren’t anonymous PTY sessions. You give each agent a name when you create it:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes-cli&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Coordinate the notes app CLI refactoring&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;When work gets split, wdx connects agents into a hierarchy. You can spawn &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/child-agents/&quot;&gt;child agents&lt;/a&gt; under a parent, each assigned to a focused subtask:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--parent-name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes-cli&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--worktree&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes-delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Add delete &amp;#x3C;n&gt; to notes.py with a unittest&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--parent-name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes-cli&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;search&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--worktree&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes-search&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Add search &amp;#x3C;text&gt; to notes.py with a unittest&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--parent-name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes-cli&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tests&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--worktree&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes-tests&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--permissions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ask&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Add test_notes.py with end-to-end tests&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;In the agent list, children are clearly indented under their parent with &lt;code dir=&quot;auto&quot;&gt;└&lt;/code&gt;. You are never left wondering why an agent exists: you see immediately that &lt;code dir=&quot;auto&quot;&gt;delete&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;search&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;tests&lt;/code&gt; are three child agents working together under &lt;code dir=&quot;auto&quot;&gt;notes-cli&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A parent row folds with &lt;code dir=&quot;auto&quot;&gt;←&lt;/code&gt; and unfolds with &lt;code dir=&quot;auto&quot;&gt;→&lt;/code&gt;. When folded, it keeps your view tidy while still showing &lt;code dir=&quot;auto&quot;&gt;N waiting&lt;/code&gt; if any child beneath it needs attention.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;everything-in-front-of-my-eyes&quot;&gt;Everything in front of my eyes&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://srjn45.github.io/wdx/docs/tide/layout/&quot;&gt;TIDE&lt;/a&gt;, wdx’s Terminal IDE, puts everything on a single screen: the project pane on the left, the active agent live on the right, and project terminals below.&lt;/p&gt;
&lt;figure data-scene=&quot;agents&quot; data-label=&quot;TIDE: the Agents list showing running agents, children indented under their parent, and an amber row waiting on a question&quot; data-version=&quot;0.5.0&quot;&gt;&lt;div&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;svg viewBox=&quot;0 10 100 80&quot; aria-hidden=&quot;true&quot;&gt;&lt;rect x=&quot;10&quot; y=&quot;18&quot; width=&quot;80&quot; height=&quot;64&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;8&quot;&gt;&lt;/rect&gt;&lt;polyline points=&quot;30,40 44,52 30,64&quot; fill=&quot;none&quot; stroke-width=&quot;8&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/polyline&gt;&lt;rect x=&quot;53&quot; y=&quot;43&quot; width=&quot;14&quot; height=&quot;22&quot; rx=&quot;2&quot; fill=&quot;currentColor&quot;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;span&gt;wdx tide · shop-api&lt;/span&gt;&lt;button type=&quot;button&quot;&gt;Open larger&lt;/button&gt;&lt;/div&gt;&lt;div tabindex=&quot;0&quot;&gt;&lt;/div&gt;&lt;figcaption&gt;Every agent at a glance: row marks show activity, children are indented, and questions turn amber. &lt;span&gt;Click, scroll and type: it is live, and runs nothing.&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Visual indicators make tracking what’s happening second nature:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Row marks:&lt;/strong&gt; &lt;code dir=&quot;auto&quot;&gt;●&lt;/code&gt; for running, &lt;code dir=&quot;auto&quot;&gt;?&lt;/code&gt; for waiting on you, &lt;code dir=&quot;auto&quot;&gt;○&lt;/code&gt; for exited, &lt;code dir=&quot;auto&quot;&gt;✕&lt;/code&gt; for failed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Amber alerts:&lt;/strong&gt; When an agent needs input—like a permission confirmation or a tool prompt—its row turns amber and displays what it wants: &lt;code dir=&quot;auto&quot;&gt;yes/no&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;decision&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Answering in place:&lt;/strong&gt; Hit Enter or &lt;code dir=&quot;auto&quot;&gt;o&lt;/code&gt; on an amber row to switch to the agent’s tab, answer its question, and watch it immediately transition back to &lt;code dir=&quot;auto&quot;&gt;● working&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure data-scene=&quot;answer&quot; data-label=&quot;TIDE: answering a yes/no question inside the agent&amp;#x27;s tab&quot; data-version=&quot;0.5.0&quot;&gt;&lt;div&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;svg viewBox=&quot;0 10 100 80&quot; aria-hidden=&quot;true&quot;&gt;&lt;rect x=&quot;10&quot; y=&quot;18&quot; width=&quot;80&quot; height=&quot;64&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;8&quot;&gt;&lt;/rect&gt;&lt;polyline points=&quot;30,40 44,52 30,64&quot; fill=&quot;none&quot; stroke-width=&quot;8&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/polyline&gt;&lt;rect x=&quot;53&quot; y=&quot;43&quot; width=&quot;14&quot; height=&quot;22&quot; rx=&quot;2&quot; fill=&quot;currentColor&quot;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;span&gt;wdx tide · shop-api&lt;/span&gt;&lt;button type=&quot;button&quot;&gt;Open larger&lt;/button&gt;&lt;/div&gt;&lt;div tabindex=&quot;0&quot;&gt;&lt;/div&gt;&lt;figcaption&gt;Answer an agent&apos;s question directly in its tab without leaving TIDE. &lt;span&gt;Click, scroll and type: it is live, and runs nothing.&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;When paired with &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/plans/&quot;&gt;plans&lt;/a&gt;, tracking progress becomes effortless. As I wrote in &lt;a href=&quot;https://srjn45.github.io/wdx/blog/wdx-builds-wdx/&quot;&gt;I built wdx with wdx&lt;/a&gt;, wdx carries plan tasks forward one after another, letting you monitor an entire pipeline from a single vantage point.&lt;/p&gt;
&lt;p&gt;Here is what running five agents looks like in practice on a toy project: &lt;code dir=&quot;auto&quot;&gt;notes-cli&lt;/code&gt; with its three children (&lt;code dir=&quot;auto&quot;&gt;delete&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;search&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;tests&lt;/code&gt;) in git worktrees, plus a Codex agent &lt;code dir=&quot;auto&quot;&gt;docs&lt;/code&gt;. When &lt;code dir=&quot;auto&quot;&gt;tests&lt;/code&gt; raises a permission question, it is answered directly in its tab, and &lt;code dir=&quot;auto&quot;&gt;C-q S&lt;/code&gt; opens the stats view:&lt;/p&gt;
&lt;figure&gt;&lt;video autoplay loop muted playsinline aria-label=&quot;A terminal recording: wdx agent list shows a tree of five agents; TIDE displays notes-cli with three children and a docs agent; an amber question in tests is answered in place; then C-q S displays real account limits in the stats tab&quot;&gt;&lt;source src=&quot;/wdx/blog/one-to-five/five.webm&quot; type=&quot;video/webm&quot;&gt;&lt;source src=&quot;/wdx/blog/one-to-five/five.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/video&gt;&lt;figcaption&gt;Five agents on one screen: a parent with three children in worktrees, a Codex agent, answering a question in place, and checking limits in the stats tab.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;more-than-one-ai-cli-the-same-way&quot;&gt;More than one AI CLI, the same way&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Before wdx, running multiple AI CLIs simultaneously was impractical. Each tool had its own conventions, its own process model, and its own way of monopolizing your terminal.&lt;/p&gt;
&lt;p&gt;With wdx, you can use multiple AI CLIs—Claude Code, Codex, Cursor, Antigravity—side by side on the same repository. The orchestration is handled entirely by wdx, so your interaction as a user is identical regardless of the underlying ACA:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes-cli&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--aca&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;claude_code&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Refactor notes.py&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;docs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--aca&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;codex&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Document the CLI in README.md&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Each agent works in a &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/worktrees/&quot;&gt;git worktree&lt;/a&gt; of its own, so they never overwrite each other’s edits or step on &lt;code dir=&quot;auto&quot;&gt;git status&lt;/code&gt;. &lt;a href=&quot;https://srjn45.github.io/wdx/blog/side-by-side/&quot;&gt;Run Claude Code and Codex side by side&lt;/a&gt; walks through how worktrees prevent conflicts and land cleanly on &lt;code dir=&quot;auto&quot;&gt;main&lt;/code&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;agents-that-survive-a-reboot&quot;&gt;Agents that survive a reboot&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;One of the most frustrating aspects of running long-lived agents in standard terminal tabs is computer restarts. Close your laptop, reboot for an OS update, or crash your terminal emulator, and your active sessions vanish into the void.&lt;/p&gt;
&lt;p&gt;wdx runs as a system service (via systemd on Linux or launchd on macOS) that starts automatically on boot or login. When the daemon starts again after a reboot, your agents aren’t lost: they are listed with state &lt;code dir=&quot;auto&quot;&gt;lost&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;NAME&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;STATE&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;ACTIVITY&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;MODEL&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;CONTEXT&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;ACA&lt;/span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;DIR&lt;/span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;ID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;notes-cli&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;lost&lt;/span&gt;&lt;span&gt;                             &lt;/span&gt;&lt;span&gt;claude_code&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/path/notes&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;agent-facac2a3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You don’t need to hunt for obscure session IDs. You simply start the agent by its name:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes-cli&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;In TIDE, it’s a single keystroke: press &lt;code dir=&quot;auto&quot;&gt;g&lt;/code&gt; on the agent’s row. The agent respawns with its entire conversation history and context intact, exactly where it left off.&lt;/p&gt;
&lt;p&gt;If you ever want a fresh session while keeping the agent’s identity, &lt;code dir=&quot;auto&quot;&gt;wdx agent restart&lt;/code&gt; (or &lt;code dir=&quot;auto&quot;&gt;R&lt;/code&gt; in TIDE) starts an empty session that reads &lt;code dir=&quot;auto&quot;&gt;wdx agent transcript --brief&lt;/code&gt;.&lt;/p&gt;
&lt;figure&gt;&lt;video autoplay loop muted playsinline aria-label=&quot;A terminal recording: the daemon and holders stop in a simulated reboot; wdx agent list shows the agent as lost; wdx agent start brings the agent back in the same session with all context intact&quot;&gt;&lt;source src=&quot;/wdx/blog/one-to-five/restore.webm&quot; type=&quot;video/webm&quot;&gt;&lt;source src=&quot;/wdx/blog/one-to-five/restore.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/video&gt;&lt;figcaption&gt;Agents survive reboots: stopping the daemon marks agents as lost; wdx agent start brings them back in the same session.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;the-numbers&quot;&gt;The numbers&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Moving from one agent in loose terminal tabs to five agents in TIDE transformed my daily output. Here is the commit history from wdx’s own repository around the transition:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Period&lt;/th&gt;
&lt;th&gt;Days&lt;/th&gt;
&lt;th&gt;Commits&lt;/th&gt;
&lt;th&gt;Commits / day&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;26–28 Oct, one agent&lt;/td&gt;
&lt;td&gt;3 days&lt;/td&gt;
&lt;td&gt;57 commits&lt;/td&gt;
&lt;td&gt;~19/day&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;29 Oct–11 Nov, wdx and TIDE&lt;/td&gt;
&lt;td&gt;14 days&lt;/td&gt;
&lt;td&gt;654 commits&lt;/td&gt;
&lt;td&gt;~47/day&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;On the busiest single day (8 November), the team landed 89 commits.&lt;/p&gt;
&lt;p&gt;A fair caveat: the first three days were also the start of a brand new project, where laying foundational architecture naturally takes more deliberate deliberation than adding subsequent features. But once attach and TIDE landed on 29 October, the ability to coordinate multiple agents in parallel without losing mental context more than doubled daily throughput.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;choosing-where-the-next-task-goes&quot;&gt;Choosing where the next task goes&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;When you run five agents across different providers, managing rate limits and context budgets is critical.&lt;/p&gt;
&lt;p&gt;Pressing &lt;code dir=&quot;auto&quot;&gt;C-q S&lt;/code&gt; in TIDE (or running &lt;a href=&quot;https://srjn45.github.io/wdx/docs/tide/stats/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;wdx usage&lt;/code&gt;&lt;/a&gt; from the CLI) opens the stats tab:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;┬─[● notes-cli(-)]─[stats(-)]────────────────────────────[⤢]─┐&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;claude_code:                available&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Session (5 h):            1% ▰▱▱▱▱▱▱▱▱▱   resets in 3 h 48 min&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Week:                     98% ▰▰▰▰▰▰▰▰▰▰  resets in 8 h 28 min&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;as of:                    01:28&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;codex:                      available&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Week:                     16% ▰▰▱▱▱▱▱▱▱▱   resets in 24 h&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;as of:                    14:27&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cursor:                     available&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Month:                    3% ▰▱▱▱▱▱▱▱▱▱   resets Dec 1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;as of:                    18:08&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;antigravity Gemini 4 Argon: limited, resets Nov 17 12:11&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Week:                     100% limited&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Because you can see that Claude Code’s weekly limit is at 98%, you know it is about to exhaust. Instead of hitting an unexpected quota brick wall midway through a feature, you spawn the next task with Codex or Antigravity.&lt;/p&gt;
&lt;p&gt;Context sizes are also visible right on each row in the agent list (e.g. &lt;code dir=&quot;auto&quot;&gt;45k&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;180k&lt;/code&gt;). The context number stays green during early turns, turns yellow once it passes &lt;code dir=&quot;auto&quot;&gt;context.threshold.warning&lt;/code&gt;, and turns red at &lt;code dir=&quot;auto&quot;&gt;context.threshold.critical&lt;/code&gt;. That visual feedback makes timely context compaction second nature.&lt;/p&gt;
&lt;p&gt;Importantly, wdx only displays this information: it never pauses, cancels, or switches models behind your back. You remain the conductor.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;whats-still-missing&quot;&gt;What’s still missing&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;While managing five agents on one screen is a massive leap forward from disjointed terminal tabs, there is still plenty to achieve:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Feature parity across all ACAs:&lt;/strong&gt; TIDE’s ability to read specific prompt questions—surfacing them as &lt;code dir=&quot;auto&quot;&gt;yes/no&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;decision&lt;/code&gt; in amber—currently works best with Claude Code. Other AI CLIs still report generic &lt;code dir=&quot;auto&quot;&gt;waiting&lt;/code&gt; status. Bringing deep question parsing to Codex, Cursor, and Antigravity is an active focus.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Autonomous handling:&lt;/strong&gt; Expanding the orchestration layer so child agents can hand off deliverables, trigger follow-up checks, and coordinate interdependent tasks with less manual steering.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it&quot;&gt;Try it&lt;/h2&gt;&lt;/div&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Install wdx&lt;/strong&gt; and its system service:
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-fsSL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://srjn45.github.io/wdx/install.sh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open your project:&lt;/strong&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-project&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;project&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Create a lead agent and a child:&lt;/strong&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lead&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Review pending pull requests&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--parent-name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lead&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;feature&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--worktree&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;feature-branch&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Implement the search endpoint&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open TIDE:&lt;/strong&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tide&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;article&gt;&lt;p&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M21.17 2.06A13.1 13.1 0 0 0 19 1.87a12.94 12.94 0 0 0-7 2.05 12.94 12.94 0 0 0-7-2 13.1 13.1 0 0 0-2.17.19 1 1 0 0 0-.83 1v12a1 1 0 0 0 1.17 1 10.9 10.9 0 0 1 8.25 1.91l.12.07h.11a.91.91 0 0 0 .7 0h.11l.12-.07A10.899 10.899 0 0 1 20.83 16 1 1 0 0 0 22 15V3a1 1 0 0 0-.83-.94ZM11 15.35a12.87 12.87 0 0 0-6-1.48H4v-10c.333-.02.667-.02 1 0a10.86 10.86 0 0 1 6 1.8v9.68Zm9-1.44h-1a12.87 12.87 0 0 0-6 1.48V5.67a10.86 10.86 0 0 1 6-1.8c.333-.02.667-.02 1 0v10.04Zm1.17 4.15a13.098 13.098 0 0 0-2.17-.19 12.94 12.94 0 0 0-7 2.05 12.94 12.94 0 0 0-7-2.05c-.727.003-1.453.066-2.17.19A1 1 0 0 0 2 19.21a1 1 0 0 0 1.17.79 10.9 10.9 0 0 1 8.25 1.91 1 1 0 0 0 1.16 0A10.9 10.9 0 0 1 20.83 20a1 1 0 0 0 1.17-.79 1 1 0 0 0-.83-1.15Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span&gt;Agents in TIDE&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;Learn how to navigate agent rows, inspect questions, and fold parent trees in &lt;a href=&quot;https://srjn45.github.io/wdx/docs/tide/agents/&quot;&gt;Agents in TIDE&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;article&gt;&lt;p&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M0.355 12.231L0.355 12.231L0.355 11.853Q0.397 11.517 0.565 11.265L0.565 11.265Q0.691 11.097 0.943 10.803L0.943 10.803L1.279 10.425L7.831 3.831L7.873 3.873Q7.957 3.873 7.957 3.957L7.957 3.957L10.309 6.351Q10.519 6.519 10.309 6.729L10.309 6.729Q10.225 7.317 10.435 7.863Q10.645 8.409 11.107 8.703L11.107 8.703Q11.275 8.787 11.317 8.892Q11.359 8.997 11.359 9.207L11.359 9.207L11.359 15.003Q11.359 15.255 11.107 15.507L11.107 15.507Q10.603 15.843 10.372 16.389Q10.141 16.935 10.330 17.502Q10.519 18.069 10.981 18.447Q11.443 18.825 12.031 18.825Q12.619 18.825 13.081 18.489Q13.543 18.153 13.732 17.586Q13.921 17.019 13.753 16.473Q13.585 15.927 13.081 15.507L13.081 15.507Q12.913 15.423 12.871 15.318Q12.829 15.213 12.829 15.003L12.829 15.003L12.829 9.081L12.955 9.081L15.055 11.181Q15.139 11.265 15.139 11.391L15.139 11.391L15.181 11.475L15.181 12.231Q15.265 13.029 15.874 13.470Q16.483 13.911 17.281 13.806Q18.079 13.701 18.562 13.029Q19.045 12.357 18.835 11.601L18.835 11.601Q18.751 10.929 18.100 10.488Q17.449 10.047 16.735 10.131L16.735 10.131Q16.483 10.131 16.231 10.005L16.231 10.005L14.005 7.779Q13.879 7.653 13.879 7.401L13.879 7.401Q14.005 6.813 13.711 6.267Q13.417 5.721 12.871 5.448Q12.325 5.175 11.779 5.301L11.779 5.301Q11.359 5.301 11.359 5.175L11.359 5.175Q9.805 3.579 9.007 2.907L9.007 2.907Q8.797 2.739 9.007 2.529L9.007 2.529Q9.469 2.193 10.183 1.353L10.183 1.353L10.729 0.807Q11.905-0.369 13.081 0.807L13.081 0.807L23.035 10.803Q24.253 11.979 23.035 13.155L23.035 13.155L13.291 22.941Q12.913 23.319 12.745 23.445L12.745 23.445Q12.409 23.739 12.031 23.781L12.031 23.781L11.779 23.781L11.569 23.697Q11.065 23.487 10.855 23.277L10.855 23.277L10.057 22.479Q8.881 21.387 8.335 20.757L8.335 20.757L1.153 13.575Q1.069 13.365 0.775 13.029L0.775 13.029Q0.397 12.525 0.355 12.231Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span&gt;Child agents guide&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;See how parent agents delegate subtasks to children in &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/child-agents/&quot;&gt;Child agents&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;article&gt;&lt;p&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M12 11a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0v-4a1 1 0 0 0-1-1Zm.38-3.92a1 1 0 0 0-.76 0 1 1 0 0 0-.33.21 1.15 1.15 0 0 0-.21.33 1 1 0 0 0 .21 1.09c.097.088.209.16.33.21A1 1 0 0 0 13 8a1.05 1.05 0 0 0-.29-.71 1 1 0 0 0-.33-.21ZM12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16.001A8 8 0 0 1 12 20Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span&gt;Stats in TIDE&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;Track account usage windows and model buckets across all AI CLIs in &lt;a href=&quot;https://srjn45.github.io/wdx/docs/tide/stats/&quot;&gt;Stats in TIDE&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;article&gt;&lt;p&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M12 .3a12 12 0 0 0-3.8 23.38c.6.12.83-.26.83-.57L9 21.07c-3.34.72-4.04-1.61-4.04-1.61-.55-1.39-1.34-1.76-1.34-1.76-1.08-.74.09-.73.09-.73 1.2.09 1.83 1.24 1.83 1.24 1.08 1.83 2.81 1.3 3.5 1 .1-.78.42-1.31.76-1.61-2.67-.3-5.47-1.33-5.47-5.93 0-1.31.47-2.38 1.24-3.22-.14-.3-.54-1.52.1-3.18 0 0 1-.32 3.3 1.23a11.5 11.5 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.64 1.66.24 2.88.12 3.18a4.65 4.65 0 0 1 1.23 3.22c0 4.61-2.8 5.63-5.48 5.92.42.36.81 1.1.81 2.22l-.01 3.29c0 .31.2.69.82.57A12 12 0 0 0 12 .3Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span&gt;GitHub&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;Explore the source, report issues, and star the project on &lt;a href=&quot;https://github.com/srjn45/wdx&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/div&gt;</content:encoded><category>story</category><category>productivity</category><category>agents</category></item><item><title>Plans: split a feature into tasks and let agents run them</title><link>https://srjn45.github.io/wdx/blog/plans/</link><guid isPermaLink="true">https://srjn45.github.io/wdx/blog/plans/</guid><description>Asking an AI agent to build a multi-file feature in one prompt leads to hallucinations and lost context. wdx breaks it into a DAG of small tasks that agents run in parallel.</description><pubDate>Thu, 12 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Asking an AI coding agent to build a multi-file feature in one giant prompt usually ends the same way: it loses track of constraints, hallucinates file state, or exhausts its context window halfway through.&lt;/p&gt;
&lt;p&gt;The fix is to break the feature into a directed acyclic graph (DAG) of small, focused tasks—and let an orchestrator run each task’s agent in parallel as soon as its dependencies are ready.&lt;/p&gt;
&lt;figure&gt;&lt;div&gt;&lt;svg viewBox=&quot;0 0 720 380&quot; role=&quot;img&quot; aria-label=&quot;Flowchart of a wdx plan: A plan YAML defines a DAG of tasks (schema unblocks api and cli, which unblock docs). Tasks run in isolated slots (.worktrees/plan-1 and plan-2), synthesized with the goal, constraints, and summaries of completed tasks. When done, each task is verified, passes the project landing check, and is atomically rebased onto the plan branch.&quot;&gt;&lt;defs&gt;&lt;marker id=&quot;pd-a&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;pd-h&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;/defs&gt;&lt;text x=&quot;14&quot; y=&quot;22&quot;&gt;1. The DAG&lt;/text&gt;&lt;rect x=&quot;10&quot; y=&quot;34&quot; width=&quot;180&quot; height=&quot;332&quot; rx=&quot;10&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;24&quot; y=&quot;52&quot; width=&quot;152&quot; height=&quot;48&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;38&quot; y=&quot;74&quot;&gt;schema&lt;/text&gt;&lt;text x=&quot;38&quot; y=&quot;91&quot;&gt;✓ landed&lt;/text&gt;&lt;rect x=&quot;24&quot; y=&quot;132&quot; width=&quot;152&quot; height=&quot;54&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;38&quot; y=&quot;154&quot;&gt;api&lt;/text&gt;&lt;text x=&quot;38&quot; y=&quot;172&quot;&gt;after: [schema]&lt;/text&gt;&lt;rect x=&quot;24&quot; y=&quot;212&quot; width=&quot;152&quot; height=&quot;54&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;38&quot; y=&quot;234&quot;&gt;cli&lt;/text&gt;&lt;text x=&quot;38&quot; y=&quot;252&quot;&gt;after: [schema]&lt;/text&gt;&lt;rect x=&quot;24&quot; y=&quot;294&quot; width=&quot;152&quot; height=&quot;54&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;38&quot; y=&quot;316&quot;&gt;docs&lt;/text&gt;&lt;text x=&quot;38&quot; y=&quot;334&quot;&gt;after: [api, cli]&lt;/text&gt;&lt;path d=&quot;M100 100 V128&quot; marker-end=&quot;url(#pd-h)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M100 186 V208&quot; marker-end=&quot;url(#pd-h)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M100 266 V290&quot; marker-end=&quot;url(#pd-a)&quot;&gt;&lt;/path&gt;&lt;text x=&quot;214&quot; y=&quot;22&quot;&gt;2. Parallel Slots &amp;#x26; Context&lt;/text&gt;&lt;rect x=&quot;206&quot; y=&quot;34&quot; width=&quot;280&quot; height=&quot;332&quot; rx=&quot;10&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;220&quot; y=&quot;52&quot; width=&quot;252&quot; height=&quot;92&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;232&quot; y=&quot;72&quot;&gt;Prompt synthesis&lt;/text&gt;&lt;text x=&quot;232&quot; y=&quot;92&quot;&gt;● Plan Goal &amp;#x26; Constraints&lt;/text&gt;&lt;text x=&quot;232&quot; y=&quot;110&quot;&gt;● Summaries of &apos;after&apos; tasks&lt;/text&gt;&lt;text x=&quot;232&quot; y=&quot;128&quot;&gt;● Task prompt + plan task done&lt;/text&gt;&lt;rect x=&quot;220&quot; y=&quot;162&quot; width=&quot;252&quot; height=&quot;74&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;234&quot; y=&quot;186&quot;&gt;Slot 1 · .worktrees/auth-1&lt;/text&gt;&lt;text x=&quot;234&quot; y=&quot;206&quot;&gt;Task: api (claude_code / sonnet)&lt;/text&gt;&lt;text x=&quot;234&quot; y=&quot;224&quot;&gt;● working&lt;/text&gt;&lt;rect x=&quot;220&quot; y=&quot;254&quot; width=&quot;252&quot; height=&quot;74&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;234&quot; y=&quot;278&quot;&gt;Slot 2 · .worktrees/auth-2&lt;/text&gt;&lt;text x=&quot;234&quot; y=&quot;298&quot;&gt;Task: cli (codex / gpt-5)&lt;/text&gt;&lt;text x=&quot;234&quot; y=&quot;316&quot;&gt;● working&lt;/text&gt;&lt;path d=&quot;M176 159 H216&quot; marker-end=&quot;url(#pd-h)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M176 239 H216&quot; marker-end=&quot;url(#pd-h)&quot;&gt;&lt;/path&gt;&lt;text x=&quot;510&quot; y=&quot;22&quot;&gt;3. Landing to Branch&lt;/text&gt;&lt;rect x=&quot;502&quot; y=&quot;34&quot; width=&quot;208&quot; height=&quot;332&quot; rx=&quot;10&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;516&quot; y=&quot;52&quot; width=&quot;180&quot; height=&quot;50&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;528&quot; y=&quot;74&quot;&gt;plan task done&lt;/text&gt;&lt;text x=&quot;528&quot; y=&quot;91&quot;&gt;checks clean commit&lt;/text&gt;&lt;rect x=&quot;516&quot; y=&quot;120&quot; width=&quot;180&quot; height=&quot;54&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;528&quot; y=&quot;142&quot;&gt;landing check&lt;/text&gt;&lt;text x=&quot;528&quot; y=&quot;160&quot;&gt;runs in land-slot&lt;/text&gt;&lt;rect x=&quot;516&quot; y=&quot;192&quot; width=&quot;180&quot; height=&quot;54&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;528&quot; y=&quot;214&quot;&gt;atomic rebase&lt;/text&gt;&lt;text x=&quot;528&quot; y=&quot;232&quot;&gt;onto plan/auth&lt;/text&gt;&lt;rect x=&quot;516&quot; y=&quot;278&quot; width=&quot;180&quot; height=&quot;70&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;528&quot; y=&quot;302&quot;&gt;plan/auth branch&lt;/text&gt;&lt;text x=&quot;528&quot; y=&quot;322&quot;&gt;↑ 3 commits ahead&lt;/text&gt;&lt;text x=&quot;528&quot; y=&quot;338&quot;&gt;ready to land on main&lt;/text&gt;&lt;path d=&quot;M472 199 H512&quot; marker-end=&quot;url(#pd-h)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M606 102 V116&quot; marker-end=&quot;url(#pd-a)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M606 174 V188&quot; marker-end=&quot;url(#pd-h)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M606 246 V274&quot; marker-end=&quot;url(#pd-h)&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/div&gt;&lt;figcaption&gt;How wdx executes a plan: tasks run in parallel slots as dependencies clear, receive synthesized context from finished tasks, and rebase atomically onto the plan branch.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;why-big-features-break-single-prompts&quot;&gt;Why big features break single prompts&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;When an AI agent works inside a single massive session across dozens of files, three things inevitably go wrong:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Context degradation:&lt;/strong&gt; As conversation history swells past 150k tokens, attention drifts. Constraints stated in turn 2 are forgotten by turn 20.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;File drift and hallucinations:&lt;/strong&gt; The agent assumes a file looks the way it remembered eight tool calls ago, creating subtle regressions and mismatched interfaces.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Runaway blast radius:&lt;/strong&gt; When an agent tries to edit the database schema, HTTP handlers, CLI commands, and test suites in one go, a single mistake cascades through every file.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In traditional software development, we size tasks by developer hours or story points. When working with AI coding agents, that scale flips entirely. As I’ve found while building wdx with wdx:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Each task spawns in its own worker agent. What I usually prefer is it should be completed within ~300k context size. Sometimes there are longer running workers as well, but on average I prefer each individual task to be done in a considerable amount of context. As the main purpose of wdx is to use agents, I’m no longer looking at tasks in terms of usual difficulty level; instead, I now changed my scale to the context size needed for a task to complete.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sizing tasks by context budget (~300k tokens) keeps every agent sharp, fast, and strictly bounded.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;brainstorm-first-let-an-agent-write-the-plan&quot;&gt;Brainstorm first, let an agent write the plan&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;I never write plan YAML files by hand from scratch. Instead, I let an agent draft the plan, and I review it before anything executes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“I’ve never written a plan by myself; I always let an agent write the plan. What I do is review the plan and make any modification before starting it. My usual flow is to brainstorm an idea with the AI agent, let it document the process using the &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/docs/&quot;&gt;wdx docs&lt;/a&gt;, and once I’m satisfied with the approach, the architectural design, etc., I ask it to make a wdx plan for it. Then I review the plan just to ensure that all the steps make sense, as the result of each plan is intended to be landed to &lt;code dir=&quot;auto&quot;&gt;main&lt;/code&gt;, making sure that each plan in itself is deployable.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here is the three-step flow:&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Brainstorm in a doc:&lt;/strong&gt; An agent helps work out the technical design in a project doc (&lt;code dir=&quot;auto&quot;&gt;wdx doc create --name SSO&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Generate the plan YAML:&lt;/strong&gt; Once approved, the agent converts the design into a plan definition and pipes it directly to &lt;code dir=&quot;auto&quot;&gt;wdx plan create --name sso --path -&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Review before running:&lt;/strong&gt; You inspect the plan with &lt;code dir=&quot;auto&quot;&gt;wdx plan status --name sso&lt;/code&gt; or open it in TIDE. You verify that every task has a clear boundary, sensible dependencies, and produces a deployable commit.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h2 id=&quot;anatomy-of-a-plan-the-yaml&quot;&gt;Anatomy of a plan: the YAML&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;A plan is pure YAML, validated by wdx whenever it is saved:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;release.yaml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;goal&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Get the app ready for its first open-source contributors.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;constraints&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;Run python3 -m unittest before each commit.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;Keep each new documentation file concise.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;tasks&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;contributing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;aca&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;claude_code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;sonnet&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Create CONTRIBUTING.md explaining how to run the test suite,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;and commit it on this branch.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;license&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;aca&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;claude_code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;sonnet&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;after&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;contributing&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Create LICENSE with MIT license text, and commit it on this branch.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Every plan definition contains:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;goal&lt;/code&gt; (required):&lt;/strong&gt; High-level purpose of the feature. Every worker agent is told this goal so it understands what its task contributes to.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;constraints&lt;/code&gt; (optional):&lt;/strong&gt; A list of non-negotiable rules (e.g. test requirements, linters, style guidelines) passed to every task.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;tasks&lt;/code&gt;:&lt;/strong&gt; The DAG nodes. Each task specifies:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;id&lt;/code&gt;:&lt;/strong&gt; Letters, numbers, and hyphens (up to 50 characters).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;aca&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;model&lt;/code&gt;:&lt;/strong&gt; Which installed AI CLI and model execute the task (e.g. &lt;code dir=&quot;auto&quot;&gt;claude_code&lt;/code&gt; with &lt;code dir=&quot;auto&quot;&gt;sonnet&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;codex&lt;/code&gt; with &lt;code dir=&quot;auto&quot;&gt;gpt-5&lt;/code&gt;, or &lt;code dir=&quot;auto&quot;&gt;antigravity&lt;/code&gt; with &lt;code dir=&quot;auto&quot;&gt;gemini-4-argon-high&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;after&lt;/code&gt;:&lt;/strong&gt; The list of tasks that must complete and land before this task starts. Tasks with no &lt;code dir=&quot;auto&quot;&gt;after&lt;/code&gt; start immediately.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;prompt&lt;/code&gt;:&lt;/strong&gt; The task-specific instructions for the agent.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plan&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;first-release&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;release.yaml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;aside aria-label=&quot;Transitive reduction&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Transitive reduction&lt;/p&gt;&lt;div&gt;&lt;p&gt;wdx automatically reduces redundant dependencies in your DAG. If task &lt;code dir=&quot;auto&quot;&gt;docs&lt;/code&gt; declares &lt;code dir=&quot;auto&quot;&gt;after: [schema, api]&lt;/code&gt;, but task &lt;code dir=&quot;auto&quot;&gt;api&lt;/code&gt; already declares &lt;code dir=&quot;auto&quot;&gt;after: [schema]&lt;/code&gt;, wdx drops the redundant &lt;code dir=&quot;auto&quot;&gt;schema&lt;/code&gt; edge from &lt;code dir=&quot;auto&quot;&gt;docs&lt;/code&gt; and informs you.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;Every plan is checked on save: syntax errors, missing fields, unknown models, duplicate task IDs, and circular dependency cycles are caught immediately with line-numbered diagnostics (&lt;code dir=&quot;auto&quot;&gt;invalid_plan&lt;/code&gt;).&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;running-the-plan-slots-worktrees-and-context-handoff&quot;&gt;Running the plan: slots, worktrees, and context handoff&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;When you run a plan, wdx takes over as orchestrator:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plan&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;first-release&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Behind the scenes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Dedicated branch:&lt;/strong&gt; wdx creates branch &lt;code dir=&quot;auto&quot;&gt;plan/first-release&lt;/code&gt; from your project’s default branch.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Worktree slots:&lt;/strong&gt; Instead of creating a throwaway worktree per task, wdx uses reusable slots: &lt;code dir=&quot;auto&quot;&gt;.worktrees/&amp;#x3C;plan&gt;-1&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;.worktrees/&amp;#x3C;plan&gt;-2&lt;/code&gt;, up to &lt;code dir=&quot;auto&quot;&gt;plan.parallel&lt;/code&gt; (3 by default, or overridden via &lt;code dir=&quot;auto&quot;&gt;--parallel&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prompt synthesis:&lt;/strong&gt; When a task agent starts in its slot, wdx synthesizes a complete, focused initial prompt:
&lt;ul&gt;
&lt;li&gt;The plan’s overall &lt;code dir=&quot;auto&quot;&gt;goal&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;All shared &lt;code dir=&quot;auto&quot;&gt;constraints&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The summaries of completed tasks listed in &lt;code dir=&quot;auto&quot;&gt;after&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The task’s specific &lt;code dir=&quot;auto&quot;&gt;prompt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Instructions on how to commit and report completion&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Synthesized Agent Prompt&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;You are doing task license of the plan first-release, run by wdx.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Goal: Get the app ready for its first open-source contributors.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Constraints:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- Run python3 -m unittest before each commit.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- Keep each new documentation file concise.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Done before you, which this task waits for:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- contributing: Created CONTRIBUTING.md with test suite instructions (commit 8a1b2c3).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Your task:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Create LICENSE with MIT license text, and commit it on this branch.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;When it is done, commit your work on this branch, then run:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;wdx plan task done --agent-id $WDX_AGENT_ID --summary &quot;&amp;#x3C;what you did, in a few lines&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This context handoff is clean: the &lt;code dir=&quot;auto&quot;&gt;license&lt;/code&gt; agent never inherits hundreds of thousands of tokens of old shell output from &lt;code dir=&quot;auto&quot;&gt;contributing&lt;/code&gt;. It receives only the distilled summary and commit hash it needs, starting with a clean context window.&lt;/p&gt;
&lt;p&gt;Here is a plan running on our toy &lt;code dir=&quot;auto&quot;&gt;notes&lt;/code&gt; repository:&lt;/p&gt;
&lt;figure&gt;&lt;video autoplay loop muted playsinline aria-label=&quot;A terminal recording: wdx plan create saves a plan with two tasks; wdx plan run starts task contributing; wdx plan status displays the agent running in slot release-1; once contributing lands, task license unblocks and finishes, landing both cleanly on plan/release&quot;&gt;&lt;source src=&quot;/wdx/blog/plans/plan-run.webm&quot; type=&quot;video/webm&quot;&gt;&lt;source src=&quot;/wdx/blog/plans/plan-run.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/video&gt;&lt;figcaption&gt;Running a plan on the demo repository: tasks execute in slots, hand off summaries, and land on plan/release.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;watching-the-graph-unfold-cli-and-tide&quot;&gt;Watching the graph unfold: CLI and TIDE&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;While a plan runs, you can follow its progress from the CLI:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;$ wdx plan status --name first-release&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;first-release: running, 1/2 tasks done, on plan/first-release&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;goal        Get the app ready for its first open-source contributors.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;constraint  Run python3 -m unittest before each commit.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;TASK          STATE                     ACA          MODEL   AFTER         AGENT                       SLOT&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;contributing  done                                   claude_code  sonnet&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;license       running                   claude_code  sonnet  contributing  first-release-license       first-release-1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You can inspect individual tasks with &lt;code dir=&quot;auto&quot;&gt;wdx plan task get&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;$ wdx plan task get --plan first-release --task contributing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;contributing of first-release: done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;summary  Created CONTRIBUTING.md with instructions to run unittests (a4b1c2d).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;agent    first-release-contributing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;slot     first-release-1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;In &lt;a href=&quot;https://srjn45.github.io/wdx/docs/tide/docs-and-plans/&quot;&gt;TIDE&lt;/a&gt;, press &lt;code dir=&quot;auto&quot;&gt;Enter&lt;/code&gt; on a plan in the left sidebar to open its visual dashboard. TIDE renders the DAG as a live commit-graph rail (just like &lt;code dir=&quot;auto&quot;&gt;git log --graph&lt;/code&gt;), showing status marks, dependency indicators (&lt;code dir=&quot;auto&quot;&gt;▲ needs&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;▼ unblocks&lt;/code&gt;), and task details:&lt;/p&gt;
&lt;figure data-scene=&quot;plan&quot; data-label=&quot;TIDE: the Plans tab showing tasks arranged along a DAG commit-graph rail with dependencies and execution status&quot; data-version=&quot;0.5.0&quot;&gt;&lt;div&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;svg viewBox=&quot;0 10 100 80&quot; aria-hidden=&quot;true&quot;&gt;&lt;rect x=&quot;10&quot; y=&quot;18&quot; width=&quot;80&quot; height=&quot;64&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;8&quot;&gt;&lt;/rect&gt;&lt;polyline points=&quot;30,40 44,52 30,64&quot; fill=&quot;none&quot; stroke-width=&quot;8&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/polyline&gt;&lt;rect x=&quot;53&quot; y=&quot;43&quot; width=&quot;14&quot; height=&quot;22&quot; rx=&quot;2&quot; fill=&quot;currentColor&quot;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;span&gt;wdx tide · shop-api&lt;/span&gt;&lt;button type=&quot;button&quot;&gt;Open larger&lt;/button&gt;&lt;/div&gt;&lt;div tabindex=&quot;0&quot;&gt;&lt;/div&gt;&lt;figcaption&gt;TIDE&apos;s visual plan dashboard: DAG rail on the left, dependencies marked with ▲ and ▼, and live task status. &lt;span&gt;Click, scroll and type: it is live, and runs nothing.&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;landing-tasks-atomic-rebases-and-landing-checks&quot;&gt;Landing tasks: atomic rebases and landing checks&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;When a worker agent finishes its task, it runs:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plan&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;task&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--agent-id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$WDX_AGENT_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--summary&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Implemented user authentication routes&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;wdx handles the landing with strict verification:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Commit check:&lt;/strong&gt; wdx checks the slot’s git status. If there are uncommitted changes or unstaged edits, it refuses with &lt;code dir=&quot;auto&quot;&gt;not_committed&lt;/code&gt;. The agent cannot complete until everything is committed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Project landing check:&lt;/strong&gt; If your project configured a landing check (&lt;code dir=&quot;auto&quot;&gt;wdx project landing --check &quot;make test&quot;&lt;/code&gt;), wdx executes that check in a dedicated background terminal named &lt;code dir=&quot;auto&quot;&gt;land-&amp;#x3C;slot&gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Atomic rebase:&lt;/strong&gt; Once the check passes, wdx rebases the task’s commits onto &lt;code dir=&quot;auto&quot;&gt;plan/&amp;#x3C;name&gt;&lt;/code&gt; using &lt;code dir=&quot;auto&quot;&gt;git rebase --onto&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent cleanup &amp;#x26; unblocking:&lt;/strong&gt; wdx terminates the task’s agent, frees the slot, and unblocks any downstream tasks waiting on this task’s completion.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Because landing rebases onto &lt;code dir=&quot;auto&quot;&gt;plan/&amp;#x3C;name&gt;&lt;/code&gt;, your plan’s branch stays clean and linear—no messy merge commits.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;when-tasks-fail-resolving-conflicts-with-retries&quot;&gt;When tasks fail: resolving conflicts with retries&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;In autonomous software development, failures happen: an agent might write code that fails the test suite, or two parallel tasks might touch conflicting lines in the same file.&lt;/p&gt;
&lt;p&gt;When a landing check fails or git hits a rebase conflict:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;$ wdx plan status --name first-release&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;first-release: running, 1/2 tasks done, 1 failed, on plan/first-release&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;goal        Get the app ready for its first open-source contributors.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;TASK          STATE                                               ACA          MODEL   AFTER         AGENT                  SLOT&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;contributing  done                                                claude_code  sonnet&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;license       land failed: check (terminal land-first-release-1)  claude_code  sonnet  contributing  first-release-license  first-release-1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;wdx does not crash or abort the rest of the plan. Independent tasks keep running. The failed task pauses and reports diagnostics:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;$ wdx plan task get --plan first-release --task license&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;license of first-release: land failed: check (terminal land-first-release-1)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;after    contributing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;agent    first-release-license&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;worktree /home/you/notes/.worktrees/first-release-1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;check    its output in the terminal land-first-release-1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;As the author notes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Usually a task can fail on conflicts, which can be easily resolved by retrying the task. It just needs a manual nudge that can be later on handled by wdx automatically, but for now I prefer to keep things manual.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You have full control over how to resolve it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;wdx plan task retry --plan &amp;#x3C;name&gt; --task &amp;#x3C;id&gt;&lt;/code&gt;:&lt;/strong&gt; Resumes the agent in its existing session, passing a note that explains the failure (the check failure output or conflicting files).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;wdx plan task retry --plan &amp;#x3C;name&gt; --task &amp;#x3C;id&gt; --fresh&lt;/code&gt;:&lt;/strong&gt; Starts a brand new agent in the slot, informed of the earlier commits.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;wdx plan task land --plan &amp;#x3C;name&gt; --task &amp;#x3C;id&gt;&lt;/code&gt;:&lt;/strong&gt; If you resolved the conflict or fixed the test manually inside &lt;code dir=&quot;auto&quot;&gt;.worktrees/&amp;#x3C;plan&gt;-&amp;#x3C;n&gt;&lt;/code&gt;, run this to re-run the check and rebase onto the plan branch.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;wdx plan task skip --plan &amp;#x3C;name&gt; --task &amp;#x3C;id&gt;&lt;/code&gt;:&lt;/strong&gt; Skips the task, allowing downstream tasks to proceed.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;&lt;video autoplay loop muted playsinline aria-label=&quot;A terminal recording: a task landing fails due to a check; wdx plan task get displays the failure; the issue is resolved and wdx plan task retry lands the task successfully&quot;&gt;&lt;source src=&quot;/wdx/blog/plans/plan-retry.webm&quot; type=&quot;video/webm&quot;&gt;&lt;source src=&quot;/wdx/blog/plans/plan-retry.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/video&gt;&lt;figcaption&gt;Resolving a failed task: inspect failure output in land-slot terminal, retry with a fresh nudge, and land cleanly.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;from-single-plans-to-plans-of-plans&quot;&gt;From single plans to plans of plans&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Plans scale from small tactical fixes to entire product architectures:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“I have executed both plans and plan of plans. It can be as simple as marking an agent limited when the ACA ran out of usage quota, or it can be as complex as building the complete hub feature with plan of plans.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In wdx’s own history:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;agent-limited&lt;/code&gt;:&lt;/strong&gt; A single 5-task plan (&lt;code dir=&quot;auto&quot;&gt;buckets&lt;/code&gt; → &lt;code dir=&quot;auto&quot;&gt;limited&lt;/code&gt; → &lt;code dir=&quot;auto&quot;&gt;tide&lt;/code&gt; → &lt;code dir=&quot;auto&quot;&gt;checked&lt;/code&gt; → &lt;code dir=&quot;auto&quot;&gt;finish&lt;/code&gt;) that added quota limit tracking across all four AI CLIs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;hub&lt;/code&gt;:&lt;/strong&gt; A plan of plans comprising &lt;strong&gt;10 sequential child plans&lt;/strong&gt; (&lt;code dir=&quot;auto&quot;&gt;hub-sqlite&lt;/code&gt; → &lt;code dir=&quot;auto&quot;&gt;hub-settings&lt;/code&gt; → &lt;code dir=&quot;auto&quot;&gt;hub-clikit&lt;/code&gt; → &lt;code dir=&quot;auto&quot;&gt;hub-skeleton&lt;/code&gt; → &lt;code dir=&quot;auto&quot;&gt;hub-accounts&lt;/code&gt; → &lt;code dir=&quot;auto&quot;&gt;hub-login&lt;/code&gt; → &lt;code dir=&quot;auto&quot;&gt;hub-docs-push&lt;/code&gt; → &lt;code dir=&quot;auto&quot;&gt;hub-tunnel&lt;/code&gt; → &lt;code dir=&quot;auto&quot;&gt;hub-node-commands&lt;/code&gt; → &lt;code dir=&quot;auto&quot;&gt;hub-remote-tide&lt;/code&gt;). Each child plan ran its own DAG of worker agents, tested its domain, and landed to &lt;code dir=&quot;auto&quot;&gt;main&lt;/code&gt; before the next plan began.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-tabs&gt;&lt;div&gt;&lt;ul role=&quot;tablist&quot;&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-0-0&quot; id=&quot;tab-0-0&quot; aria-selected=&quot;true&quot; tabindex=&quot;0&quot;&gt;Plan of Plans (hub.yaml)&lt;/a&gt;&lt;/li&gt;&lt;li role=&quot;presentation&quot;&gt;&lt;a role=&quot;tab&quot; href=&quot;#tab-panel-0-1&quot; id=&quot;tab-0-1&quot; aria-selected=&quot;false&quot; tabindex=&quot;-1&quot;&gt;Single Plan (agent-limited.yaml)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-0-0&quot; aria-labelledby=&quot;tab-0-0&quot; role=&quot;tabpanel&quot;&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;hub.yaml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;goal&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;The wdx-hub MVP: the ten hub plans in order, each landing in main&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;before the next starts.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;plans&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hub-sqlite&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hub-settings&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;after&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;hub-sqlite&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hub-clikit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;after&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;hub-settings&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hub-skeleton&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;after&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;hub-clikit&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hub-accounts&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;after&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;hub-skeleton&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hub-login&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;after&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;hub-accounts&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hub-docs-push&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;after&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;hub-login&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hub-tunnel&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;after&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;hub-docs-push&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hub-node-commands&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;after&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;hub-tunnel&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hub-remote-tide&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;after&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;hub-node-commands&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;tab-panel-0-1&quot; aria-labelledby=&quot;tab-0-1&quot; role=&quot;tabpanel&quot; hidden&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;agent-limited.yaml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;goal&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&gt;-&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;An agent is marked limited while a bucket its model draws on is limited,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;and not while another bucket of its ACA is.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;constraints&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;Tests never touch the network and never start a real ACA.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;Work only in the worktree the plan gave you.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;tasks&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;buckets&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;aca&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;claude_code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;opus&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Give aca.AiCodingAgent a ModelBuckets method...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;limited&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;aca&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;claude_code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;opus&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;after&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;buckets&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Derive an agent&apos;s limit in the daemon...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;tide&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;aca&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;claude_code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;opus&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;after&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;limited&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Show the limit in tide...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;checked&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;aca&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;claude_code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;opus&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;after&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;tide&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Check the built daemon by hand...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;finish&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;aca&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;claude_code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;opus&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;after&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;checked&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Update docs and the website...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/starlight-tabs&gt;
&lt;div&gt;&lt;h3 id=&quot;stacked-pull-requests&quot;&gt;Stacked pull requests&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;When you collaborate with human reviewers on GitHub, waiting for a PR review before writing the next piece can stall your team.&lt;/p&gt;
&lt;p&gt;wdx supports stacked PRs directly in plan definitions:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pr&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;stacked&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;With &lt;code dir=&quot;auto&quot;&gt;pr: true&lt;/code&gt;, wdx automatically creates a pull request via &lt;code dir=&quot;auto&quot;&gt;gh&lt;/code&gt; when a plan completes. With &lt;code dir=&quot;auto&quot;&gt;stacked: true&lt;/code&gt;, a downstream child plan doesn’t wait for the upstream PR to be merged—it immediately branches from the upstream plan’s branch (&lt;code dir=&quot;auto&quot;&gt;plan/feature-b&lt;/code&gt; off &lt;code dir=&quot;auto&quot;&gt;plan/feature-a&lt;/code&gt;) and opens a stacked PR targeting &lt;code dir=&quot;auto&quot;&gt;plan/feature-a&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;When the upstream PR is merged into &lt;code dir=&quot;auto&quot;&gt;main&lt;/code&gt;, running:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;worktree&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rebase&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;feature-b-1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;detects the merge via GitHub’s API, rebases the commits onto &lt;code dir=&quot;auto&quot;&gt;main&lt;/code&gt; using &lt;code dir=&quot;auto&quot;&gt;git rebase --onto&lt;/code&gt;, and updates the PR target on GitHub automatically.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it&quot;&gt;Try it&lt;/h2&gt;&lt;/div&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Install wdx:&lt;/strong&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-fsSL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://raw.githubusercontent.com/srjn45/wdx/main/scripts/install.sh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open your repository:&lt;/strong&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-project&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;project&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Brainstorm a plan with an agent:&lt;/strong&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;planner&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Read our architecture docs and write a wdx plan in plan.yaml for adding user export&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inspect and run the plan:&lt;/strong&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plan&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plan.yaml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plan&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;export&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tide&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;article&gt;&lt;p&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M21.17 2.06A13.1 13.1 0 0 0 19 1.87a12.94 12.94 0 0 0-7 2.05 12.94 12.94 0 0 0-7-2 13.1 13.1 0 0 0-2.17.19 1 1 0 0 0-.83 1v12a1 1 0 0 0 1.17 1 10.9 10.9 0 0 1 8.25 1.91l.12.07h.11a.91.91 0 0 0 .7 0h.11l.12-.07A10.899 10.899 0 0 1 20.83 16 1 1 0 0 0 22 15V3a1 1 0 0 0-.83-.94ZM11 15.35a12.87 12.87 0 0 0-6-1.48H4v-10c.333-.02.667-.02 1 0a10.86 10.86 0 0 1 6 1.8v9.68Zm9-1.44h-1a12.87 12.87 0 0 0-6 1.48V5.67a10.86 10.86 0 0 1 6-1.8c.333-.02.667-.02 1 0v10.04Zm1.17 4.15a13.098 13.098 0 0 0-2.17-.19 12.94 12.94 0 0 0-7 2.05 12.94 12.94 0 0 0-7-2.05c-.727.003-1.453.066-2.17.19A1 1 0 0 0 2 19.21a1 1 0 0 0 1.17.79 10.9 10.9 0 0 1 8.25 1.91 1 1 0 0 0 1.16 0A10.9 10.9 0 0 1 20.83 20a1 1 0 0 0 1.17-.79 1 1 0 0 0-.83-1.15Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span&gt;Plans Guide&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;Read the complete guide to creating and managing plans in &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/plans/&quot;&gt;Plans&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;article&gt;&lt;p&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;/svg&gt;&lt;span&gt;Running Plans&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;Learn about slot limits, pause/resume, and landing checks in &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/running-plans/&quot;&gt;Running plans&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;article&gt;&lt;p&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span&gt;Docs &amp;#x26; Plans in TIDE&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;Explore navigating the DAG rail, inspecting tasks, and handling retries in &lt;a href=&quot;https://srjn45.github.io/wdx/docs/tide/docs-and-plans/&quot;&gt;Docs and plans in TIDE&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;article&gt;&lt;p&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M12 .3a12 12 0 0 0-3.8 23.38c.6.12.83-.26.83-.57L9 21.07c-3.34.72-4.04-1.61-4.04-1.61-.55-1.39-1.34-1.76-1.34-1.76-1.08-.74.09-.73.09-.73 1.2.09 1.83 1.24 1.83 1.24 1.08 1.83 2.81 1.3 3.5 1 .1-.78.42-1.31.76-1.61-2.67-.3-5.47-1.33-5.47-5.93 0-1.31.47-2.38 1.24-3.22-.14-.3-.54-1.52.1-3.18 0 0 1-.32 3.3 1.23a11.5 11.5 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.64 1.66.24 2.88.12 3.18a4.65 4.65 0 0 1 1.23 3.22c0 4.61-2.8 5.63-5.48 5.92.42.36.81 1.1.81 2.22l-.01 3.29c0 .31.2.69.82.57A12 12 0 0 0 12 .3Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span&gt;GitHub Repository&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;Explore the codebase, read our development plans, and star the project on &lt;a href=&quot;https://github.com/srjn45/wdx&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/div&gt;</content:encoded><category>how-to</category><category>plans</category><category>agents</category><category>orchestration</category></item><item><title>I built wdx with wdx: a team of AI agents wrote most of its code</title><link>https://srjn45.github.io/wdx/blog/wdx-builds-wdx/</link><guid isPermaLink="true">https://srjn45.github.io/wdx/blog/wdx-builds-wdx/</guid><description>How wdx is developed by the agents it runs: designs approved first, then plans, child agents and worktrees, with a person landing every change.</description><pubDate>Wed, 11 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In 16 days wdx went from its first commit to v0.5.0: 703 commits and about 185,000 lines of Go, generated code left out. All of that code was written by AI agents, run by wdx itself. I did the planning and the design, with in-depth analysis and brainstorming, and every approval.&lt;/p&gt;
&lt;p&gt;This is how that works, and why it is not magic. You keep using your favourite AI CLI the way you did before. What wdx adds is an orchestration layer: one screen to run and keep track of many agents, and plans that carry pre-planned work on, step after step, until something needs a person.&lt;/p&gt;
&lt;figure&gt;&lt;div&gt;&lt;svg viewBox=&quot;0 0 720 320&quot; role=&quot;img&quot; aria-label=&quot;Go lines in wdx&amp;#x27;s tree, generated code left out, by day since the first commit: v0.1.0 on day 2, 11,064; v0.2.0 on day 6, 50,104; v0.3.0 on day 8, 85,421; v0.4.0 on day 12, 129,069; v0.5.0 on day 16, 185,168.&quot;&gt;&lt;defs&gt;&lt;marker id=&quot;gl-a&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;gl-h&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;/defs&gt;&lt;g&gt;&lt;path d=&quot;M64 266 H690&quot;&gt;&lt;/path&gt;&lt;text x=&quot;54&quot; y=&quot;270&quot; text-anchor=&quot;end&quot;&gt;0&lt;/text&gt;&lt;path d=&quot;M64 206.5 H690&quot;&gt;&lt;/path&gt;&lt;text x=&quot;54&quot; y=&quot;210.5&quot; text-anchor=&quot;end&quot;&gt;50K&lt;/text&gt;&lt;path d=&quot;M64 147 H690&quot;&gt;&lt;/path&gt;&lt;text x=&quot;54&quot; y=&quot;151&quot; text-anchor=&quot;end&quot;&gt;100K&lt;/text&gt;&lt;path d=&quot;M64 87.5 H690&quot;&gt;&lt;/path&gt;&lt;text x=&quot;54&quot; y=&quot;91.5&quot; text-anchor=&quot;end&quot;&gt;150K&lt;/text&gt;&lt;path d=&quot;M64 28 H690&quot;&gt;&lt;/path&gt;&lt;text x=&quot;54&quot; y=&quot;32&quot; text-anchor=&quot;end&quot;&gt;200K&lt;/text&gt;&lt;text x=&quot;64&quot; y=&quot;286&quot; text-anchor=&quot;middle&quot;&gt;0&lt;/text&gt;&lt;text x=&quot;142.25&quot; y=&quot;286&quot; text-anchor=&quot;middle&quot;&gt;2&lt;/text&gt;&lt;text x=&quot;220.5&quot; y=&quot;286&quot; text-anchor=&quot;middle&quot;&gt;4&lt;/text&gt;&lt;text x=&quot;298.75&quot; y=&quot;286&quot; text-anchor=&quot;middle&quot;&gt;6&lt;/text&gt;&lt;text x=&quot;377&quot; y=&quot;286&quot; text-anchor=&quot;middle&quot;&gt;8&lt;/text&gt;&lt;text x=&quot;455.25&quot; y=&quot;286&quot; text-anchor=&quot;middle&quot;&gt;10&lt;/text&gt;&lt;text x=&quot;533.5&quot; y=&quot;286&quot; text-anchor=&quot;middle&quot;&gt;12&lt;/text&gt;&lt;text x=&quot;611.75&quot; y=&quot;286&quot; text-anchor=&quot;middle&quot;&gt;14&lt;/text&gt;&lt;text x=&quot;690&quot; y=&quot;286&quot; text-anchor=&quot;middle&quot;&gt;16&lt;/text&gt;&lt;text x=&quot;690&quot; y=&quot;306&quot; text-anchor=&quot;end&quot;&gt;days since the first commit&lt;/text&gt;&lt;path d=&quot;M64.0 265.9 L142.3 252.8 L298.8 206.4 L377.0 164.3 L533.5 112.4 L690.0 45.7 L690 266 L64 266 Z&quot;&gt;&lt;/path&gt;&lt;g&gt;&lt;circle cx=&quot;142.25&quot; cy=&quot;252.83384&quot; r=&quot;5&quot;&gt;&lt;/circle&gt;&lt;circle cx=&quot;142.25&quot; cy=&quot;252.83384&quot; r=&quot;14&quot;&gt;&lt;title&gt;v0.1.0, 2026-10-28 (day 2): 11,064 Go lines&lt;/title&gt;&lt;/circle&gt;&lt;text x=&quot;132.25&quot; y=&quot;242.83384&quot; text-anchor=&quot;end&quot;&gt;v0.1.0&lt;/text&gt;&lt;/g&gt;&lt;g&gt;&lt;circle cx=&quot;298.75&quot; cy=&quot;206.37624&quot; r=&quot;5&quot;&gt;&lt;/circle&gt;&lt;circle cx=&quot;298.75&quot; cy=&quot;206.37624&quot; r=&quot;14&quot;&gt;&lt;title&gt;v0.2.0, 2026-11-01 (day 6): 50,104 Go lines&lt;/title&gt;&lt;/circle&gt;&lt;text x=&quot;288.75&quot; y=&quot;196.37624&quot; text-anchor=&quot;end&quot;&gt;v0.2.0&lt;/text&gt;&lt;/g&gt;&lt;g&gt;&lt;circle cx=&quot;377&quot; cy=&quot;164.34901&quot; r=&quot;5&quot;&gt;&lt;/circle&gt;&lt;circle cx=&quot;377&quot; cy=&quot;164.34901&quot; r=&quot;14&quot;&gt;&lt;title&gt;v0.3.0, 2026-11-03 (day 8): 85,421 Go lines&lt;/title&gt;&lt;/circle&gt;&lt;text x=&quot;367&quot; y=&quot;154.34901&quot; text-anchor=&quot;end&quot;&gt;v0.3.0&lt;/text&gt;&lt;/g&gt;&lt;g&gt;&lt;circle cx=&quot;533.5&quot; cy=&quot;112.40789000000001&quot; r=&quot;5&quot;&gt;&lt;/circle&gt;&lt;circle cx=&quot;533.5&quot; cy=&quot;112.40789000000001&quot; r=&quot;14&quot;&gt;&lt;title&gt;v0.4.0, 2026-11-07 (day 12): 129,069 Go lines&lt;/title&gt;&lt;/circle&gt;&lt;text x=&quot;523.5&quot; y=&quot;102.40789000000001&quot; text-anchor=&quot;end&quot;&gt;v0.4.0&lt;/text&gt;&lt;/g&gt;&lt;g&gt;&lt;circle cx=&quot;690&quot; cy=&quot;45.65008&quot; r=&quot;5&quot;&gt;&lt;/circle&gt;&lt;circle cx=&quot;690&quot; cy=&quot;45.65008&quot; r=&quot;14&quot;&gt;&lt;title&gt;v0.5.0, 2026-11-11 (day 16): 185,168 Go lines&lt;/title&gt;&lt;/circle&gt;&lt;text x=&quot;680&quot; y=&quot;35.65008&quot; text-anchor=&quot;end&quot;&gt;v0.5.0 · 185,168&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;&lt;figcaption&gt;Go lines in the tree at each release, generated code left out, by day since the first commit on 26 October 2026.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;the-next-generation-warden&quot;&gt;The next-generation warden&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;wdx is the next-generation warden, an agent tool I had built before; the logo writes it wdˣ, with the x as an exponent. The x has a second meaning. wdx dropped tmux and built its own detached terminals, which keep running when you close the window and let you attach again as tmux does. The screen of each one is kept by &lt;a href=&quot;https://github.com/charmbracelet/x&quot;&gt;x/vt&lt;/a&gt;, which I forked to add fixes, patches and features of our own on top.&lt;/p&gt;
&lt;p&gt;So there were no big surprises. I had built something like it, and over time I had learned what is actually needed and how to build it. warden’s story gets a post of its own later in this series.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;one-agent-slowly-on-purpose&quot;&gt;One agent, slowly, on purpose&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Until wdx had &lt;code dir=&quot;auto&quot;&gt;attach&lt;/code&gt;, I built it with a single Claude Code agent. Only one, so I would not lose focus or get confused by switching contexts. The early development was slow, but very well thought out.&lt;/p&gt;
&lt;p&gt;Once agents could be attached, I started using that a little. Once attach was complete, I moved to &lt;a href=&quot;https://srjn45.github.io/wdx/docs/tide/layout/&quot;&gt;TIDE&lt;/a&gt;, the Terminal IDE, because that is what gives the full benefit of wdx: many agents, all visible on one screen and easy to keep track of. TIDE is where I work now, and I never leave it.&lt;/p&gt;
&lt;p&gt;Building wdx with wdx also gave me continuous feedback: every feature was tested in real work, and the pain points and the improvements showed up in my own day.&lt;/p&gt;
&lt;figure&gt;&lt;div&gt;&lt;svg viewBox=&quot;0 0 720 300&quot; role=&quot;img&quot; aria-label=&quot;Per release, commits and Go lines added since the release before, generated code left out: v0.1.0, 32 commits and 11,012 lines; v0.2.0, 185 commits and 41,208 lines; v0.3.0, 76 commits and 36,124 lines; v0.4.0, 190 commits and 45,919 lines; v0.5.0, 220 commits and 63,019 lines.&quot;&gt;&lt;defs&gt;&lt;marker id=&quot;rb-a&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;rb-h&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;/defs&gt;&lt;g&gt;&lt;g&gt;&lt;text x=&quot;50&quot; y=&quot;22&quot;&gt;commits&lt;/text&gt;&lt;path d=&quot;M50 250 H340&quot;&gt;&lt;/path&gt;&lt;text x=&quot;42&quot; y=&quot;254&quot; text-anchor=&quot;end&quot;&gt;0&lt;/text&gt;&lt;path d=&quot;M50 211.2 H340&quot;&gt;&lt;/path&gt;&lt;text x=&quot;42&quot; y=&quot;215.2&quot; text-anchor=&quot;end&quot;&gt;50&lt;/text&gt;&lt;path d=&quot;M50 172.39999999999998 H340&quot;&gt;&lt;/path&gt;&lt;text x=&quot;42&quot; y=&quot;176.39999999999998&quot; text-anchor=&quot;end&quot;&gt;100&lt;/text&gt;&lt;path d=&quot;M50 133.60000000000002 H340&quot;&gt;&lt;/path&gt;&lt;text x=&quot;42&quot; y=&quot;137.60000000000002&quot; text-anchor=&quot;end&quot;&gt;150&lt;/text&gt;&lt;path d=&quot;M50 94.79999999999998 H340&quot;&gt;&lt;/path&gt;&lt;text x=&quot;42&quot; y=&quot;98.79999999999998&quot; text-anchor=&quot;end&quot;&gt;200&lt;/text&gt;&lt;path d=&quot;M50 56 H340&quot;&gt;&lt;/path&gt;&lt;text x=&quot;42&quot; y=&quot;60&quot; text-anchor=&quot;end&quot;&gt;250&lt;/text&gt;&lt;g&gt;&lt;path d=&quot;M67 250 V229.168 Q67 225.168 71 225.168 H87 Q91 225.168 91 229.168 V250 Z&quot;&gt;&lt;title&gt;v0.1.0: 32 commits&lt;/title&gt;&lt;/path&gt;&lt;text x=&quot;79&quot; y=&quot;268&quot; text-anchor=&quot;middle&quot;&gt;v0.1&lt;/text&gt;&lt;/g&gt;&lt;g&gt;&lt;path d=&quot;M125 250 V110.44 Q125 106.44 129 106.44 H145 Q149 106.44 149 110.44 V250 Z&quot;&gt;&lt;title&gt;v0.2.0: 185 commits&lt;/title&gt;&lt;/path&gt;&lt;text x=&quot;137&quot; y=&quot;268&quot; text-anchor=&quot;middle&quot;&gt;v0.2&lt;/text&gt;&lt;/g&gt;&lt;g&gt;&lt;path d=&quot;M183 250 V195.024 Q183 191.024 187 191.024 H203 Q207 191.024 207 195.024 V250 Z&quot;&gt;&lt;title&gt;v0.3.0: 76 commits&lt;/title&gt;&lt;/path&gt;&lt;text x=&quot;195&quot; y=&quot;268&quot; text-anchor=&quot;middle&quot;&gt;v0.3&lt;/text&gt;&lt;/g&gt;&lt;g&gt;&lt;path d=&quot;M241 250 V106.56 Q241 102.56 245 102.56 H261 Q265 102.56 265 106.56 V250 Z&quot;&gt;&lt;title&gt;v0.4.0: 190 commits&lt;/title&gt;&lt;/path&gt;&lt;text x=&quot;253&quot; y=&quot;268&quot; text-anchor=&quot;middle&quot;&gt;v0.4&lt;/text&gt;&lt;/g&gt;&lt;g&gt;&lt;path d=&quot;M299 250 V83.28 Q299 79.28 303 79.28 H319 Q323 79.28 323 83.28 V250 Z&quot;&gt;&lt;title&gt;v0.5.0: 220 commits&lt;/title&gt;&lt;/path&gt;&lt;text x=&quot;311&quot; y=&quot;268&quot; text-anchor=&quot;middle&quot;&gt;v0.5&lt;/text&gt;&lt;text x=&quot;311&quot; y=&quot;71.28&quot; text-anchor=&quot;middle&quot;&gt;220&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g&gt;&lt;text x=&quot;420&quot; y=&quot;22&quot;&gt;Go lines added&lt;/text&gt;&lt;path d=&quot;M420 250 H710&quot;&gt;&lt;/path&gt;&lt;text x=&quot;412&quot; y=&quot;254&quot; text-anchor=&quot;end&quot;&gt;0&lt;/text&gt;&lt;path d=&quot;M420 222.28571428571428 H710&quot;&gt;&lt;/path&gt;&lt;text x=&quot;412&quot; y=&quot;226.28571428571428&quot; text-anchor=&quot;end&quot;&gt;10K&lt;/text&gt;&lt;path d=&quot;M420 194.57142857142858 H710&quot;&gt;&lt;/path&gt;&lt;text x=&quot;412&quot; y=&quot;198.57142857142858&quot; text-anchor=&quot;end&quot;&gt;20K&lt;/text&gt;&lt;path d=&quot;M420 166.85714285714286 H710&quot;&gt;&lt;/path&gt;&lt;text x=&quot;412&quot; y=&quot;170.85714285714286&quot; text-anchor=&quot;end&quot;&gt;30K&lt;/text&gt;&lt;path d=&quot;M420 139.14285714285717 H710&quot;&gt;&lt;/path&gt;&lt;text x=&quot;412&quot; y=&quot;143.14285714285717&quot; text-anchor=&quot;end&quot;&gt;40K&lt;/text&gt;&lt;path d=&quot;M420 111.42857142857142 H710&quot;&gt;&lt;/path&gt;&lt;text x=&quot;412&quot; y=&quot;115.42857142857142&quot; text-anchor=&quot;end&quot;&gt;50K&lt;/text&gt;&lt;path d=&quot;M420 83.71428571428572 H710&quot;&gt;&lt;/path&gt;&lt;text x=&quot;412&quot; y=&quot;87.71428571428572&quot; text-anchor=&quot;end&quot;&gt;60K&lt;/text&gt;&lt;path d=&quot;M420 56 H710&quot;&gt;&lt;/path&gt;&lt;text x=&quot;412&quot; y=&quot;60&quot; text-anchor=&quot;end&quot;&gt;70K&lt;/text&gt;&lt;g&gt;&lt;path d=&quot;M437 250 V223.48102857142857 Q437 219.48102857142857 441 219.48102857142857 H457 Q461 219.48102857142857 461 223.48102857142857 V250 Z&quot;&gt;&lt;title&gt;v0.1.0: 11,012 Go lines added&lt;/title&gt;&lt;/path&gt;&lt;text x=&quot;449&quot; y=&quot;268&quot; text-anchor=&quot;middle&quot;&gt;v0.1&lt;/text&gt;&lt;/g&gt;&lt;g&gt;&lt;path d=&quot;M495 250 V139.79497142857144 Q495 135.79497142857144 499 135.79497142857144 H515 Q519 135.79497142857144 519 139.79497142857144 V250 Z&quot;&gt;&lt;title&gt;v0.2.0: 41,208 Go lines added&lt;/title&gt;&lt;/path&gt;&lt;text x=&quot;507&quot; y=&quot;268&quot; text-anchor=&quot;middle&quot;&gt;v0.2&lt;/text&gt;&lt;/g&gt;&lt;g&gt;&lt;path d=&quot;M553 250 V153.88491428571427 Q553 149.88491428571427 557 149.88491428571427 H573 Q577 149.88491428571427 577 153.88491428571427 V250 Z&quot;&gt;&lt;title&gt;v0.3.0: 36,124 Go lines added&lt;/title&gt;&lt;/path&gt;&lt;text x=&quot;565&quot; y=&quot;268&quot; text-anchor=&quot;middle&quot;&gt;v0.3&lt;/text&gt;&lt;/g&gt;&lt;g&gt;&lt;path d=&quot;M611 250 V126.73877142857143 Q611 122.73877142857143 615 122.73877142857143 H631 Q635 122.73877142857143 635 126.73877142857143 V250 Z&quot;&gt;&lt;title&gt;v0.4.0: 45,919 Go lines added&lt;/title&gt;&lt;/path&gt;&lt;text x=&quot;623&quot; y=&quot;268&quot; text-anchor=&quot;middle&quot;&gt;v0.4&lt;/text&gt;&lt;/g&gt;&lt;g&gt;&lt;path d=&quot;M669 250 V79.34734285714285 Q669 75.34734285714285 673 75.34734285714285 H689 Q693 75.34734285714285 693 79.34734285714285 V250 Z&quot;&gt;&lt;title&gt;v0.5.0: 63,019 Go lines added&lt;/title&gt;&lt;/path&gt;&lt;text x=&quot;681&quot; y=&quot;268&quot; text-anchor=&quot;middle&quot;&gt;v0.5&lt;/text&gt;&lt;text x=&quot;681&quot; y=&quot;67.34734285714285&quot; text-anchor=&quot;middle&quot;&gt;63,019&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;&lt;figcaption&gt;Per release: the commits since the release before, and the Go lines they added, generated code left out. Each chart has its own scale.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Release&lt;/th&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;th&gt;Commits&lt;/th&gt;
&lt;th&gt;Go lines (of which tests)&lt;/th&gt;
&lt;th&gt;Go lines added&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;v0.1.0&lt;/td&gt;
&lt;td&gt;28 Oct&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;11,064 (4,781)&lt;/td&gt;
&lt;td&gt;11,012&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;v0.2.0&lt;/td&gt;
&lt;td&gt;1 Nov&lt;/td&gt;
&lt;td&gt;185&lt;/td&gt;
&lt;td&gt;50,104 (23,032)&lt;/td&gt;
&lt;td&gt;41,208&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;v0.3.0&lt;/td&gt;
&lt;td&gt;3 Nov&lt;/td&gt;
&lt;td&gt;76&lt;/td&gt;
&lt;td&gt;85,421 (38,232)&lt;/td&gt;
&lt;td&gt;36,124&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;v0.4.0&lt;/td&gt;
&lt;td&gt;7 Nov&lt;/td&gt;
&lt;td&gt;190&lt;/td&gt;
&lt;td&gt;129,069 (59,095)&lt;/td&gt;
&lt;td&gt;45,919&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;v0.5.0&lt;/td&gt;
&lt;td&gt;11 Nov&lt;/td&gt;
&lt;td&gt;220&lt;/td&gt;
&lt;td&gt;185,168 (86,398)&lt;/td&gt;
&lt;td&gt;63,019&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;h2 id=&quot;design-before-code&quot;&gt;Design before code&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The first rule of the workflow in wdx’s &lt;code dir=&quot;auto&quot;&gt;AGENTS.md&lt;/code&gt;, the file every agent working on it reads, is: &lt;em&gt;Never start coding until the human explicitly says so.&lt;/em&gt; Design comes first, worked out with an agent: the structure, the tables, the commands, the names, the edge cases.&lt;/p&gt;
&lt;p&gt;That design is a &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/docs/&quot;&gt;wdx doc&lt;/a&gt;: kept in wdx rather than in the repository, with a revision per change and a status, &lt;code dir=&quot;auto&quot;&gt;wip&lt;/code&gt;, then &lt;code dir=&quot;auto&quot;&gt;review&lt;/code&gt;, then &lt;code dir=&quot;auto&quot;&gt;approved&lt;/code&gt;. Every agent reads the same doc the moment it changes, whatever branch it is on. wdx itself has 77 of them today: 34 approved, 12 in review and 31 still wip.&lt;/p&gt;
&lt;figure data-scene=&quot;doc&quot; data-label=&quot;TIDE: a project&amp;#x27;s Docs section on the left, and a design doc open on the right with its status and revision&quot; data-version=&quot;0.5.0&quot;&gt;&lt;div&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;svg viewBox=&quot;0 10 100 80&quot; aria-hidden=&quot;true&quot;&gt;&lt;rect x=&quot;10&quot; y=&quot;18&quot; width=&quot;80&quot; height=&quot;64&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;8&quot;&gt;&lt;/rect&gt;&lt;polyline points=&quot;30,40 44,52 30,64&quot; fill=&quot;none&quot; stroke-width=&quot;8&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/polyline&gt;&lt;rect x=&quot;53&quot; y=&quot;43&quot; width=&quot;14&quot; height=&quot;22&quot; rx=&quot;2&quot; fill=&quot;currentColor&quot;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;span&gt;wdx tide · shop-api&lt;/span&gt;&lt;button type=&quot;button&quot;&gt;Open larger&lt;/button&gt;&lt;/div&gt;&lt;div tabindex=&quot;0&quot;&gt;&lt;/div&gt;&lt;figcaption&gt;A doc in TIDE: designs live in wdx, with a status that says whether they are agreed on. &lt;span&gt;Click, scroll and type: it is live, and runs nothing.&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;from-approved-design-to-a-plan-that-runs-for-hours&quot;&gt;From approved design to a plan that runs for hours&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Once a design is final, I ask an agent to turn it into a &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/plans/&quot;&gt;plan&lt;/a&gt;: the work split into tasks, each with the tasks it waits for (&lt;code dir=&quot;auto&quot;&gt;after:&lt;/code&gt;). Then I let the plan run, and check on it now and then. Sometimes a plan runs for hours without needing me.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/running-plans/&quot;&gt;Running a plan&lt;/a&gt; makes a branch for it, &lt;code dir=&quot;auto&quot;&gt;plan/&amp;#x3C;name&gt;&lt;/code&gt;, and starts an agent for every task that is ready, each in a worktree of its own, up to &lt;code dir=&quot;auto&quot;&gt;plan.parallel&lt;/code&gt; at once (3 by default). When a task is done, wdx lands its work on the plan’s branch, after the project’s landing check, and starts what waited for it. A task that fails waits for me; the rest goes on. When every task is done, one worktree is left on the plan’s branch, and landing it is my call.&lt;/p&gt;
&lt;figure&gt;&lt;div&gt;&lt;svg viewBox=&quot;0 0 720 330&quot; role=&quot;img&quot; aria-label=&quot;The loop wdx is built in. You design with an agent; the design is a wdx doc, and you approve it. An agent writes a plan from it. wdx runs the plan: an agent per task, each in a worktree. Each finished task lands on the plan&amp;#x27;s branch after the landing check. You review the plan&amp;#x27;s branch and land it. A task that fails waits for you; the rest goes on.&quot;&gt;&lt;defs&gt;&lt;marker id=&quot;wl-a&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;wl-h&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;/defs&gt;&lt;rect x=&quot;10&quot; y=&quot;40&quot; width=&quot;210&quot; height=&quot;70&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;26&quot; y=&quot;68&quot;&gt;You design it&lt;/text&gt;&lt;text x=&quot;26&quot; y=&quot;90&quot;&gt;with an agent, as a doc&lt;/text&gt;&lt;rect x=&quot;255&quot; y=&quot;40&quot; width=&quot;210&quot; height=&quot;70&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;271&quot; y=&quot;68&quot;&gt;You approve the doc&lt;/text&gt;&lt;text x=&quot;271&quot; y=&quot;90&quot;&gt;wip → review → approved&lt;/text&gt;&lt;rect x=&quot;500&quot; y=&quot;40&quot; width=&quot;210&quot; height=&quot;70&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;516&quot; y=&quot;68&quot;&gt;An agent writes a plan&lt;/text&gt;&lt;text x=&quot;516&quot; y=&quot;90&quot;&gt;tasks, each with its after:&lt;/text&gt;&lt;rect x=&quot;500&quot; y=&quot;200&quot; width=&quot;210&quot; height=&quot;70&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;516&quot; y=&quot;228&quot;&gt;Agents run the tasks&lt;/text&gt;&lt;text x=&quot;516&quot; y=&quot;250&quot;&gt;one per task, in worktrees&lt;/text&gt;&lt;rect x=&quot;255&quot; y=&quot;200&quot; width=&quot;210&quot; height=&quot;70&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;271&quot; y=&quot;228&quot;&gt;Each lands on plan/&amp;#x3C;name&gt;&lt;/text&gt;&lt;text x=&quot;271&quot; y=&quot;250&quot;&gt;after the landing check&lt;/text&gt;&lt;rect x=&quot;10&quot; y=&quot;200&quot; width=&quot;210&quot; height=&quot;70&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;26&quot; y=&quot;228&quot;&gt;You review and land it&lt;/text&gt;&lt;text x=&quot;26&quot; y=&quot;250&quot;&gt;wdx worktree land&lt;/text&gt;&lt;path d=&quot;M220 75 H251&quot; marker-end=&quot;url(#wl-a)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M465 75 H496&quot; marker-end=&quot;url(#wl-a)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M605 110 V196&quot; marker-end=&quot;url(#wl-a)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M500 235 H469&quot; marker-end=&quot;url(#wl-a)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M255 235 H224&quot; marker-end=&quot;url(#wl-a)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M605 270 V300 H115 V274&quot; marker-end=&quot;url(#wl-a)&quot;&gt;&lt;/path&gt;&lt;text x=&quot;300&quot; y=&quot;318&quot;&gt;a task that fails waits for you; the rest goes on&lt;/text&gt;&lt;rect x=&quot;10&quot; y=&quot;8&quot; width=&quot;14&quot; height=&quot;14&quot; rx=&quot;3&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;30&quot; y=&quot;20&quot;&gt;you&lt;/text&gt;&lt;rect x=&quot;80&quot; y=&quot;8&quot; width=&quot;14&quot; height=&quot;14&quot; rx=&quot;3&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;100&quot; y=&quot;20&quot;&gt;agents and wdx&lt;/text&gt;&lt;/svg&gt;&lt;/div&gt;&lt;figcaption&gt;Teal is yours to do: the design, the approval and the landing. The rest is the agents&apos; and wdx&apos;s, and a task that fails waits for you.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Here is the same thing on a toy project, with real Claude Code agents: three tasks, two at once and one after both.&lt;/p&gt;
&lt;figure&gt;&lt;video autoplay loop muted playsinline aria-label=&quot;A terminal: wdx plan create and wdx plan run start a plan of three tasks; TIDE shows two tasks running at once and the third starting after both, until all three are done on the plan&amp;#x27;s branch&quot;&gt;&lt;source src=&quot;/wdx/blog/wdx-builds-wdx/plan.webm&quot; type=&quot;video/webm&quot;&gt;&lt;source src=&quot;/wdx/blog/wdx-builds-wdx/plan.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/video&gt;&lt;figcaption&gt;A plan of three tasks on a toy repository: wdx runs each task’s agent once what it waits for is done.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure data-scene=&quot;plan&quot; data-label=&quot;TIDE: a plan&amp;#x27;s tab drawing its tasks as a graph, with each task&amp;#x27;s state&quot; data-version=&quot;0.5.0&quot;&gt;&lt;div&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;svg viewBox=&quot;0 10 100 80&quot; aria-hidden=&quot;true&quot;&gt;&lt;rect x=&quot;10&quot; y=&quot;18&quot; width=&quot;80&quot; height=&quot;64&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;8&quot;&gt;&lt;/rect&gt;&lt;polyline points=&quot;30,40 44,52 30,64&quot; fill=&quot;none&quot; stroke-width=&quot;8&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/polyline&gt;&lt;rect x=&quot;53&quot; y=&quot;43&quot; width=&quot;14&quot; height=&quot;22&quot; rx=&quot;2&quot; fill=&quot;currentColor&quot;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;span&gt;wdx tide · shop-api&lt;/span&gt;&lt;button type=&quot;button&quot;&gt;Open larger&lt;/button&gt;&lt;/div&gt;&lt;div tabindex=&quot;0&quot;&gt;&lt;/div&gt;&lt;figcaption&gt;A plan in TIDE, drawn the way git log --graph draws commits. &lt;span&gt;Click, scroll and type: it is live, and runs nothing.&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;wdx has 51 plans so far: 31 done, 18 drafts and 2 running as I write this. This blog series is one too, a plan of plans called &lt;code dir=&quot;auto&quot;&gt;blogs&lt;/code&gt;: each post is a plan, and this one was written by an agent wdx started, from an outline I approved.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;five-or-six-agents-sometimes-fifteen&quot;&gt;Five or six agents, sometimes fifteen&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;On a normal day I run five or six agents at once. At most I have had twelve to fifteen, some of them started and managed by plans.&lt;/p&gt;
&lt;p&gt;Agents also split their own work. Every agent wdx starts gets a launch note telling it that it runs under wdx and to read &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/ai-agents/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;wdx help agents&lt;/code&gt;&lt;/a&gt;, so when it wants a subagent it makes a &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/child-agents/&quot;&gt;child agent&lt;/a&gt; through wdx instead, in a worktree of its own. The children show up in TIDE under their parent, where I can watch, answer or steer them.&lt;/p&gt;
&lt;figure&gt;&lt;video autoplay loop muted playsinline aria-label=&quot;A terminal: wdx agent create starts an agent named lead; it is attached to answer Claude Code&amp;#x27;s trust question; then TIDE shows lead making two child agents, notes-delete and notes-search, each in a worktree that gains a commit; wdx agent list then prints the tree&quot;&gt;&lt;source src=&quot;/wdx/blog/wdx-builds-wdx/children.webm&quot; type=&quot;video/webm&quot;&gt;&lt;source src=&quot;/wdx/blog/wdx-builds-wdx/children.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/video&gt;&lt;figcaption&gt;A Claude Code agent splits a change between two child agents, each in a worktree of its own, on a toy repository.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;one-cli-first-the-others-after&quot;&gt;One CLI first, the others after&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Claude Code is the AI CLI I used most. I used the others now and then, for reviews and documentation. That is why each new feature reaches Claude Code first and the &lt;a href=&quot;https://srjn45.github.io/wdx/docs/acas/&quot;&gt;other AI CLIs&lt;/a&gt; later.&lt;/p&gt;
&lt;aside aria-label=&quot;Note&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;701 of the 710 commits on main carry Claude’s &lt;code dir=&quot;auto&quot;&gt;Co-Authored-By&lt;/code&gt; line. The other AI CLIs do not add one.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;what-still-needs-a-person&quot;&gt;What still needs a person&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;article&gt;&lt;p&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M18.71 7.21a1 1 0 0 0-1.42 0l-7.45 7.46-3.13-3.14A1.02 1.02 0 1 0 5.29 13l3.84 3.84a1.001 1.001 0 0 0 1.42 0l8.16-8.16a1 1 0 0 0 0-1.47Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span&gt;Yours&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;Every approval, every review, and when to land the code.&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;article&gt;&lt;p&gt;&lt;svg aria-hidden=&quot;true&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M1.44 8.855v-.001l3.527-3.516c.34-.344.802-.541 1.285-.548h6.649l.947-.947c3.07-3.07 6.207-3.072 7.62-2.868a1.821 1.821 0 0 1 1.557 1.557c.204 1.413.203 4.55-2.868 7.62l-.946.946v6.649a1.845 1.845 0 0 1-.549 1.286l-3.516 3.528a1.844 1.844 0 0 1-3.11-.944l-.858-4.275-4.52-4.52-2.31-.463-1.964-.394A1.847 1.847 0 0 1 .98 10.693a1.843 1.843 0 0 1 .46-1.838Zm5.379 2.017-3.873-.776L6.32 6.733h4.638l-4.14 4.14Zm8.403-5.655c2.459-2.46 4.856-2.463 5.89-2.33.134 1.035.13 3.432-2.329 5.891l-6.71 6.71-3.561-3.56 6.71-6.711Zm-1.318 15.837-.776-3.873 4.14-4.14v4.639l-3.364 3.374Z&quot; clip-rule=&quot;evenodd&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M9.318 18.345a.972.972 0 0 0-1.86-.561c-.482 1.435-1.687 2.204-2.934 2.619a8.22 8.22 0 0 1-1.23.302c.062-.365.157-.79.303-1.229.415-1.247 1.184-2.452 2.62-2.935a.971.971 0 1 0-.62-1.842c-.12.04-.236.084-.35.13-2.02.828-3.012 2.588-3.493 4.033a10.383 10.383 0 0 0-.51 2.845l-.001.016v.063c0 .536.434.972.97.972H2.24a7.21 7.21 0 0 0 .878-.065c.527-.063 1.248-.19 2.02-.447 1.445-.48 3.205-1.472 4.033-3.494a5.828 5.828 0 0 0 .147-.407Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;span&gt;The agents&apos;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;Writing the code, in worktrees, and carrying a plan on until something needs you.&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/div&gt;
&lt;p&gt;All the approvals, the reviews and the decision of when to land are still human. More autonomy will come, but it has to be designed carefully: taking away only the repetitive, no-brainer work, and still leaving the complex reasoning and the decisions to a person.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it&quot;&gt;Try it&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;wdx runs on Linux and macOS. Keep the AI CLI you already use; wdx runs it.&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;Install wdx and open a project:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-fsSL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://raw.githubusercontent.com/srjn45/wdx/main/scripts/install.sh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;project&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;~/code/api&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start an agent in a worktree of its own, and open TIDE:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--worktree&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tide&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When the work is bigger than one agent, write a &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/plans/&quot;&gt;plan&lt;/a&gt; and &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/running-plans/&quot;&gt;run it&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The code, the issues and every release are on &lt;a href=&quot;https://github.com/srjn45/wdx&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
</content:encoded><category>story</category><category>agents</category><category>plans</category></item><item><title>Run Claude Code and Codex side by side on one repo, without stepping on each other</title><link>https://srjn45.github.io/wdx/blog/side-by-side/</link><guid isPermaLink="true">https://srjn45.github.io/wdx/blog/side-by-side/</guid><description>Give each AI CLI a git worktree and a branch of its own, so Claude Code and Codex never edit the same checkout, then review and land each one onto main with no merge commit.</description><pubDate>Wed, 11 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;You want Claude Code on the feature and Codex on the tests, both at once. Start them in the same checkout and within minutes one is editing a file the other just changed, &lt;code dir=&quot;auto&quot;&gt;git status&lt;/code&gt; belongs to neither, and you can’t tell whose half-finished work you’re about to commit.&lt;/p&gt;
&lt;p&gt;The fix is old git: one worktree per agent. wdx makes it one flag.&lt;/p&gt;
&lt;p&gt;Working with several AI CLIs at once is seamless for me: there are no overwrites, because every agent works in its own worktree, and wdx takes care of orchestrating the agents. They can even talk to each other through wdx’s messages.&lt;/p&gt;
&lt;p&gt;This post walks through it on a toy repository, &lt;code dir=&quot;auto&quot;&gt;notes&lt;/code&gt;, a tiny command-line notebook in Python: Claude Code adds a &lt;code dir=&quot;auto&quot;&gt;delete&lt;/code&gt; command while Codex adds &lt;code dir=&quot;auto&quot;&gt;search&lt;/code&gt;, each in a checkout and on a branch of its own, in the same clone. Then both land on main, one after the other.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;why-one-checkout-breaks-with-two-agents&quot;&gt;Why one checkout breaks with two agents&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;A checkout is one working tree and one index. Two agents in it share both: every file either one saves is the file the other reads next, and a commit takes whatever is staged, whoever staged it.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://git-scm.com/docs/git-worktree&quot;&gt;git worktree&lt;/a&gt; is a second checkout of the same repository, in a folder of its own, on a branch of its own. The commits are shared, the files are not. The catch has always been the bookkeeping: making them, naming them, remembering which agent is in which, and cleaning them up. That part is what wdx does.&lt;/p&gt;
&lt;figure&gt;&lt;div&gt;&lt;svg viewBox=&quot;0 0 720 360&quot; role=&quot;img&quot; aria-label=&quot;Left, one checkout: Claude Code and Codex both edit notes.py in the same notes folder, on main, and git status mixes their changes. Right, a worktree each: notes is the clone, on main; .worktrees/notes-delete is on the branch notes-delete with Claude Code in it; .worktrees/notes-search is on the branch notes-search with Codex in it. Each lands in turn: rebase if main moved, the check, then main fast-forwards.&quot;&gt;&lt;defs&gt;&lt;marker id=&quot;oc-a&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;oc-h&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;/defs&gt;&lt;text x=&quot;10&quot; y=&quot;20&quot;&gt;One checkout&lt;/text&gt;&lt;rect x=&quot;10&quot; y=&quot;36&quot; width=&quot;150&quot; height=&quot;44&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;26&quot; y=&quot;63&quot;&gt;Claude Code&lt;/text&gt;&lt;rect x=&quot;180&quot; y=&quot;36&quot; width=&quot;150&quot; height=&quot;44&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;196&quot; y=&quot;63&quot;&gt;Codex&lt;/text&gt;&lt;rect x=&quot;10&quot; y=&quot;130&quot; width=&quot;320&quot; height=&quot;188&quot; rx=&quot;10&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;26&quot; y=&quot;152&quot; width=&quot;288&quot; height=&quot;40&quot; rx=&quot;6&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;42&quot; y=&quot;177&quot;&gt;notes.py   edited by both at once&lt;/text&gt;&lt;rect x=&quot;26&quot; y=&quot;204&quot; width=&quot;288&quot; height=&quot;56&quot; rx=&quot;6&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;26&quot; y=&quot;304&quot;&gt;notes/&lt;/text&gt;&lt;text x=&quot;84&quot; y=&quot;304&quot;&gt;one checkout, on main&lt;/text&gt;&lt;text x=&quot;42&quot; y=&quot;227&quot;&gt;$ git status&lt;/text&gt;&lt;text x=&quot;42&quot; y=&quot;247&quot;&gt;  M notes.py   whose change is this?&lt;/text&gt;&lt;path d=&quot;M85 80 V148&quot; marker-end=&quot;url(#oc-bad)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M255 80 V148&quot; marker-end=&quot;url(#oc-bad)&quot;&gt;&lt;/path&gt;&lt;text x=&quot;380&quot; y=&quot;20&quot;&gt;A worktree each&lt;/text&gt;&lt;rect x=&quot;380&quot; y=&quot;36&quot; width=&quot;330&quot; height=&quot;44&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;396&quot; y=&quot;63&quot;&gt;notes/&lt;/text&gt;&lt;text x=&quot;460&quot; y=&quot;63&quot;&gt;the clone, on main&lt;/text&gt;&lt;rect x=&quot;380&quot; y=&quot;92&quot; width=&quot;330&quot; height=&quot;56&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;396&quot; y=&quot;116&quot;&gt;.worktrees/notes-delete&lt;/text&gt;&lt;text x=&quot;396&quot; y=&quot;136&quot;&gt;branch notes-delete · Claude Code&lt;/text&gt;&lt;rect x=&quot;380&quot; y=&quot;160&quot; width=&quot;330&quot; height=&quot;56&quot; rx=&quot;8&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;396&quot; y=&quot;184&quot;&gt;.worktrees/notes-search&lt;/text&gt;&lt;text x=&quot;396&quot; y=&quot;204&quot;&gt;branch notes-search · Codex&lt;/text&gt;&lt;text x=&quot;380&quot; y=&quot;250&quot;&gt;each lands in turn: wdx worktree land&lt;/text&gt;&lt;rect x=&quot;380&quot; y=&quot;262&quot; width=&quot;96&quot; height=&quot;40&quot; rx=&quot;6&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;394&quot; y=&quot;287&quot;&gt;rebase&lt;/text&gt;&lt;rect x=&quot;497&quot; y=&quot;262&quot; width=&quot;96&quot; height=&quot;40&quot; rx=&quot;6&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;514&quot; y=&quot;287&quot;&gt;check&lt;/text&gt;&lt;rect x=&quot;614&quot; y=&quot;262&quot; width=&quot;96&quot; height=&quot;40&quot; rx=&quot;6&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;626&quot; y=&quot;280&quot;&gt;fast-&lt;/text&gt;&lt;text x=&quot;626&quot; y=&quot;294&quot;&gt;forward&lt;/text&gt;&lt;path d=&quot;M476 282 H493&quot; marker-end=&quot;url(#oc-h)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M593 282 H610&quot; marker-end=&quot;url(#oc-h)&quot;&gt;&lt;/path&gt;&lt;text x=&quot;380&quot; y=&quot;326&quot;&gt;if main moved on&lt;/text&gt;&lt;text x=&quot;598&quot; y=&quot;326&quot;&gt;no merge commit&lt;/text&gt;&lt;text x=&quot;380&quot; y=&quot;346&quot;&gt;a conflict is undone: main stays as it was&lt;/text&gt;&lt;defs&gt;&lt;marker id=&quot;oc-bad&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;7&quot; markerHeight=&quot;7&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0L10 5L0 10z&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;/defs&gt;&lt;/svg&gt;&lt;/div&gt;&lt;figcaption&gt;Left, two agents share one working tree and one index. Right, each has a checkout and a branch of its own in the same clone, and lands in turn.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;start-each-ai-cli-in-a-worktree-of-its-own&quot;&gt;Start each AI CLI in a worktree of its own&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;--worktree&lt;/code&gt; on &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/agents/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;wdx agent create&lt;/code&gt;&lt;/a&gt; starts the agent in a worktree of that name, and &lt;code dir=&quot;auto&quot;&gt;--aca&lt;/code&gt; picks the AI CLI:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes-delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--worktree&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes-delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--aca&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;claude_code&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Add a &apos;delete &amp;#x3C;n&gt;&apos; command to notes.py that removes note n, with a unittest in a new file test_delete.py, then commit it&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes-search&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--worktree&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes-search&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--aca&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;codex&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Add a &apos;search &amp;#x3C;text&gt;&apos; command to notes.py that lists the notes containing the text, with a unittest in a new file test_search.py, then commit it&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;A name that matches no worktree creates one in &lt;code dir=&quot;auto&quot;&gt;.worktrees/&amp;#x3C;name&gt;&lt;/code&gt; at the project’s root, on a new branch of that name from the HEAD of where the agent would otherwise start. &lt;code dir=&quot;auto&quot;&gt;main&lt;/code&gt; always means the clone itself. wdx keeps &lt;code dir=&quot;auto&quot;&gt;.worktrees&lt;/code&gt; out of &lt;code dir=&quot;auto&quot;&gt;git status&lt;/code&gt;, and removing an agent leaves its worktree alone, since it may hold work not landed yet.&lt;/p&gt;
&lt;p&gt;Both prompts touch the same lines of &lt;code dir=&quot;auto&quot;&gt;notes.py&lt;/code&gt; on purpose: each command needs its own branch in &lt;code dir=&quot;auto&quot;&gt;main()&lt;/code&gt; and its own word in the usage line. Hold on to that for the landing.&lt;/p&gt;
&lt;figure&gt;&lt;video autoplay loop muted playsinline aria-label=&quot;A terminal: two wdx agent create commands start notes-delete with Claude Code and notes-search with Codex, each with --worktree; Claude Code&amp;#x27;s trust question is answered in its own screen; then TIDE lists both agents and their worktrees until each worktree shows one commit ahead&quot;&gt;&lt;source src=&quot;/wdx/blog/side-by-side/side-by-side.webm&quot; type=&quot;video/webm&quot;&gt;&lt;source src=&quot;/wdx/blog/side-by-side/side-by-side.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/video&gt;&lt;figcaption&gt;Claude Code and Codex start on the toy repository, each in a worktree of its own, until both have committed.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;aside aria-label=&quot;Tip&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Tip&lt;/p&gt;&lt;div&gt;&lt;p&gt;A worktree starts from a commit, so in a repository with none yet, &lt;code dir=&quot;auto&quot;&gt;--worktree&lt;/code&gt; fails with &lt;code dir=&quot;auto&quot;&gt;worktree_failed&lt;/code&gt;, its details saying &lt;code dir=&quot;auto&quot;&gt;no_commit&lt;/code&gt;. Commit once, then create it.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;watch-both-from-one-screen&quot;&gt;Watch both from one screen&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;wdx agent list&lt;/code&gt; says what each one is doing, which AI CLI it runs, its model and how full its context is:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;wdx agent list&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;NAME          STATE    ACTIVITY  MODEL      CONTEXT  ACA          DIR&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;notes-delete  running  idle      Opus 5.5   43k      claude_code  /tmp/wdx-demo.idWtDE/notes/.worktrees/notes-delete&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;notes-search  running  idle      GPT-6-Sol  18k      codex        /tmp/wdx-demo.idWtDE/notes/.worktrees/notes-search&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;In &lt;a href=&quot;https://srjn45.github.io/wdx/docs/tide/layout/&quot;&gt;TIDE&lt;/a&gt;, &lt;code dir=&quot;auto&quot;&gt;wdx tide&lt;/code&gt;, the same agents are rows of the left pane, and the Worktrees section under them says how far each worktree is ahead of main (&lt;code dir=&quot;auto&quot;&gt;↑1&lt;/code&gt;), the lines it adds and removes, and what is not committed yet. &lt;code dir=&quot;auto&quot;&gt;Enter&lt;/code&gt; on an agent shows its screen on the right.&lt;/p&gt;
&lt;aside aria-label=&quot;Note&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;wdx reads the questions Claude Code asks: its row says &lt;code dir=&quot;auto&quot;&gt;yes/no&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;decision&lt;/code&gt;, with the question and options in its info. For Codex that is not built yet, so a question of its reads only &lt;code dir=&quot;auto&quot;&gt;waiting&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;let-them-talk-to-each-other&quot;&gt;Let them talk to each other&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;An agent is reached with &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/messages/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;wdx agent send&lt;/code&gt;&lt;/a&gt;, from your shell or from another agent:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;send&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes-search&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;notes-delete changes main() in notes.py too: keep your change there small&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;wdx keeps the message until it has been typed into the agent’s input box, so one sent while the agent is busy or still loading is not lost, and &lt;code dir=&quot;auto&quot;&gt;wdx message list&lt;/code&gt; shows those still waiting.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;review-each-ones-work&quot;&gt;Review each one’s work&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;wdx worktree list&lt;/code&gt; gives every worktree with how far it is ahead (&lt;code dir=&quot;auto&quot;&gt;AHEAD&lt;/code&gt;) and how many files are not committed (&lt;code dir=&quot;auto&quot;&gt;CHANGED&lt;/code&gt;). &lt;code dir=&quot;auto&quot;&gt;wdx worktree diff --name notes-delete&lt;/code&gt; prints what it committed since it left main, as its pull request would show it, and &lt;code dir=&quot;auto&quot;&gt;--uncommitted&lt;/code&gt; what it has not committed yet. Both only read, so they run beside whatever git an agent is running.&lt;/p&gt;
&lt;p&gt;In TIDE, &lt;code dir=&quot;auto&quot;&gt;Enter&lt;/code&gt; on a worktree opens its tab, the same diff. There &lt;code dir=&quot;auto&quot;&gt;v&lt;/code&gt; marks a file as looked at, &lt;code dir=&quot;auto&quot;&gt;C&lt;/code&gt; asks the agent there to commit what is left, and &lt;code dir=&quot;auto&quot;&gt;c&lt;/code&gt; writes a comment on a line, which &lt;code dir=&quot;auto&quot;&gt;s&lt;/code&gt; sends to an agent as one review. Here it is in the site’s demo, which you can click through:&lt;/p&gt;
&lt;figure data-scene=&quot;diff&quot; data-label=&quot;TIDE: a worktree&amp;#x27;s tab showing the diff of its commits against main&quot; data-version=&quot;0.5.0&quot;&gt;&lt;div&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;svg viewBox=&quot;0 10 100 80&quot; aria-hidden=&quot;true&quot;&gt;&lt;rect x=&quot;10&quot; y=&quot;18&quot; width=&quot;80&quot; height=&quot;64&quot; rx=&quot;10&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;8&quot;&gt;&lt;/rect&gt;&lt;polyline points=&quot;30,40 44,52 30,64&quot; fill=&quot;none&quot; stroke-width=&quot;8&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/polyline&gt;&lt;rect x=&quot;53&quot; y=&quot;43&quot; width=&quot;14&quot; height=&quot;22&quot; rx=&quot;2&quot; fill=&quot;currentColor&quot;&gt;&lt;/rect&gt;&lt;/svg&gt;&lt;span&gt;wdx tide · shop-api&lt;/span&gt;&lt;button type=&quot;button&quot;&gt;Open larger&lt;/button&gt;&lt;/div&gt;&lt;div tabindex=&quot;0&quot;&gt;&lt;/div&gt;&lt;figcaption&gt;A worktree&apos;s tab: [ ] moves between changes, { } between files, L lands it. &lt;span&gt;Click, scroll and type: it is live, and runs nothing.&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;land-them-one-after-the-other&quot;&gt;Land them one after the other&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;A project says once how it lands. Without that, landing fails with &lt;code dir=&quot;auto&quot;&gt;land_not_configured&lt;/code&gt;. For &lt;code dir=&quot;auto&quot;&gt;notes&lt;/code&gt; the check is its tests:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;project&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;landing&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--check&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;python3 -m unittest&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;worktree&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;land&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes-delete&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/worktrees/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;wdx worktree land&lt;/code&gt;&lt;/a&gt; rebases the worktree if main has moved on since it branched, runs the check in a terminal named &lt;code dir=&quot;auto&quot;&gt;land-&amp;#x3C;worktree&gt;&lt;/code&gt;, which stays open if the check fails, and then fast-forwards main to the commit it checked. No merge commit. On any failure, main stays where it was. It refuses a worktree with files not committed (&lt;code dir=&quot;auto&quot;&gt;not_committed&lt;/code&gt;) or with an agent still working in it (&lt;code dir=&quot;auto&quot;&gt;agent_working&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;If you’d rather review on GitHub, &lt;code dir=&quot;auto&quot;&gt;--method pr&lt;/code&gt; runs the check, pushes the branch and opens a pull request with &lt;code dir=&quot;auto&quot;&gt;gh&lt;/code&gt; instead.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;when-both-touched-the-same-lines&quot;&gt;When both touched the same lines&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;“Without stepping on each other” means no agent overwrites another’s work while they work. Landing is another matter: both changed &lt;code dir=&quot;auto&quot;&gt;main()&lt;/code&gt; in &lt;code dir=&quot;auto&quot;&gt;notes.py&lt;/code&gt;, and once &lt;code dir=&quot;auto&quot;&gt;notes-delete&lt;/code&gt; has landed, main has moved on under &lt;code dir=&quot;auto&quot;&gt;notes-search&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;So landing &lt;code dir=&quot;auto&quot;&gt;notes-search&lt;/code&gt; rebases it onto the new main, and git stops on the conflict. wdx undoes the rebase at once, so the worktree and main are just as they were, and says what happened:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;$ wdx worktree land --name notes-search&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx: rebase onto main stopped on a conflict in notes.py  [rebase_failed]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;hint: nothing changed; ask an agent to rebase with wdx agent send, then land again&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;In TIDE, the worktree’s row says &lt;code dir=&quot;auto&quot;&gt;conflict&lt;/code&gt;, and a landing that fails while TIDE is open says &lt;code dir=&quot;auto&quot;&gt;notes-search: rebase stopped on a conflict in 1 file, undone: L asks an agent&lt;/code&gt;. &lt;code dir=&quot;auto&quot;&gt;L&lt;/code&gt; in the worktree’s tab then opens a box to an agent, the one in that worktree first, with the request already written: &lt;em&gt;Rebase notes-search onto main in &amp;#x3C;its path&gt;, resolving the conflicts&lt;/em&gt;. &lt;code dir=&quot;auto&quot;&gt;Enter&lt;/code&gt; sends it. Codex rebases and keeps both commands, and you can watch the conflict get resolved in the tab. The row still says &lt;code dir=&quot;auto&quot;&gt;conflict&lt;/code&gt; until the next landing: &lt;code dir=&quot;auto&quot;&gt;L&lt;/code&gt; again runs the check, lands it, and TIDE offers to remove the worktree.&lt;/p&gt;
&lt;figure&gt;&lt;video autoplay loop muted playsinline aria-label=&quot;A terminal: wdx worktree list shows both worktrees one commit ahead; wdx worktree diff shows notes-delete&amp;#x27;s change; wdx project landing sets the check; notes-delete lands and git log shows main moved; landing notes-search fails with rebase_failed on notes.py; in TIDE the row says conflict, L opens a box asking Codex to rebase, Codex resolves it, L lands it; git log --graph shows one straight line with no merge commit&quot;&gt;&lt;source src=&quot;/wdx/blog/side-by-side/land.webm&quot; type=&quot;video/webm&quot;&gt;&lt;source src=&quot;/wdx/blog/side-by-side/land.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/video&gt;&lt;figcaption&gt;The first worktree lands; the second stops on a conflict, Codex rebases it from TIDE, and it lands on a straight main.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;From the CLI, &lt;code dir=&quot;auto&quot;&gt;wdx worktree rebase --name notes-search&lt;/code&gt; runs the rebase on its own and reports the same conflict, but it sends nothing to any agent: that is what &lt;code dir=&quot;auto&quot;&gt;wdx agent send&lt;/code&gt; is for, then land again.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;clean-up&quot;&gt;Clean up&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;wdx worktree remove --name notes-delete&lt;/code&gt; removes a worktree only when nothing is ahead of main and nothing is uncommitted, so no commit can be lost. It deletes the branch too when git says it is merged, and tells any agent still running there where to go on. In TIDE, &lt;code dir=&quot;auto&quot;&gt;C-q x&lt;/code&gt; on a worktree that landed does the same, and landing offers it straight away.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it&quot;&gt;Try it&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;wdx runs on Linux and macOS, with the AI CLIs you already have installed.&lt;/p&gt;
&lt;ol role=&quot;list&quot;&gt;
&lt;li&gt;
&lt;p&gt;Install wdx and open a project:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-fsSL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://raw.githubusercontent.com/srjn45/wdx/main/scripts/install.sh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;project&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;~/code/api&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start two AI CLIs, each in a worktree of its own:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;feature&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--worktree&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;feature&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--aca&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;claude_code&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tests&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--worktree&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tests&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--aca&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;codex&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Watch them, review and land each one:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;Terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tide&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;More in &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/worktrees/&quot;&gt;Worktrees and landing&lt;/a&gt;, &lt;a href=&quot;https://srjn45.github.io/wdx/docs/tide/worktrees/&quot;&gt;Worktrees in TIDE&lt;/a&gt;, and the pages on &lt;a href=&quot;https://srjn45.github.io/wdx/docs/acas/claude-code/&quot;&gt;Claude Code&lt;/a&gt; and &lt;a href=&quot;https://srjn45.github.io/wdx/docs/acas/codex/&quot;&gt;Codex&lt;/a&gt;. The code is on &lt;a href=&quot;https://github.com/srjn45/wdx&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
</content:encoded><category>how-to</category><category>worktrees</category><category>acas</category></item><item><title>Introducing wdx</title><link>https://srjn45.github.io/wdx/blog/introducing-wdx/</link><guid isPermaLink="true">https://srjn45.github.io/wdx/blog/introducing-wdx/</guid><description>Why a daemon, a CLI and a Terminal IDE for AI coding agents, and what a day with four of them looks like.</description><pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Running one AI coding agent is easy: open a terminal and start it. Running four at once is where it falls apart. One is waiting on a yes/no question in a tab you closed an hour ago. Two are editing the same files. The laptop went to sleep and took a session with it. And at the end of the day you have to piece together what each one actually changed.&lt;/p&gt;
&lt;p&gt;wdx is what I built to run them like a team rather than a pile of terminals.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://srjn45.github.io/wdx/og.png&quot; alt=&quot;TIDE, wdx’s Terminal IDE: a project’s agents, worktrees, docs and plans on the left, an agent on the right, terminals below&quot;&gt;&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;agents-that-outlive-your-terminal&quot;&gt;Agents that outlive your terminal&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;wdx is one binary with three faces: a daemon, a CLI and TIDE, its Terminal IDE.&lt;/p&gt;
&lt;p&gt;The daemon runs every agent and terminal in a pseudo-terminal of its own, owned by a small &lt;em&gt;holder&lt;/em&gt; process. Close TIDE, close the terminal, restart or even update the daemon, and the agents keep working. Open TIDE again and everything is where you left it.&lt;/p&gt;
&lt;p&gt;wdx runs the AI CLIs you already use, Claude Code, Codex, Cursor and Antigravity, with the same features on each. Its own features come first: whichever CLI an agent runs, it is created, watched, answered and resumed the same way.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;knowing-who-needs-you&quot;&gt;Knowing who needs you&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The hardest part of running agents in parallel is knowing which one is stuck. wdx reads each agent’s screen and tells working, waiting and idle apart, for every CLI it supports. When an agent asks a question, its row in TIDE turns amber and shows what kind of question it is. You can answer from TIDE without switching to it. Each row also shows how much of its context the agent has used.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;a-worktree-per-agent&quot;&gt;A worktree per agent&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;An agent given a worktree works on a branch of its own, so two agents never edit the same checkout:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fix-auth&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--worktree&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fix-auth&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--aca&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;codex&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;TIDE lists every worktree with what it has committed and what it has not, and shows the diff file by file. When it looks right, &lt;code dir=&quot;auto&quot;&gt;wdx worktree land&lt;/code&gt; puts it on main without a merge commit, or opens a PR.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;plans-a-feature-split-into-tasks&quot;&gt;Plans: a feature split into tasks&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;For a bigger change, a plan splits the work into tasks that depend on each other. wdx starts an agent for each task that is ready, each in a worktree of the plan’s, and lands every finished task on the plan’s branch. TIDE draws the plan the way &lt;code dir=&quot;auto&quot;&gt;git log --graph&lt;/code&gt; draws commits. A task that fails waits for you to retry it, land it or skip it.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;the-same-features-for-scripts-and-agents&quot;&gt;The same features for scripts and agents&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Everything TIDE can do, the CLI can do too, and every command takes &lt;code dir=&quot;auto&quot;&gt;--json&lt;/code&gt;. It then prints one JSON object with a stable error code and never prompts. That is how agents use wdx themselves: &lt;code dir=&quot;auto&quot;&gt;wdx help agents&lt;/code&gt; teaches an agent to make child agents, worktrees, docs and plans through wdx, so you see all of their work in TIDE as well.&lt;/p&gt;
&lt;p&gt;Designs live in wdx as docs with revisions and a status, from wip to approved, so people and agents read the same thing.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it&quot;&gt;Try it&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;wdx runs on Linux and macOS:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-fsSL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://raw.githubusercontent.com/srjn45/wdx/main/scripts/install.sh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;project&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;~/code/api&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--worktree&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wdx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tide&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Or try TIDE right now in your browser on &lt;a href=&quot;https://srjn45.github.io/wdx/&quot;&gt;the home page&lt;/a&gt;. It is a replica that runs nothing, but it has the same layout, keys and screens.&lt;/p&gt;
&lt;p&gt;Update — 11 November 2026: the optional self-hosted hub is now available for remote access and document uploads. See &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/hub/&quot;&gt;Using a hub&lt;/a&gt; and &lt;a href=&quot;https://srjn45.github.io/wdx/docs/guides/running-a-hub/&quot;&gt;Running a hub&lt;/a&gt;. The hub is operated by you or your organisation; the project does not offer a public hosted hub. The explicit &lt;code dir=&quot;auto&quot;&gt;--url&lt;/code&gt; requirement is planned for v0.6.0; v0.5.0 users should also supply their self-hosted hub’s URL.&lt;/p&gt;
</content:encoded><category>launch</category></item></channel></rss>