<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Little Pan</title>
    <description>The latest articles on DEV Community by Little Pan (@heylittlepan).</description>
    <link>https://dev.to/heylittlepan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4121685%2F0c847734-92b2-489a-b132-058610188820.jpg</url>
      <title>DEV Community: Little Pan</title>
      <link>https://dev.to/heylittlepan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/heylittlepan"/>
    <language>en</language>
    <item>
      <title>PonyMux Pro is here: ten computers and the Theme Pack</title>
      <dc:creator>Little Pan</dc:creator>
      <pubDate>Wed, 11 Nov 2026 22:31:00 +0000</pubDate>
      <link>https://dev.to/heylittlepan/ponymux-pro-is-here-ten-computers-and-the-theme-pack-2ejb</link>
      <guid>https://dev.to/heylittlepan/ponymux-pro-is-here-ten-computers-and-the-theme-pack-2ejb</guid>
      <description>&lt;p&gt;Nothing you use today goes behind a paywall. The whole PonyMux app stays free on macOS and Windows, and so does Remote Control from one computer.&lt;/p&gt;

&lt;p&gt;PonyMux 0.17 opens &lt;strong&gt;Pro&lt;/strong&gt;, and it adds two things on top of that: you can share your agents from up to 10 computers at once, and you unlock the &lt;strong&gt;Theme Pack&lt;/strong&gt;, eight themes and eight cursor effects. Pro is $12.99 a month, or $10.83 a month billed yearly ($129.90, which saves 17%). Windows has its own 0.17.0 with the same Pro.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does Free still have?
&lt;/h2&gt;

&lt;p&gt;All of it. Terminals, live agent status, search across every conversation, the Inspector, multi-select preview, Focus Mode, pets, and the standard themes and cursor effects. Remote Control works on Free too: open &lt;a href="https://my.ponymux.com" rel="noopener noreferrer"&gt;my.ponymux.com&lt;/a&gt; on your phone and answer the agent that's waiting.&lt;/p&gt;

&lt;p&gt;The one limit is how many computers share their agents at once. On Free it's one. Phones and browsers that only view your agents never count toward it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does Pro add?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Ten computers.&lt;/strong&gt; If you work on a Mac at home and a Windows PC at the office, or a desktop and a laptop, you can turn on sharing on all of them. Every agent from every computer shows up in the same list on your phone. On Free, turning sharing on in a second computer asks which one should stop. Pro removes the question.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Theme Pack.&lt;/strong&gt; Eight themes and eight cursor effects that Free doesn't have. They are below.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's in the Theme Pack?
&lt;/h2&gt;

&lt;p&gt;Eight themes, four dark and four light, each taking its colors from a piece of clothing: Charcoal Trousers, Cloud Sneakers, Navy Jacket, Striped Shirt, Burgundy Shorts, Pink Oxford, Spruce Leggings, and Lime Panel. They sit in their own section at the bottom of &lt;strong&gt;Settings → Appearance&lt;/strong&gt;, under a &lt;strong&gt;PRO&lt;/strong&gt; label. On Free each one shows a lock, and clicking it tells you it comes with Pro.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9hpf8vmcotswru990f2l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9hpf8vmcotswru990f2l.png" alt="Settings, Appearance, with the Theme Pack locked as on a Free account: the Pro filter is on and shows only the eight Pack themes, each with a lock." width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Eight cursor effects: Burst, a small firework where the cursor lands. Teleport, which breaks the cursor into pixels and puts it back together. Shockwave, a ring that pushes the text aside. Glitch, which splits slices of text into red and blue. Jelly, a wobble. Vortex, which swirls the text away like a drain. Shimmer, like air over a hot road. Smear, a pan blur along the path.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F05d740ws02fyygv3gnu1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F05d740ws02fyygv3gnu1.png" alt="The Shockwave cursor effect in a PonyMux Terminal: a ring spreads from where the cursor landed, with a faint red and blue split at the edges of the letters it passes over." width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The still above is Shockwave. On &lt;a href="https://ponymux.com/blog/ponymux-pro-is-here?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=ponymux-pro-is-here" rel="noopener noreferrer"&gt;ponymux.com&lt;/a&gt; the effects run live, on the app's own shaders.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens if I stop paying?
&lt;/h2&gt;

&lt;p&gt;You go back to one computer. The one you used most recently keeps sharing, and your agents keep running on all of them.&lt;/p&gt;

&lt;p&gt;The Theme Pack stays. Once your account has had Pro, the Pack unlocks on every device you sign in to, and a device keeps it after Pro ends, after a refund, and after you sign out. I built it that way on purpose. A theme you picked shouldn't turn off because a card expired.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do I get it, and what does it cost?
&lt;/h2&gt;

&lt;p&gt;Open &lt;strong&gt;Settings → Plan&lt;/strong&gt; at &lt;a href="https://my.ponymux.com" rel="noopener noreferrer"&gt;my.ponymux.com&lt;/a&gt; and choose &lt;strong&gt;Upgrade to Pro&lt;/strong&gt;. In the app, the lock on a Pro theme and &lt;strong&gt;See Pro&lt;/strong&gt; in &lt;strong&gt;Settings → Account&lt;/strong&gt; open the same page. You pay with a card, Apple Pay, or Google Pay, and PonyMux never sees your card number. Payments go through Waffo Pancake, which is the merchant of record and sends the invoice.&lt;/p&gt;

&lt;p&gt;It's $12.99 a month, or $10.83 a month billed yearly as $129.90. Both renew automatically until you cancel, and Pro stays on to the end of the period you paid for. &lt;strong&gt;Manage billing&lt;/strong&gt; in the same Plan page cancels, switches between monthly and yearly, and updates your card.&lt;/p&gt;

&lt;p&gt;You can ask for a refund within 7 days of a first monthly charge, 14 days of a first yearly charge, and 7 days after a renewal. The &lt;a href="https://ponymux.com/pricing?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=ponymux-pro-is-here" rel="noopener noreferrer"&gt;pricing page&lt;/a&gt; and the &lt;a href="https://ponymux.com/refund?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=ponymux-pro-is-here" rel="noopener noreferrer"&gt;refund policy&lt;/a&gt; have the exact wording.&lt;/p&gt;

&lt;h2&gt;
  
  
  What else is in 0.17?
&lt;/h2&gt;

&lt;p&gt;A Claude Code background session that reports itself idle no longer counts as busy. On Windows, &lt;strong&gt;Wake All&lt;/strong&gt; now waits for each agent to report in before it starts the next one, so a batch of sessions comes back one after another. The 1 px gap between the sidebar and its divider is gone.&lt;/p&gt;

&lt;p&gt;To see what each plan includes, start with &lt;a href="https://ponymux.com/docs/plans-and-limits?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=ponymux-pro-is-here" rel="noopener noreferrer"&gt;Plans and limits&lt;/a&gt;. The Theme Pack is explained in &lt;a href="https://ponymux.com/docs/themes?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=ponymux-pro-is-here#theme-pack" rel="noopener noreferrer"&gt;Themes and appearance&lt;/a&gt; and &lt;a href="https://ponymux.com/docs/screen-effects?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=ponymux-pro-is-here#theme-pack-effects" rel="noopener noreferrer"&gt;Screen effects&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;PonyMux is free for macOS and Windows: &lt;a href="https://ponymux.com/download?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=ponymux-pro-is-here" rel="noopener noreferrer"&gt;download it&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>devtools</category>
      <category>macos</category>
    </item>
    <item>
      <title>How to answer Claude Code or Codex from your phone</title>
      <dc:creator>Little Pan</dc:creator>
      <pubDate>Tue, 10 Nov 2026 17:00:00 +0000</pubDate>
      <link>https://dev.to/heylittlepan/how-to-answer-claude-code-or-codex-from-your-phone-10a7</link>
      <guid>https://dev.to/heylittlepan/how-to-answer-claude-code-or-codex-from-your-phone-10a7</guid>
      <description>&lt;p&gt;You start an agent on the computer at home and leave. An hour later your phone shows that it stopped to ask for permission to run a command. It stays stopped until you answer, and you're nowhere near the desk.&lt;/p&gt;

&lt;p&gt;Each of the big agents has a way to answer from your phone. They just don't work the same way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code:&lt;/strong&gt; run &lt;code&gt;/remote-control&lt;/code&gt; in the session, then open it in the Claude app or at claude.ai/code. It needs a Pro, Max, Ultra, Team, or Enterprise plan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codex:&lt;/strong&gt; set up &lt;strong&gt;Control this Mac or PC&lt;/strong&gt; in the ChatGPT desktop app, pair your phone with the QR code, and answer from the ChatGPT mobile app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Any agent:&lt;/strong&gt; turn on SSH on the computer, reach it from outside your network, and keep the agent in &lt;code&gt;tmux&lt;/code&gt;. A terminal app on the phone does the rest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The catch:&lt;/strong&gt; the computer has to stay awake and online. If it sleeps, every one of these stops.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The other catch:&lt;/strong&gt; each agent has its own app and its own setup. With three agents, that's three.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you run more than one, that gets old fast. &lt;a href="https://ponymux.com/?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=answer-claude-code-codex-from-your-phone" rel="noopener noreferrer"&gt;PonyMux&lt;/a&gt; lists all of your Claude Code, Codex CLI, and Grok Build agents in one place at my.ponymux.com, so you answer whichever is waiting from your phone. More on how it works below.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do I answer Claude Code from my phone?
&lt;/h2&gt;

&lt;p&gt;Use Remote Control, Claude Code's own feature. In a session you've already started, type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/remote-control
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(&lt;code&gt;/rc&lt;/code&gt; is the short form.) The session keeps running on your computer, with your files, MCP servers, and settings. Your phone only shows it and sends messages. Open the session by name in the Claude app under &lt;strong&gt;Code&lt;/strong&gt;, or at claude.ai/code. A session that's online shows a computer icon with a green dot.&lt;/p&gt;

&lt;p&gt;You can also start it from the shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude remote-control      &lt;span class="c"&gt;# server mode, shows a URL; press space for a QR code&lt;/span&gt;
claude --remote-control    &lt;span class="c"&gt;# a normal interactive session with Remote Control on&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To be told when it needs you, open &lt;code&gt;/config&lt;/code&gt; and turn on &lt;strong&gt;Push when actions required&lt;/strong&gt;. Install the Claude app and sign in with the same account.&lt;/p&gt;

&lt;p&gt;What to know before you rely on it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It needs a Pro, Max, Ultra, Team, or Enterprise plan with a claude.ai login. API keys aren't supported.&lt;/li&gt;
&lt;li&gt;Outside server mode, each &lt;code&gt;claude&lt;/code&gt; process supports one remote session, and that process has to keep running. Close the terminal and the session ends.&lt;/li&gt;
&lt;li&gt;A session you started without it can't be reached until you run &lt;code&gt;/remote-control&lt;/code&gt; in it, unless you turn on &lt;strong&gt;Enable Remote Control for all sessions&lt;/strong&gt; in &lt;code&gt;/config&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full list is in Anthropic's &lt;a href="https://code.claude.com/docs/en/remote-control" rel="noopener noreferrer"&gt;Remote Control documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do I answer Codex from my phone?
&lt;/h2&gt;

&lt;p&gt;Codex does it through the ChatGPT apps, and setup starts on the computer, not in the terminal. You can't set it up from the Codex CLI or the IDE extension.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the ChatGPT desktop app on the computer, open &lt;strong&gt;Settings → Connections → Control this Mac or PC&lt;/strong&gt;, choose &lt;strong&gt;Set up&lt;/strong&gt; or &lt;strong&gt;Add&lt;/strong&gt;, and approve remote access.&lt;/li&gt;
&lt;li&gt;Scan the QR code with your phone. It opens the ChatGPT app.&lt;/li&gt;
&lt;li&gt;Confirm the same account and workspace. The computer then appears under &lt;strong&gt;Codex&lt;/strong&gt; in the app, or &lt;strong&gt;Remote&lt;/strong&gt; if your app still uses that name.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;From the phone you can continue chats, answer questions, approve commands, and read diffs and terminal output. The work still runs on the computer, with its files and tools.&lt;/p&gt;

&lt;p&gt;The computer must be awake, online, and signed in. On a Mac laptop, remote access can stay available with the lid open and power connected; with the lid closed it also needs an external display, and choosing &lt;strong&gt;Sleep&lt;/strong&gt; ends it. Each phone is paired with each computer it controls. The rest is in OpenAI's &lt;a href="https://learn.chatgpt.com/docs/remote-connections" rel="noopener noreferrer"&gt;remote connections documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can I use SSH and tmux for any agent?
&lt;/h2&gt;

&lt;p&gt;Yes, and it's the one method that doesn't care which agent you run. You connect to the computer, then attach to a terminal where the agent is already running. It takes more setup than the two above.&lt;/p&gt;

&lt;p&gt;On the Mac, turn on SSH: open &lt;strong&gt;System Settings → General → Sharing&lt;/strong&gt;, then turn on &lt;strong&gt;Remote Login&lt;/strong&gt;. Under &lt;strong&gt;Allow access for&lt;/strong&gt;, choose &lt;strong&gt;Only these users&lt;/strong&gt; and add yourself.&lt;/p&gt;

