OpenHuman 的八個月:權限政策從預設開啟改成選用的那一天
2026 年 1 月 26 日,OpenHuman 的 main 分支有了第一筆 commit,訊息是「Initialize Tauri application with React and TypeScript setup」。GitHub 上這個 repo 的建立時間卻是 2 月 18 日,晚了 23 天。為什麼 commit 比 repo 還早,我沒有查證。
八個多月後,它變成一個會住在你電腦裡、能讀信、能跑 shell 的個人 agent。你要裝之前,第一個想問的大概是:它要動手跑指令之前,會不會先問我?
這題的答案在 9 月 23 日換過一次。而且原始碼裡有兩個都跟「審核」有關的開關,你得先講清楚問的是哪一個,答案才有意義。
一個核心,外面套四種殼
OpenHuman 的 GitHub 簡介寫得很滿:「the fastest, cheapest, most efficient open-source agent harness. Written in Rust」。這是它自己說的。README 對架構的描述是這樣寫的:
OpenHuman is a Rust core with a desktop app, a browser UI, a terminal client, and a Rust library wrapped around it. The same core runs all four.
核心在 crates/openhuman-core,按領域切成 agent、memory、channels、tools、security。外面那四種殼分別是 Tauri v2 的桌面 App、瀏覽器 SPA、ratatui 寫的終端介面,以及給開發者嵌進自己程式的 openhuman-embed。桌面版的核心其實是 App 裡的一個 tokio task,前端每次啟動拿一組新的 bearer token,用 JSON-RPC 打本機 loopback。
核心用 GPL-3.0 開源,LLM 代理、搜尋、OAuth 代管這些託管服務走 TinyHumans 的訂閱和點數。開發組織是 TinyHumans,README 列的 Creator 是 @senamakel。
春天:先把東西堆上去
早期的 commit 標題看得出順序。2 月 1 日,PR #11「Adopt supermemory patterns into AI memory system」;2 月 3 日,PR #26「Feat/javscript skills」(拼字照原樣)。記憶系統和用 JavaScript 寫的 skills,在第一個月就進來了。這兩筆我只讀到標題,沒讀內容。
3 月 31 日,Releases 列表裡最早的一個 v0.49.32 出來。列表裡看得到的第一個版號就是 0.49,不是 0.1。
4 月 17 日這筆,四個月後會被拆掉。PR #641 把 CEF 設成預設的 webview runtime,commit 訊息寫的是 default = ["cef"],原本的 wry 變成 opt-in,打包也改用 vendored 的 tauri-cef 分支 CLI。預設的 webview 從 wry 換成 CEF,連打包都得靠一份 vendored 進來的分支。
八月:拆掉自己裝上去的東西
8 月 7 日,同一天發了 v0.63.11、v0.63.12、v0.63.7 三個版本,版號跟發佈時間的順序對不起來,原因我沒查到。
隔天,8 月 8 日,一筆 commit 叫「refactor(tauri): replace CEF runtime with upstream Wry」。8 月 9 日以 PR #5456 合併,branch 名稱直接叫 remove-custom-cef。
從 4 月 17 日把 CEF 設成預設,到 8 月 8 日換回上游的 Wry,113 天。這是一條真的走到底又退回來的路:預設改成 CEF、打包靠一份 vendored 的 tauri-cef 分支,撐不過四個月。9 月 13 日還補了一筆 docs commit,把 CEF 相關文件標成 historical。
八月之後,release 停了 49 天。8 月 7 日那批之後,下一個是 9 月 25 日的 v0.64.0。這段時間 main 還是有 commit,8/8、9/13、9/19、9/23 都有,所以不是停擺,只是沒發版。
9 月 19 日,feat(runtime): add configurable backend transport to RuntimeBuilder。現在後端呼叫走一個 BackendTransport 介面,依 repo 裡的 CLAUDE.md,沒接這個實作的時候,agent、記憶、工具照樣跑,後端呼叫會回 BACKEND_UNAVAILABLE:。實際少掉哪些功能,我沒驗證。
拆 CEF、抽後端,都是在減法。四天後那一筆,減到了權限。
9 月 23 日上午
UTC 08:50,commit fb98e78c,標題「feat(config): add enabled flag to AutonomyConfig」。commit 訊息把理由寫得很完整,我照抄:
defaults to
false, making the autonomy policy opt-in rather than opt-out. This change was made because the existing in-process policy is redundant with the container and sandbox isolation already provided, and a shell tool that rejects standard shell syntax is not usable. Whenenabledis false, all policy fields such as command classification, allowlists, and approval gates are inert, while the security policy’sis_always_forbiddenstill applies to protect credential stores and system roots.
這段話裡藏著兩個理由,分量不一樣。
第一個是「跟容器、沙盒的隔離重複了」。這是架構上的說法,成不成立,要看你的 OpenHuman 是不是真的跑在容器或沙盒裡。
第二個是「一個會拒絕標準 shell 語法的 shell 工具根本不能用」。這句比較誠實,也比較痛。它承認原本的政策讓 shell 工具連標準語法都不收,agent 等於拿到一個用不了的工具。安全政策跟可用性打架,可用性贏了,而且輸贏直接寫在 commit 訊息裡。
57 分鐘後,09:47,commit f98c6c63「fix(scripts): correct autonomy gate default and remove redundant env var」,把腳本裡的 autonomy 也明確寫成 enabled = false。
現在的 autonomy.rs 第 195 行就是 enabled: false,註解寫「So the policy is opt-in rather than opt-out.」,要恢復就設 [autonomy] enabled = true。關掉之後還留著的底線,commit 訊息說是 is_always_forbidden,保護憑證庫和系統根目錄。repo 裡的 CLAUDE.md 寫得細一點:~/.ssh、~/.gnupg、~/.aws 和系統根目錄碰不到,路徑裡的 .. 穿越和 null byte 會被擋。
讀到這裡,答案看起來是「預設不會問你」。
另一個也叫 gate 的東西
bootstrap.rs 裡另外裝了一個 ApprovalGate,註解寫的是「ON by default; opt out with OPENHUMAN_APPROVAL_GATE=0 (or false).」。同一段註解還寫了兩件事:triage 和 cron 這類不帶聊天上下文的回合直接放行(「autonomous automation is never blocked」);在桌面殼底下,這個環境變數會被忽略,並發出 ApprovalGateOverrideIgnored 事件。
這就像配電盤上有兩個開關,標籤都寫著「客廳」。你把其中一個扳下來,燈還亮著,你也不知道是因為另一個開關,還是因為這兩個根本接的不是同一盞燈。
| autonomy 政策 | ApprovalGate | |
|---|---|---|
| 位置 | config/schema/autonomy.rs |
core/runtime/bootstrap.rs |
| 預設 | 關(enabled: false,9/23 起) |
開(「ON by default」) |
| 怎麼改 | [autonomy] enabled = true |
OPENHUMAN_APPROVAL_GATE=0 關掉;桌面殼下忽略這個變數 |
| 註解寫的例外 | 關閉時 is_always_forbidden 仍有效 |
triage/cron 回合直接放行 |
commit fb98e78c 說 autonomy 關掉時「approval gates are inert」,bootstrap.rs 又說 ApprovalGate 預設開。這兩句講的是不是同一個東西、出貨的桌面 App 實際會不會在跑指令前問你,我沒有查證。我讀的是 main 分支三個檔案用 grep 抓出來的片段,沒有逐行讀完,也沒有安裝或執行過 OpenHuman。官方 gitbook 那頁「Approval Gate」據說寫著「It’s on by default」,我沒讀原文,也不知道它的修改日期在 9/23 之前還是之後。
我的立場是:在你確認自己的安裝方式真的跑在容器或沙盒裡之前,把 autonomy 的預設關閉當成「沒有這層政策」來看。確定還在的只有 is_always_forbidden 那條底線;ApprovalGate 這時候還攔不攔,上面說了,我不知道,就算它還在,cron 回合也是直接放行。用 brew 裝桌面版的話,它有沒有跑在沙盒裡,我沒有查到。哪天官方文件寫明哪些安裝路徑有隔離、gitbook 也把 enabled 這個旗標講清楚,我會改口。
同一批原始碼裡還有一件事順便記下來:observability.rs 的 analytics_enabled、share_usage_data、capture_content 三個預設都是 true,註解寫「Users can disable via settings or CLI.」。出貨版有沒有另外覆寫、實際送出什麼,我同樣沒查。
走到 10 月
OpenHuman 的八個月
2026-01-26
main 分支第一筆 commit,Tauri+React+TypeScript。
2026-02-18
GitHub repo 建立。
2026-03-31
第一個 release v0.49.32。
2026-04-17
PR #641,CEF 成為預設 webview runtime。
2026-08-08
CEF 換回上游 Wry,8/9 以 PR #5456 合併。
2026-09-19
後端改走可設定的 backend transport。
2026-09-23
autonomy 政策改為 opt-in(fb98e78c、f98c6c63)。
2026-09-30
v0.64.10 發佈。
停了 49 天之後,發版又快起來。9 月 25 日 v0.64.0 和 v0.64.3,26 日 v0.64.4,29 日 v0.64.7「The Intelligence Upgrade」,release notes 寫「v0.64.4 to v0.64.7 brings 12 PRs across 12 commits」,內容有任務板、持久化執行狀態、更安全的委派、integrations 介面和會議 agent 串接。30 日又出了 v0.64.10。
以 2026-10-02 用 GitHub API 查到的數字,它有 40,449 顆星、3,997 個 fork,Releases 共 61 個,contributors 依分頁推算是一百七十多位。官方自己標的狀態是 Early Beta,README 原話是「Under active development. Expect rough edges.」。已知問題裡有 AppImage 在 Wayland 啟動崩潰(#2463)、Apple Silicon 的本機 TTS 套件裡放的是 x86_64 執行檔(#5760),這些我只看了標題。
今天 UTC 12:39,main 最新一筆是合併 PR #6924,把 tinymemory 升到 1.22.4。我查的時候,當天還有人在 push。
照 commit 訊息的說法,9 月 23 日之前 autonomy 政策是 opt-out,之後變成 opt-in。哪一個 release 是第一個帶著這個改動出貨的,我沒有對過。9 月 23 日之後發的第一個 release 是 25 日的 v0.64.0,它有沒有帶上 fb98e78c,要去翻那個 tag 才知道。
兩個「審核」開關之後會不會被併成一個,現在說不準。10 月 2 日讀到的 main 分支上,bootstrap.rs 那段註解還寫著「ON by default」。
參考來源
- OpenHuman repo 與 README:https://github.com/tinyhumansai/openhuman
- autonomy 改為 opt-in 的 commit:https://github.com/tinyhumansai/openhuman/commit/fb98e78c、https://github.com/tinyhumansai/openhuman/commit/f98c6c63
- CEF 換回 Wry 的 commit:https://github.com/tinyhumansai/openhuman/commit/1843706c
- 原始碼:
crates/openhuman-core/src/config/schema/autonomy.rs、crates/openhuman-core/src/core/runtime/bootstrap.rs、crates/openhuman-core/src/config/schema/observability.rs(main 分支,2026-10-02 讀取) - Releases:https://github.com/tinyhumansai/openhuman/releases










