Suwu (https://suwu.liyu1981.xyz) is my personal project, starting from answering "I want a similar experience for my web remote shell as omarchy".
Why a web clone of the omarchy experience?
First, it is a simple xterm.js deployment which can connect to my dev VM on another box, as my main computer is actually my game machine. I was happy with the xterm.js experience, using my simple Go backend offering a PTY session, for running herdr with Pi coding agents. But constantly I had to switch to either a real terminal or even VS Code Remote, for viewing source code generated by the agent, or doing port forwarding, or simply just wandering around within my git tree. Most importantly, the apps I develop in my hobby time are mostly web apps, so I need to switch to Chrome. I miss the feel of being able to do everything in Chrome, and I kind of could do it (with my simple xterm.js), just frequently (sometimes) needing to jump out.
Then I was hit by omarchy videos: from DHH himself or others, talking about how good it is. But it requires reinstalling my dev VM with another OS, and it still requires something like a VNC client to experience. I am still missing my web client.
Finally I decided, how about trying to replicate the experience in my web xterm.js? So Suwu started. Of course, nowadays I will not write each line of code by myself, and I will take advantage of Pi code agent and my Opencode Go subscription.
Choose the model
There are many models I can use with Opencode Go, and my favorite was DeepSeek, as it is reasonably smart, fast, and with generous allowances. Expensive models such as GPT, Kimi, or GLM are smarter but will consume my quota quickly. I am going to develop a tool I want to use every day, which is going to be very opinionated, so expensive models sometimes block me (as they are also trained to be opinionated). I combine my past coding experience (luckily I have many years) with the cheap (but capable) models, and I believe in that.
DeepSeek V4 raised its prices, so later in the project I switched to Xiaomi's MiMo 2.5.
Start the project
I did not start the project from the foundation of my last xterm.js app, but from the demo of ghostty-web. I instructed the Pi agent to analyze the demo, and quickly had a demo running on my machine.
Then I started to experiment creating tiles in my web app, and each tile could contain a ghostty-web terminal. It seemed good enough too, until I hit the block with mouse click reporting and clipboard handling. The ghostty-web WASM is compiled from the ghostty project, but through patches, which are not well supported by the upstream project. Mouse click reporting and clipboard handling are hard to do well, as I found out by researching with the agent.
So that was the first decision point: should I continue with ghostty-web? When I was without an agent, this would probably be a hard blocking problem, and might cause me to abandon the project. But with an agent, things can be resolved much easier: I created another branch, instructing the agent to redo all the previous work with xterm.js and libghostty-vt, based on my research with Claude/ChatGPT/Gemini. Libghostty-vt provides me with PTY session retention in the backend, and xterm.js, as the industry de facto solution, should be fast enough (and now with WebGPU if available). DeepSeek and MiMo executed this really well with my research document given to them.
Now the project had a solid foundation.
Explore more ideas and use Suwu to develop Suwu itself
After hardening the foundation, I could then experiment with more ideas, especially the web-based tiling window manager. DeepSeek and MiMo, or maybe all coding-optimized LLMs out there, are really good at the combination of React + TypeScript + Tailwind. With the skills I accumulated from my other side projects, DeepSeek and MiMo did not let me down most of the time on their first implementation. It freed me from that tedious work and let me focus on what I needed.
Then I started using Suwu to develop itself. I no longer needed to open a browser, terminal, or other apps together—everything was in one place. Suwu is compiled into a single binary thanks to Go, so I can easily maintain copies of Suwu on my machine. The development speed kept getting faster and faster.
Then what about bugs and how to debug?
Cheap models make mistakes, though not as much as I do :) Sometimes, relying only on themselves, fixing a bug or debugging will easily get them stuck in nowhere. Tokens are then wasted and there is no progress. React infinite loops, weird UI behaviors, and data inconsistencies are all hard for them to fix.
At that time, I, as the human, show my value. When there are React infinite loops, I can peek into the code or running stack from Chrome, and my intuition tells me where the problem might be. Then I instruct the agent to isolate those areas, adding guards or printing logs. With much smaller focus, DeepSeek or MiMo can usually solve it in one or two rounds. And most of the time, I am surprised by their fixes—as while I am good at finding what's wrong, I am lazy about typing so many fixes :)
Weird UI behaviors are another category of hard problems. The agent will try to fix it patch by patch, and eventually make everything messy. My role then is to analyze it at a much higher altitude, and find that most of the time redesigning or restructuring the UI is the best way to fix it. The agent will finish faster, and I get an even better result after a second thought.
Finally, data inconsistencies are hard for the agent too, as inconsistencies may not make sense to them (all they see is data, or tokens). Humans documenting what the correct result is and what it is not really helps in this part. Write them into tests, write them into AGENTS.md, whatever—agents/LLMs are good with examples of good and bad data, but not the fuzzy rules of data.
A summary of how much was spent
I have been working on this project for a while, and Suwu has become the most important tool I use day by day. I open-sourced it, put it here: https://github.com/liyu1981/suwu, and continue to improve it. It has a good tiling window manager in the web, and it has a few apps built in for day-to-day development. Herdr runs nicely in its terminal, with full mouse click and keyboard support, and I believe Suwu also has the best copy/paste support for a remote terminal (try the select/copy mode :)). It will continue to evolve, with the help of Pi coding agent and DeepSeek/MiMo from Opencode Go.
Opencode does give me a breakdown of how much is spent, even for a subscription service. So I count the spending from the Opencode dashboard: the peak spending per day was around $3, and most of the time it was around $0.5. The first commit to my GitHub was August 27th, so the overall spending was <$10 (considering 8 days, as I may have done some work before the first commit). That's very cheap!
I hope you enjoy the sharing of my experience.
And if you are looking for a good remote shell, watch the Suwu demo and try it out at https://suwu.liyu1981.xyz.