工程師 Q&A

把工作交給 AI 之前,先搞懂平行沙盒怎麼運作、你的程式碼和資料會去哪裡、什麼會留下來。這頁寫給人看;AI 讀的是 SKILL.md 與工具參考。

平行沙盒是給 AI 操作的:開箱子、設定、刪除,都是你用一句話跟 AI 說要什麼,它去呼叫對應的工具或 REST。下面出現的 sandbox_* 工具與 /v1/... 端點,是讓你知道它實際做了什麼。

平行沙盒能幫我做什麼?

  • 你的 AI(Claude Code、Codex、Cursor、Gemini CLI,或任何接得上 MCP 的 client)替每件工作開一個箱子:一台遠端的 Linux 小型虛擬機,裡面有 Docker、git、Node、Go、Chromium 與虛擬螢幕。
  • AI 在箱子裡把你改的服務跑起來,開真的瀏覽器或 Android、iPhone 模擬器去測,截圖、錄影,最後交給你在 App 上試(「待驗收」)。你圈出問題、用說的回報,回饋會回到原本的對話。
  • 一件工作一個箱子,彼此隔離。好幾件工作可以同時做,不會互搶 port、資料庫或你本機的環境。
  • 箱子裡沒有 AI。動手的是你自己的 AI,它透過 MCP 工具操作箱子;平行沙盒本身不會把你的程式碼交給任何 AI 模型。

箱子是什麼規格?

x86_64 的 Linux(Debian 12)。每個大小單位是 2 vCPU、8 GB 記憶體、40 GB 磁碟,開箱時選 1、2、4 或 8 個單位。內建 Docker、git、Node、Go、Python、PHP、Chromium 與虛擬螢幕;需要時再加 Java、Android、.NET、Rust、Flutter 的工具鏈。

從哪裡開始?

  1. 先看實際流程:範例 repo 有兩個公開 repo,本機 docker compose up 就能跑,頁面上也列了在箱子裡跑的每一步。
  2. 接上:把快速開始的那一句貼給你的 AI。它會安裝 skill,並用 OAuth 登入你的帳號;你不用把任何金鑰交給它。
  3. 第一件工作挑小的,例如「在箱子裡把這個 repo 跑起來,開瀏覽器測首頁,交給我驗收」。

架構長怎樣?

平行沙盒架構:你的電腦、平行沙盒(AWS)、你的網路

元件 在哪 做什麼
你的 AI client 你的電腦 呼叫 MCP 工具:開箱子、下指令、截圖、交件
本機轉接器 parallelsandbox-mcp(選用) 你的電腦 只有要把本機資料夾送進箱子(sandbox_sync),或把檔案拉回本機(sandbox_pull)時才需要
控制面 AWS MCP 與 REST API、帳號、secrets、計量
主機與箱子 AWS 每個箱子是一台獨立的小型虛擬機,有自己的磁碟與網路,彼此隔離
網址轉發 AWS 把 https://<id>-<key>.box.parallelsandbox.com 這類網址轉到箱子裡的 web 服務
儲存與 registry AWS 截圖錄影、取出的檔案、編譯快取、你發布的 image
Android 模擬器 AWS sandbox_device 租的 Android 裝置
iPhone 模擬器 專用的 Mac 主機 sandbox_device 租的 iPhone 裝置
連接器(選用) 你的網路 你跑的一個容器,主動往外連平行沙盒,讓箱子連得到你列出的 dev 資料庫與服務

一件工作從頭到尾怎麼跑?

  1. 開箱:AI 呼叫 sandbox_start,說明這個箱子要做什麼,宣告要跑哪些服務、聽哪些 port,要帶哪些 secrets、接哪個環境。箱子從不含任何帳號資料的乾淨快照開起來。
  2. 放程式碼:AI 在箱子裡 git clone,或用 sandbox_sync 把你本機的工作區經平行沙盒的 API 傳進箱子。
  3. 跑與測:AI 用 sandbox_exec build、啟動服務、跑測試,用 sandbox_shot 截圖錄影。
  4. 交件:AI 用 sandbox_review 把箱子交給你。它出現在 App 的「待驗收」,你打開網頁或模擬器實際操作,有問題就圈起來講。
  5. 收掉:驗完 AI 呼叫 sandbox_stop(或你在 App 按「收掉」),箱子的磁碟跟著刪除。要留的東西在那之前 commit、push,或拉回本機。

