返回列表

部落格

在雲端 VM 或無顯示器 Linux 伺服器上執行 Claude Code,並用 iPhone 遠端控制

AI 代理可以跑在任何一台全天候運作的 Linux 機器上——雲端 VM、遠端開發機、Docker 容器——你的 iPhone 就是控制介面,不管身在何處都能連線。

發布於 標籤: 入門教學 / linux / cloud / systemd / claude-code / codex / amp / remote-coding / mobile-ai-coding
部落格

繼續查看該欄目下的產品與工程更新。

瀏覽此分類

大多數 Tactic Remote 使用者都是在自己寫程式的 Mac 上執行伺服器,這是最自然的起點。但執行環境不必是你的筆電,也不必放在你的桌子旁。

npx tacticremote 可在任何安裝了 Node.js 的 Linux 機器上執行——雲端 VM、遠端開發機、放在電視下方的無顯示器主機,或 Docker 容器。啟動之後,iOS 應用程式透過 Cloudflare Tunnel 連線,提供和區域網路一樣的 Chat Mode、Terminal Mode、Quick Prompts、推播通知以及一鍵核准功能。

本指南說明的正是這種用法:一個在遠端伺服器上持續執行的 AI 代理,以及一支可以在任何地方操控它的手機。

為什麼要在遠端伺服器上執行代理

把執行環境從筆電移走,有幾個好理由。

長時間任務不需要讓筆電插著電源。 耗時數小時的重構、大型測試套件執行,或探索性的程式碼工作階段,可能比你願意讓筆電一直開著的時間還長。雲端 VM 可以持續運作,你蓋上筆電,任務照樣繼續。

隨時用手機連線存取。 如果伺服器一直在線,出門前不需要先啟動它。打開 App,工作階段就在那裡。

接近 CI 的工作負載。 有些團隊使用 AI 代理來草擬修補程式、針對分支執行測試套件,或預先篩選 pull request。一台專用的 Linux 主機——獨立於個別開發者的機器之外——天然適合擔任這類任務的執行環境。

更充裕的運算資源。 將代理任務卸載到 CPU 或記憶體更多的機器,或是距離 API 端點較近的機器,可以縮短大型任務的實際完成時間。

不需要 Mac。 如果你的主力機器是 Windows 工作站,但手邊有 Linux 伺服器,就可以在那裡執行代理,仍然透過 iPhone 控制。

前置條件

在執行以下步驟之前,你需要準備:

  • 一台可透過網路連線存取的 Linux 伺服器或 VM(任何發行版皆可;我們測試使用 Ubuntu 22.04 或更新版本)
  • 已安裝 Node.js 16 或更新版本(執行 node --version 確認)
  • 在該伺服器上安裝並登入你想使用的 AI 代理:
    • Claude Code:依照 Anthropic 的安裝說明操作,然後執行 claude login
    • Codex:依照 OpenAI 的文件安裝並驗證身分
    • Amp:依照 Amp 的文件安裝並登入
  • 在你的 iPhone 上安裝 iOS 應用程式(App Store)

你不需要 Mac 選單列應用程式或 Windows 應用程式——那些是桌面用的選用 GUI 介面。在無顯示器的伺服器上,npx tacticremote 就是主機端所需的一切。

安裝並執行伺服器

npx tacticremote 會自動下載並執行伺服器,無需先進行全域安裝。在剛建立的伺服器上:

npx tacticremote

第一次執行時,會印出類似以下的內容:

Tactic Remote server listening on port 8765
API Key: tr_xxxxxxxxxxxxxxxxxxxx
Pair with QR or enter the address manually in the iOS app

對於遠端伺服器(沒有區域網路、沒有 mDNS),你將透過 Cloudflare Tunnel 連線。上面印出的 API Key 用來驗證你的 iPhone 身分。請複製它——配對時需要在應用程式中輸入。

如果你想指定特定版本而不是每次都拉取最新版:

npx tacticremote@latest

使用 systemd 保持常駐

