<?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: Soohwan Kim</title>
    <description>The latest articles on DEV Community by Soohwan Kim (@sooftware).</description>
    <link>https://dev.to/sooftware</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%2F4229787%2F02a1221a-d7d0-4d6a-ad22-5c2b929eba8f.jpg</url>
      <title>DEV Community: Soohwan Kim</title>
      <link>https://dev.to/sooftware</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sooftware"/>
    <language>en</language>
    <item>
      <title>I built a small macOS terminal that lets you take back a prompt you sent to Claude Code</title>
      <dc:creator>Soohwan Kim</dc:creator>
      <pubDate>Fri, 06 Nov 2026 06:32:20 +0000</pubDate>
      <link>https://dev.to/sooftware/i-built-a-small-macos-terminal-that-lets-you-take-back-a-prompt-you-sent-to-claude-code-12pi</link>
      <guid>https://dev.to/sooftware/i-built-a-small-macos-terminal-that-lets-you-take-back-a-prompt-you-sent-to-claude-code-12pi</guid>
      <description>&lt;p&gt;lmux is a small macOS terminal I use to run a bunch of Claude Code and Codex sessions at once. The feature I reach for most is taking back a prompt I sent to the wrong session.&lt;/p&gt;

&lt;p&gt;The layout is borrowed from cmux: workspaces in a sidebar, splits, tabs in each pane. A few people on Reddit called it "another cmux clone", which is fair at first glance, but it isn't a fork and has no cmux code. Here's what's different.&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%2Fede6x1l0898w21vod7bm.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%2Fede6x1l0898w21vod7bm.png" alt="lmux with several Claude Code and Codex sessions" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Taking back a prompt
&lt;/h2&gt;

&lt;p&gt;When you run several Claude Code sessions side by side, sooner or later you type a prompt into the wrong one.&lt;/p&gt;

&lt;p&gt;In lmux you hover over the prompt you sent and click ×. Claude Code rewinds to just before that prompt, and the session keeps running. No restart. Files it already changed stay changed, so check your diff. If you click ✎ instead, it rewinds the same way and puts the prompt back in the input so you can edit it and send it again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Staying light
&lt;/h2&gt;

&lt;p&gt;I built lmux for myself because cmux was more app than I needed. lmux is a native Swift/AppKit app on libghostty, and it's 25 MB. With 20 workspaces open it idles near 0% CPU on my M4 Pro. cmux 0.65.2 sat around 8% in the same setup. The method is in &lt;code&gt;scripts/BENCH.md&lt;/code&gt; if you want to check it on your machine.&lt;/p&gt;

&lt;p&gt;It makes no network calls.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rest
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A status ring and badge on each workspace show whether an agent is running, needs you, is done, or failed. This comes from Claude Code's hooks and from Codex. ⇧⌘J jumps to the one that's waiting.&lt;/li&gt;
&lt;li&gt;Any other program can report status too, by printing an OSC 7501 escape sequence. See &lt;code&gt;docs/agents.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Sessions come back after you quit, update, or reboot.&lt;/li&gt;
&lt;li&gt;It reads your Ghostty config.&lt;/li&gt;
&lt;li&gt;It never wraps &lt;code&gt;claude&lt;/code&gt; or &lt;code&gt;codex&lt;/code&gt;. To get status it adds a few hooks to &lt;code&gt;settings.json&lt;/code&gt;, and it shows you the diff before it writes anything.&lt;/li&gt;
&lt;li&gt;If you're coming from cmux, there's a one-click import.&lt;/li&gt;
&lt;li&gt;Korean input works properly while composing. There are some Chinese and Japanese IME fixes too.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I left out on purpose
&lt;/h2&gt;

&lt;p&gt;No built-in browser and no SSH workspaces. Both are useful, but they're the kind of thing that made cmux feel heavy to me. I'd rather keep lmux a terminal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;p&gt;It's macOS 14+ on Apple silicon only. Taking back a prompt only works with Claude Code for now.&lt;/p&gt;

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

&lt;p&gt;It's free and MIT licensed. Grab the dmg from GitHub Releases, or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; sooftware/tap/lmux
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Code: &lt;a href="https://github.com/sooftware/lmux" rel="noopener noreferrer"&gt;https://github.com/sooftware/lmux&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Site: &lt;a href="https://lmux.dev" rel="noopener noreferrer"&gt;https://lmux.dev&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm Soohwan, an ML engineer in Seoul. If you run a bunch of agent sessions at once, I'd really like to hear what breaks, what's missing, and whether rewinding a prompt is as useful for you as it's been for me. Issues and comments both welcome.&lt;/p&gt;

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