箱子會留多久?

  • 10 分鐘沒有動作 → 凍結:不扣點,記憶體與 /work 都保留,下一次呼叫幾秒內喚醒。
  • 最後一次使用後 24 小時 → 自動停掉,磁碟刪除。要留久一點,跟 AI 說「這個箱子留 3 天」,它開箱時會設好,最多 7 天。
  • 停掉之後,箱子的網址失效,/work 不會回來;新箱子有新的網址。

前後端拆成好幾個 repo,箱子怎麼跑?

同一個箱子能跑好幾個 repo 嗎?

可以。箱子就是一台 Linux,AI 可以把好幾個 repo clone 到 /work 底下,用 docker compose 或各自的指令一起跑。服務之間用名字互相找(例如 api:3000),跟你在本機用 compose 一樣。

還是每個服務一個箱子?

也可以。服務分在不同箱子時,用 link 把 B 箱子裡的一個名字指到 A 箱子的某個 port:B 裡的程式照原本的主機名呼叫,設定不用改。適合兩個人(或兩個 AI 對話)各改一個服務、又要接起來測的時候。

兩個人各開的箱子接得起來嗎?

接得起來,前提是同一個帳號:一個團隊共用一個平行沙盒帳號(做法見團隊設定),箱子、環境、secrets、發布的版本與點數都在這個帳號裡。link 只連同一個帳號的箱子。帳號目前沒有成員或角色之分。

這次沒改的服務怎麼辦?

看它在哪裡:

情況 做法
跑在你的 dev 或 staging(AWS、Kubernetes、辦公室) 建一個環境:在你的網路裡跑連接器,列出要給箱子連的 host:port。箱子用原本的主機名連到 dev 上的那一份,資料庫、Redis、內部服務都一樣。
是 HTTP 服務,而且有網址 開箱時給 externalBaseUrl,箱子裡這個服務名字的 HTTP 請求會轉到那個網址。
別人已經 build 好、發布成版本 開箱時在 services 宣告那個版本,箱子直接拉 image 來跑,不用重 build(跑發布好的版本)。

環境由你的 AI 用 REST 設定,沒有畫面;你要做的只有在自己的網路裡跑連接器(一行 docker run)。環境改了位址或設定,之後開的箱子才拿得到。

不在我手上的服務(別的團隊、第三方)呢?

你的網路連得到的,箱子就接得到:在連得到它的地方跑連接器,把它的 host:port 列上去。只接受固定 IP 的外部服務也一樣列上去,流量就經連接器從你的網路、用你的對外 IP 出去。你自己都連不到的服務,箱子也連不到。

dev 上的服務能反過來呼叫箱子裡改的那一份嗎?

用內網的方式不行:連接器只讓箱子連出去,你的網路上沒有任何東西能經它連進箱子;dev 上用內網主機名呼叫的服務,照樣呼叫 dev 上的那一份。