在 shell 中執行 npx tacticremote 可以啟動伺服器,但當 shell 工作階段結束時,程序也會跟著結束。若要將它作為正式的背景服務執行,並在開機時自動啟動、在當機後自動重啟,請使用 systemd。

建立一個 unit 檔案。將 youruser 替換為應該擁有此程序的 Linux 使用者,如果你希望代理從特定資料夾啟動,也請調整 WorkingDirectory。

# /etc/systemd/system/tacticremote.service
[Unit]
Description=Tactic Remote server
After=network-online.target
Wants=network-online.target
 
[Service]
Type=simple
User=youruser
WorkingDirectory=/home/youruser
ExecStart=/usr/bin/npx tacticremote
Restart=on-failure
RestartSec=5
Environment=HOME=/home/youruser
 
[Install]
WantedBy=multi-user.target

啟用並啟動服務:

sudo systemctl daemon-reload
sudo systemctl enable tacticremote
sudo systemctl start tacticremote
sudo systemctl status tacticremote

隨時查看記錄:

journalctl -u tacticremote -f

關於 unit 檔案的幾點說明:

  • After=network-online.target 確保網路在伺服器啟動之前已就緒,這在開機時 Cloudflare Tunnel 需要連線的情況下很重要。
  • Restart=on-failure 搭配 5 秒延遲,表示伺服器可以從暫時性錯誤中自動恢復,而不會在緊密迴圈中立即重啟。
  • 如果 npx 不在 /usr/bin/npx,請用 which npx 找到正確路徑並更新 ExecStart。如果你偏好用 npm install -g tacticremote 而非 npx,也可以直接使用全域安裝的 tacticremote 執行檔路徑。
  • Environment=HOME 這一行確保 Node/npm 能在正確使用者的家目錄下找到快取和全域套件,在透過 sudo 提權執行時尤其重要。

透過 Cloudflare Tunnel 從 iPhone 連線

在遠端伺服器上,沒有共用的區域網路,因此 mDNS 探索不適用。這種設定的連線方式是 Cloudflare Tunnel。

Tactic Remote 內建 Cloudflare Tunnel——不需要另外安裝 cloudflared 就能使用隧道。啟動伺服器時加上旗標即可啟用:

npx tacticremote --tunnel --api-key YOUR_SECRET_KEY

或者,如果你透過 systemd 執行,請更新 unit 檔案:

ExecStart=/usr/bin/npx tacticremote --tunnel --api-key YOUR_SECRET_KEY

Cloudflare Tunnel 啟用後,伺服器會印出一個 trycloudflare.com 網址:

Cloudflare Tunnel active: https://example-random-name.trycloudflare.com
API Key: tr_xxxxxxxxxxxxxxxxxxxx

在 iPhone 上:

  1. 開啟 Tactic Remote
  2. 點選 Add Host,選擇 Manual
  3. 將 trycloudflare.com 網址填入主機位址欄位
  4. 輸入伺服器輸出的 API Key
  5. 點選 Connect

連線透過 Cloudflare 進行端對端加密。你的程式碼和終端機輸出不會經過任何 Tactic Remote 雲端中繼——因為根本沒有這個東西。流量從伺服器傳到 Cloudflare 的邊緣節點,穿過隧道,直接抵達 iOS 應用程式。

若要建立永久設定,你可能會想使用綁定自有網域的具名 Cloudflare Tunnel,而非每次重啟都會改變的臨時 trycloudflare.com 位址,這樣配對網址就能在重啟後保持不變。詳情請參閱 Cloudflare Tunnel 設定指南。

安全性說明

在這種設定下——遠端伺服器、Cloudflare Tunnel、API Key——相關的安全特性如下:

  • 伺服器的 8765 埠不需要對外開放。Cloudflare Tunnel 從你的伺服器向 Cloudflare 邊緣節點建立向外的連線,無需開放任何向內的埠。
  • API Key 驗證意味著只有知道金鑰的裝置才能連線。請設定一個強健的金鑰,或使用隨機產生的那一組。
  • 區域網路模式使用明文的 ws://。在遠端伺服器上你不會使用區域網路模式,因此這點不適用——Cloudflare Tunnel 的流量是 TLS 加密的。

