GitHub
working prototype · 持续迭代中

Mac 上的
AI Coding 驾驶舱

基于 GPUI 的桌面工作台,内嵌真终端,专为同时指挥多个 Claude Code agent设计——多项目 × 多标签,会话状态一目了然。

workspace — zsh
$ cargo run --bin workspace
   Compiling smelt v0.1.0 (~/dev/smelt)
    Finished `dev` profile [unoptimized] target(s) in 4.82s
     Running `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 节奏对网格做快照重绘——所以整行只整形一次, 拖选不抖动,宽度不截断。

这意味着 claudevimhtop 这类交互式 / 全屏 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 })
  }
}