Replies: 7 comments
|
Not out of scope — but the three situations in your post have three different Have you tried remote workspace attach?Genuinely asking, because the post doesn't mention it and it's the closest thing That's your "desktop at the office" case today: the agents grind there, the The rough edge you'd hit within a minute: mirrored panes keep the remote's If you have used it and it still didn't answer the need, that is the most useful The VPS case is the real gap — and it isn't the rendererThe daemon is only ever spawned by the Electron main process. There is no The premise worth invertingYou called rendering the hard part. For a terminal client it is the part that No second renderer, no grid model, and auth, Tailscale fronting and multi-viewer What's actually hard is size, not pixels#769 implemented exactly this arbitration between desk and phone and was parked But remote attach already shows the escape hatch — single geometry owner, viewer One thing not to be misdirected by#814 built remote execution over SSH — declare So: not "the GUI is the product, go away." It's "remote attach answers 2 and 3 |
|
Thanks for the detailed breakdown — that clarified a lot. To close the loop: We haven't actually tried "Attach remote workspace" yet for the team-collaboration case — will do, and report back if it doesn't fully cover it. From your description it sounds like it does. The VPS/laptop-offload case is the one we actually care about, and we agree with your framing: the daemon-lifecycle gap ( Two things we found while poking around this, in case they're useful before anyone commits to a direction:
If you're fine with the direction — a |
|
Green light — go ahead. You asked whether I'd rather shape the CLI surface first, so here is the direction I'm currently thinking. Treat it as a reference, not a spec: you've been right about the code so far, and where the code disagrees with any of this, say so in the PR and we'll sort it out there. The v1 shape I have in mind
The one preference I'd hold onto: extraction over duplicationIf there's a single thing I'd ask for, it's that the spawn path doesn't fork: pull the spawn/readiness chain out of The file is already mostly shaped for it, for what it's worth:
Reuse pointers — most of the verb already exists as RPCYou likely don't need to write a kill path or a status probe:
So the genuinely new code is roughly: My current thinking on the two questions you couldn't decide aloneVersion stamp. I'd stamp Where the daemon bundle comes from. For v1 I'd resolve the script the way the launcher does, minus Things I'd punt
House rules for the PR: English throughout, no version bump, changelog entry as a fragment in |
|
Closing the loop: #1019 merged ( Not released yet — still sitting on One thing worth flagging here rather than leaving buried in review threads: #1025 (the cmdline-identity hole in |
|
Ran the real end-to-end test we said we'd report back on: installed the Where it stopped: the paired host showed "no workspaces" and stayed that way, including after creating a pane directly against the daemon's own web API ( Everything else in the #1019 lifecycle held up under a real test, for what it's worth: Feature ask this points at: "New workspace" in the desktop app could offer local vs. one of your already-paired remote hosts, and creating one on a remote host would be the thing that finally stamps a workspace id on that host for the first time — closing exactly this gap. Not proposing an implementation, since I don't know how you'd want the id minted/that first pane's ownership handled remotely — just flagging that this is the concrete next wall, found by actually running it rather than reading the code. |
|
Dug into whether "New workspace → local or one of your paired remote hosts" is a scoped fix or a bigger call, since it touches Credential path confirmed first, since it changes the risk picture: the desktop's "Attach remote workspace" → paste-the- The actual gap is Two ways to close it:
I don't think I should pick between A and B myself and open a PR — A is the more conservative reading and matches how we'd actually use it from the desktop, but B is what the codebase's own stated philosophy right next to this code argues for, and I'd rather not quietly relitigate that call inside an unrelated feature PR. Whichever one you'd pick, the desktop-side half (host-picker on "new workspace", wiring into |
|
A — and thank you for refusing to pick it yourself. Writing the answer down surfaced the argument that decides it. B is not a relaxation, it is a deletion. On the philosophy you quoted: that comment is about execution capability — Server contract I'd take: keep the shape check for everyone; relax only the existence check when Stated limitation, so nobody later mistakes A for more than it is: this is an audit-and-revocability boundary, not a hard one — a shell on the daemon's own host can read the operator token, and a phone-only headless bootstrap still needs the operator credential once. Both deserve a line in the Happy to see the desktop half (host picker on "New workspace", |
Uh oh!
There was an error while loading. Please reload this page.
A direction question, not a feature request — and one I'd rather ask badly than not ask, because the answer might be "deliberately out of scope" and that is useful to know.
Has a text-mode client ever been on the table? A
wmux attachthat joins the same daemon sessions from a plain terminal over SSH, with the GUI as one of several front-ends rather than the only one.What already exists, so this isn't asking for a rewrite
I want to be accurate about the gap, because most of the machinery seems to be there already:
wmux webserves them over HTTPSo the missing piece is narrow: a client that renders in a terminal rather than in Electron. Everything else — session ownership, ring buffers, hook signals, the MCP surface — looks like it would not need to know.
Why I keep wanting it
Three concrete situations from the last month, all on Windows 11 with 11 workspaces and several agents running:
1. The laptop is the wrong machine to be doing this on. Electron plus a dozen agent panes plus their MCP servers is a real load; when I'm on battery or on a plane I want the work to continue on a box that isn't the one I'm carrying. A VPS or a desktop at the office keeps the daemon, the agents keep grinding, and I attach with whatever thin thing I have to hand. Today the work is pinned to the machine that renders it — which is backwards, because rendering is the cheap part.
2. Someone else needs to see the same session, not a screenshot of it. This week a colleague and I spent a while going back and forth over what a workflow had actually done — the kind of thing that is thirty seconds if two people are looking at the same live pane, and thirty messages if they aren't.
tmux attachculture solved this a long time ago: same session, two humans, no screen sharing, no "can you paste that again".wmux webis presumably the nearest thing today, and maybe that IS the answer — if so I'd love to know how you think about it, because I have not used it in anger yet.3. Survival when the front-end is the problem. Twice I have had a session I wanted to reach while the GUI itself was in a bad way (renderer wedged, and separately a GPU-ish repaint mess). A text client attaching to a daemon that was fine the whole time turns "restart everything and hope the sessions come back" into "attach from another window".
The part I expect to be hard
I don't want to pretend this is small. Rendering is the app's core: xterm.js in a browser context, mouse protocols, the theme system, the sidebar as a first-class surface. A terminal client means either a second renderer or accepting a deliberately reduced surface — and then the question becomes which parts are the product and which are chrome. Notifications, approvals, the Deck, the browser panes — some of that has no meaning in a text client, and deciding that is a product call, not an engineering one.
Which is why this is a question rather than a proposal. If the answer is "the GUI is the product,
wmux webis the remote story, a TUI client is out of scope" — that is a perfectly good answer and I'll stop wishing for it. If it is "interesting but not now", knowing the shape you'd want (thin renderer over the existing daemon protocol? a--headlessmode plus an existing multiplexer? something else?) would at least tell me whether the idea is worth anyone's evenings.For what it's worth, the reason I'm asking rather than shrugging: the daemon surviving on its own is already the hard half, and you've built that.
All reactions