[TOOLS] 10 分鐘閱讀OraCore 編輯部

Claude Code Rust 把終端機變輕了

我拆 Claude Code Rust 的做法:把厚重 TUI 拆掉,改成 Rust 原生單一二進位,連同記憶體、啟動速度、捲動與複製貼上一起整理成可抄模板。

分享 LinkedIn
Claude Code Rust 把終端機變輕了

Claude Code Rust 把原本偏重的終端機介面換成 Rust 原生單一二進位,重點是降啟動成本、降記憶體、修好捲動與複製貼上。

我用一堆 terminal agent 之後,真的很容易看出哪個介面在裝忙。模型回得不差,工具也能跑,可整個手感就是卡。按一下鍵要等,往上翻紀錄像在跟虛擬清單搏鬥,複製貼上還會冒出一種「我其實是網頁套殼」的味道。最煩的是,這些工具明明是要幫我省時間,卻常常把我拖進 UI 的泥巴裡。

Claude Code 也有這種感覺。功能本身有用,但原本那層 Node.js 加 React Ink 的 TUI,總讓我覺得自己在拖著一個前端框架做終端機的工作。直到我看到 srothgan/claude-code-rust,我才停下來仔細看。它沒有在那邊喊口號,就是很直白地說:把介面換成 Rust 原生二進位,讓終端機回到終端機該有的樣子。

我喜歡這種做法,因為它通常比較誠實。真正的改善,很多時候不是換模型、不是改 prompt,而是把那層一直在吃效能、吃注意力、吃耐心的包袱先拿掉。

原本那層 TUI 真的太肥了

訂閱 AI 趨勢週報

每週精選模型發布、工具應用與深度分析,直送信箱。不定期,不騷擾。

不會寄垃圾信,隨時可取消。

「Drop-in replacement for Anthropic's stock Node.js/React Ink TUI, built for performance and a better user experience.」

翻譯一下就是:它不是要重做 Claude Code 的腦袋,而是先把卡住手感的那層介面換掉。原本的 Node.js / React Ink TUI 可以做事,但它做事的方式很像把網頁元件硬塞進終端機。能跑不代表適合,這差很多。

Claude Code Rust 把終端機變輕了

我之前看過不少 terminal 工具都犯同一種毛病:明明只是要顯示 prompt、接鍵盤事件、渲染輸出,卻搞得像在跑一個迷你瀏覽器。React Ink 很方便沒錯,但它還是 React。只要你開始把 UI 邏輯、事件處理、渲染節奏全塞進前端思維,終端機就會慢慢失去那種「打字就有反應」的乾脆感。

Claude Code Rust 這邊改用 RustCrosstermRatatui,方向就很清楚:終端機事件直接處理,畫面直接渲染,不要再繞一圈 Web runtime。這不是什麼炫技,這是把該薄的地方變薄。

我自己在用 agent shell 的時候最有感的,就是輸入回饋。如果你按鍵之後要等,使用者就會開始預判延遲,然後整個流程會變得很煩。介面一旦讓人開始「等」,它就輸了。

實操上,我會建議你這樣看待自己的 agent UI:

  • 模型層跟終端機 UI 分開,不要綁死。
  • 能用原生 terminal 控制的,就不要自己重造一套瀏覽器行為。
  • 先砍掉 UI 的重量,再談功能花樣。

記憶體和啟動時間,才是最先撞到的痛點

這個 repo 很直接地把成本寫出來:原本那層介面大概是 200-400MB baseline,原生二進位則是 約 20-50MB。這不是「有感提升」那種空話,這是直接少掉一大塊常駐負擔。你如果是筆電開一堆 terminal、IDE、Docker、瀏覽器的人,這種差距會非常有感。

它還提到啟動時間從 2-5 秒 降到 100ms 內。我不需要把這件事講得很文青,因為它就是很現實:兩秒多的延遲,足夠讓我在開工具前先猶豫一下;100ms 內的反應,才像一個真的在終端機裡的東西。你不會一直盯著它等,它就該是這樣。

