mirror of
https://github.com/l0ng-ai/tty7.git
synced 2026-09-22 08:02:24 +00:00
4bcc4066d771f9a39bcfe6089550306f15eb3303
Tab at a path position in a native-SSH pane had nothing to offer: path candidates come off the local filesystem, and a remote pane deliberately passes no local cwd, so `complete` returned `None`. A no-match hands the line to the shell (#136), which costs the user the inline editor until the next prompt — so in practice every path Tab in an SSH session dropped them back to the raw shell for the rest of that line. Ask the far side instead. The pane already holds an authenticated russh connection, and `SftpList` — the same request the SFTP panel browses with — lists a remote directory over it. No shell involvement: nothing is echoed into the scrollback, no prompt hooks need suppressing, and there is no background process to cancel when the user submits. The listing is a network round-trip, so it can't answer the keystroke synchronously. Results land on the main thread and only then behave as a local Tab would; a line that moved on in the meantime drops the answer, and an empty one falls back to the shell handoff, so a directory we cannot read is no worse off than before. completion.rs stays pure: it splits the word into a request and turns the answer into candidates, both unit-tested. Candidate rules mirror the local path engine exactly — hidden entries need a dot prefix, `cd` takes directories only, symlinks follow to their target's kind, same ordering and cap. Positions a listing cannot help (command position, `~` without the remote's $HOME, no absolute remote cwd) decline and let the shell have the Tab. Only native-SSH panes qualify: a foreground `ssh` typed into a local shell and a WSL pane have no tty7-owned connection to ask.
tty7
A terminal workbench: shells, sessions, SSH, coding agents.
Pure Rust · GPU rendering on Zed's gpui · VT core from Alacritty
English · 简体中文
Why
- Fast — ~2× the throughput of Alacritty, Ghostty, or Kitty (benchmarks)
- Sessions persist — quit or reboot; your shells keep running, no tmux
- Editor-grade input — completion, syntax highlighting, history search built in; zero config for zsh, bash, fish, PowerShell
- Agent-aware — recognizes Claude Code & co. in a pane: status, notifications, session resume
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 libs bundled |
What's inside
| 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 · eight themes · IME |
| Coding agents | per-pane agent detection (~17 CLIs): status dot, notifications, branch + diff, resume after reboot, tray icon that signals "needs your input" |
| SSH | native russh stack: profiles with keychain secrets, SFTP panel, port forwarding, jump hosts |
Details for every row: docs/features.md. Keybindings: ⌘ , opens Settings — browse and remap everything, tmux preset included (full list).
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 IO — 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 daemon 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%