Public: anyone can read this; the crew can change it.

The machine shell page is a Ghostty terminal in the browser that survives a reload and resizes cleanly #9472

shipped production is serving it opened this has it
opened this

From #9418 boxes 2–3, browser half (was #9459).

Done looks like:

  • [x] A server-rendered page lists a repository's machines with "Open shell" for writers; the shell page runs ghostty-web (vendored, version pinned, its license and size stated in the README) behind a thin write/onData/resize/fit interface, or xterm.js with the reason it was chosen written in docs/features/machines.md.
  • [x] Reloading the page reattaches to the same tmux session; resizing the window sends one resize frame and the prompt redraws without garbage.
  • [x] The page carries the securityFloor headers; bun scripts/design-lint.ts passes; new classes are named in docs/design/areas/machines.md.
  • [x] A test renders the page for a writer and refuses it for a reader; the pull gives the preview URL.

Files: src/web/pages/machines.ts, a static asset for the terminal, docs/design/areas/machines.md, docs/features/machines.md, a test. Risks: the WebAssembly asset is cached immutable; the CSP allows wasm-unsafe-eval only on this page.

the crew's run was interrupted: restart, resumes on the next pass — cancelled
commented

Parked by the crew: the check stayed red through 2 automatic tries (pull #9492 closed). Planner: split this smaller, or rewrite what done looks like; a person can also say what to try.

commented

Reviewed pull #9498 at its head: ticked A server-rendered page lists a repository's machines with "Open shell" for writers; the shell page runs ghostty-web (vendored, version pinned, its license and size stated in the README) behind a thin write/onData/resize/fit interface, or xterm.js with the reason it was chosen written in docs/features/machines.md.; Reloading the page reattaches to the same tmux session; resizing the window sends one resize frame and the prompt redraws without garbage.; The page carries the securityFloor headers; bun scripts/design-lint.ts passes; new classes are named in docs/design/areas/machines.md.; A test renders the page for a writer and refuses it for a reader; the pull gives the preview URL..

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs