working prototype · 持续迭代中
Mac 上的
AI Coding 驾驶舱
基于 GPUI 的桌面工作台,内嵌真终端,专为同时指挥多个 Claude Code agent设计——多项目 × 多标签,会话状态一目了然。
workspace — zsh
$ cargo run --bin workspaceCompiling smelt v0.1.0 (~/dev/smelt)Finished `dev` profile [unoptimized] target(s) in 4.82sRunning `target/debug/workspace`▸ workspace ▸ smeltd ▸ docs +────────────────────────────────────$ claude✓ session attached · tokyo-night · 256-color · nerd-font
构建于
Rust
GPUI
Claude Code
alacritty_terminal
Git
macOS
专为指挥多个 agent 设计
不是又一个终端模拟器,是给「同时开着好几个 Claude Code 会话」这件事做的外壳。
多标签 · 多项目
每个标签一个独立 PTY,各自的历史与焦点,随手切换正在指挥的 agent。
内嵌真终端
完整 ANSI/256 色/24-bit 色 + Nerd Font,能跑 claude、vim、htop 等交互式 / TUI 程序。
Git diff 视图
agent 改了什么,一眼看清,不用切出去开另一个 diff 工具。
文件树 + 搜索
文件名 / 内容双模式搜索,定位改动涉及的文件更快。
原生 GPU 渲染
基于 GPUI/Metal,逐行整形上色,拖选、滚动都不卡顿。
会话持久化
smeltd 类 tmux 后台守护:GUI 退出或崩溃不影响 shell 存活,重开自动 reattach。
为什么不直接用 tmux 或云端 IDE
smelt 想做的是两者之间的折中:既要真终端的掌控力和本地隐私,也要一个「看得见状态」的外壳。
| 功能 | smelt | 裸终端 + tmux | 云端 AI IDE |
|---|---|---|---|
| 多 Agent 并行指挥(多项目 × 多标签) | |||
| 会话崩溃不丢(GUI 退出自动 reattach) | |||
| 原生 GPU 渲染,无网络延迟 | |||
| Git diff 可视化视图 | |||
| 文件树 + 文件名/内容搜索 | |||
| 本地优先,代码不出设备 | |||
| 完整 ANSI/24-bit 真终端(可跑 vim/htop) |
终端后端是真的终端
PTY 起子进程,alacritty_terminal解析 ANSI 状态机,维护完整的网格与滚动缓冲。后台线程读输出、 UI 线程按 30ms 节奏对网格做快照重绘——所以整行只整形一次, 拖选不抖动,宽度不截断。
这意味着 claude、vim、htop 这类交互式 / 全屏 TUI 程序都能正常跑, 不是阉割版的伪终端。
terminal.rs
// PTY + alacritty 状态机pub struct Terminal {term: Arc<Mutex<Term<EventProxy>>>,pty: Box<dyn MasterPty>,}impl Terminal {pub fn spawn(shell: &str) -> Result<Self> {let pty = native_pty_system().openpty(size)?;Ok(Self { term, pty: pty.master })}}
想看得更深一点?
代码和文档都在仓库里,没有另开一个独立的文档站。