t4 code

host live

One host, three faces: a native iOS app, a native macOS app, and a terminal UI — all speaking the same omp-app/1 wire to your t4-host, over the tailnet, with pinned wss.

the palette

bg
#000000
panel
#0c0c0e
accent
#c8d6e5
foam
#7fd6c8
iris
#b9a3e3
pine
#7bb8d4
gold
#f6c177
love
#e8919f
ok
#86e0b0

everything in this build

regions
Every pane is a tile: right dock (browser, files, agents, review) concurrent with the transcript and the bottom terminal. Per-session layouts persist.
floating
Any tile pops out into its own floating panel on macOS — and docks back with one click.
settings
Full OMP settings from the app: models per agent role, thinking level, approval mode, provider keys (masked), wss pinning, theme. Writes are confirmed and revision-checked.
fork
Branch any session into a full-history copy — rail row menu, session menu, or the TUI (f).
design mode
Annotate an element in the browser pane, add a note, and a structured prompt lands in the composer.
gallery
The files pane shows real image thumbnails with a full-screen preview.
unread
Accent dots on rail rows with new activity; ⌘⌥U cycles unread sessions on macOS.
unread
Terminal mouse reporting — htop, vim, lazygit take clicks and scrolls.
wss
Pinned TLS alongside plain ws on the tailnet — TOFU fingerprint in the Keychain, published on /healthz.
preview
Host-side headless-Chromium preview service: launch, navigate, capture, click/type/scroll, leases — all 22 commands.
t4 tui
The whole product in a terminal: rail, live transcript, composer, fork — one self-contained binary.

in motion

iOS

macOS

terminal

t4  —  118×32 omp-app/1 · wss
t4 connectedmacbookpro.tail871e8b.ts.net? help
sessions
transcript renderer ref…
⌄ fork · split-pane var…
preview service spike
wss pinning
vault search ui
release notes pass
workingattentionidleunread
you
fork the session and compare both designs side by side
agent
Forked into 019fa1d2 — full history carried over. I'll build
the split-pane variant there while this thread keeps the
drawer approach. Diff at the end.
tool
session.fork → ok · session.prompt → accepted
agent
The rail stays flat — no card stacking — and the drawer
mirrors the desktop narrow-width sheet overlay.
compare the forks' approaches…enter ↵
j/k move · enter open · 1-5 panes · f fork · x cancel · / filter · ? help