&lt;p&gt;From outside your home network you also need a way to reach the Mac. Don't open its SSH port to the internet. Use a VPN or a mesh network such as Tailscale, so only your own devices can connect.&lt;/p&gt;

&lt;p&gt;Then run the agent inside &lt;code&gt;tmux&lt;/code&gt;, which keeps the terminal alive when you disconnect:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tmux new -s agents     &lt;span class="c"&gt;# start a session named "agents", then run claude or codex inside it&lt;/span&gt;
&lt;span class="c"&gt;# Ctrl-b, then d       # detach: the agent keeps running&lt;/span&gt;
tmux attach -t agents  &lt;span class="c"&gt;# from your phone's SSH app, pick it up again&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Anthropic's own documentation suggests the same for Claude Code over SSH: use &lt;code&gt;tmux&lt;/code&gt; or &lt;code&gt;screen&lt;/code&gt; so the session survives a dropped connection.&lt;/p&gt;

&lt;p&gt;This works, but it's the roughest on a phone. You're typing into a full terminal with a touch keyboard, and the keys an agent needs, Esc, Tab, Ctrl, and the arrows, aren't on it. You also set up the SSH app, the network, and the Mac yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does my agent stop answering when I'm away?
&lt;/h2&gt;

&lt;p&gt;Almost always, the computer went to sleep. Locking the screen doesn't stop an agent; idle sleep does, and so does closing the lid. Remote Control for Claude Code and Codex, and SSH, can only reach a computer that's awake and online.&lt;/p&gt;

&lt;p&gt;None of the agents keep the Mac awake between turns, and that's exactly when you're waiting to answer from the phone. &lt;a href="https://ponymux.com/guides/keep-mac-awake-claude-code-codex?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=answer-claude-code-codex-from-your-phone" rel="noopener noreferrer"&gt;How to keep your Mac awake for Claude Code and Codex&lt;/a&gt; covers it step by step.&lt;/p&gt;

&lt;h2&gt;
  
  
  What if I run Claude Code, Codex, and Grok together?
&lt;/h2&gt;

&lt;p&gt;Then there's no single place to answer. Claude Code's remote lives in the Claude app, Codex's in the ChatGPT app, and a Grok session on your own computer has no remote from xAI that I could find in its documentation. Over SSH you can reach all three, but you have to find the right &lt;code&gt;tmux&lt;/code&gt; session yourself and read the terminal to see which one is waiting.&lt;/p&gt;

&lt;p&gt;With one agent, any of the methods above is fine. With three, the problem is no longer how to connect, it's which one is waiting for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can PonyMux answer all of them from one place?
&lt;/h2&gt;

&lt;p&gt;Yes. &lt;a href="https://ponymux.com/?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=answer-claude-code-codex-from-your-phone" rel="noopener noreferrer"&gt;PonyMux&lt;/a&gt; runs the real CLI of each agent in its own Terminal, so Remote Control doesn't depend on any agent offering its own remote. It's free on macOS and Windows.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the sidebar, select the cloud next to &lt;strong&gt;Agents&lt;/strong&gt;, then &lt;strong&gt;Sign In…&lt;/strong&gt;, and sign in with GitHub or Google.&lt;/li&gt;
&lt;li&gt;Scan the QR code on the card with your phone. &lt;a href="https://my.ponymux.com" rel="noopener noreferrer"&gt;my.ponymux.com&lt;/a&gt; opens with your agents already listed.&lt;/li&gt;
&lt;li&gt;Every agent running in PonyMux shows up in one list with the same status lights: Claude Code, Codex, or Grok. Open the one that's waiting.&lt;/li&gt;
&lt;li&gt;Opening an agent only shows its Terminal. Choose &lt;strong&gt;Start control&lt;/strong&gt; to send keys to it. On a phone, a key bar adds the esc, tab, ctrl, and arrow keys the keyboard lacks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbog3z1kbwc9bo8ten8qn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbog3z1kbwc9bo8ten8qn.png" alt="Three phones showing PonyMux Remote Control: the list of agents with their status lights, a live terminal with a waiting question, a key bar and a notification, and the Inspector with working directory, pull requests, and files." width="800" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One device controls an agent at a time. On the computer, a &lt;strong&gt;Stop&lt;/strong&gt; button takes control back whenever you want.&lt;/p&gt;

&lt;p&gt;What it doesn't do: it doesn't wake a sleeping computer, so &lt;a href="https://ponymux.com/docs/keep-awake?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=answer-claude-code-codex-from-your-phone" rel="noopener noreferrer"&gt;Keep Awake&lt;/a&gt; is worth turning on before you leave. There's no end-to-end encryption, and no approval cards that answer for you; you read the Terminal and type the answer. The server relays the screen and keystrokes and saves none of them. On the Free plan, one computer shares its agents at a time.&lt;/p&gt;

&lt;p&gt;For setup, see &lt;a href="https://ponymux.com/docs/set-up-remote-control?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=answer-claude-code-codex-from-your-phone" rel="noopener noreferrer"&gt;Set up Remote Control&lt;/a&gt;. &lt;a href="https://ponymux.com/docs/remote-control-on-your-phone?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=answer-claude-code-codex-from-your-phone" rel="noopener noreferrer"&gt;Remote Control on your phone&lt;/a&gt; covers the key bar and notifications, and &lt;a href="https://ponymux.com/docs/how-remote-control-stays-safe?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=answer-claude-code-codex-from-your-phone" rel="noopener noreferrer"&gt;How Remote Control stays safe&lt;/a&gt; lists exactly what is and isn't protected.&lt;/p&gt;

&lt;p&gt;Download PonyMux, free for macOS and Windows: &lt;a href="https://ponymux.com/download?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=answer-claude-code-codex-from-your-phone" rel="noopener noreferrer"&gt;ponymux.com/download&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>codex</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Your agents are at home. You're at the office.</title>
      <dc:creator>Little Pan</dc:creator>
      <pubDate>Tue, 10 Nov 2026 01:15:28 +0000</pubDate>
      <link>https://dev.to/heylittlepan/your-agents-are-at-home-youre-at-the-office-38m7</link>
      <guid>https://dev.to/heylittlepan/your-agents-are-at-home-youre-at-the-office-38m7</guid>
      <description>&lt;p&gt;You kick off three agents on the Mac at home, then head to the office. Somewhere on the way one of them asks for permission to run a command, and it waits. The other two finish and wait too. Nothing is broken. Everything is just stopped until you're back at the desk that is eight kilometres away.&lt;/p&gt;

&lt;p&gt;PonyMux 0.16 adds &lt;strong&gt;Remote Control&lt;/strong&gt; for that. Your agents keep running on your computer. Open &lt;a href="https://my.ponymux.com" rel="noopener noreferrer"&gt;my.ponymux.com&lt;/a&gt; on your phone or any browser, and you see the same agents with the same status lights, whether they are Claude Code, Codex, or Grok. Open the waiting one, choose &lt;strong&gt;Start control&lt;/strong&gt;, and answer it. It's free, on macOS and Windows.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do I turn it on?
&lt;/h2&gt;

&lt;p&gt;Select the cloud next to &lt;strong&gt;Agents&lt;/strong&gt; in the sidebar, then &lt;strong&gt;Sign In…&lt;/strong&gt;. PonyMux opens your browser, you sign in with GitHub or Google, and confirm that this computer may share. That's the whole setup. The card then shows a QR code: scan it with your phone and the web app opens with your agents already listed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu4n8cbornrnf1l2qk8dz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu4n8cbornrnf1l2qk8dz.png" alt="The Remote Control card in PonyMux: its state is On, with a QR code and the address my.ponymux.com, opened from the cloud next to Agents in the sidebar." width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each computer signs in once and reconnects on its own after that. Agents are reachable only while the computer is awake, so &lt;a href="https://ponymux.com/docs/keep-awake?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=answer-your-coding-agent-from-your-phone" rel="noopener noreferrer"&gt;Keep Awake&lt;/a&gt; is worth turning on if you plan to leave.&lt;/p&gt;

&lt;h2&gt;
  
  
  What can I do from the browser?
&lt;/h2&gt;

&lt;p&gt;Two things, kept apart on purpose.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watching&lt;/strong&gt; is the default. Open an agent and you see its Terminal, refreshed about once a second, with the Inspector beside it: working directory, model, pull requests, and the files it made, which you can download. Nothing you do there reaches the agent.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqfck2oxjdzpr1hqrmibc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqfck2oxjdzpr1hqrmibc.png" alt="my.ponymux.com in a browser: the list of agents on the left, the selected agent's Terminal waiting for an answer in the middle, and the Inspector with working directory, pull requests and files on the right." width="800" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Controlling&lt;/strong&gt; starts when you choose &lt;strong&gt;Start control&lt;/strong&gt;. Then your keys go to the real Terminal: arrows, Esc, Ctrl combinations, all of it. You can also paste, drag, or pick an image or file to send, and change that one Terminal's text size. On a phone, a key bar adds esc, tab, ctrl, and the arrows that the keyboard lacks.&lt;/p&gt;

&lt;p&gt;Opening an agent is a look. Starting control is a decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  What if two devices want the same agent?
&lt;/h2&gt;

&lt;p&gt;One device controls an agent at a time. The other one sees who has it, for example &lt;strong&gt;iPhone in control&lt;/strong&gt;, and what it did last, like &lt;strong&gt;typed 12 chars&lt;/strong&gt;. It can take over, and the first device goes back to viewing and is told.&lt;/p&gt;

&lt;p&gt;On the computer, the Terminal's title bar shows who is controlling it, and a row under the toolbar has &lt;strong&gt;Stop&lt;/strong&gt;. That takes it back at any time. It's the one thing that always works from where the agent actually runs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk1klba946txqw09lwsf1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk1klba946txqw09lwsf1.png" alt="The PonyMux window while a phone controls an agent: an iPhone icon in the title bar, a Stop button, and the Remote Control panel listing who is controlling it." width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Is it safe to type into my computer from a browser?
&lt;/h2&gt;

&lt;p&gt;I thought about this more than about anything else in the feature. Only your account can see and control your agents. The server relays the screen, your keystrokes, and files, and saves none of them. Before each key, PonyMux on the computer checks that the agent is still the program in front and still running, and drops the key if not, so a key doesn't land in the shell under an agent that just exited.&lt;/p&gt;

&lt;p&gt;One gap remains. If the agent exits in the exact instant a key is written, a single Enter could reach the shell. End control when the agent is done, and use &lt;strong&gt;Stop&lt;/strong&gt; if something looks off. &lt;a href="https://ponymux.com/docs/how-remote-control-stays-safe?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=answer-your-coding-agent-from-your-phone" rel="noopener noreferrer"&gt;How Remote Control stays safe&lt;/a&gt; has the full list, including what it doesn't have: no end-to-end encryption, and no approval cards that answer for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does it work for Claude Code, Codex, and Grok together?
&lt;/h2&gt;

&lt;p&gt;Yes, and that's the part I care about most. PonyMux runs the real CLI in each Terminal, so Remote Control doesn't need each agent to offer its own remote. Every agent running in PonyMux shows up in the same list, with the same status lights, whichever one it is.&lt;/p&gt;

&lt;p&gt;The agents' own remotes work differently. Claude Code has &lt;code&gt;/remote-control&lt;/code&gt;, which you run in the session you want to reach. Unless you turn on auto-connect, a session you didn't start it in can't be reached, and outside server mode each instance supports one remote session at a time. It needs a Pro, Max, Ultra, Team, or Enterprise plan, and API keys aren't supported (&lt;a href="https://code.claude.com/docs/en/remote-control" rel="noopener noreferrer"&gt;docs&lt;/a&gt;). Codex has its own: the ChatGPT mobile app connects to the ChatGPT desktop app on your Mac or Windows PC (&lt;a href="https://learn.chatgpt.com/docs/remote-connections" rel="noopener noreferrer"&gt;docs&lt;/a&gt;). For Grok Build, xAI's web and mobile versions are hosted, and I haven't found an official way to reach a session on your own computer; what exists is community tools. Those are fine if you use one agent. With three, it's three setups and three apps. &lt;a href="https://ponymux.com/guides/answer-claude-code-codex-from-your-phone?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=answer-your-coding-agent-from-your-phone" rel="noopener noreferrer"&gt;How to answer Claude Code or Codex from your phone&lt;/a&gt; walks through each one.&lt;/p&gt;

&lt;p&gt;The agent changes. The place you answer it doesn't.&lt;/p&gt;

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

&lt;p&gt;Remote Control is free. On Free, one computer shares its agents at a time. If you want more than one sharing together, Pro is coming soon, and nothing else in Remote Control is held back on Free. &lt;a href="https://ponymux.com/docs/plans-and-limits?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=answer-your-coding-agent-from-your-phone" rel="noopener noreferrer"&gt;Plans and limits&lt;/a&gt; has the details.&lt;/p&gt;

&lt;h2&gt;
  
  
  What else is in 0.16?
&lt;/h2&gt;

&lt;p&gt;The sidebar collapses to a slim icon rail, and hovering over it peeks it open. Agent Integrations moved to the bottom of the sidebar, one line per agent. You can resume an archived or trashed Terminal in one click, create a Terminal straight into any List, and wake every suspended agent with &lt;strong&gt;Wake All&lt;/strong&gt;. ⌘+, ⌘−, and ⌘0 change one Terminal's text size without touching the others. The Windows app got the same Remote Control in its own 0.16.0.&lt;/p&gt;

&lt;p&gt;For setup, start with &lt;a href="https://ponymux.com/docs/remote-control?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=answer-your-coding-agent-from-your-phone" rel="noopener noreferrer"&gt;Remote Control&lt;/a&gt;, and &lt;a href="https://ponymux.com/docs/remote-control-on-your-phone?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=answer-your-coding-agent-from-your-phone" rel="noopener noreferrer"&gt;Remote Control on your phone&lt;/a&gt; covers the key bar and notifications. The rest is in the &lt;a href="https://ponymux.com/changelog?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=answer-your-coding-agent-from-your-phone" rel="noopener noreferrer"&gt;changelog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Download PonyMux, free for macOS and Windows: &lt;a href="https://ponymux.com/download?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=answer-your-coding-agent-from-your-phone" rel="noopener noreferrer"&gt;ponymux.com/download&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>devtools</category>
      <category>claude</category>
    </item>
    <item>
      <title>The icon says it's waiting. The pane shows what for.</title>
      <dc:creator>Little Pan</dc:creator>
      <pubDate>Tue, 03 Nov 2026 07:44:11 +0000</pubDate>
      <link>https://dev.to/heylittlepan/the-icon-says-its-waiting-the-pane-shows-what-for-58oj</link>
      <guid>https://dev.to/heylittlepan/the-icon-says-its-waiting-the-pane-shows-what-for-58oj</guid>
      <description>&lt;p&gt;In February a Codex user asked for four conversations on screen at once. The reply was that the app already runs as many sessions as you want. The answer back: "the multi-session feature works perfectly, and I use it as well. It’s more about the visual experience — being able to display, say, four sessions in parallel." Seven months later, in the same thread, someone else put it shorter: "fast switching between tabs is not enough" (&lt;a href="https://github.com/openai/codex/issues/13036" rel="noopener noreferrer"&gt;openai/codex #13036&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;In a terminal you've been able to do this for decades: split the window. Past four panes, though, you're arranging a layout instead of watching agents, and the layout doesn't know which agent needs you.&lt;/p&gt;

&lt;p&gt;PonyMux keeps your Terminals in a list, the way an app keeps conversations, with the real CLI running in each one. In 0.15 that list can show several at once. Select a few Terminals and they appear side by side, live, each at its real size. When one needs you, click its pane and type. You never leave the group, and the other agents keep going around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why isn't a status icon enough?
&lt;/h2&gt;

&lt;p&gt;Three agents, three rows, three icons. One of them turns yellow. I click it: Codex wants to run a migration and is asking first. I approve, click back to the Claude Code row to see how far it got, and while I'm reading that, Grok has been waiting four minutes for me to pick between two approaches.&lt;/p&gt;

&lt;p&gt;The icon told me something was waiting. It didn't tell me what. Knowing &lt;em&gt;which&lt;/em&gt; one is already more than many people get: in a Claude Code issue from March, someone running several sessions wrote that "there's no way to know which session is blocked waiting for user input" (&lt;a href="https://github.com/anthropics/claude-code/issues/36885" rel="noopener noreferrer"&gt;#36885&lt;/a&gt;). But the next question is always &lt;em&gt;what&lt;/em&gt;: what is it asking, how far did it get, is the other one about to finish? A row in a list can only show a summary. The terminal shows the actual question.&lt;/p&gt;

&lt;p&gt;A summary tells you to look. The pane is the thing you look at.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do I see several agents at once?
&lt;/h2&gt;

&lt;p&gt;Select them. ⌘-click rows, Shift-click a range, or press ⌥⌘A for the whole list. Then click the &lt;strong&gt;Preview Layout&lt;/strong&gt; button in the toolbar, the little 2 × 2 grid, and choose &lt;strong&gt;Auto&lt;/strong&gt;. The preview stays off until you pick a layout, so nothing changes for people who select rows only to move them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fufqw4rgnwftny7orop5r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fufqw4rgnwftny7orop5r.png" alt="PonyMux preview grid: three selected Terminals running Claude Code, Codex, and Grok side by side, with the Codex pane's title bar showing and its row in the list lit" width="800" height="511"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Claude Code, Codex, and Grok in the preview grid. Hovering a pane lights up its row in the list.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Auto lays the Terminals out in tall, narrow columns. That was a deliberate choice. An agent's output wraps at about 80 columns, and what you want more of is rows: the question, the diff above it, the plan above that. If you'd rather fix the shape, pick up to 5 × 4 from the table.&lt;/p&gt;

&lt;p&gt;Every pane is the real Terminal at that size, not a screenshot. The program reflows to fit, and the output keeps moving.&lt;/p&gt;

&lt;h2&gt;
  
  
  How is this different from splitting the window?
&lt;/h2&gt;

&lt;p&gt;Splitting a terminal is old news. tmux, and the terminals that took after it, give you panes first: you divide the window, decide what goes where, and the layout stays until you change it. That works. Past four or five panes, each one gets too small to read, and the layout is one more thing to look after.&lt;/p&gt;

&lt;p&gt;PonyMux started from the list instead. One Terminal at a time, picked from a list, and that's still how it opens. The grid isn't a layout you build. It's what a selection looks like. Select three Terminals and you see three. Press Esc and the grid goes away, and the list is still where your Terminals live.&lt;/p&gt;

&lt;p&gt;Because the grid shows only what you selected, it doesn't have to fit on one screen. Select ten, and Auto keeps every pane at least 40 columns by 24 rows, then scrolls by whole rows. A 2 × 2 with eight Terminals scrolls the same way. You scroll through agents the way you scroll through the list.&lt;/p&gt;

&lt;p&gt;A split is a layout you keep. A selection is a question you're asking right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can I answer an agent without leaving the grid?
&lt;/h2&gt;

&lt;p&gt;Yes. Click a pane and type. The toolbar says &lt;strong&gt;Typing in&lt;/strong&gt; and the Terminal's name, so you always know where your keys go. ⇧⌘] and ⇧⌘[ move the keyboard to the next pane. Click the × to give it back. While you're typing, the Inspector switches to that Terminal, with its pull requests, links, and model, as if you had opened it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv3gmdurgc4pu2o1u39aj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv3gmdurgc4pu2o1u39aj.png" alt="PonyMux preview grid with the Codex pane outlined in the accent color and &amp;quot;Typing in api-migrate&amp;quot; in the toolbar" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Typing in the Codex pane while the other two keep running.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The list and the grid track each other. Hover a pane and its row lights up. Hover a row and its pane does. Click a selected row to type in its pane. When you want one agent full size, click the open button on its title bar. Back brings the group back.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Watching is free. Answering costs one click, and you stay where you are.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Can I wake a whole group at once?
&lt;/h2&gt;

&lt;p&gt;When you quit and reopen PonyMux, your Terminals come back asleep, each with its conversation saved. In the grid, a sleeping Terminal shows a moon in its pane. Click it, and it wakes right there and takes the keyboard once its shell is up.&lt;/p&gt;

&lt;p&gt;To bring the whole selection back, choose &lt;strong&gt;Wake … Sleeping&lt;/strong&gt; in the Inspector. PonyMux wakes them one at a time, resumes each conversation, and shows the progress in the Inspector. For more than five it asks first, and &lt;strong&gt;Stop&lt;/strong&gt; ends the queue. Without PonyMux, &lt;a href="https://ponymux.com/guides/resume-claude-code-codex-after-restart?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=watch-several-agents-at-once" rel="noopener noreferrer"&gt;this guide&lt;/a&gt; has the commands to resume several Claude Code and Codex sessions after a restart.&lt;/p&gt;

&lt;p&gt;With a group selected and no pane typing, the Inspector holds the batch actions: List, Reaction, Archive, Trash. Settings the Terminals don't share say &lt;strong&gt;Mixed&lt;/strong&gt;, so you know you're about to set them all. Back and Forward remember the selection, and Esc leaves it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What else changed?
&lt;/h2&gt;

&lt;p&gt;PonyMux runs on Intel Macs now, as well as Apple silicon: one app, macOS 14 or later. Usage limits fit in one ring per agent, and an empty ring tells you why, whether you're signed out, offline, or on an API key with no plan usage to read. In the Inspector, you can mark a pull request ready for review or turn it back into a draft.&lt;/p&gt;

&lt;p&gt;The Windows version got the same preview in its own 0.15.0. The preview is covered in &lt;a href="https://ponymux.com/docs/preview-several-terminals?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=watch-several-agents-at-once" rel="noopener noreferrer"&gt;Preview several Terminals&lt;/a&gt;, and usage in &lt;a href="https://ponymux.com/docs/usage-limits?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=watch-several-agents-at-once" rel="noopener noreferrer"&gt;Usage limits&lt;/a&gt;. For everything else, see the &lt;a href="https://ponymux.com/changelog?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=watch-several-agents-at-once" rel="noopener noreferrer"&gt;changelog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ponymux.com/download?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=watch-several-agents-at-once" rel="noopener noreferrer"&gt;Download PonyMux&lt;/a&gt;, free for macOS and Windows.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>terminal</category>
      <category>claude</category>
    </item>
    <item>
      <title>How to find and stop dev servers Claude Code and Codex left running</title>
      <dc:creator>Little Pan</dc:creator>
      <pubDate>Tue, 27 Oct 2026 22:34:16 +0000</pubDate>
      <link>https://dev.to/heylittlepan/how-to-find-and-stop-dev-servers-claude-code-and-codex-left-running-5dmf</link>
      <guid>https://dev.to/heylittlepan/how-to-find-and-stop-dev-servers-claude-code-and-codex-left-running-5dmf</guid>
      <description>&lt;p&gt;You run &lt;code&gt;npm run dev&lt;/code&gt; and Vite says &lt;code&gt;Port 5173 is in use, trying another one...&lt;/code&gt;. You didn't start anything on 5173. An agent did, an hour ago, to check a page. It said the page looked good and moved on. The server didn't.&lt;/p&gt;

&lt;p&gt;Here's how to find it and stop it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Find it:&lt;/strong&gt; &lt;code&gt;lsof -nP -iTCP:5173 -sTCP:LISTEN&lt;/code&gt; shows the process listening on the port. Drop the port number to list every listening process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stop it:&lt;/strong&gt; &lt;code&gt;kill &amp;lt;PID&amp;gt;&lt;/code&gt;. If it's still there a few seconds later, &lt;code&gt;kill -9 &amp;lt;PID&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code:&lt;/strong&gt; &lt;code&gt;/tasks&lt;/code&gt; lists the session's background tasks. Select one and press &lt;code&gt;x&lt;/code&gt; to stop it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codex:&lt;/strong&gt; &lt;code&gt;/ps&lt;/code&gt; lists the session's background terminals, and &lt;code&gt;/stop&lt;/code&gt; stops all of them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grok Build:&lt;/strong&gt; &lt;code&gt;/tasks&lt;/code&gt; or &lt;code&gt;Ctrl+G&lt;/code&gt; shows background tasks. Press &lt;code&gt;x&lt;/code&gt; on one to stop it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The catch:&lt;/strong&gt; a server started with &lt;code&gt;&amp;amp;&lt;/code&gt; or &lt;code&gt;nohup&lt;/code&gt; inside an ordinary command isn't a background task. None of those lists show it, and it keeps running after the session ends.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why does it say port 5173 is already in use?
&lt;/h2&gt;

&lt;p&gt;Because something is still listening on it. Dev servers pick a fixed default port: 5173 for Vite, 3000 for Next.js. When it's taken, both quietly move on. Vite tries the next free port and logs &lt;code&gt;Port 5173 is in use, trying another one...&lt;/code&gt;. &lt;code&gt;next dev&lt;/code&gt; does the same when you didn't set a port, and says &lt;code&gt;Port 3000 is in use by process &amp;lt;pid&amp;gt;, using available port 3001 instead.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That's convenient once. With agents, it adds up. Each one that checks a page starts its own server, and the next one lands on 5174, then 5175. Your browser tab, a callback URL, or a proxy config still points at 5173, which is now serving yesterday's code.&lt;/p&gt;

&lt;p&gt;To make Vite stop instead of drifting, set &lt;code&gt;server.strictPort: true&lt;/code&gt; in &lt;code&gt;vite.config&lt;/code&gt;, or run &lt;code&gt;vite --strictPort&lt;/code&gt;. Then a leftover server shows up as an error the first time, not as a mystery an hour later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which process is holding the port?
&lt;/h2&gt;

&lt;p&gt;Ask &lt;code&gt;lsof&lt;/code&gt; for the process listening on it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsof &lt;span class="nt"&gt;-nP&lt;/span&gt; &lt;span class="nt"&gt;-iTCP&lt;/span&gt;:5173 &lt;span class="nt"&gt;-sTCP&lt;/span&gt;:LISTEN
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;COMMAND   PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
node    48213   you    21u  IPv6  0x...      0t0  TCP *:5173 (LISTEN)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;-sTCP:LISTEN&lt;/code&gt; matters. Without it, &lt;code&gt;lsof -i :5173&lt;/code&gt; also lists every program connected to the port, your browser included. That's why the popular one-liner &lt;code&gt;lsof -ti :5173 | xargs kill&lt;/code&gt; can kill your browser along with the server.&lt;/p&gt;

&lt;p&gt;To see everything that's listening, leave out the port: &lt;code&gt;lsof -nP -iTCP -sTCP:LISTEN&lt;/code&gt;. macOS has a few listeners of its own, such as ControlCenter on 5000 and 7000 for AirPlay. Leave those alone.&lt;/p&gt;

&lt;p&gt;Then look at where the process came from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps &lt;span class="nt"&gt;-o&lt;/span&gt; pid,ppid,lstart,command &lt;span class="nt"&gt;-p&lt;/span&gt; 48213
lsof &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 48213 &lt;span class="nt"&gt;-d&lt;/span&gt; cwd &lt;span class="nt"&gt;-Fn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first line shows when it started and the full command. The second prints its working directory, which tells you the project. If the parent PID (&lt;code&gt;PPID&lt;/code&gt;) is 1, the process that started it has already exited and launchd adopted it. That's what a forgotten background server usually looks like.&lt;/p&gt;

&lt;h2&gt;
  
  
  Did Claude Code or Codex start it?
&lt;/h2&gt;

&lt;p&gt;The process tree can't tell you once the parent is gone. The environment can. Claude Code sets &lt;code&gt;CLAUDECODE=1&lt;/code&gt; and &lt;code&gt;CLAUDE_CODE_SESSION_ID&lt;/code&gt; in every command it runs, and Codex sets &lt;code&gt;CODEX_THREAD_ID&lt;/code&gt;. A server inherits them, and they stay with it after its parent exits. On macOS, &lt;code&gt;ps -E&lt;/code&gt; prints a process's environment along with its command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nb"&gt;command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 48213 | &lt;span class="nb"&gt;tr&lt;/span&gt; &lt;span class="s1"&gt;' '&lt;/span&gt; &lt;span class="s1"&gt;'\n'&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s1"&gt;'^(CLAUDECODE|CLAUDE_CODE_SESSION_ID|CODEX_THREAD_ID)='&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This loop lists every listening process an agent started, with its port, directory, and session:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;for &lt;/span&gt;pid &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;lsof &lt;span class="nt"&gt;-tiTCP&lt;/span&gt; &lt;span class="nt"&gt;-sTCP&lt;/span&gt;:LISTEN | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;&lt;span class="nv"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;ps &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nb"&gt;command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$pid&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; | &lt;span class="nb"&gt;tr&lt;/span&gt; &lt;span class="s1"&gt;' '&lt;/span&gt; &lt;span class="s1"&gt;'\n'&lt;/span&gt; |
    &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s1"&gt;'^(CLAUDE_CODE_SESSION_ID|CODEX_THREAD_ID)='&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
  &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$agent&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="k"&gt;continue
  &lt;/span&gt;&lt;span class="nv"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;lsof &lt;span class="nt"&gt;-nP&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$pid&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-iTCP&lt;/span&gt; &lt;span class="nt"&gt;-sTCP&lt;/span&gt;:LISTEN &lt;span class="nt"&gt;-Fn&lt;/span&gt; | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s1"&gt;'s/^n.*://p'&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; | &lt;span class="nb"&gt;tr&lt;/span&gt; &lt;span class="s1"&gt;'\n'&lt;/span&gt; &lt;span class="s1"&gt;' '&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
  &lt;span class="nb"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;lsof &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$pid&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; cwd &lt;span class="nt"&gt;-Fn&lt;/span&gt; | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s1"&gt;'s/^n//p'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
  &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$pid&lt;/span&gt;&lt;span class="s2"&gt;  port &lt;/span&gt;&lt;span class="nv"&gt;$port&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;basename&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;ps &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nb"&gt;comm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$pid&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;$agent&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The session ID is the one &lt;code&gt;claude --resume &amp;lt;id&amp;gt;&lt;/code&gt; and &lt;code&gt;codex resume &amp;lt;id&amp;gt;&lt;/code&gt; take, so you can reopen the conversation that started the server and ask it what the server was for. &lt;code&gt;ps -E&lt;/code&gt; shows the environment the process started with, and only for your own processes. That's all this needs. For Grok Build, use the working directory and the command.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do I stop it without breaking anything?
&lt;/h2&gt;

&lt;p&gt;Send it a normal terminate signal first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;kill &lt;/span&gt;48213
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A dev server catches this, closes its watcher and sockets, and exits. Check with the &lt;code&gt;lsof&lt;/code&gt; line again. If it's still listening after a few seconds, force it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;kill&lt;/span&gt; &lt;span class="nt"&gt;-9&lt;/span&gt; 48213
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kill the process that's listening, not its parents. When &lt;code&gt;node&lt;/code&gt; exits, the &lt;code&gt;npm run dev&lt;/code&gt; above it exits too. Killing upward can hit the shell or the agent that's still running in another tab.&lt;/p&gt;

&lt;p&gt;Avoid &lt;code&gt;pkill node&lt;/code&gt; and &lt;code&gt;killall node&lt;/code&gt;. They also stop every editor extension, language server, and MCP server written in Node, and any dev server you meant to keep.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do Claude Code, Codex, and Grok stop their own background servers?
&lt;/h2&gt;

&lt;p&gt;Each agent keeps a list of the background work it started, and each list has a stop control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code:&lt;/strong&gt; Claude starts a long command as a background task, and you can move a running command there with &lt;code&gt;Ctrl+B&lt;/code&gt;. &lt;code&gt;/tasks&lt;/code&gt; (also &lt;code&gt;/bashes&lt;/code&gt;) lists them; select one and press &lt;code&gt;x&lt;/code&gt; to stop it. Tasks stop when Claude Code exits, including processes that detached under &lt;code&gt;setsid&lt;/code&gt; or &lt;code&gt;timeout&lt;/code&gt;. If you send the session to the background with &lt;code&gt;/background&lt;/code&gt; instead of exiting, they keep running there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codex:&lt;/strong&gt; a command that keeps running after Codex stops waiting for it becomes a background terminal, and the footer says how many are running. &lt;code&gt;/ps&lt;/code&gt; lists them and &lt;code&gt;/stop&lt;/code&gt; stops all of them. Since 0.115, interrupting a turn with &lt;code&gt;Ctrl+C&lt;/code&gt; or &lt;code&gt;Esc&lt;/code&gt; doesn't stop them. Quitting doesn't always stop them: Codex can keep a session running in its local background service, for example when you leave a running turn with &lt;strong&gt;Run in background&lt;/strong&gt;. Run &lt;code&gt;/stop&lt;/code&gt; before you quit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grok Build:&lt;/strong&gt; the agent runs commands in the background itself, and &lt;code&gt;Ctrl+B&lt;/code&gt; sends a running one there. &lt;code&gt;Ctrl+G&lt;/code&gt; or &lt;code&gt;/tasks&lt;/code&gt; shows them; press &lt;code&gt;x&lt;/code&gt; on one to stop it. Stopping a task ends its process group, but not descendants that detached with &lt;code&gt;setsid&lt;/code&gt; or &lt;code&gt;nohup&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These lists only know about what the agent started as background work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do some servers outlive the session?
&lt;/h2&gt;

&lt;p&gt;Because the agent didn't start them as background work. When it runs &lt;code&gt;npm run dev &amp;amp;&lt;/code&gt; as an ordinary command, the command returns at once, the server is handed to launchd, and no task list ever shows it. Quitting the agent doesn't touch it. The same happens when a background task starts its own &lt;code&gt;nohup … &amp;amp;&lt;/code&gt;. Claude Code then reports the task as completed, while the children keep running (&lt;a href="https://github.com/anthropics/claude-code/issues/92399" rel="noopener noreferrer"&gt;issue #92399&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Even tracked work gets lost. In one &lt;a href="https://github.com/anthropics/claude-code/issues/16198" rel="noopener noreferrer"&gt;Claude Code issue&lt;/a&gt;, a &lt;code&gt;wrangler dev&lt;/code&gt; started as a background task kept running for two days at 89% CPU and 2.5 GB of memory after the user moved on. In &lt;a href="https://github.com/anthropics/claude-code/issues/19097" rel="noopener noreferrer"&gt;another&lt;/a&gt;, a hung Python process ran for 136 minutes at 16 GB after the session's context was compacted. The user found it with &lt;code&gt;ps aux&lt;/code&gt;. Codex users report background terminals that &lt;a href="https://github.com/openai/codex/issues/41841" rel="noopener noreferrer"&gt;"run forever"&lt;/a&gt;, too.&lt;/p&gt;

&lt;p&gt;Sessions you didn't close count as well. A Claude Code session sent to the background, or a Codex turn left with &lt;strong&gt;Run in background&lt;/strong&gt;, keeps its servers on purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do I stop agents leaving servers behind?
&lt;/h2&gt;

&lt;p&gt;None of the three vendors publish a rule for this, but you can tell the agent in &lt;code&gt;CLAUDE.md&lt;/code&gt; or &lt;code&gt;AGENTS.md&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Dev servers&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Start dev servers as a background task, never with &lt;span class="sb"&gt;`&amp;amp;`&lt;/span&gt;, &lt;span class="sb"&gt;`nohup`&lt;/span&gt;, or &lt;span class="sb"&gt;`setsid`&lt;/span&gt;.
&lt;span class="p"&gt;-&lt;/span&gt; Use the project's fixed port and set it explicitly (&lt;span class="sb"&gt;`vite --strictPort`&lt;/span&gt;, &lt;span class="sb"&gt;`next dev --port 3000`&lt;/span&gt;). If the port is taken, tell me instead of picking another.
&lt;span class="p"&gt;-&lt;/span&gt; Stop any server you started once you've finished checking it.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first rule keeps the server in the task list, where quitting the agent stops it. The second turns a leftover server into an error you see right away. The third is a request, not a guarantee: a &lt;a href="https://github.com/openai/codex/issues/41841" rel="noopener noreferrer"&gt;Codex issue&lt;/a&gt; reports background jobs left running even after the user said not to. So keep the &lt;code&gt;lsof&lt;/code&gt; check around.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can I see which Terminal started each server?
&lt;/h2&gt;

&lt;p&gt;That's what the &lt;strong&gt;Servers&lt;/strong&gt; section in &lt;a href="https://ponymux.com/?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=stop-dev-servers-claude-code-codex" rel="noopener noreferrer"&gt;PonyMux&lt;/a&gt;'s Inspector does. For each Terminal it lists every port that a process started there is listening on, with the port and the process name. It doesn't matter whether the agent used a background task, &lt;code&gt;&amp;amp;&lt;/code&gt;, or &lt;code&gt;nohup&lt;/code&gt;. PonyMux marks each Terminal's processes when they start, and the mark stays after the parent exits.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg952yd1g9e7dac137082.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg952yd1g9e7dac137082.png" alt="The Inspector's Servers list with ports 8000 (python3) and 5173 (node), and a tooltip showing when, where and how the 5173 server started"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click a row to open the server in your browser.&lt;/li&gt;
&lt;li&gt;Hover it to see when and in which directory it started, the processes that started it (&lt;code&gt;claude › npm › node&lt;/code&gt;), and its command.&lt;/li&gt;
&lt;li&gt;Click the trash button to stop it. PonyMux sends a terminate signal and forces it after 3 seconds. Your shell and the agent keep running.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the agent exits, Servers moves up near the top of the Inspector, where a forgotten server is hard to miss. Moving a Terminal to the Trash or Archive stops everything running in it. Servers only covers processes started in PonyMux Terminals; for anything else, use &lt;code&gt;lsof&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For the details, see &lt;a href="https://ponymux.com/docs/servers?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=stop-dev-servers-claude-code-codex" rel="noopener noreferrer"&gt;Servers&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;PonyMux is free for macOS: &lt;a href="https://ponymux.com/download?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=stop-dev-servers-claude-code-codex" rel="noopener noreferrer"&gt;download it here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>codex</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to wait for CI and code review on a pull request your agent opened</title>
      <dc:creator>Little Pan</dc:creator>
      <pubDate>Mon, 26 Oct 2026 16:07:26 +0000</pubDate>
      <link>https://dev.to/heylittlepan/how-to-wait-for-ci-and-code-review-on-a-pull-request-your-agent-opened-14dc</link>
      <guid>https://dev.to/heylittlepan/how-to-wait-for-ci-and-code-review-on-a-pull-request-your-agent-opened-14dc</guid>
      <description>&lt;p&gt;Claude Code opens the pull request four minutes after you asked. Then CI takes twenty, the review bot waits for CI before it starts, and you spend the afternoon refreshing a GitHub tab.&lt;/p&gt;

&lt;p&gt;Here's how to wait without the tab:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CI:&lt;/strong&gt; &lt;code&gt;gh pr checks &amp;lt;number&amp;gt; --watch --fail-fast&lt;/code&gt; returns when the checks finish, and exits non-zero if one fails. Chain a notification onto it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review:&lt;/strong&gt; each bot reports in its own way. Codex leaves a comment or a 👍, CodeRabbit posts a commit status, Claude and Cursor Bugbot post check runs. &lt;code&gt;reviewDecision&lt;/code&gt; doesn't show most of them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Merging:&lt;/strong&gt; &lt;code&gt;gh pr merge &amp;lt;number&amp;gt; --auto --squash&lt;/code&gt; merges once required checks pass. Without required checks, it merges right away.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The agent can wait too:&lt;/strong&gt; &lt;code&gt;/loop&lt;/code&gt; in Claude Code or Grok Build, a background &lt;code&gt;gh pr checks --watch&lt;/code&gt; in Codex. It costs turns.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why does the pull request take longer than the agent?
&lt;/h2&gt;

&lt;p&gt;Because two queues start after the agent is done. CI runs first. Review bots usually run after it: CodeRabbit &lt;a href="https://docs.coderabbit.ai/tools/github-checks" rel="noopener noreferrer"&gt;waits for GitHub Checks to finish&lt;/a&gt; and reads their output before it reviews.&lt;/p&gt;

&lt;p&gt;The gap is measurable. A Harvard working paper by Fiona Chen and James Stratton, with data from 718 companies, found that after teams adopted coding agents, the time from submitting a pull request to merging it rose by 3.45 days, &lt;a href="https://fion.ac/jellyfish.pdf" rel="noopener noreferrer"&gt;a 49% increase&lt;/a&gt;. On Hacker News, a developer described fixing CI &lt;a href="https://news.ycombinator.com/item?id=48072337" rel="noopener noreferrer"&gt;"on a 5-minute-delay loop"&lt;/a&gt; as hell.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do I get told when CI finishes?
&lt;/h2&gt;

&lt;p&gt;Let &lt;code&gt;gh&lt;/code&gt; wait for you:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gh &lt;span class="nb"&gt;pr &lt;/span&gt;checks 42 &lt;span class="nt"&gt;--watch&lt;/span&gt; &lt;span class="nt"&gt;--fail-fast&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; osascript &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'display notification "Checks passed" with title "PR 42"'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="o"&gt;||&lt;/span&gt; osascript &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'display notification "A check failed" with title "PR 42"'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;--watch&lt;/code&gt; refreshes every 10 seconds (change it with &lt;code&gt;-i&lt;/code&gt;). &lt;code&gt;--fail-fast&lt;/code&gt; returns on the first failure instead of waiting for the rest. The exit code is 0 when everything passed and 1 when a check failed. Checks from other apps count too: the command reads the same list as the PR page.&lt;/p&gt;

&lt;p&gt;Three things to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Right after a push, there may be no checks yet, and &lt;code&gt;gh pr checks&lt;/code&gt; exits at once with &lt;code&gt;no checks reported&lt;/code&gt;. Give it a few seconds first.&lt;/li&gt;
&lt;li&gt;A cancelled check exits 0, like a pass.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--json&lt;/code&gt; turns off &lt;code&gt;--watch&lt;/code&gt;. For a one-line summary, use it on its own: &lt;code&gt;gh pr checks 42 --json bucket --jq 'group_by(.bucket)|map("\(.[0].bucket): \(length)")|join(", ")'&lt;/code&gt; prints &lt;code&gt;fail: 1, pass: 1&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How do I see what the review bots said?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;gh pr view 42 --json reviewDecision,mergeStateStatus&lt;/code&gt; gives GitHub's summary. &lt;code&gt;reviewDecision&lt;/code&gt; only counts reviews that approve or request changes, and &lt;code&gt;mergeStateStatus&lt;/code&gt; (&lt;code&gt;CLEAN&lt;/code&gt;, &lt;code&gt;BLOCKED&lt;/code&gt;, &lt;code&gt;BEHIND&lt;/code&gt;, &lt;code&gt;DIRTY&lt;/code&gt;, &lt;code&gt;UNSTABLE&lt;/code&gt;) can read &lt;code&gt;UNKNOWN&lt;/code&gt; for a few seconds while GitHub works it out. Most review bots don't move either field:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Codex&lt;/strong&gt; reacts with 👀 while it reviews, comments if it finds something, and reacts with 👍 when it finds nothing. No check, no approval.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CodeRabbit&lt;/strong&gt; posts a commit status named &lt;code&gt;CodeRabbit&lt;/code&gt; and a review with its comments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code Review&lt;/strong&gt; posts a check run that always concludes neutral, plus inline comments. It never approves or blocks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cursor Bugbot&lt;/strong&gt; posts a &lt;code&gt;Cursor Bugbot&lt;/code&gt; check run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Copilot&lt;/strong&gt; and &lt;strong&gt;Gemini Code Assist&lt;/strong&gt; leave reviews and comments only.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So "is the review done?" means a different question for each bot, and the answer is in the reactions, comments, and checks on the PR page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can GitHub merge it for me when it's ready?
&lt;/h2&gt;

&lt;p&gt;Yes, with auto-merge. Turn on &lt;strong&gt;Allow auto-merge&lt;/strong&gt; in the repository settings, then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gh &lt;span class="nb"&gt;pr &lt;/span&gt;merge 42 &lt;span class="nt"&gt;--auto&lt;/span&gt; &lt;span class="nt"&gt;--squash&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub merges once every required check and review passes. Cancel with &lt;code&gt;gh pr merge 42 --disable-auto&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The catch is the word &lt;em&gt;required&lt;/em&gt;. If the branch has no rule that requires checks, nothing is blocking the merge, and &lt;code&gt;--auto&lt;/code&gt; merges immediately, with CI still running. Add a branch protection rule or ruleset that requires your CI jobs first. Review bots that only comment are never required, so auto-merge won't wait for them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can the agent watch the pull request itself?
&lt;/h2&gt;

&lt;p&gt;Yes, and each agent does it differently:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code:&lt;/strong&gt; &lt;code&gt;/loop check whether CI passed and address any review comments&lt;/code&gt; re-runs the prompt at an interval Claude picks, from one minute to an hour. A bare &lt;code&gt;/loop&lt;/code&gt; tends the current branch's pull request: review comments, failed CI runs, merge conflicts. Where it's available, Claude may use the Monitor tool instead, which streams a script's output rather than polling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codex:&lt;/strong&gt; there's no &lt;code&gt;/loop&lt;/code&gt;. Ask it to run &lt;code&gt;gh pr checks --watch&lt;/code&gt; as a background terminal; &lt;code&gt;/ps&lt;/code&gt; shows it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grok Build:&lt;/strong&gt; &lt;code&gt;/loop 5m check the PR's checks and reviews&lt;/code&gt; runs every five minutes, at least one minute apart.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every check-in is a turn: it uses your plan, and the agent can start fixing things while you're doing something else. For one pull request that's fine. With three agents and three pull requests, it adds up.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does GitHub notify me about?
&lt;/h2&gt;

&lt;p&gt;You're subscribed to your own pull requests, so new reviews and comments notify you, in the browser and in GitHub Mobile. For GitHub Actions, you get a notification when a run you triggered completes; under &lt;strong&gt;Settings → Notifications → System → Actions&lt;/strong&gt; you can limit it to failed runs. Checks from other apps, and bot reactions such as Codex's 👍, don't notify you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can I see every pull request's checks and review in one place?
&lt;/h2&gt;

&lt;p&gt;That's what the Inspector in &lt;a href="https://ponymux.com/?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=wait-for-ci-code-review-claude-code-codex" rel="noopener noreferrer"&gt;PonyMux&lt;/a&gt; does. Next to each Terminal running Claude Code, Codex, or Grok, &lt;strong&gt;Pull Requests&lt;/strong&gt; lists the pull requests the agent opened or mentioned for this project, including the ones its subagents opened, and every row shows where the PR stands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Checks:&lt;/strong&gt; a pulsing ring while they run, a green check when they pass, a red ✕ with the number failing. Review bots' own checks aren't counted here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conflicts:&lt;/strong&gt; a red triangle when the branch conflicts with its base.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State:&lt;/strong&gt; the icon turns purple when merged, red when closed, and dims for a draft.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review:&lt;/strong&gt; a badge on the PR icon combines every bot's verdict, worst first. Changes requested, comments, still reviewing, passed, or passed while another bot hit its usage limit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1x5vk6uydgxeochean5x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1x5vk6uydgxeochean5x.png" alt="The Inspector's Pull Requests list: checks and a Codex review still running, a PR with everything passed, one with two failing checks, conflicts and CodeRabbit comments, a draft, and a merged PR" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PonyMux reads each bot the way that bot reports, which is what &lt;code&gt;reviewDecision&lt;/code&gt; can't do. It reads Codex's review state from its summary comment, CodeRabbit's from its commit status and the number of actionable comments, Claude's and Cursor Bugbot's from their check runs, and Copilot's and Gemini's from their reviews. Other bots are read from their review states. Hover a row and the tooltip spells it out, one line per bot: "Codex: no issues", "CodeRabbit: has comments", "Codex: usage limit reached, comment &lt;a class="mentioned-user" href="https://dev.to/codex"&gt;@codex&lt;/a&gt; review to retry". A bot that hasn't started on the latest commit shows as waiting, and one that stays silent too long shows as stalled.&lt;/p&gt;

&lt;p&gt;Status updates on its own. A row on screen is checked every 30 seconds while something is running and every few minutes otherwise, and again when you come back to PonyMux. It uses your &lt;code&gt;gh&lt;/code&gt; login, so private repositories work. If &lt;code&gt;gh&lt;/code&gt; isn't installed or signed in, the ⓘ next to &lt;strong&gt;Pull Requests&lt;/strong&gt; turns yellow and gives you the command to copy. To turn it off, clear &lt;strong&gt;Show pull request status&lt;/strong&gt; in &lt;strong&gt;Settings → General&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can I merge it from there?
&lt;/h2&gt;

&lt;p&gt;Yes. Open the row's &lt;strong&gt;⋯&lt;/strong&gt; menu and choose &lt;strong&gt;Merge&lt;/strong&gt;. The menu already knows the repository's merge methods. When a merge can't go, the item is greyed out with the reason: a draft, conflicts, branch protection, a branch behind its base, or already in the merge queue. When branch protection is waiting on checks and auto-merge is allowed, it offers &lt;strong&gt;Enable Auto-Merge&lt;/strong&gt; instead.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Femydvcs0tf7sqq3tao8k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Femydvcs0tf7sqq3tao8k.png" alt="The merge dialog for a ready pull request: checks passed, no conflicts, Codex found no issues, Squash and merge selected" width="800" height="589"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Merging asks first. The sheet reads the PR from GitHub again and says what it found: "Ready to merge.", or what's still open, such as failing checks or a bot that's still reviewing. Pick a merge method from the ones the repository allows, and choose whether to delete the branch. The merge is sent for the commit you were shown, so if someone pushed in the meantime, GitHub refuses it instead of merging code you didn't see. The sheet waits for GitHub's answer and shows it.&lt;/p&gt;

&lt;p&gt;It doesn't approve, re-run checks, request reviews, or update a branch that's behind. For those, open the PR on GitHub.&lt;/p&gt;

&lt;p&gt;For every status and setting, see &lt;a href="https://ponymux.com/docs/pull-requests?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=wait-for-ci-code-review-claude-code-codex" rel="noopener noreferrer"&gt;Pull requests&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;PonyMux is free for macOS: &lt;a href="https://ponymux.com/download?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=wait-for-ci-code-review-claude-code-codex" rel="noopener noreferrer"&gt;download it here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>codex</category>
      <category>github</category>
    </item>
    <item>
      <title>Your agent is done. The pull request isn't.</title>
      <dc:creator>Little Pan</dc:creator>
      <pubDate>Sat, 24 Oct 2026 03:55:10 +0000</pubDate>
      <link>https://dev.to/heylittlepan/your-agent-is-done-the-pull-request-isnt-1877</link>
      <guid>https://dev.to/heylittlepan/your-agent-is-done-the-pull-request-isnt-1877</guid>
      <description>&lt;p&gt;Claude Code fixed the bug in four minutes and opened a pull request. Then I spent the next forty refreshing it. E2E tests still running. Refresh. Still running. Refresh. Review bot waiting for checks. Refresh. Red.&lt;/p&gt;

&lt;p&gt;The agent was done. The pull request wasn't.&lt;/p&gt;

&lt;p&gt;PonyMux 0.14 moves that wait into the app. Every PR in the Inspector now shows where it stands: checks running, passed, or failing, merge conflicts, and what the review bots said. When it's ready, merge it from the same row. And a new &lt;strong&gt;Servers&lt;/strong&gt; section lists the dev servers your agent started in the Terminal, so the one from an hour ago stops holding port 5173.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why am I still waiting after the agent finished?
&lt;/h2&gt;

&lt;p&gt;Writing the code got fast. Everything after it didn't. CI runs, then the review bots run, and CodeRabbit by default &lt;a href="https://docs.coderabbit.ai/tools/github-checks" rel="noopener noreferrer"&gt;waits for GitHub Checks to finish&lt;/a&gt; before it reviews. With two or three agents going, that's two or three PRs, each in a different state, each behind a browser tab.&lt;/p&gt;

&lt;p&gt;It isn't just me. A Harvard working paper by Fiona Chen and James Stratton, using data from 718 companies, found that coding agents raised code output by about 30%, while the time from opening a pull request to merging it went up 49% (&lt;a href="https://complexdiscovery.com/harvard-researchers-find-ai-coding-agents-shifted-the-bottleneck-to-code-review/" rel="noopener noreferrer"&gt;summary&lt;/a&gt;). It's not peer reviewed yet, and the data come from an analytics vendor. Still, it matches the afternoon above. On Hacker News someone described fixing CI &lt;a href="https://news.ycombinator.com/item?id=48072337" rel="noopener noreferrer"&gt;on a "5-minute-delay loop"&lt;/a&gt; as hell, and the reply was a skill that spins up a subagent just to poll the PR.&lt;/p&gt;

&lt;p&gt;I wanted the poll without the tab.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is CI done yet? Did the review pass?
&lt;/h2&gt;

&lt;p&gt;Open the Inspector next to a Terminal running Claude Code, Codex, or Grok. Each row under &lt;strong&gt;Pull Requests&lt;/strong&gt; now carries its status. A pulsing ring while checks run, a green check when they pass, a red cross with the number failing. A triangle when the branch has conflicts. A badge on the PR icon for the review bots: Codex, CodeRabbit, GitHub Copilot, Gemini Code Assist, Claude, and Cursor Bugbot. Hover the row and you get each bot's verdict in words.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1x5vk6uydgxeochean5x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1x5vk6uydgxeochean5x.png" alt="The Inspector's Pull Requests list: checks and a Codex review still running, a PR with everything passed, one with two failing checks, conflicts and CodeRabbit comments, a draft, and a merged PR" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Status updates on its own while the row is on screen, and again when you come back to the app. It's read with your &lt;code&gt;gh&lt;/code&gt; login, so private repositories work. If &lt;code&gt;gh&lt;/code&gt; isn't installed or signed in, the ⓘ next to the section turns yellow and tells you the command. Don't want it? Turn it off in Settings → General.&lt;/p&gt;

&lt;p&gt;You find out it's red when it turns red, not on the fourth refresh.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can I merge without opening GitHub?
&lt;/h2&gt;

&lt;p&gt;Yes. Open the row's &lt;strong&gt;⋯&lt;/strong&gt; menu and choose &lt;strong&gt;Merge&lt;/strong&gt;. The menu already knows the repository's merge method, and when a merge can't go it says why: a draft, conflicts, branch protection, or a branch behind its base.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Femydvcs0tf7sqq3tao8k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Femydvcs0tf7sqq3tao8k.png" alt="The merge dialog for a ready pull request: checks passed, no conflicts, Codex found no issues, Squash and merge selected" width="800" height="589"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Merging asks first. The dialog reads the PR from GitHub again, so you're confirming what's true now, not what was true when the row last updated. Pick a merge commit, squash, or rebase from what the repository allows, and tick a box to delete the branch. If branch protection is still waiting on checks, it offers auto-merge instead. The dialog stays until GitHub answers, so you see the result instead of guessing. Close and reopen work the same way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which server did my agent leave running?
&lt;/h2&gt;

&lt;p&gt;This one is quieter. The agent runs &lt;code&gt;npm run dev &amp;amp;&lt;/code&gt; to check a page, says it looks good, and moves on. The server doesn't. An hour later Vite tells you port 5173 is in use and quietly moves to 5174.&lt;/p&gt;

&lt;p&gt;People find these the hard way. In one &lt;a href="https://github.com/anthropics/claude-code/issues/16198" rel="noopener noreferrer"&gt;Claude Code issue&lt;/a&gt;, a &lt;code&gt;wrangler dev&lt;/code&gt; that Claude Code started in the background kept running for two days at 89% CPU and 2.5 GB of memory. In &lt;a href="https://github.com/anthropics/claude-code/issues/19097" rel="noopener noreferrer"&gt;another&lt;/a&gt;, a stuck process used 16 GB for over two hours, and it turned up only in &lt;code&gt;ps aux&lt;/code&gt;. If you have one right now, here is &lt;a href="https://ponymux.com/guides/stop-dev-servers-claude-code-codex?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=your-agent-is-done-the-pull-request-isnt" rel="noopener noreferrer"&gt;how to find and stop it&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg952yd1g9e7dac137082.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg952yd1g9e7dac137082.png" alt="The Inspector's Servers list with ports 8000 (python3) and 5173 (node), and a tooltip showing when, where and how the 5173 server started" width="800" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Servers&lt;/strong&gt; lists every port a process started from this Terminal is listening on. Hover a row to see when and where it started, what started it (&lt;code&gt;claude › npm › node&lt;/code&gt;), and the command. Click the trash button to stop it. PonyMux asks it to quit, forces it after 3 seconds, and leaves your shell and the agent alone. When the agent exits, Servers moves up near the top, where a forgotten one is hard to miss.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The agent forgets what it started. The Inspector doesn't.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What else changed?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;PRs and files created by subagents now show up in Pull Requests and Outputs, for Claude Code, Codex, and Grok.&lt;/li&gt;
&lt;li&gt;An agent you have installed but never ran shows a &lt;strong&gt;Connect&lt;/strong&gt; button, with up-to-date install links.&lt;/li&gt;
&lt;li&gt;The working indicator stays on while a background subagent is still busy.&lt;/li&gt;
&lt;li&gt;Moving a Terminal to the Trash or Archive stops what's running in it, servers included.&lt;/li&gt;
&lt;li&gt;Quit and crash dialogs follow your light or dark theme.&lt;/li&gt;
&lt;li&gt;The status badge on Terminal rows no longer sits on a backing circle.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Status, merging, and Servers are covered in &lt;a href="https://ponymux.com/docs/workspace-navigation?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=your-agent-is-done-the-pull-request-isnt#pull-request-status" rel="noopener noreferrer"&gt;Workspace and Navigation&lt;/a&gt;. For the full list, see the &lt;a href="https://ponymux.com/changelog?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=your-agent-is-done-the-pull-request-isnt" rel="noopener noreferrer"&gt;changelog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;PonyMux is free for macOS: &lt;a href="https://ponymux.com/download?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=your-agent-is-done-the-pull-request-isnt" rel="noopener noreferrer"&gt;download it here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>github</category>
      <category>devtools</category>
    </item>
    <item>
      <title>A mental health feature for people who work with agents</title>
      <dc:creator>Little Pan</dc:creator>
      <pubDate>Sun, 18 Oct 2026 09:25:52 +0000</pubDate>
      <link>https://dev.to/heylittlepan/a-mental-health-feature-for-people-who-work-with-agents-3h4a</link>
      <guid>https://dev.to/heylittlepan/a-mental-health-feature-for-people-who-work-with-agents-3h4a</guid>
      <description>&lt;p&gt;It's late. The review agent has found one more thing: a boundary case in a regex. The coding agent fixes it, opens another PR, and the reviewer finds the next one. Some nights that's dozens of PRs, and none of them is wrong.&lt;/p&gt;

&lt;p&gt;I didn't want to scold anyone. I wanted to hit something.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5g14ylh72yoolslb5s0t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5g14ylh72yoolslb5s0t.png" alt="A terminal where an agent has just said " width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually wears me out?
&lt;/h2&gt;

&lt;p&gt;Not the big failures. A broken build is easy: you're angry for a minute and you fix it. These are the ones that wear me down.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The review that never ends.&lt;/strong&gt; One agent writes, another reviews, and the reviewer always has a nitpick. A person knows when to say "good enough." An agent forgets it's allowed to say no, and keeps polishing the same corner.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The side quest.&lt;/strong&gt; Halfway through task A it trips over task B, and puts all its energy into B. A is forgotten.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pulling teeth.&lt;/strong&gt; It stops at some boring little spot and tells me what it did, but not what comes next. I ask, it moves one step, it stops again.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The silent decisions.&lt;/strong&gt; The work is done, and the choices it made along the way aren't mentioned. Ask, and you get a little more.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these is a bug. That's why they're so tiring.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why would a terminal need therapy?
&lt;/h2&gt;

&lt;p&gt;Plenty of tools help agents work better. I haven't found one that asks how the person on the other end feels at that moment.&lt;/p&gt;

&lt;p&gt;You can type "seriously?" into the prompt. It doesn't help. You can walk away, which is the right call, and not always possible.&lt;/p&gt;

&lt;p&gt;I wanted a third option: something you can do right now, with one click, that's a little funny. If a bad afternoon can at least be absurd, I can stay in the work.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's on the rack?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3f3gv8fmxfs1k64qzyyb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3f3gv8fmxfs1k64qzyyb.png" alt="The Terminal Therapy rack opened from the sofa button in PonyMux's Inspector: Anger Management with Hammer, Pistol and Rocket Launcher, and Spells with Bless, Ignite and Freeze, plus a Sound effects switch." width="800" height="672"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the bottom left of the Inspector there's a sofa button. Click it and a rack opens: three weapons and three spells. Pick one and click the terminal. It's called Terminal Therapy. Here's each tool in action.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fihvoxqh4x7tr9x0e1i45.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fihvoxqh4x7tr9x0e1i45.png" alt="The Hammer coming down on the terminal output, with a shock ring around the impact." width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hammer&lt;/strong&gt; lands right where you click. The text slips and cracks and the screen shakes, but nothing burns. It's the one for the fifth "You're absolutely right."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpyyzx9oui4v8nkc8gnqn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpyyzx9oui4v8nkc8gnqn.png" alt="The Pistol with its dashed aim line, and a small charred pit with a glowing ring where the shot landed." width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pistol&lt;/strong&gt; fires a short way ahead along a dashed aim line that follows the way you move the pointer. It leaves a small charred pit. It's what I'd type "seriously?" with.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp0jb02243op46fbw2y85.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp0jb02243op46fbw2y85.png" alt="The Rocket Launcher, and the explosion it leaves in the terminal output: a bright core, a gold ring and flying debris." width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rocket Launcher&lt;/strong&gt; flies farther and blows a crater with a glowing rim. It needs a moment to reload, which is probably healthy. This is for when it rewrote the whole package. Again.&lt;/p&gt;

&lt;p&gt;You hold a weapon until you put it away. Spells are used once.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the spells for?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa7c6ioo3irwnw36sw0bg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa7c6ioo3irwnw36sw0bg.png" alt="The same terminal after Bless: the damage is gone and the text glows gold with a few sparks." width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bless&lt;/strong&gt; is my favorite. A column of light comes down, every mark you left is cleared, and the text glows gold for a few seconds. The practical part is that the screen is clean again. But I also think of it as a small superstition. You make a wish for the next run: first try, no surprises. I know it does nothing to the agent. I do it anyway.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flzbv81xnq405pgcjwshj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flzbv81xnq405pgcjwshj.png" alt="Ignite: a ring of fire spreading across the terminal text." width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnfyndnpa0mgdwqduyq81.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnfyndnpa0mgdwqduyq81.png" alt="Freeze: frost and cracked ice covering the terminal, the text turned ice blue." width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ignite&lt;/strong&gt; and &lt;strong&gt;Freeze&lt;/strong&gt; don't mean anything. Sometimes you just want to burn the whole thing down, or freeze it right where it stands. Fire spreads from your click for about five seconds and leaves scorch marks. Frost covers the screen and thaws away by itself, leaving nothing behind. A new spell replaces the one still showing.&lt;/p&gt;

&lt;p&gt;Your turn: &lt;a href="https://ponymux.com/blog/a-mental-health-feature-for-people-who-work-with-agents?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=a-mental-health-feature-for-people-who-work-with-agents" rel="noopener noreferrer"&gt;the original post on ponymux.com&lt;/a&gt; has the real rack running in the page, and every tool works.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does it work?
&lt;/h2&gt;

&lt;p&gt;Everything is drawn in PonyMux's own renderer, on top of the terminal's output.&lt;/p&gt;

&lt;p&gt;It's built on Ghostty's renderer, with a custom patch so the renderer knows where you clicked. That's why it's PonyMux-only. You can't just drop a shader into another terminal and get this.&lt;/p&gt;

&lt;p&gt;The damage stays after you put a weapon away. The × beside the sofa clears it, so does Bless, and so does restarting the terminal. Nothing is saved.&lt;/p&gt;

&lt;p&gt;Sounds are off by default. Turn them on at the bottom of the rack. If macOS has Reduce Motion on, nothing flies or shakes; the damage just appears.&lt;/p&gt;

&lt;p&gt;And if you keep firing for long enough, the terminal will eventually have something to say. I'll leave you to find it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Serious work should still feel alive. Even the bad afternoons.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Everything the tools do, one by one, is in the &lt;a href="https://ponymux.com/docs/terminal-therapy?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=a-mental-health-feature-for-people-who-work-with-agents" rel="noopener noreferrer"&gt;Terminal Therapy docs&lt;/a&gt;. PonyMux is free for macOS: &lt;a href="https://ponymux.com/download?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=a-mental-health-feature-for-people-who-work-with-agents" rel="noopener noreferrer"&gt;ponymux.com/download&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>mentalhealth</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Claude Code and Codex pets: how to get one for every session</title>
      <dc:creator>Little Pan</dc:creator>
      <pubDate>Fri, 16 Oct 2026 16:10:46 +0000</pubDate>
      <link>https://dev.to/heylittlepan/claude-code-and-codex-pets-how-to-get-one-for-every-session-4508</link>
      <guid>https://dev.to/heylittlepan/claude-code-and-codex-pets-how-to-get-one-for-every-session-4508</guid>
      <description>&lt;p&gt;Codex has pets in two places. In the ChatGPT desktop app, open &lt;strong&gt;Settings → Pets&lt;/strong&gt;, type &lt;code&gt;/pet&lt;/code&gt;, or press &lt;strong&gt;⌥Space&lt;/strong&gt; on macOS to show a floating pet. In an interactive Codex CLI session, type &lt;code&gt;/pets&lt;/code&gt; or &lt;code&gt;/pet&lt;/code&gt; to choose a terminal pet for that session. Claude Code and Grok Build have no built-in equivalent today.&lt;/p&gt;

&lt;p&gt;A pet is a small animated companion that shows what your agent is doing: working, waiting for you, done. It is a nice way to keep an eye on an agent without reading its output.&lt;/p&gt;

&lt;p&gt;Here is how to set one up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;In the ChatGPT app:&lt;/strong&gt; type &lt;code&gt;/pet&lt;/code&gt;, choose &lt;strong&gt;Show pet&lt;/strong&gt; from the command menu, or press &lt;strong&gt;⌥Space&lt;/strong&gt; on macOS. Pick a built-in or custom pet in &lt;strong&gt;Settings → Pets&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;In the Codex CLI:&lt;/strong&gt; type &lt;code&gt;/pets&lt;/code&gt; to pick one, &lt;code&gt;/pets &amp;lt;name&amp;gt;&lt;/code&gt; to choose it directly, or &lt;code&gt;/pets off&lt;/code&gt; to hide it. It needs iTerm2 3.6 or later, or a terminal with Kitty graphics or Sixel, and doesn't show in tmux or Zellij.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make your own:&lt;/strong&gt; in &lt;strong&gt;Settings → Pets&lt;/strong&gt;, click &lt;strong&gt;Create pet&lt;/strong&gt;. The app installs its bundled &lt;code&gt;hatch-pet&lt;/code&gt; skill and opens a chat where you describe the pet. It saves the pet to &lt;code&gt;~/.codex/pets/&amp;lt;name&amp;gt;/&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How do Codex pets work?
&lt;/h2&gt;

&lt;p&gt;The pet plays an animation for the state of the chat: &lt;strong&gt;Running&lt;/strong&gt; while it works, &lt;strong&gt;Needs input&lt;/strong&gt; while it waits for an answer or an approval, &lt;strong&gt;Ready&lt;/strong&gt; when it finished and you haven't looked yet, and &lt;strong&gt;Blocked&lt;/strong&gt; when it failed. In the ChatGPT app it floats on screen above a small chat box, and &lt;strong&gt;Mini&lt;/strong&gt; shows the box without a pet. In the Codex CLI it sits in the terminal.&lt;/p&gt;

&lt;p&gt;A pet is two files in a folder:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;pet.json&lt;/code&gt;: the id, display name, description, and the sprite sheet's file name.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;spritesheet.webp&lt;/code&gt;: a grid of 192×208 pixel frames, eight columns wide, one row per animation. Nine rows cover idle, running right and left, waving, jumping, failed, waiting, working, and review. Pets made by the hatch-pet skill that ships with the ChatGPT app add two rows of poses for looking in 16 directions (11 rows, &lt;code&gt;spriteVersionNumber: 2&lt;/code&gt; in &lt;code&gt;pet.json&lt;/code&gt;); older pets have the nine rows only. Both kinds load.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How do I make my own Codex pet?
&lt;/h2&gt;

&lt;p&gt;The ChatGPT app makes pets with OpenAI's &lt;code&gt;hatch-pet&lt;/code&gt; skill:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;strong&gt;Settings → Pets&lt;/strong&gt; and click &lt;strong&gt;Create pet&lt;/strong&gt;. The app installs the bundled &lt;code&gt;hatch-pet&lt;/code&gt; skill and opens a chat.&lt;/li&gt;
&lt;li&gt;Describe the pet, or give it a picture: a photo of your dog works.&lt;/li&gt;
&lt;li&gt;The skill generates every animation row, checks the frames, and saves the folder under &lt;code&gt;${CODEX_HOME:-$HOME/.codex}/pets/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Back in &lt;strong&gt;Settings → Pets&lt;/strong&gt;, click the refresh button and pick the new pet.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Look at the result frame by frame before you keep it. Generated sheets can have a fifth leg in a pose, a size jump between rows, or leftover background color between the legs. The skill can repair a single row when you ask it to.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happened to Claude Code's /buddy?
&lt;/h2&gt;

&lt;p&gt;Claude Code shipped &lt;code&gt;/buddy&lt;/code&gt; on April 1, 2026, in version 2.1.89: a small character next to the input that hatched from your account and reacted while you worked. On April 9, version 2.1.97 removed it. Anthropic said it was a small April Fools feature, and typing &lt;code&gt;/buddy&lt;/code&gt; now says "Unknown command: /buddy". Claude Code has no pet today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can each session get a different pet?
&lt;/h2&gt;

&lt;p&gt;In the Codex CLI, yes: &lt;code&gt;/pets &amp;lt;name&amp;gt;&lt;/code&gt; chooses a pet for the current CLI session, and that pet reports the state of that session. The ChatGPT desktop pet is a floating companion for the app; when several chats are active, its activity tray lets you open the one that needs you. Claude Code and Grok Build have no built-in pets of their own.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ponymux.com" rel="noopener noreferrer"&gt;PonyMux&lt;/a&gt; gives every Terminal a persistent pet in one shared window. Each Terminal running Claude Code, Codex, or Grok gets a pet when you create it and keeps it, and the pets line up above the window. So a pet tells you which session it is as well as what it is doing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Working:&lt;/strong&gt; the agent is running.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Waiting, with a wave every few seconds:&lt;/strong&gt; it needs an answer or an approval.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A hop:&lt;/strong&gt; a turn just finished.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standing:&lt;/strong&gt; the agent is idle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Failed:&lt;/strong&gt; it stopped on an error.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click a pet to jump to its Terminal. Shell-only Terminals and ended sessions don't get a pet on stage. Pets need the Claude Code, Codex, or Grok integration, which you connect once from the bottom of the sidebar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can I use the pet I hatched in PonyMux?
&lt;/h2&gt;

&lt;p&gt;Yes. PonyMux reads &lt;code&gt;~/.codex/pets/&lt;/code&gt;, so a pet you made with &lt;code&gt;hatch-pet&lt;/code&gt;, or downloaded, shows up next to the others. When ChatGPT is installed, its built-in pets are in the list too.&lt;/p&gt;

&lt;p&gt;You don't need any of that to get started. PonyMux ships with six ponies of its own, Mochi, Nyx, Opal, Pixel, Rex, and Mocha, so different Terminals get different pets without Codex or ChatGPT installed.&lt;/p&gt;

&lt;p&gt;If a pet in &lt;code&gt;~/.codex/pets/&lt;/code&gt; has the same id as one of the ponies, yours takes its place.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do I choose a pet for a Terminal in PonyMux?
&lt;/h2&gt;

&lt;p&gt;Open &lt;strong&gt;Settings → General → Pets&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Show a pet for every live session&lt;/strong&gt; turns pets on or off.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New Terminals get&lt;/strong&gt; chooses the pet for new Terminals: one pet, or &lt;strong&gt;Random&lt;/strong&gt; to spread them out.&lt;/li&gt;
&lt;li&gt;The row below says how many pets were found and where from. Click &lt;strong&gt;Rescan&lt;/strong&gt; after you add a pet to &lt;code&gt;~/.codex/pets/&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To change one Terminal, open its Inspector. In the &lt;strong&gt;Pet&lt;/strong&gt; section, pick another pet from the menu, or remove the pet from that Terminal with the trash button that appears when you hover the row.&lt;/p&gt;

&lt;p&gt;For themes, cursor effects, and the rest of PonyMux's personal touches, see &lt;a href="https://ponymux.com/docs/personalize" rel="noopener noreferrer"&gt;Personalize PonyMux&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://ponymux.com/guides/claude-code-codex-session-pets" rel="noopener noreferrer"&gt;ponymux.com&lt;/a&gt;, where the pet demos are interactive.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>ai</category>
      <category>productivity</category>
      <category>terminal</category>
    </item>
    <item>
      <title>Every link your agent gave you, and a rocket launcher for your terminal</title>
      <dc:creator>Little Pan</dc:creator>
      <pubDate>Mon, 12 Oct 2026 15:45:31 +0000</pubDate>
      <link>https://dev.to/heylittlepan/every-link-your-agent-gave-you-and-a-rocket-launcher-for-your-terminal-44kp</link>
      <guid>https://dev.to/heylittlepan/every-link-your-agent-gave-you-and-a-rocket-launcher-for-your-terminal-44kp</guid>
      <description>&lt;p&gt;Two hours into a Claude Code session, I want the PR it opened an hour ago. To check whether CI passed, or to merge it. The link is somewhere up there, between a few thousand lines of test output and three plans.&lt;/p&gt;

&lt;p&gt;So I scroll. Every time.&lt;/p&gt;

&lt;p&gt;PonyMux 0.13 keeps those links for you. The Inspector now lists the pull requests and links the agent gave you in the running conversation, newest first, with their real titles. A new Outputs section does the same for what the agent made: Artifacts, pages, Markdown plans, reports. And for the moments when the agent gets it badly wrong, there's Terminal Therapy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where did that PR link go?
&lt;/h2&gt;

&lt;p&gt;Open the Inspector next to any Terminal running Claude Code, Codex, or Grok. Under &lt;strong&gt;Pull Requests&lt;/strong&gt; you'll see this project's PRs and any PR the agent opened, even inside a retry loop or a heredoc. Everything else the agent linked to goes under &lt;strong&gt;Links&lt;/strong&gt;: docs, issues, dashboards, each with the site's icon and the page's title.&lt;/p&gt;

&lt;p&gt;Titles come from the pages themselves. With GitHub CLI installed, PRs in private repositories get their titles too, so you're not guessing between &lt;code&gt;#412&lt;/code&gt; and &lt;code&gt;#418&lt;/code&gt;. Issues the agent files with &lt;code&gt;gh issue create&lt;/code&gt; show up even when its reply doesn't mention them.&lt;/p&gt;

&lt;p&gt;The newest link is always on top. Click it and you're there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The link you need is usually the one from an hour ago.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What happened to the files the agent made?
&lt;/h2&gt;

&lt;p&gt;Agents make a lot of things now. A Claude Artifact with a review. A page Codex wrote. A &lt;code&gt;PLAN.md&lt;/code&gt;. An HTML report from a test run. Claude Code prints the Artifact link at the bottom of its reply, which works for the first one and stops working by the fifth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Outputs&lt;/strong&gt; collects them in one list. Each item shows the title it declares, so five &lt;code&gt;index.html&lt;/code&gt; reports don't look the same. When Codex edits a page, it moves back to the top. Markdown opens in the Files panel next to the Terminal, HTML in your browser, everything else in Quick Look.&lt;/p&gt;

&lt;p&gt;None of this is stored. The lists live in memory for the running conversation, the same way the conversation itself does.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Terminal Therapy?
&lt;/h2&gt;

&lt;p&gt;Everyone who works with an agent knows the moment. Fourth try at the same fix, it breaks something else, and the agent is absolutely right again.&lt;/p&gt;

&lt;p&gt;Another angry prompt won't fix the build. The terminal gets a rocket launcher instead.&lt;/p&gt;

&lt;p&gt;At the bottom of the Inspector there's a weapon rack: a pistol, a hammer, a rocket launcher, and two spells, Ignite and Freeze. Pick one and click the Terminal. Blow up the test output. Smash it. Set it on fire.&lt;/p&gt;

&lt;p&gt;Then pick Bless and wish the next run luck. The light clears the damage, and you get back to work. Keep firing without cleaning up and you'll find out what happens at 128.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Serious work should still feel alive. Even the bad afternoons.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What else changed?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;When Claude Code moves a conversation to the background with &lt;code&gt;/bg&lt;/code&gt;, the Sessions panel says so and can bring it back, even after you restart PonyMux.&lt;/li&gt;
&lt;li&gt;Built-in ChatGPT pets show up again with the latest ChatGPT app.&lt;/li&gt;
&lt;li&gt;Selecting text in Codex copies it again.&lt;/li&gt;
&lt;li&gt;Crashes when resizing the window or switching Terminals are fixed.&lt;/li&gt;
&lt;li&gt;Animations follow your Reduce Motion setting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything Terminal Therapy does is in &lt;a href="https://ponymux.com/docs/terminal-therapy" rel="noopener noreferrer"&gt;Terminal Therapy&lt;/a&gt;, and the Inspector's new sections are in &lt;a href="https://ponymux.com/docs/workspace-navigation#inspector" rel="noopener noreferrer"&gt;Workspace and Navigation&lt;/a&gt;. For the full list, see the &lt;a href="https://ponymux.com/changelog" rel="noopener noreferrer"&gt;changelog&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://ponymux.com/blog/links-outputs-and-terminal-therapy" rel="noopener noreferrer"&gt;ponymux.com&lt;/a&gt;, where the demos are interactive.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>terminal</category>
      <category>codex</category>
    </item>
    <item>
      <title>How to preview Markdown files from Claude Code and Codex</title>
      <dc:creator>Little Pan</dc:creator>
      <pubDate>Fri, 09 Oct 2026 16:18:07 +0000</pubDate>
      <link>https://dev.to/heylittlepan/how-to-preview-markdown-files-from-claude-code-and-codex-2b2h</link>
      <guid>https://dev.to/heylittlepan/how-to-preview-markdown-files-from-claude-code-and-codex-2b2h</guid>
      <description>&lt;p&gt;Claude Code just wrote the plan to &lt;code&gt;PLAN.md&lt;/code&gt;, or Codex left a &lt;code&gt;HANDOFF.md&lt;/code&gt;. You &lt;code&gt;cat&lt;/code&gt; it and scroll through pound signs, asterisks, and pipes. The agents render Markdown in their own replies, but a file they write you read raw. A few ways to read it properly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;In the terminal:&lt;/strong&gt; &lt;code&gt;glow PLAN.md&lt;/code&gt; renders headings, lists, tables, and code right there. Install it with &lt;code&gt;brew install glow&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;In an app:&lt;/strong&gt; &lt;code&gt;open PLAN.md&lt;/code&gt; opens it in whatever app handles &lt;code&gt;.md&lt;/code&gt; files on your Mac.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Let the agent open it:&lt;/strong&gt; add a line to &lt;code&gt;AGENTS.md&lt;/code&gt; or &lt;code&gt;CLAUDE.md&lt;/code&gt; telling it to run &lt;code&gt;open&lt;/code&gt; on every Markdown file it writes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Click it:&lt;/strong&gt; Claude Code prints file names as links. Cmd-click one to open the file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The catch:&lt;/strong&gt; each of these sends you somewhere else to read, and back again to reply.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How do I read a Markdown file in the terminal?
&lt;/h2&gt;

&lt;p&gt;Use a Markdown renderer. &lt;a href="https://github.com/charmbracelet/glow" rel="noopener noreferrer"&gt;Glow&lt;/a&gt; is a common one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew install glow
glow PLAN.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It prints the file with styled headings, bullet lists, tables, and highlighted code blocks, then returns to the prompt. For a long file, &lt;code&gt;glow -p PLAN.md&lt;/code&gt; opens it in a pager you can scroll with the arrow keys and leave with &lt;code&gt;q&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Glow reads from a pipe too, so &lt;code&gt;cat NOTES.md | glow -&lt;/code&gt; works. It's the quickest way to read a plan without leaving the session's terminal, but it's a snapshot: when the agent edits the file again, run it again.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do I open a Markdown file in an app?
&lt;/h2&gt;

&lt;p&gt;macOS has a command for that:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;open PLAN.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It opens the file in the app your Mac uses for &lt;code&gt;.md&lt;/code&gt; files, such as your editor or a Markdown app. To change which app that is, select any &lt;code&gt;.md&lt;/code&gt; file in Finder, press Cmd-I, pick an app under &lt;strong&gt;Open with&lt;/strong&gt;, and click &lt;strong&gt;Change All&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This works from anywhere, including from the agent itself, since it's an ordinary shell command.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can the agent open the file for me?
&lt;/h2&gt;

&lt;p&gt;Yes. Agents read your project instructions at the start of every session, so one line is enough. Add it to &lt;code&gt;AGENTS.md&lt;/code&gt;, which Codex and Grok Build read, or to &lt;code&gt;CLAUDE.md&lt;/code&gt; for Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="k"&gt;- &lt;/span&gt;After you write or update a Markdown plan or note, run &lt;span class="sb"&gt;`open &amp;lt;file&amp;gt;`&lt;/span&gt; so I can read it.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From then on, when the agent writes &lt;code&gt;PLAN.md&lt;/code&gt;, it should finish by running &lt;code&gt;open PLAN.md&lt;/code&gt;, and the file comes up in your Markdown app. If both agents work in the project, put the line in &lt;code&gt;AGENTS.md&lt;/code&gt; and have &lt;code&gt;CLAUDE.md&lt;/code&gt; import it with &lt;code&gt;@AGENTS.md&lt;/code&gt;; see &lt;a href="https://ponymux.com/guides/hand-off-claude-code-to-codex#how-do-i-make-every-agent-follow-the-same-project-rules" rel="noopener noreferrer"&gt;How to hand off a task from Claude Code to Codex&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can I click the file name in Claude Code's output?
&lt;/h2&gt;

&lt;p&gt;Yes. When Claude Code writes or edits a file, it prints the file name as a terminal link. In terminals that support links, such as Ghostty and iTerm2, hold Cmd and click the name, and the file opens in its default app.&lt;/p&gt;

&lt;p&gt;That's handy when the agent mentions a file in passing. You don't have to copy the path or switch to Finder.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can I read the file next to the agent's terminal?
&lt;/h2&gt;

&lt;p&gt;Yes. &lt;a href="https://ponymux.com" rel="noopener noreferrer"&gt;PonyMux&lt;/a&gt; has a &lt;strong&gt;Files&lt;/strong&gt; panel that renders Markdown beside the Terminal: headings, code blocks, tables, task lists, and images. Press Cmd-Option-F to show it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3q0vqa6bs83g9pkr64bd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3q0vqa6bs83g9pkr64bd.png" alt="PonyMux's Files panel rendering a Markdown file next to the Terminal, with back/forward navigation and a pin button." width="800" height="782"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;PonyMux's Files panel rendering a Markdown file next to the Terminal, with back/forward navigation and a pin button.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A file gets there three ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cmd-click a link&lt;/strong&gt; to a &lt;code&gt;.md&lt;/code&gt; file in the terminal output, such as a file name Claude Code prints. It opens in the panel instead of another app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run &lt;code&gt;pony open PLAN.md&lt;/code&gt;&lt;/strong&gt; in a PonyMux Terminal. The agent can run it too: put &lt;code&gt;pony open &amp;lt;file&amp;gt;&lt;/code&gt; in the line above instead of &lt;code&gt;open &amp;lt;file&amp;gt;&lt;/code&gt;, and a brief note shows which agent opened the file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Click a link inside a rendered file.&lt;/strong&gt; Relative links to other &lt;code&gt;.md&lt;/code&gt; files open in the panel, like a browser, with back and forward.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can pin up to 10 files. The panel is for reading; to edit, open the file in your editor from its context menu. For more on the panel and the &lt;code&gt;pony&lt;/code&gt; command, see &lt;a href="https://ponymux.com/docs/workspace-navigation#files" rel="noopener noreferrer"&gt;Workspace and Navigation&lt;/a&gt; and &lt;a href="https://ponymux.com/docs/pony-cli" rel="noopener noreferrer"&gt;pony CLI&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://ponymux.com/guides/preview-markdown-files-claude-code-codex" rel="noopener noreferrer"&gt;ponymux.com&lt;/a&gt;, where the demos are interactive.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>codex</category>
      <category>markdown</category>
    </item>
    <item>
      <title>Eight cursor effects you can try first, and a pony for every Terminal</title>
      <dc:creator>Little Pan</dc:creator>
      <pubDate>Thu, 08 Oct 2026 16:09:16 +0000</pubDate>
      <link>https://dev.to/heylittlepan/eight-cursor-effects-you-can-try-first-and-a-pony-for-every-terminal-25f0</link>
      <guid>https://dev.to/heylittlepan/eight-cursor-effects-you-can-try-first-and-a-pony-for-every-terminal-25f0</guid>
      <description>&lt;p&gt;Most of a day at the terminal is the same keys again and again: &lt;code&gt;j&lt;/code&gt;, &lt;code&gt;k&lt;/code&gt;, &lt;code&gt;w&lt;/code&gt;, &lt;code&gt;$&lt;/code&gt;, &lt;code&gt;G&lt;/code&gt;. The work matters. The keystrokes don't feel like much. I wanted them to feel a little like casting a spell, where every jump leaves a spark behind.&lt;/p&gt;

&lt;p&gt;PonyMux 0.12 adds four new cursor effects, eight in all, and Settings now plays the one you select in a live terminal before you pick it. Six ponies also ship with the app now, so each Claude Code, Codex, or Grok session gets its own pet without installing anything else.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffbon2mb11cqofzt9lqtj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffbon2mb11cqofzt9lqtj.png" alt="Cursor Lightning in PonyMux: a bolt from where the cursor was to where it lands." width="800" height="653"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Cursor Lightning in PonyMux: a bolt from where the cursor was to where it lands.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the new cursor effects?
&lt;/h2&gt;

&lt;p&gt;Comet, Sparks, Afterimage, and Lightning join Warp, Tail, Sweep, and Ripple. I wrote the four new ones to look different from each other, not as four takes on the same smear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Comet&lt;/strong&gt; draws a glowing streak that tapers toward where the cursor came from.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sparks&lt;/strong&gt; throws sparks along the jump, and they fall as they fade.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Afterimage&lt;/strong&gt; leaves a few fading copies of the cursor along the way.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lightning&lt;/strong&gt; is a quick bolt from the old spot to the new one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of them skip short moves, so typing doesn't set them off. Ripple, Comet, Sparks, and Lightning are now drawn in your theme's accent color, so they fit whatever theme you use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every jump can leave a little magic behind.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How does the live preview work?
&lt;/h2&gt;

&lt;p&gt;Open &lt;strong&gt;Settings → Terminal → Screen Effect&lt;/strong&gt; and click an effect. Under the list is a real terminal, not a recording: same engine as your Terminals, with your font, cursor, and theme. It types a few lines of code and jumps around them the way vim does, &lt;code&gt;$&lt;/code&gt;, &lt;code&gt;%&lt;/code&gt;, &lt;code&gt;G&lt;/code&gt;, &lt;code&gt;w&lt;/code&gt;, so you see the effect on the moves you actually make.&lt;/p&gt;

&lt;p&gt;Ripple only reacts when the cursor changes shape, so for Ripple the preview switches between insert and normal mode instead. That's also why Ripple got bigger and longer in this release: it used to be a faint gray ring that was easy to miss on dark themes. If Reduce Motion is on, the preview waits for you to press play.&lt;/p&gt;

&lt;p&gt;The setting is the default for new Terminals. Each Terminal can still have its own effect from its action menu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why six ponies?
&lt;/h2&gt;

&lt;p&gt;Until now PonyMux shipped one pet, Mochi. Without ChatGPT or your own pets in &lt;code&gt;~/.codex/pets/&lt;/code&gt;, every Terminal got Mochi, and a row of identical ponies over the window doesn't tell you which session is which.&lt;/p&gt;

&lt;p&gt;Now there are six: Mochi, Nyx, Opal, Pixel, Rex, and Mocha. New Terminals pick one at random, or the one you choose in &lt;strong&gt;Settings → General → Pets&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flscc2hr0f6yh7qojlaa1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flscc2hr0f6yh7qojlaa1.png" alt="Settings → General → Pets in PonyMux 0.12: pick one of six ponies for new Terminals, or Random." width="799" height="565"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Settings → General → Pets in PonyMux 0.12: pick one of six ponies for new Terminals, or Random.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What else is smoother?
&lt;/h2&gt;

&lt;p&gt;A lot of small waits moved off the main thread, so the window doesn't pause on them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Waking a sleeping Terminal, resuming, forking, and handing off used to read the conversation file while you waited. On long Codex sessions that took up to 0.3 s.&lt;/li&gt;
&lt;li&gt;Startup does its setup work in the background, and a lock held by another PonyMux can no longer hang the launch.&lt;/li&gt;
&lt;li&gt;Markdown files with large images render in the background. Changing the column width or the theme re-renders up to 20× faster.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reopening a Markdown file now picks up images that changed on disk, and VoiceOver reads the name of every switch in Settings.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Repetitive work doesn't have to feel repetitive. A bit of play in every move goes a long way.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For every effect and pet setting, see &lt;a href="https://ponymux.com/docs/personalize" rel="noopener noreferrer"&gt;Personalize PonyMux&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://ponymux.com/blog/cursor-effects-and-six-ponies" rel="noopener noreferrer"&gt;ponymux.com&lt;/a&gt;, where the demos are interactive.&lt;/em&gt; &lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>codex</category>
      <category>terminal</category>
    </item>
  </channel>
</rss>