我以前也踩過這種坑。工具本身不差,但每次打開都像在載入一個小型應用程式,久了之後我就懶得開。沒有人會公開說「我不用這工具是因為記憶體太醜」,但實際上大家就是會默默放棄。

所以這裡的重點不是「Rust 比較帥」,而是「原生 binary 把最先感受到的摩擦拿掉」。這件事對互動式工具特別重要,因為互動式工具的價值就是回應快。一慢,整個體驗就垮。

我會怎麼實作檢查?很簡單:

  • 先看常駐記憶體,不要只看峰值。
  • 量冷啟動到第一個可用 prompt 的時間。
  • 狂打字、連續刪字、快速切換命令,測回饋延遲。

捲動紀錄和複製貼上不是小事,是基本功

「Scrollback : Broken virtual scrolling that loses history」

翻譯一下就是:原本那套捲動紀錄很可能不是在尊重終端機,而是在用 UI 元件的方式硬管歷史資料。這種做法看起來很現代,實際上常常很雷。因為開發者要的不是漂亮動畫,是能把五頁前的輸出找回來。

Claude Code Rust 把終端機變輕了

這個 repo 也直接點出複製貼上的問題。原本的做法不是吃原生 terminal 行為,而是自己做一套 custom 版本。這種東西在 demo 時很安靜,一旦你開始複製長輸出、貼回指令、選取多行內容,它就開始露餡。你會發現自己不是在用工具,而是在遷就工具。

我自己最受不了的就是這種「看起來差不多,實際上一直在偷改你操作」的介面。終端機裡最重要的就是一致性:選取要像終端機,貼上要像終端機,捲動也要像終端機。你如果把這些重新發明,卻又做得比原生差,那使用者只會覺得麻煩。

Claude Code Rust 的價值就在這裡:它把控制權還給終端機本身。不是每個互動都要自己包一層規則,很多時候直接尊重系統習慣就夠了。

實操寫法我會這樣定:

  • 把 scrollback 當成正式功能,不是附加品。
  • 測長段落輸出能不能正常回翻。
  • 測多行複製、貼回 shell、選取跨區塊內容。

真正該保的,是協定,不是外殼

這個專案有一個我覺得很重要的點:它不是重做後端,而是透過本機 Anthropic Agent SDK bridge 去接同一套 Claude Code 能力。也就是說,模型行為、工具呼叫、檔案編輯、權限流程這些核心契約,基本上都還在。改的是前端殼,不是整套系統的語意。

這種切法很務實。因為如果你做的是 CLI 或 agent shell,最怕的不是畫面不好看,而是你一改 UI 就把原本的工具行為搞歪。協定一歪,除錯會很痛。你會以為是模型怪怪的,其實只是你那層包裝在亂改輸入輸出。

README 也明講這不是 fork 或偷來的實作,而是從零做的原生前端,靠官方 Agent SDK 當 runtime 依賴。這點我會給肯定,因為它至少把邊界講清楚了。開源專案最怕那種「看起來像替代品,實際上邊界說不清」的情況,後面維護會很煩。

如果你也想做類似的替代 UI,我會建議你先寫一份契約清單:

  • 哪些工具呼叫一定要保留。
  • 哪些權限提示不能改語意。
  • 哪些檔案編輯流程必須跟原版一致。

把這些先釘死,UI 才有資格變薄。否則你只是把複雜度從一個地方搬到另一個地方。

安裝要夠笨,使用者才會願意試

這個專案的安裝方式也很對路:直接用 npm install -g claude-code-rust。安裝時會拉對應平台的預編譯 binary,然後提供 claude-rs 指令。這種設計很重要,因為 terminal 工具如果第一步就要你自己編譯、自己處理相依套件,很多人會直接關掉。

它也有講清楚前置條件:需要 Node.js 18+ 來跑 Agent SDK bridge,還要有既有的 Claude Code 驗證檔 ~/.claude/config.json。這代表它不是獨立玩具,而是站在既有 Claude Code 生態上做前端替換。這樣反而合理,因為它沒有假裝自己能把整個系統從頭重建。

