跳至主要內容

Moshi 與 Termius 實測:手機接手 Claude Code、Codex、Grok Build 的兩種做法

我用 iPhone 透過 Tailscale 網路以 SSH 連回 Mac mini,實測 Moshi 與 Termius 怎麼接手終端機裡的 CLI Agent。真正讓工作不怕斷線的是 tmux。

8 min read/ Medium

前言

Claude Code、Codex、OpenCode、Grok Build 都是終端機工具,而我本來就很喜歡這種工作方式。問題不在終端機;是 Agent 留在家裡的 Mac mini 跑時,我出門後偶爾還是想看進度、回一句問題,或把原本的工作接回來。

我這次用 iPhone 透過 Tailscale 網路,再以 SSH 連回 Mac mini,試了 Moshi,也把平常在用的 Termius 一起拿來比。結果不是「Moshi 取代 Termius」。兩個都好用,只是切入點不一樣:Termius 是成熟的 SSH 工具;Moshi 則是特別把手機接手 CLI Agent 這件事做得更順。

下面這段是我實際連回 Mac、在手機上開啟 Grok Build 的畫面。

前置作業:先把這四件事準備好

這篇用的是「Tailscale 網路上的一般 SSH」,不是 Tailscale SSH 功能本身。我沒有設定路由器的 port forwarding,也不需要公開 IP;手機只要有行動網路或 Wi-Fi,就能接回保持開機的 Mac。

  1. 在 Mac 與 iPhone 都安裝 Tailscale,並登入同一個帳號。兩台裝置會出現在同一個 tailnet;Tailscale 預設開啟的 MagicDNS 可以直接用主機名稱連線,不一定要記住 100.x.x.x IP。官方 Quickstart
  2. 在 Mac 的「系統設定 → 一般 → 共享」開啟「遠端登入」,並只允許自己的帳號。這就是 macOS 的 SSH 服務;Apple 的 Remote Login 說明 也建議只開給需要的使用者。
  3. 主機確認有 tmux。先跑 tmux -V;沒有的話,用 Homebrew 安裝:brew install tmux
  4. 在 iPhone 安裝 MoshiTermius,新增主機時填入 Tailscale 的 MagicDNS 名稱或 100.x IP、macOS 使用者名稱和埠號 22。帳號驗證我建議用 SSH 金鑰;若你還在用密碼,至少不要把 SSH 直接開到公網。

設定完先在手機連一次,看到 Mac 的 shell prompt 就表示網路和 SSH 都通了。接著才進 tmux,開你的 Agent。

我後來發現,tmux 比選哪個 App 更重要

一開始我以為重點是選 Moshi 還是 Termius,後來才發現,真正要先裝好的其實是 tmux。

如果直接用手機 SSH 進去,開 claudecodexgrok,手機 App 被系統收掉、網路切換、SSH 中斷後,這個 shell 裡的工作就可能跟著斷掉。tmux 把工作階段留在主機上;手機只是回來接同一個畫面。Agent、目前目錄和正在跑的指令都還在。

我這次用的是下面這行。它會先嘗試接回叫做 termius 的 tmux session;如果還沒有,才建立一個新的:

bash
tmux attach -t termius 2>/dev/null || tmux new-session -s termius

接進去之後,照平常的方式啟動 Agent 就好:

bash
claude
codex
opencode
grok

termius 只是我自己取的 session 名稱,不是 Termius 的必要設定。你要叫它 agent、專案名或日期都可以。重點是同一份工作不要一直在新的 SSH shell 重開。

Moshi 官方也把 tmux 放在長時間 Agent 工作流的核心:Mosh 處理手機切網路或睡眠時的重連,tmux 則讓遠端的 shell 與 Agent 本身繼續活著。兩件事不能互相取代。Moshi tmux 文件

Termius:我原本就在用,而且它真的很好用

Termius 本來就是一個完成度很高的 SSH client:主機管理、金鑰、片段指令、SFTP、port forwarding,以及 macOS、Windows、Linux、iOS、Android 都能用。平常不只是盯 Agent,還要管理主機、搬檔案、開 tunnel 的話,它的範圍比 Moshi 大很多。Termius 官方網站

我用 Termius 接回 tmux 時,手機鍵盤上常用的 esctabctrl 和方向控制也都拿得到。這種細節平常看起來沒什麼,真的要在手機上輸入指令時差很多。

Termius 在 iPhone 上提供 SSH 終端機與額外控制鍵列,敏感的主機登入資訊已遮住

Termius 的手機鍵盤列把常用的終端機按鍵放在手邊

所以如果你已經用 Termius 加 Tailscale 加 tmux 跑得很順,我不覺得有必要為了 Claude Code 或 Codex 特地換 App。它本來就能開任何 CLI Agent;差別只在它把你當成「正在操作 SSH 的人」,不會把 Agent 的狀態當成產品的核心。

Moshi:我想看 Agent 時,手機上少繞一點

Moshi 的基本能力也是 SSH 終端機。所以我沒有裝額外 Hook,一樣能接回 Mac、進 tmux、打開 Grok Build。它的手機工具列、工作階段切換和輸入方式很貼近這個情境;剛離開電腦,只想確認 Agent 有沒有卡住時,用起來確實方便。

它再往前做了一層可選的 moshi-hook。裝在主機後,支援的 Agent 可以把需要批准、工作完成、工具執行等事件送到 Moshi 的 Inbox;也能用手機看 diff、預覽本機開發伺服器,或在部分 Agent 上用 Chat View。這些才是 Moshi 和一般 SSH client 拉開距離的地方。Moshi Hooks 文件

不過這次我沒有安裝 moshi-hook。我想先確認最基本的「手機 SSH → tmux → CLI Agent」是否好用,答案是可以。Hook 是下一步,不是連線成功的必要條件;它會在主機上常駐,並寫入支援 Agent 的 Hook 設定,所以我會先用測試專案試過,再決定要不要開。

隱私也要一起看。Moshi 說完整終端流量、原始碼與 diff 會透過 SSH 在手機與主機間傳遞;但開啟 Agent Inbox/通知後,事件摘要會送到 Moshi 的伺服器,文件列出的範圍包含最多 200 個字元的提示詞與 80 個字元的回覆標題。這不是不能用,只是不要把它當成「裝了也不用看權限」的 App。Moshi Hooks 的資料說明

我會兩個都留著

我自己會繼續留著兩個。

Termius 是我平常需要完整 SSH 工具箱時會開的。主機多、要傳檔、要做 port forwarding,或本來就習慣它的跨平台同步,繼續用就好。

Moshi 則是我把重心放在 CLI Agent 時會開的。它不是把 Claude Code、Codex 或 Grok Build 搬到手機上跑,而是讓我從手機接回主機上原本就在跑的 session。出門後看一下進度、補一句話,或之後真的需要通知和 approval,再考慮把 Hook 打開。

不管選哪個,前面都要先有安全的遠端網路、SSH 金鑰或可靠的帳號驗證,還有 tmux。這次用下來,我並沒有想把終端機換掉;只是多了一種人在外面時,把同一個 Agent 工作接回來的方法。