paved road(鋪好的路,也叫 golden path)是一條有主張、可重現、被支援的預設路徑:把「該用什麼工具、按什麼順序做、每步該長什麼樣」先決定好,讓走這條路的人不必每次重新選型、重查資料、再踩一次同一個雷。它的價值在於把重複性的決策成本一次付清、把注意力留給真正該想的事,而不在限制自由。這個詞源自 Spotify 內部的 golden path、Netflix 叫它 paved road,兩者都是為了讓工程師在複雜的基礎設施上有一條「照著走就對」的預設路線。

這篇把本站散在多篇的遠端 agent 工作機內容,鋪成一條從零到可用的順序路徑,回答「我要架一台,該先做什麼、後做什麼、每步走完手上有什麼」——而不是再列一次有哪些主題。

個人尺度的 paved road 只有三個零件

組織尺度的 paved road 需要一個平台團隊,把工具、模板、文件收進一個開發者入口(developer portal,如常用來建這種入口的開源框架 Backstage),讓幾十個團隊自助取用(組織尺度的真實案例見 Spotify 的 Backstage 與平台工程)。那套投資對一個人或小團隊是過重的——但鋪路的原則可以整組搬下來,落地成三個零件:

  • 一個 repo 當唯一真實來源:機器的狀態(設定、腳本、image 定義)全部在 git,任何一台隨時 git pull + 部署就長回來。手動放上去的檔案下次重裝就消失,不算鋪在路上。
  • 一支冪等的部署腳本:把 image build、設定 scaffold、機密佔位收進一個可重複跑的入口,跑一次就把環境長出來,走的人不必記每一步 docker 指令。
  • 一條排好序的路徑:也就是這篇——把要讀要做的內容排成順序,讓新的一台不必自己拼湊「先選型還是先連線」。

這三者到齊、且持續維護,就值得用 paved road 的語彙描述你已經在做的事:可重現、低決策、照著走就對。組織版的 developer portal 是把這三件事放進一個網頁自助入口;個人版把它們放進一個 repo 加這篇路標,不需要入口網站也成立。借「paved road」這個組織尺度的詞、套在個人尺度確實偏重——借的是它的原則,不是它的規模。

這條路:從零到可用的遠端 agent 工作機

每一步先決定一件事、走完給你一個明確的產物,再進下一步。卡住時往對應的深入文章走。

步驟這一步決定什麼走完你有什麼深入
1 形態機器放家用機還是 VPS一台選定形態、延遲與隔離都想清楚的目標機遠端 agent 工作機選型
2 連線地基怎麼初次連進機器、把 repo 同步上去、再換成跨網路穩定的位址連得進去、機器上有 dotfile、換網路也連得到的定址外部連入與 bootstrapTailscale 深入
3 連線工具用什麼連、斷線怎麼辦、手機端怎麼連一組連得穩、斷得起、手機也能上的工具連線與同步工具選型手機終端 client 選型
4 session 常駐怎麼讓 session 留在遠端、斷線不掉工作一個 detach 後任務仍在、重連就接回的常駐 sessionzellij session 生命週期tmux 持久化
5 裝 agentagent 怎麼裝、三顆機密(Claude Code / GitHub / 通知)怎麼注入、跑完怎麼通知一個認證解耦、可 clone/push、跑完會推播的 agent在 container 裡跑 Claude Code
6 無人值守互動提示 / 結果出不去怎麼解一台可以放著走人、自己跑完長任務的機器無人值守的長任務
7 端到端驗證前六步串起來實際跑不跑得通一次從 image 到手機端跑通的完整驗證實作記錄

步驟 1 形態決定的是後面所有步驟的約束:家用機延遲低、但要處理浮動 IP 與對外曝露;VPS 有固定位址、但要付月租且環境隔離自己扛。先定這件,因為它改寫步驟 2 的連線策略與步驟 5 的信任邊界。