我很吃這種誠實的說法。你要做 wrapper,就老實說你是 wrapper;你要依賴外部 SDK,就老實說你依賴什麼。把安裝門檻講清楚,使用者才不會在第一次執行時覺得被坑。

實操上,我會把這幾點寫進 README:

  • 一行安裝指令。
  • 明確列出需要的 runtime。
  • 明確列出需要的登入或設定檔。
  • 講清楚哪些費用與限制仍然由上游服務決定。

費率與限制不是 UI 的功勞,但一定要講

README 也有提到一件很現實的事:Agent SDK 的計費規則沒有被這個專案改掉,而且 Anthropic 先前公告過的 credit 變動目前是暫停的。也就是說,你用 claude -p 或這種第三方前端,還是照正常 Claude 訂閱限制在跑。這件事很無聊,但很重要,因為很多人會把「介面變快」誤會成「使用成本變低」。

我覺得這種地方最該誠實。UI 再漂亮、啟動再快,也不會改變你背後的計量方式。你如果在做基於第三方 SDK 的工具,最好一開始就把 billing、quota、auth 邊界寫進文件,不要等使用者被扣到有感才發現規則沒變。

這個專案也有連到 Claude 官方文件,這很合理。因為真正會影響使用行為的,還是上游服務的條款和限制,不是你這層 shell 長得多漂亮。

所以我的結論很簡單:這類工具的價值,不是幫你省錢,是幫你少受介面折磨。差別要分清楚,不然會期待錯地方。

可抄的模板

## 原生終端機 agent UI 改造模板(可直接套用)

這份模板適合拿來改造任何「原本 TUI 太重、像網頁套殼」的 agent 工具。

### 目標
- 保留後端協定與工具呼叫行為
- 把終端機 UI 換成原生、輕量、低延遲的實作
- 讓捲動、複製貼上、輸入回饋回到終端機原生手感

### 改造原則
1. 先保協定,再換外殼
   - 不改模型互動語意
   - 不改工具呼叫格式
   - 不改權限與檔案編輯流程

2. UI 層盡量薄
   - 用原生 terminal library 處理鍵盤與畫面
   - 不引入不必要的瀏覽器 runtime
   - 渲染、輸入、狀態管理分層清楚

3. 先量三個數字
   - 常駐記憶體
   - 冷啟動到第一個可用 prompt 的時間
   - 快速輸入時的回饋延遲

4. 一定要測的終端機行為
   - 長篇 scrollback 回翻
   - 多行複製貼上
   - 快速刪字與方向鍵操作
   - 貼上 shell 指令與程式碼區塊

5. 文件要先講清楚
   - 需要哪些 runtime
   - 需要哪些登入檔或設定檔
   - 費率與限制由誰決定
   - 哪些行為仍沿用上游服務規則

### README 可直接貼的說明
這個專案是一個原生終端機前端,負責包住既有的 agent SDK 或後端協定。它不重做模型行為,只把原本偏重的 UI 層換成較輕的原生 binary,目標是更快啟動、更低記憶體占用,以及更接近真正終端機的操作手感。

### 發佈前檢查清單
- [ ] 冷啟動時間可接受
- [ ] 常駐記憶體不會離譜
- [ ] scrollback 行為正常
- [ ] copy/paste 不需要自訂怪招
- [ ] 安裝方式一行就懂
- [ ] 依賴、登入、費率邊界寫清楚

### 適合的定位句
這不是重做 agent 腦袋,這只是把終端機外殼變薄,讓互動回到該有的速度與手感。

我會把 Claude Code Rust 這種做法看成一種很實際的工程選擇:不跟模型硬拼,不跟使用者耍花樣,只是把那層最容易拖慢體驗的 UI 拿掉。這種改善不性感,但很值錢。

原始來源是 GitHub repo專案文件;我這篇是根據 README、文件與 repo 內容做的拆解,模板段落是我整理後可直接抄去用的版本。