如果你的伺服器位於私有 VPC 內,Cloudflare Tunnel 就是你不需要在防火牆上打洞就能連線的方式。

在伺服器上使用多個代理

遠端伺服器設定支援與本地 Mac 或 Windows 主機相同的代理選擇。在 iOS 應用程式中建立新的工作階段時,每個工作階段都有一個選擇器,讓你挑選 Claude Code、Codex 或 Amp——只要是安裝在伺服器上的代理都可以選。

每個工作階段彼此獨立。你可以同時讓一個 Claude Code 工作階段執行長時間的測試任務,以及一個 Codex 工作階段在不同的分支上工作。iOS 應用程式可以在它們之間切換。

在這種設定下,推播通知同樣可以運作。當代理完成任務、暫停等待核准或意外結束時,你的 iPhone 會收到通知。對於那些你偶爾查看而非持續盯著的長時間任務,這是最關鍵的功能——你不需要一直開著 App。

在 Docker 中執行

如果你的伺服器環境是基於 Docker,可以在容器內執行 npx tacticremote。主要注意事項如下:

  • 容器需要安裝並驗證代理(Claude Code、Codex、Amp)
  • 如果使用區域網路模式,需要對外公開 8765 埠(Cloudflare Tunnel 則不需要)
  • 使用 Cloudflare Tunnel 時,容器需要有向外的網路存取權限
  • 容器內的程序管理(使用 CMD 或監控工具,而非 systemd)

最簡化的 Dockerfile 片段:

RUN npm install -g tacticremote
CMD ["tacticremote", "--tunnel", "--api-key", "YOUR_SECRET_KEY"]

代理的持久化驗證資料(例如 Claude Code 的 ~/.claude 目錄)應掛載為磁碟區,這樣在容器重啟後才不會遺失。

注意事項

代理仍然需要在伺服器上有效的憑證。 npx tacticremote 不處理 Claude Code、Codex 或 Amp 的身分驗證。這些代理必須在伺服器機器上安裝並登入完成,Tactic Remote 才能為它們建立工作階段。

Cloudflare Tunnel 會增加少量延遲。 對於互動式使用,這通常感覺不到(大多數地區在 100ms 以內)。對於輸出量極高的終端機來說,差異會較為明顯。區域網路模式更快,但需要手機和伺服器在同一個網路上。

Node.js 版本很重要。 Node 16 是最低要求;建議使用 Node 20 LTS。執行 node --version 確認。

npx 在第一次執行時會下載套件。 如果你的伺服器有嚴格的對外連線限制,請將 npm 套件庫加入白名單。或者,使用 npm install -g tacticremote 進行全域安裝,並在 systemd unit 檔案中直接使用 tacticremote。

tmux 用於 Linux 上的工作階段持久性。 請確認 tmux 已安裝(apt install tmux 或對應指令)。若缺少 tmux,工作階段在重新連線後將無法持久保留。

iOS 應用程式的免費方案完全可以支援這種設定。 Chat Mode、Terminal Mode、推播通知和多代理功能在免費版都有提供。Pro 方案增加了額外功能。定價:免費 / Pro 每月 $2.99 / 每年 $19.99。


在全天候運作的伺服器上執行代理,是遠端控制模式效益最高的用法:代理在夜間繼續工作、在開會時繼續工作、在搭機時繼續工作,而你的手機是你隨時查看進度的窗口。

如果這是你第一次設定,先從基本的 npx tacticremote --tunnel --api-key YOUR_SECRET_KEY 開始,確認從 iPhone 到伺服器的端對端連線正常,再加上 systemd 服務來提升可靠性。

相關資源

立即體驗 Tactic Remote

用手機遠端操作程式開發 Agent

連線到 Mac、Windows 或 Linux 電腦上的 Claude Code、Codex 等 Agent,在 iPhone 或 iPad 上查看進度並傳送下一個請求。