步驟 2 連線地基是三件事的疊放、順序不能顛倒:先解決「第一次怎麼連進機器」——新機器還沒有任何遠端工具,只能靠 console 或區網 SSH 初次接觸、把 dotfile 同步上去;拿到能操作的 session 後,再裝 Tailscale、讓這個位址換成換網路也穩定的 tailnet 位址(機器名跟著機器走、不隨 LAN IP 漂移)。倒過來做不成——裝 Tailscale 這件事本身就需要先有一條連進機器的路。這步走完,機器才從「一台裝好的 OS」變成「你連得到、且帶著你設定的機器」。

步驟 4 session 常駐是後面「無人值守」的前提:把 session 用終端機多工器(tmux / zellij)常駐在遠端,SSH 斷了 session 不受影響、重連 attach 就回到原狀。少了這層,斷線會把跑到一半的長任務一起帶走;agent 就跑在這個常駐 session 裡,你的連線斷了它照跑。

步驟 5 裝 agent是這條路上唯一牽涉多顆機密的一步:Claude Code 對 Anthropic、GitHub token 對 git 操作、ntfy topic 對推播,三顆職責正交、但走同一套 --env-file 注入。把這步的認證想成「三顆獨立機密、同一個注入模式」,就不會把 GitHub 認證誤當成 Claude Code 認證的延伸。這裡也劃清兩條邊界:三零件裡的「部署腳本」只做到機密的佔位與注入流程,三顆機密的真值仍是手填、不進 repo——可重現的是流程、不是機密本身;container 則跑在步驟 1 選定的那台機器裡(VM、VPS 或家用機都行),步驟 7 的實作記錄就是這整疊在一台 VM 上跑通的樣子,不是路徑中途換了隔離策略。

步驟 6 無人值守解的是幾個會讓「放著走人」破功的障礙:sudo 之類的互動提示卡住自動執行、任務跑完但結果推不回你手上——斷線把任務殺掉這條,已由步驟 4 的常駐 session 擋住。這步跟步驟 5 的推播通知互補——通知是「跑完叫你回來」,無人值守是「你不在時它自己跑完」。

逃生口:路是預設,不是牢籠

paved road 的重點是預設路徑好走,不是禁止離開。這條路每一步都留了偏離的空間,且偏離本身也在路上:

  • agent 本身用不用 Claude Code 是這條路最大的預設、也最可換:步驟 5-7 以 Claude Code 為例,但「認證解耦、在受限環境裡跑、跑完通知」這套骨架對別的 coding agent 一樣成立,換 agent 主要改步驟 5 的裝法。
  • 步驟 1 的家用 vs VPS 就是一個岔路,不是唯一解——選型文給的是判準,不是規定。
  • 連線用 ssh 還是 mosh 依情境切換:坐著打中文用 ssh、移動漫遊用 mosh,兩條都在路上。
  • agent 的 --dangerously-skip-permissions 開不開取決於這台機器的爆炸半徑:用完即丟的隔離機可以開,有真實資料的機器不該開。

判準是:偏離要有理由、且偏離後仍能回到可重現的狀態(改動進 repo、不是手放)。一條禁止任何偏離的路會變成牢籠、逼人繞過它;一條連偏離都納入判準的路,才是走得久的路。

為什麼一個人也值得鋪路

重複性的決策成本,一個人一樣要付。第二次架同類機器時又在「先選型還是先連線」上猶豫、又重查一次 token 怎麼注入,就是缺一條路的訊號。把它鋪好一次,後面每一台都省下這段。

路也會爛——工具版本漂移、某步的前提變了、文件跟實作對不上。個人尺度的活文件機制不需要平台團隊:repo 是 SSoT 讓每台機器能重現,事後把踩到的意外整理成規則、回灌進這條路的步驟。這篇本身也是活的——步驟順序或工具換了,改這張路標,而不是讓每個人重新拼一次。

下一步路由