箱子的公開網址(https://<id>-<key>.box.parallelsandbox.com)倒是任何連得上網際網路的程式都打得開,所以 webhook 這類回呼可以指到它。

要測「呼叫端 → 改過的服務」,最簡單是把呼叫端也放進同一個箱子,或放進另一個用 link 接過來的箱子。

我的程式碼與資料

箱子裡一定會有我完整的 repo 嗎?

不一定,看 AI 怎麼放進去:

  • git clone:箱子自己去拉。私有 repo 要先存一個 token 當 secret(例如 GITHUB_TOKEN),AI 開箱時點名帶進去。
  • sandbox_sync:從你的電腦送。只送 git 有追蹤的檔案,加上沒被 .gitignore 排除的新檔;也可以只送某個 commit 的樹。被 ignore 的檔(多數專案的 .env、node_modules)預設不送。

不想被送上去的檔案,放進 .gitignore,或請 AI 只送某個 commit。

程式碼和資料會傳到哪裡?

  • 箱子、控制面、儲存、registry、log 服務都在 AWS 上。
  • 用 iPhone 模擬器時,你 build 出來的 App 會送到專用的 Mac 主機上安裝執行。
  • 箱子會連到你的程式自己會連的地方:npm、GitHub、你的 dev、第三方 API。
  • 箱子連你 dev 的流量,經平行沙盒轉給你的連接器;連接器到平行沙盒走 TLS,你的服務自己的 TLS(例如資料庫的 SSL)從箱子到你的服務中間不會被解開。
  • 平行沙盒本身不把你的程式碼交給任何 AI 模型。你的 AI 看到的東西(指令輸出、截圖)會經你的 AI client 送到你用的 AI 供應商,跟你在本機用它時一樣。
  • App 裡的語音輸入會即時轉成文字,聲音與文字都不保存。

完整的說明在隱私權政策。

箱子停掉之後,磁碟真的會清掉嗎?

會:

  • 停箱時,那台小型虛擬機被關掉,它的磁碟檔案隨即刪除。主機的磁碟是加密的,主機收掉時整顆刪除。
  • 凍結中的箱子,記憶體與 /work 可能會暫存到加密的儲存空間;箱子恢復或停掉時就刪除。另外設了最長 10 天的保險上限,正常情況下等不到這麼久。
  • 要講清楚的是:這是「刪檔+加密磁碟」,不是逐 block 覆寫。

什麼會留下來、留多久、能不能刪?

要刪什麼,直接跟你的 AI 說(例如「刪掉這個箱子的截圖」「清掉編譯快取」),它會呼叫表裡的 REST。

資料 在哪 留多久 怎麼刪
箱子的 /work(程式、容器、資料庫) 主機上箱子的磁碟 停箱就刪;最後一次使用後 24 小時(最多可設 7 天)自動停 sandbox_stop,或 App 的「收掉」
sandbox_get、sandbox_pull 取出的檔案 AWS 上的儲存空間 約 1 天 自動刪除
截圖與錄影 AWS 上的儲存空間 7 天 DELETE /v1/boxes/{id}/media,一次一個箱子
凍結封面、交件卡片圖 AWS 上的儲存空間 每個箱子只留最新一張 同上
編譯快取(sandbox_build) AWS 上的儲存空間 每個帳號最多 20 GB,從最舊的刪起 DELETE /v1/build-cache,整個帳號一次清
發布成版本的 image 帳號的 image registry 沒有期限 DELETE /v1/versions/{id},沒有別的版本用同一個 image 時連 image 一起刪
log 與 source map log 服務 到你刪掉 log project DELETE /v1/projects/{id}(log.parallelsandbox.com)
secrets 控制面資料庫,加密 到你刪掉 App 設定裡的 Secrets,或 DELETE /v1/secrets/{name}
環境的服務設定(環境變數) 控制面資料庫,加密 到你刪掉 DELETE /v1/environments/{env}/services/{name}
App 裡的訊息與活動紀錄 控制面資料庫 7 天 自動刪除

刪除帳號時,運行中的箱子會停掉,上面這些最晚 30 天內全部刪除。REST 的細節見 REST。

箱子的網址誰打得開?能加登入或限制 IP 嗎?

  • 箱子的網址長這樣:https://<id>-<key>.box.parallelsandbox.com。key 是隨機的,不對就跟不存在一樣回 404;拿到完整網址的人就打得開,所以請把它當分享連結看待。
  • 要限制來源,替帳號設 IP 白名單:跟你的 AI 說「箱子網址只開給公司的 203.0.113.0/24」,它會呼叫 PUT /v1/box-access。約 3 秒後,帳號所有箱子的網址只接受名單內的 IP,其他來源一律 403、也不會喚醒凍結的箱子。名單整個帳號一份,最多 50 筆,目前只比對 IPv4;要關掉就請它設成空的。
  • 適合有公司 VPN 或辦公室固定出口 IP 的團隊。同事打開交件網址、你用手機行動網路測時,都要從名單內的 IP 連(例如先連 VPN)。
  • 不另外加登入:交件的網址要能直接給同事試,同事不需要平行沙盒帳號。
  • 接手頁與 App 不靠網址裡的 key:接手連結是控制面發的一次性、會過期的 token,App 用你的登入。

資料庫與測試資料

每次開箱都是全新的環境嗎?

是。每個箱子從同一份乾淨快照開起來,箱子裡跑的資料庫只活到箱子停掉。同一個箱子在凍結期間會保留(見箱子會留多久?),但沒有像 Kubernetes PVC 那樣跨箱子共用的持久磁碟。

我服務的環境變數(DATABASE_URL 這類)怎麼進箱子?

存成環境的「服務設定」:從 AWS ECS 匯入(連同它引用的 SSM 參數與 Secrets Manager 值),或上傳一份 .env。開箱時帶這個環境,箱子裡就有 /work/.sbx/env/<服務>.env,改過的服務用它啟動,設定跟在 dev 上一樣。設定加密保存,API 只回變數名稱;改了設定,之後開的箱子才拿得到。

可以直接連 dev 的資料庫嗎?

可以:環境+連接器,再加上上一題的服務設定。要注意:改過的服務用 dev 的設定啟動時,它的 migration 與寫入都會真的落在 dev 的資料庫。

我有一套測試資料,想每次接著用、不要每次 migration 和 seed?

把那個資料庫放在你自己的網路(例如 dev 環境裡專門給測試用的一台 Postgres),經環境的連接器讓箱子連過去。資料、migration 狀態都在你手上,每個箱子都接著用。這是目前唯一會一直留著的做法:平行沙盒不替你保存箱子裡的資料庫。

想每次都從乾淨的資料庫開始?

在箱子裡執行 psbx-testdb up <名字>,會開一個全新的 Postgres 16(--mysql 則是 MySQL 8.0),把 DATABASE_URL 寫到 /work/.sbx/testdb/<名字>.env;psbx-testdb reset <名字> 把它清回全新,psbx-testdb gotest ./... 讓每個 Go 套件各有一顆資料庫。其他資料庫照你平常的 docker compose 起。

一句話:什麼會留、什麼不會?

  • 不會留:箱子裡的一切(程式、容器、資料庫、/work),停箱就沒了。
  • 會留:你自己網路裡的東西(經連接器連的資料庫)、registry 裡發布的 image、編譯快取,以及上面表格列的保存檔案,各有各的期限。

Secrets

secrets 存在哪?怎麼進箱子?

  • 整個帳號共用一份清單,存在控制面,加密保存。不是每個箱子各一份。
  • 預設什麼都不進箱子。AI 開箱時點名要哪幾個,箱子被認領的那一刻才拿到,成為每個指令的環境變數;箱子停掉就跟著消失。
  • 值存了就讀不回來:工具回傳、sandbox_status、平台 log 裡都只有名字。
  • 進了箱子就是環境變數。指令把它印出來時,回到你的 AI 的內容會把它遮成 ****(8 個字以上的值),環境放進箱子、看起來像密鑰的 dev 設定也一樣;但箱子裡的檔案(例如程式自己寫的 log)仍是真的值,可能含有密鑰的檔案就別拿給你的 AI。
  • 不要把平行沙盒自己的 API key 存成 secret,箱子不需要它。

有沒有設定畫面?

有。在 app.parallelsandbox.com 右上角齒輪 → 設定 → Secrets,可以新增、換值、刪除,列出名稱與更新時間,值永遠不會顯示。在 App 填的值不經過你跟 AI 的對話,也就不會送到 AI 供應商;token 在你手上時,建議走這裡。也可以請 AI 用 REST 存(Secrets)。

程式要用 AWS(S3、SQS)的權限怎麼辦?

不要存長期金鑰。在環境上指定一個 AWS 角色,箱子用 OIDC 換一小時到期的暫時憑證,跟 GitHub Actions 連 AWS 是同一套做法(箱子裡的 AWS 權限)。平行沙盒手上沒有任何能進你 AWS 帳號的長期權限。

費用

  • 箱子從 ready 起按分鐘扣點,凍結的箱子不扣。10 分鐘沒有動作就會凍結,所以忘了收也不會一直燒錢。
  • 往外的流量、log、保存的檔案另外計量;環境與連接器不收費。費率見點數。

範例 repo

repo 示範什麼
example-compose-app Node API+Go worker 用 compose 接在一起,Playwright 在箱子螢幕上的真瀏覽器跑 e2e,錄影、截圖、交件
example-web-with-logs 網頁掛 log SDK,錯誤的 stack 用 source map 還原;write key 用 secret 帶進箱子

每一步的工具呼叫在範例 repo。多個服務、dev 分在 AWS 與辦公室兩個網路、接連接器、從另一個箱子用改過的服務的完整例子,在團隊設定。