OpenHands 1.24 教學:Agent profile、Secrets 與 Docker 權限檢查
截至 2026-09-30,OpenHands 官方 release page 已列出 v1.24.0。這次新增雲端 Automation 對話唯讀分享、依 backend 與組織分開保存 OpenAI 訂閱狀態快取,以及 Conversations 分組資料夾的整批展開/收合。升級檢查時,先分清楚自己使用本機、雲端或遠端 Docker backend,再驗證對應功能。
Agent profile 的 Secret 範圍、Docker conversation runtime 設定與 automation profile 仍值得逐項驗收。這些設定不能取代對 workspace mount、MCP server 和實際任務權限的檢查。
直接答案是:先辨認執行 backend,接著切換組織與對話視角,確認模型清單、快取和 Automation 對話都符合預期。 本文依 OpenHands v1.24.0 release、相關合併 PR、CLI Quick Start 與官方 local setup 文件整理;沒有在本機啟動 OpenHands,命令和實際 UI 仍應在你的環境驗證。
1.21 到 1.24:先確認自己使用哪一種執行路徑
| 版本 | 官方 release 記錄 | 對讀者的判斷 |
|---|---|---|
| 1.21.0 | 支援向 Docker server 要求 Docker execution workspace | 這是遠端 Docker server 的 workspace 路徑;不要直接把它當成下面的本機 serve —mount-cwd 指令 |
| 1.22.0 | cloud backend 可經 app server 測試 remote MCP server;Git Sync 開放給 cloud backend 的 org admin | 使用雲端 backend 的團隊才需要檢查這兩項權限與連線 |
| 1.23.0 | macOS universal DMG 內含各架構 runtime;新增 Light+ 與 Solarized Light theme | macOS 使用者可檢查最新 DMG;CLI 使用者不必為主題更新切換安裝路徑 |
| 1.24.0 | 雲端 Automation conversation 可唯讀分享;OpenAI 訂閱狀態與模型清單快取依 backend/組織區分;分組 workspace 可整批展開或收合 | 分別驗證雲端成員的閱讀範圍、backend/組織切換後的模型資料,以及目前分組中可見的資料夾 |
v1.24 升級時要驗證的三個邊界
Release note 只列出功能名稱,升級後仍應確認它套用在哪個 backend,以及實際使用者能看到什麼:
- 切換 backend 或組織後重新看訂閱狀態與模型清單:v1.24 將 OpenAI 訂閱狀態與模型查詢的快取 key 加上 backend ID 和組織 ID。若你同時使用本機與雲端 backend,分別切換兩邊,再確認顯示的帳號和模型目錄沒有沿用前一個選擇的快取資料。這是用來驗證前端顯示,不代表 API 金鑰或訂閱已在兩個 backend 間共用。
- 從 Automation 活動紀錄打開分享對話:官方 PR 描述的是已登入的同一組織成員透過 cloud backend 開啟唯讀 conversation;畫面沒有輸入框。用 Automation owner 和同組織另一位已登入成員確認檢視方式,再檢查對話是否可讀。唯讀檢視描述的是 conversation 頁面,不應推論成 Automation 執行本身沒有寫入權限。
- 確認分組資料夾整批切換只影響目前可見項目:在 Conversations 使用 workspace 分組時,標題可收合或展開所有可見資料夾;篩選掉的資料夾保留原本狀態。切到時間排序或沒有資料夾的畫面時,標題仍是一般標籤,不是整批操作按鈕。
這三項查核把「畫面已更新」拆成資料快取、雲端讀取權限和側欄狀態,避免把某一個 UI 結果誤當成另一個 backend 的設定或權限證明。
Release notes 列出功能名稱,沒有替每個部署環境提供可通用的 Docker server 設定值。若你要設定遠端 workspace 或 cloud MCP,請先確認所用 backend 的管理文件和實際權限,不要直接複製本機 GUI 的 Docker 指令。
Agent profile、Secrets 與 Automation 的 1.20 更新
| 1.20 變更 | 對工作流的意義 | 升級後先檢查什麼 |
|---|---|---|
| Agent profile 可選擇該 profile 可用的 Secrets | 不同任務可以使用不同的憑證範圍,不必把所有 Secret 暴露給每個 Agent | profile 的 Secret allow-list、實際執行身份、失敗時的拒絕行為 |
| Docker conversation runtime settings 可被傳遞 | 對話建立的 container 可以沿用預期的 runtime 設定,減少手動啟動與對話狀態不一致 | image、workspace mount、環境變數、資源限制與網路邊界 |
| Automation 可選擇已儲存的 Agent profile | 排程工作可以固定模型、工具與憑證邊界,而不是依賴建立者目前畫面上的設定 | automation owner、選用 profile、workspace、Secret 與實際 task outcome |
| Mock-LLM profile 與 ambient Secrets 隔離 | 測試 profile 不應因背景環境存在 Secrets 就意外取得它們 | 測試環境是否真的沒有把環境變數或共用 Secret 帶入 |
這些變更不是「建立 profile 後就自動安全」。profile、Docker、automation 和 workspace 是四個互相影響但不能互相代替的邊界;要用小任務逐一驗證。
用 Agent profile、Secrets 與 Automation 的驗證順序
不要先把所有既有 automation 切到新版本。建議依序做:
- 記錄目前 OpenHands、CLI launcher、agent-server、automation 與 Docker image 版本。
- 列出現有 LLM profile、可用 Secrets、MCP server、workspace mount 與 automation owner。
- 建立一個只含測試資料的 workspace,先執行不修改檔案的任務。
- 建立或複製一個低權限 Agent profile,只選取該任務需要的 Secret。
- 在新的 conversation 檢查 Docker runtime 設定與實際 workspace path,再測試最小寫入任務。
- 最後才讓一個可停用的 automation 使用已儲存 profile,確認 task outcome、權限錯誤與執行身份。
如果舊 conversation 還像在使用舊模型或舊設定,不要只看 profile 名稱;重新啟動 conversation,並從事件、設定頁與實際模型呼叫確認。這篇文章的版本資訊是 release 與文件查核,不是本機執行紀錄。
安裝 CLI launcher 與啟動 GUI
官方目前的本機 launcher 流程需要 Python 3.12 以上、uv 與可用的 Docker 環境。先依 uv 安裝文件 完成 uv,再安裝 OpenHands:
uv tool install openhands --python 3.12進入準備交給 Agent 的專案目錄,從該目錄啟動並掛載目前 workspace:
cd /path/to/your-projectopenhands serve --mount-cwd完成後開啟:
http://localhost:3000第一次只想確認介面與 Docker 是否可用,可以在不含敏感檔案的測試目錄執行 openhands serve。不要為了方便把整個家目錄掛載給 Agent;--mount-cwd 不是唯讀模式,掛載範圍內的檔案可能被讀取或修改。
這個指令啟動本機 GUI server,並把目前目錄掛載給 Docker conversation;它和新版 CLI 的互動式 terminal mode 是不同路徑。若要固定 Docker image、agent-server tag 或啟動參數,請依目前的 OpenHands Local setup 文件 為準。舊教學中的 all-hands-ai image 路徑或單一 image tag 不一定能和目前 launcher 組合。
建立 LLM profile,先限制 Secrets 再談模型
開啟 OpenHands 後到 Settings → LLM 設定 provider、model、Base URL 與 API Key。實際可用模型、名稱與費用會隨供應商和方案變動,請以目前設定頁與 provider 文件為準,不要把文章中的 model id 當成永久答案。
建議 profile 以任務或權限命名,例如:
docs-readonlyrepo-test-with-registryrelease-maintainer建立 profile 時用「這個任務真的需要什麼」反推 Secret 範圍:
- 只讀文件任務不應取得 repository write token、production credential 或發布金鑰。
- 需要安裝相依套件的任務,先判斷是否真的需要 registry token;能用公開套件就不要附帶私有憑證。
- 需要 Git push 或部署的任務,將它分成另一個明確 profile,並讓執行者知道該 profile 有外部副作用。
- 測試 profile 要檢查 ambient environment 是否被意外帶入,不要只在設定頁看到 Secret 名稱就判定隔離成功。
儲存後,在新的 conversation 以最小任務驗證:
先讀取 README 與套件腳本,不要修改檔案。回報目前 workspace 的絕對路徑、使用的 Agent profile、可用工具與你沒有取得的權限。如果 profile 有 MCP server 範圍,也要逐一確認只連到任務需要的 server。profile 能限制 Secret,不代表 MCP server 或掛載的檔案會自動變成最小權限。
Docker conversation runtime 要檢查哪些設定
1.20 的 Docker conversation runtime settings forwarding 對可重現性有幫助,但「設定能被傳遞」不等於設定內容適合所有任務。建立 conversation 後檢查:
- Image 與版本:記錄實際 image、agent-server 與 launcher 版本,避免只看 UI 顯示的產品版本。
- Workspace mount:確認 container 內的專案路徑對應到預期的 host workspace,沒有意外掛載上層目錄。
- 環境變數與 Secrets:區分一般設定、短期 token 與高敏感憑證;不要把 Secret 用明文寫進 prompt、Dockerfile 或 repository。
- 網路與資源:任務若不需要外網,先關閉或限制;檢查 CPU、記憶體與 timeout,避免失敗只顯示成模型無回應。
- 可回復性:先在 branch 或 worktree 執行,再以外部終端機查看
git status --short與 diff。
若你需要同時讓多個 coding agent 工作,可以先看 Git worktree 管理多個 AI coding agent。分開 worktree 不能取代 Secret 或 container 權限檢查,但能降低互相覆蓋檔案的機會。
Automation 如何使用已儲存 profile
升級後不要假設 automation 會自動沿用你最近一次手動對話的 profile。建立或編輯 automation 時,明確選擇已儲存的 Agent profile,再檢查:
- automation 的 owner、view/manage/edit/re-enable 權限。
- 實際選用的 model、Agent profile、MCP server 與 Secret allow-list。
- automation 執行時的 workspace、branch、container image 與 Docker runtime。
- 成功、失敗、取消、停用與重新啟用的 task outcome 是否清楚。
- 失敗後誰可以重新啟用,是否會把停用原因或敏感錯誤暴露給不需要的人。
第一次測試用可刪除或可停用的 automation,內容只做唯讀盤點:
列出目前 workspace 的 README、套件管理器與可執行測試。不要修改檔案、不要安裝套件、不要連線到外部服務。回報使用的 profile、workspace 路徑與 task outcome。確認結果後,再增加一個能由 Git diff 驗證的小修改。不要用 production deploy、刪檔或旋轉憑證當第一個排程測試。
Workspace 與 Agent 權限的基本邊界
在把 repository 交給 OpenHands 前,先在自己的終端機執行:
git status --shortgit branch --show-currentdocker ps接著確認目前目錄沒有不想被讀取的 .env、SSH key、cloud credential 或未提交的敏感 diff。第一個 task 先要求唯讀,第二個 task 才建立可回復的小檔案:
建立 hello-openhands.txt,內容只有 OpenHands is ready。完成後讀回檔案,執行 git diff -- hello-openhands.txt,且不要修改其他檔案。最後回到外部終端機驗證:
git status --shortgit diff -- hello-openhands.txt這個流程能分別確認 Agent 看到的目錄、模型工具呼叫、檔案寫入與實際 diff。看到「任務完成」不等於檔案、branch 與 profile 都符合預期。
常見故障排除
Launch docker client failed
先執行 docker ps。如果 Docker daemon 本身失敗,先處理 Docker Desktop、socket、WSL 2 engine 或 Linux service,再重新啟動 OpenHands。不要先重裝 launcher,否則會把環境問題和版本變更混在一起。
啟動後顯示 Permission Denied
先檢查狀態目錄與 workspace 擁有者:
ls -ld ~/.openhandsls -ld /path/to/your-project只在確認路徑無誤後修正該目錄的 owner,不要把整個家目錄開成所有人可寫。修改前也要確認 container 內的使用者和 host mount 權限一致。
Windows 能開介面,但掛載路徑異常
確認 uv、openhands 與 Docker 相關命令都從同一個 WSL distribution 執行,再到 Docker Desktop 檢查 WSL 2 engine 與該 distribution 的 integration。若 Files view 路徑不對,先停止服務,回到正確的 WSL workspace 重新執行 openhands serve --mount-cwd。
Agent 像聊天機器人,不會操作檔案
依序檢查:
- 是否以
--mount-cwd啟動,且啟動時所在路徑正確。 - Files view 的 workspace path 是否就是目標 repository。
- host 與 container 內的使用者是否有必要權限。
- conversation 使用的 profile 是否已儲存,且 Secret、MCP 與 model 都指向預期環境。
- Docker、provider 與 API Key 是否正常;不要把工具格式錯誤直接歸因於 workspace。
如果 Apple Silicon 搭配 Colima 出現 SIGILL、container exit 132 或 Disconnected,請改看 OpenHands + Colima 的 SIGILL 排錯流程,不要和一般 API Key 或 mount 問題混在一起。
常見問題
Q: 1.20 的 Agent profile 選了 Secret,就代表任務只能看到這些 Secret 嗎?
A: profile 的 Secret 選擇是重要的限制邊界,但仍要檢查 container 環境變數、MCP server、workspace 檔案與宿主機權限。用一個不含敏感資料的測試 workspace 驗證實際可見範圍,不要只看設定畫面。
Q: Automation 會自動使用我手動對話最近選的 profile 嗎?
A: 不要這樣假設。1.20 提供 automation 選取已儲存 Agent profile 的路徑;編輯 automation 時要明確選擇,再以唯讀 task 驗證 model、Secret、workspace 與執行身份。
Q: OpenHands 一定要使用 Docker 嗎?
A: 依執行模式而定。互動式 CLI、透過 Docker 建立 workspace 的本機 GUI server、cloud backend 與遠端 Docker server 是不同路徑。請依選用的 backend 文件驗證,不要把三種模式混成一組啟動參數。
Q: 新增 LLM profile 後,舊 conversation 為什麼還像在用舊模型?
A: 設定通常會套用到新的 conversation,舊 conversation 可能需要重新啟動或明確切換 profile。先確認設定頁、profile 名稱與下一次 LLM call,再判斷是否是 backend 或權限問題。
參考資料:
OpenHands v1.23.0 release notes
OpenHands v1.24.0 release notes
OpenHands PR:依 backend 與組織區分 OpenAI 訂閱快取
OpenHands PR:雲端 Automation 對話的唯讀分享
OpenHands PR:Conversations 標題整批展開或收合資料夾
OpenHands v1.21.0 release notes