44 comments

  • dchu17 10 minutes ago

    Gave this a run and it was pretty intuitive. Good work!

  • blorenz 4 hours ago

    I like what you did here and with your direction with the stack. We have some common overlap. Last week I started clauding up something to manage my Claude sessions. It is built on Tauri 2 using xterm.js. It has is project-based and each project has resumable sessions. I borrowed inspiration from Happy coder and clauded an Expo app so I can claude remotely on-the-go. It has been a force multiplier in my clauding with developing new features and addressing bugs and defects. It was a pretty amazing feeling when I started using it to further its own development. There's a slew of other features as I adapt it to my development style.

    • lawrencechen 3 hours ago

      Mobile interface is definitely nice. Planning on adding iOS app since libghostty works there too! And I imagine that having your main terminal app be synced directly to your phone must be nice, though it doesn't solve the problem of closing my laptop.

      Would love to hear what other features have been particularly beneficial to your dev style too. Some directions I'm interested in is having everything be programmable; so my coding agent can set up workspaces for me, click through browsers to test things, etc. And having a main Claude Code manage subagents that have their own easily visible terminal windows.

      • blorenz 3 hours ago

        Wow! That would be incredible! I don't have the agents control the browsers like you are doing. I'm watching to see what you do though because that is incredible. The performance hit is real though -- I may look at libghostty.

        I went the similar path of going vertical tabs after having worked that way in iTerm2 for months. Here's what I currently have:

        Project-based organization -- Group sessions by working directory with a visual icon strip sidebar.

        Multiple session types -- Claude Code sessions, standalone terminal shells, and embedded browser tabs.

        Session persistence -- Terminal output is logged and replayed on relaunch so you never lose context.

        Session resume -- Claude Code sessions detect their session ID automatically and resume where you left off.

        Planning mode -- Draft and refine plans in a built-in text editor, then send them to Claude with one click.

        Planning templates -- Start plans from structured templates for bug reports, feature requests, code reviews, refactors, and more.

        Auto-titling -- Generic session names are replaced with descriptive titles generated by Claude after the first exchange.

        Theming -- Light and dark themes with full CSS variable control.

        Native menus and keyboard shortcuts -- macOS-native menu bar with comprehensive shortcut coverage.

        Resizable layout -- Adjustable sessions sidebar width with state persistence across restarts.

        Dock badge -- macOS dock icon shows the number of actively working Claude sessions.

        Pin and archive -- Pin important sessions to the top or archive completed ones to keep the list clean.

        Session card view -- See all sessions in a sortable grid with activity stats, token counts, and quick actions.

        File tracker -- See which files Claude creates, modifies, and deletes in a live sidebar panel.

        Macros -- One-click buttons for frequently used commands like /clear or commit this work.

        Remote mode -- Monitor and control sessions from your phone via an encrypted WebSocket relay.

        It has become my development hub where I can iterate very quickly.

        • lawrencechen 2 hours ago

          Very cool stuff! Would be curious if the stuff you've built is open sourced? Having a bunch of Claude Codes will definitely eat a ton of CPU/RAM. libghostty should help to a certain extent, but at some scale, you'll probably a custom optimized agent loop or remote VMs.

          • blorenz an hour ago

            It isn't open sourced, just a private repo on GitHub. I built it as a pet project just throwing things at the wall seeing how far I could go in a short time as a means to an end. Currently, I cannot commit time to maintaining an open source project and it would be negligent of me to put something out there that would stagnate. As quickly as my app shaped up, I bet I could claude something from scratch and implement the features that have worked out for me. There are many rough edges that I just work around that you have a better grasp on, like notifications.

      • trevyn 2 hours ago

        I really like having ~8-12 active Ghostty windows tiled so I can keep an eye on everyone's progress, and then I'll expand one or two for deeper work. Would love to see some sort of auto-expand/contract so I can keep an eye on everything but then when I foreground a pane it grows, or something like that.

        • lawrencechen 2 hours ago

          Ah, like a way to maximize the current pane you're focused on?

          • trevyn 2 hours ago

            Yep! Also a simple text editor pane would be sweet too.

            • lawrencechen an hour ago

              Haha, it's like we're moving towards an IDE but starting from the opposite direction.

  • behrlich 2 hours ago

    I had sort of the same idea. https://wingthing.ai/ This idea started at “sandbox” and worked its way toward “remote access”. But same thoughts about muxing sessions. Love being able to leave and reattach while an agent is working. I’ll give yours a shot!

    • lawrencechen an hour ago

      Would love your feedback and suggestions!

  • alchemism 3 hours ago

    With this one, small tweak it is perfect:

    osascript << 'EOF' use framework "Foundation" use framework "AppKit"

    set ghosttyIconPath to "/Applications/Ghostty.app/Contents/Resources/Ghostty.icns" set cmuxAppPath to "/Applications/cmux.app"

    -- Read the icon file set iconImage to current application's NSImage's alloc()'s initWithContentsOfFile:ghosttyIconPath

    -- Set it as the custom icon for cmux.app current application's NSWorkspace's sharedWorkspace()'s setIcon:iconImage forFile:cmuxAppPath options:0 EOF

    ((The ghost pairs well with Kiro, what can I say?))

  • warthog 33 minutes ago

    vertical tabs are a great idea for ghostty!

  • pupppet 4 hours ago

    Just took it for a spin, thought it was pretty nice. Some quirks with the tab dragging, you never really know what it's going to do on mouseup, a drop-target indicator would help.

    Would love to be able to color the sidebar tab.

    Nice work!

    • lawrencechen 3 hours ago

      Thanks! Will add drop target and sidebar coloring.

  • rcarmo 2 hours ago

    Nice. I should add notifications to https://github.com/rcarmo/webterm - I already have sparklines as a CPU usage indicator and live thumbnails, but a visual highlight should be easy to add.

    • lawrencechen 2 hours ago

      Cool project! How are you liking ghostty-web so far?

  • twostorytower an hour ago

    Looks like this could be really cool, but it's a buggy mess. Can't switch top tabs, can't close tabs. Once I lose focus in a tab, I can't ever type again in that terminal tab. Can't switch between the different sidebar tabs, either.

  • AM1010101 3 hours ago

    Awesome work, keen to try it out tomorrow. Can I make the notifications work with Gemini CLI and Kiro CLI too?

    • lawrencechen 3 hours ago

      Thanks! Yup, notifications can be triggered via cli:

        cmux notify --title "Claude Code" --subtitle "Waiting" --body "Agent needs input"
      
      And afaik, both Gemini/Kiro should have stop hooks. If they send OSC notifications, then notifications will "just work" as well.

      Docs: https://www.cmux.dev/docs/notifications

  • arjie 3 hours ago

    This is pretty slick, man. The only thing is that the Ctrl-Cmd-] is too hard to press but I'll just use the number thing.

    • lawrencechen 3 hours ago

      Thank! I personally have caps lock mapped ctrl... but open to suggestions! Since it's hard to handle both horizontal and vertical tabs.

      • arjie 3 hours ago

        Ah, I regret training myself into Caps Lock to Escape. Well, a personal problem then. It doesn't seem to have copy-paste support that I have in my Ghostty but I bet that's a config somewhere.

  • cranberryturkey 3 hours ago

    This solves a real pain point. I run multiple AI coding agents in parallel and the biggest UX problem isn't the agents — it's knowing which one needs attention without context-switching into every pane.

    The notification-per-pane with blue ring indicator is exactly right. The failure mode of most orchestrators is they abstract away the terminal entirely and then you lose the escape hatch when the agent does something unexpected. Keeping it terminal-native with Ghostty rendering is the correct tradeoff.

    Question: how does the in-app browser handle state across agent sessions? If two agents are working on the same local dev server, do they share the browser context or get isolated profiles? That's been one of the harder problems in multi-agent setups — shared browser state leads to agents stepping on each other's cookies/localStorage.

    • lawrencechen 3 hours ago

      > If two agents are working on the same local dev server, do they share the browser context or get isolated profiles

      Currently they share browser context. Adding isolated profiles is a good idea. Do you often use multiple agents in a single project and have them both work on different pages? I personally use multiple checkouts, and the problem for me is that agents working in the same project want to spin up the same dev server. And the dev servers will conflict unless I make different instances of the same project listen in their own port ranges (perhaps via a PORT env var).

      We want to solve the latter by bringing better SSH support where the WebView will proxy directly to a remote machine or Docker container, so different workspaces in the vertical tabs can talk to their corresponding dev servers. But I want to hear more about your use case.

      • iamnafets 2 hours ago

        Can’t wait for better SSH support. We have a warm container host that spawns a fresh container so we get nice sandboxing and isolation, but the UX has left us with basically the same challenges you solved here for one box.

        • lawrencechen an hour ago

          Excited that someone besides me wants this! I want to hear more about your warm container host, is that shared between multiple people, or just yourself?

          Also want some feedback on how we should implement it. Could make it a CLI command that opens a new vertical tab/workspace:

            cmux ssh <host>
          
          Or maybe a configurable dropdown next to the plus button.
  • goro-7 3 hours ago

    Good idea, but I don't want to move to another terminal now, will stick with Ghossty

    • lawrencechen 3 hours ago

      Fair enough! I like Ghostty a lot too, and the only reason I built this was because I wanted vertical tabs and nicer notifications.

  • reconnecting 3 hours ago

    18 (!) releases in two days. This is some really fast coding.

    • lawrencechen 3 hours ago

      Lots of stuff to iron out pre-launch!

  • rubyn00bie 4 hours ago

    This looks cool. I honestly haven’t ever thought about using vertical tabs in a terminal window but that seems nice.

    One question though, have you thought about trying to upstream any of this into Ghostty instead of making an entirely different app?

    • lawrencechen 4 hours ago

      Upstreaming into Ghostty would be very difficult as it's not actually a fork, I just used libghostty under the hood.

      • rubyn00bie 4 hours ago

        Ah! Thanks for explaining that. I totally keep forgetting, to my own detriment, libghostty exists. It’s mighty cool to see it being used more and more to build cool new terminals (like yours and the mobile terminal that showed up here the other day).

        • neom 2 hours ago

          I missed the mobile terminal and I've been hunting for a good one, did a search for past week but found nothing, if you had a link handy that would be great - thank you.

    • simlevesque 4 hours ago

      VSCode has vertical tabs for it's terminals like this, but on the right side.