mirror of
https://github.com/l0ng-ai/tty7.git
synced 2026-09-22 00:02:23 +00:00
150f6ff76fd9197849f396cddb3e82f02e0e8329
The settings nav, the SSH host list and the theme panel were fixed widths that never yielded, so the page they frame absorbed every shortfall. In a 641pt window — the one the report came from — that ran all the way down. On SSH, 220 of nav and 280 of host list left the detail panel 141pt and its empty state painted a couple of hundred points past the right edge of the window. On Appearance with the theme panel open the page got about 125pt, and a Chinese description came out one character per line. The columns are now allocated against the window instead of asserted: each list is handed its full width, then gives back a share of whatever is missing until the page reaches 420, and no list goes below the width at which it stops being itself. Below the width where the nav, the panel and a readable page cannot all fit in one row, the theme panel stops being a column and lays itself over the page — it is a temporary layer over one choice, and Escape already closed it first. The floor the page keeps is derived rather than picked: it is what the narrowest window in the wild leaves the SSH page, the one that spends a second list, once both lists stand on their own floors. It is a target for the allocator and not a `min_w` — a floor a flex row cannot honour does not push its siblings back, it overflows, and overflow here means content painted off the window, which is the failure being fixed. What makes the floor liveable instead is that the wide controls can now shrink into it. The thresholds that decide when a row stacks are widths a label needs, so they follow the interface font size — at 24pt every label is half as wide again while the slider beside it is still 240px. The rows that were hand-rolled rather than built by `settings_row` get the same treatment: the keybinding preset and prefix rows stack at the same width, every binding row lets its label wrap and its key caps wrap to a second line, the theme card drops its preview and stops pushing "change theme" off the card, the SSH quick-connect field shrinks instead of running past the pane it sits in, and a port-forwarding rule takes two lines — or three, at the width the report came from — rather than one that does not fit.
tty7
A terminal workbench: persistent sessions, remote work, agents.
Pure Rust · GPU rendering on Zed's gpui · VT core from Alacritty
English · 简体中文
Why
- Performance — ~2× the throughput of Alacritty, Ghostty, or Kitty (benchmarks)
- Persistent sessions — quit or reboot; your shells and supported agent sessions keep running, no tmux
- Editor-grade input — suggestions, completion, highlighting, history search
- Remote development — files, repos, panes, and git data stay on the remote machine
- Native SSH — profiles, SFTP, port forwarding, and jump hosts
- Agent-aware — Claude Code, Codex & co.: status, notifications, git context
- CLI + Skills — agents create panes, run commands, and inspect output
Install
Native builds for each platform on Releases:
| macOS | …-macos-arm64.dmg · …-x86_64.dmg |
drag into Applications |
| Windows | …-setup.exe · portable ….zip |
|
| Linux | …-x86_64.AppImage |
chmod +x and run — X11/Wayland libraries bundled |
What's inside
| Editor-grade input | ghost suggestions from history · explained tab completion · syntax highlighting · multi-line editing · click places the caret · ⌃ R fuzzy history |
| Window | tabs & splits · ⌘ P palette · ⌘ F scrollback search · nine themes · IME |
| Agent-aware | per-pane detection (18 CLIs): status dot · notifications · branch + diff · resume after reboot · tray icon when input is needed |
| Remote workspaces | remote files, repos, changes, diffs, worktrees, tabs, and panes · reconnect from any client and continue where you left off |
| CLI + Skills | bundled tty7 CLI · agent skill · pane/workspace control · real PTY commands · output, process, port, and agent status |
| SSH | native russh stack: profiles with keychain secrets · SFTP panel · port forwarding · jump hosts · one-time, unprivileged tty7-server install |
Terminal and keybinding reference: docs/features.md. The agent-facing CLI interface is documented in skills/tty7/SKILL.md.
Install the skill with:
npx skills add l0ng-ai/tty7
Benchmarks
Same machine, same day, same 155×40 grid — Apple M1 Pro, macOS 26.3.1, five-run averages (2026-07-04):
| tty7 | Alacritty | Ghostty | Kitty | |
|---|---|---|---|---|
Plaintext I/O — 11 MB cat (lower = better) |
95 ms | 239 ms | 179 ms | 185 ms |
| DOOM-fire frame rate (higher = better) | 888 fps | 485 fps | 552 fps | 617 fps |
| Cold-launch memory | 116 MB¹ | 105 MB | 128 MB | 130 MB |
¹ GUI 105 MB + the persistent server 11 MB.
Methodology and one-command reproduction: scripts/bench/.
Built on gpui and alacritty_terminal · Apache-2.0 · Discord · Changelog
Description
A terminal workbench in pure Rust: shells, persistent sessions, SSH, coding agents. GPU-rendered on Zed's gpui, VT core from Alacritty.
ai-agentsalacrittyclaude-codecoding-agentcross-platformdaemondeveloper-toolsgpugpuilinuxmacosptyrustshellsshterminalterminal-emulatorterminal-multiplexertmuxwindows
Readme
Apache-2.0
34 MiB
Languages
Rust
99.1%
Shell
0.5%
PowerShell
0.2%
Inno Setup
0.1%