KernelHub v1.0.2 · AI Employee Runtime & Governance Platform

真能做事的 AI 員工
治理它背後的每一個 Agent。

KernelHub 是一個 AI 員工執行與治理平台。你雇一位 AI 員工;它的 Agent 負責思考;Claude、Codex、Qwen 這樣的 Runtime 承載這份思考;而你自己 Mac、Linux 或 Windows 上的執行體落實你允許過的動作 —— 然後把 diff、產物和結果交到你手上。

macOS · Linux
$ curl -fsSL https://icloser.xyz/install | sh
Windows
PS> irm https://icloser.xyz/install.ps1 | iex

shell 那條裝 macOS 與 Linux;PowerShell 那條要 Windows PowerShell 5.1 或更新版本。安裝器、可攜包與帶校驗和的二進位檔見下載頁

即時演示
動畫:手機上打出的一句任務由 KernelHub 服務端排隊,你自己機器上的 執行體 接手,讀取、修改並測試程式碼;改動回到手機成為一張核准卡,你就這一次放行,任務隨即完成。 WORKSPACE 1/1 · POLL 3s · NO UPLOAD KERNELHUB v1.0.2 · LOCAL EXECUTION T+00:02 T+00:05 T+00:09 T+00:13 9:41 即時工作區 修改中 DateUtils.kt +8 −3 read PermToggle.kt edit DateUtils.kt exec ./gradlew test BUILD OK 發一條任務… 把標籤提成常量 權限 · 執行 執行 Gradle 構建? + LABEL_TODAY = "Today" + LABEL_YESTERDAY = … − "Today" 就這一次放行 任務完成 · +8 −3 你的裝置 QUEUE · PERMISSIONS KernelHub 服務端 排隊、保管權限 ~/android-app · DateUtils.kt 050607 080910 1112 +8 −3 讀取中 修改中 測試中 $ ./gradlew :app:assembleDebug BUILD SUCCESSFUL in 41s 你自己的機器

橫向滑動看完整條鏈 →

每一幀對應的都是 v1.0.2 真會做的一步。檔名、增刪行數和那行構建輸出,取自一條真跑過的任務。

13家 Runtime 在冊
6檔權限
2類動作無論怎麼授權都拒絕
0行程式碼被上傳
KernelHub 是什麼

執行 + 治理,一個產品

兩件事必須同時成立:AI 員工真的把工作做完,它背後的每一個 Agent 都受治理。KernelHub 的設計就是不讓這兩件事中的任何一件靠信任。

它是

AI 員工執行與治理平台

它組織誰來做事(AI 員工),讓智慧跑在合適的 Runtime 上,把每一個動作關在工作區和權限契約裡,透過執行體在你自己的機器上執行,並把證據留下來。

AI 員工能完成工作。它背後的每一個 Agent 能被治理。
它不是
  • 不是模型 —— 它自己從不呼叫模型。
  • 不是某一個 Agent —— 它治理你已經在用的那些 Agent。
  • 不是 Runtime 啟動器 —— Runtime 只是它調度的一環,不是產品本身。
  • 不是 CLI 外殼 —— CLI 是進入 KernelHub 的一扇門,不是 KernelHub。
  • 不是遠端終端機 —— 沒有人往你機器裡敲字,落到機器上的只有被允許的動作。
四個詞,分開說

員工 · Agent · Runtime · 執行體

多數 Agent 產品把這四樣揉成一個東西。KernelHub 把它們分開,因為重點恰恰是:會思考的那個,不自動等於被允許動手的那個。

AI 員工

你雇的那一位

一個角色:有定義、技能、環境、工作區指派、權限、任務、記憶和結果。例如一位 AI 開發者。你雇的是角色,不是某一家模型。

不是一個聊天視窗,也不是 Runtime。
Agent

它做事時用的智慧

理解、規劃、推理、呼叫工具、做決定。Agent 是員工工作裡負責「想」的那一部分。

會想,不等於有權碰你的機器。
Runtime

承載智慧的模型

Claude、Codex、Qwen、Antigravity、MiMo 等。可以切換。切換 Runtime 不會換掉員工 —— 角色、技能、工作區、權限和任務脈絡都還在。

不是員工,也不是動手執行的那個。
執行體

你機器上受管的那雙手

你自己 Mac、Linux 或 Windows 上的受控執行層。它落實被授權的動作 —— 讀、寫、執行、建置、測試、git、產物、裝置 —— 其他一概不做。

它不是 Agent。它自己沒有智慧,服從權限契約和工作區契約。
一口氣說完
我雇的是 AI 員工;Agent 提供智慧;Runtime 提供模型;執行體在我電腦上執行被允許的動作;KernelHub 組織、治理並留下證據。
各部分怎麼連起來

從你到結果 —— 以及手機站在哪裡

關係圖:你指揮一位 AI 員工;它的 Agent 與技能經過 KernelHub 治理層(工作區、權限、環境、記憶、Runtime Router)到達 Runtime,再到你 Mac 或 Windows 上的執行體,執行體交回 diff、產物和結果。另一條通道裡,iPhone 和 Android 向 KernelHub 送任務、做核准、讀結果 —— 手機從來不是執行體。 AI 員工 Agent / 技能 KernelHub 治理層 工作區 權限 環境 記憶 Runtime Router Runtime 執行體 你的 Mac / Windows Diff · 產物 · Result iPhone / Android 任務 · 核准 · 結果 手機不是執行體。它送任務、做核准、讀結果。 圖上每一個框在 v1.0.2 裡都存在,沒有一個是佔位。 KERNELHUB v1.0.2 · CONCEPT MAP
為什麼需要 KernelHub

智慧不等於權力。

傳統 Agent 產品把三件事揉成一個:AI 的決策、系統的權限、本機的執行。模型一旦決定,就同時動手了。KernelHub 把它們拆開。

常見的 Agent 產品

決策、拿權限、執行 —— 一團

替你的程式碼做推理的那個行程,就是握著程式碼鑰匙的那個行程。每一次判斷失誤,都立刻變成磁碟上的變更。

KernelHub

在一處決策,在另一處動手,在你手裡的裝置上核准

Agent 決策。工作區限定在哪裡。權限契約限定做什麼。執行體是唯一動手的那個,而且只在兩者之內。寫檔案、執行指令、建置、推 git、操作裝置,都必須經過 工作區 + 權限 + 執行體。

問題已經變了

問題不再是「有沒有更聰明的 Agent」,而是:誰來組織工作、誰來授權、誰給環境、誰限定工作區、誰選 Runtime、誰確認工作是真的完成了。KernelHub 就是為這個存在的。

雇的是角色,不是模型

在 KernelHub 裡你雇的是一位 AI 開發者。它背後由 Runtime Router 依任務調度合適的 Runtime。員工的身分、角色、技能、工作區、權限和任務脈絡,不會因為 Runtime 換了而改變。

EMPLOYEE FLOW

雇用 → 指派 → 做事 → 核准 → 產物 → 結果

一位 AI 員工在 KernelHub 裡的一天,從頭到尾。

EMPLOYEE FLOW
動畫:雇一位 AI 開發者,指派到一個工作區,它讀取、修改、建置;跑建置之前在手機上跳出核准卡;產出一個產物;帶著證據回報結果。 KERNELHUB v1.0.2 · EMPLOYEE FLOW 01 HIRE 雇用 AI 開發者 02 ASSIGN 指派 到一個工作區 03 WORK 做事 讀 · 改 · 建置 04 APPROVAL 核准 在你手機上 05 ARTIFACT 產物 app-debug.apk 06 RESULT 結果 完成,附證據 AI 開發者 kotlin · gradle · git ~/projects/app read PermToggle.kt edit DateUtils.kt +8 −3 exec ./gradlew → ? 9:41 PERMISSION · EXEC 要跑 Gradle 建置嗎? 只允許這一次 app-debug.apk 12.4 MB · sha256 ✓ +8 −3 · BUILD OK 建置在跑之前停下來,在你手裡的裝置上問一句。產物和結果之所以存在,是因為執行體真的把事做了。

橫向滑動看完整條鏈 →

AGENT GOVERNANCE

智慧到哪裡為止,權力從哪裡開始

Agent 想決定什麼都可以。只有執行體會動手 —— 而碰到你還沒批的 WRITE 或 EXEC,它等你。

AGENT GOVERNANCE
動畫:AI 員工的 Agent 決定寫一個檔案;請求經過 KernelHub 治理層到 Runtime,再到執行體;在 WRITE 與 EXEC 的邊界上權限閘擋住它,手機上出現核准卡,你放行之後,執行體才把變更落到本機。 INTELLIGENCE ≠ AUTHORITY AI 員工 Agent KernelHub 治理層 工作區 權限 環境 記憶 Runtime Router Runtime PERMISSION GATE 執行體 你的機器 src/Auth.kt read ✓ 已寫到你的機器上 +3 −1 READ src/Auth.kt WRITE src/Auth.kt 9:41 PERMISSION · WRITE 允許這條任務 WRITE 嗎? 允許 READ 自己就過。你還沒批的 WRITE 或 EXEC 在閘前停下,去你手機上問。Runtime 從不碰磁碟;碰磁碟的是執行體,而且只在閘開了之後。

橫向滑動看完整條鏈 →

運作方式

在手機上說一句。它在你的 Mac 上跑。

這就是 v1.0.2 裡一條任務真實走過的路 —— 下面每一個節點都在已釋出的產品裡。

01你的裝置iPhone · Android · Desktop
02任務一句話,用你自己的說法
03KernelHub 服務端排隊、保管權限
04Runtime 路由挑一家裝著、接得了活
05執行體你機器上的 icloser 程序
06你的 Mac 或 Windows你的程式碼本來就在那兒
讀取中 修改中 測試中
07即時工作區證據流,發生一件記一件
08改動真實 hunk,歸到這條任務名下
09核准卡片出現在你手裡那塊屏上
10結果做完、要改、或停下 —— 絕不假報「已完成」
已關閉動效 —— 所有步驟同時顯示。
產品

它真正做的四件事

下面每一條都在 v1.0.2 裡。端到端驗到哪一步,按平臺分:macOS —— 真機驗過;Linux —— 容器裡驗過,真機待驗;Windows —— 真機驗過。這一頁不寫任何還沒上線的東西。

本機執行

Agent 在你的程式碼本來所在的地方跑

一個 執行體(icloser)守著你自己機器上的工作區,驅動你本來就裝著的 CLI Runtime —— Claude Code、Codex、Antigravity(agy)等。沒有雲端沙箱,不上傳倉庫,不做原始碼映像。

權限契約

六檔權限,動手之前先核

讀檔案、寫入檔案、執行、聯網、推送、刪除 / 遷移資料分開授權,按裝置、按工作區。不管哪一家 Runtime 在做事,它的寫、改、執行都要經過 KernelHub 內建的 Tool Server,先對照這些授權和工作區邊界核過再跑 —— 不是一句「請你守規矩」的提示詞。

即時工作區

逐行看著它幹活

任務跑著的時候你看得到證據流 —— 讀了哪些檔案、跑了哪些命令、改了哪些檔案 —— 以及帶真實 hunk 的即時 diff。改動歸到這條任務名下,同一個工作區裡別的改動不會混進來。

手機上核准

要你拿主意的事會來找你

任務缺一檔權限時,它會在開工前停下來掛一張卡,帶著到目前為止的 diff,以及它到底在申請什麼的逐字說明。點一次頭,同一條任務接著跑。

實際用起來

兩條任務,從頭到尾

這兩件事 v1.0.2 今天就能做。這裡沒有任何未上線功能的演示。

「PermToggle.kt 裡那三句文案是寫死的,提成常量。然後構建一次確認沒壞。」

  1. 從手機發出在輸入框裡打出來,進這個工作區的佇列
  2. 執行體 接單放著 Android 倉的那臺機器認領了它
  3. 讀 PermToggle.kt證據流裡能看到它開啟的每一個檔案
  4. 改它它還在幹活時,即時 diff 就出來了
  5. 跑構建Gradle 在本機跑,輸出即時回傳
  6. 手機上的核准卡帶著 diff —— +8 −3,連 hunk 一起
  7. 結果你點頭,同一條任務接著跑完

「給 README.md 加一段安裝說明,語氣跟全文保持一致。」

  1. 讀取動手寫之前它先把檔案讀一遍
  2. 修改改動落在你機器的磁碟上
  3. 即時 Diff你看著那幾段一行行出現
  4. 結果不需要核准 —— 寫入這一檔本來就批過了
Runtime

13 家 Runtime —— 六檔到底各由誰管住

「批了一檔權限」和「有東西真的約束住它」是兩回事。這張表是從活的註冊表生成的:逐家、逐檔去問那條授權落不落得了地。這裡沒有一格是手寫上去的。

Runtime執行聯網推送刪除狀態
claudeKernelHubRuntime 原生Runtime 原生KernelHubKernelHubKernelHub正式支援
codexKernelHubRuntime 原生Runtime 原生KernelHubKernelHubKernelHub正式支援
mimoKernelHubKernelHubKernelHubKernelHubKernelHubKernelHub正式支援
opencodeKernelHubKernelHubKernelHubKernelHubKernelHubKernelHub正式支援
qwenKernelHubKernelHubRuntime 原生KernelHubKernelHubKernelHub正式支援
acpKernelHubKernelHubKernelHubKernelHubKernelHub未就緒
agyKernelHubKernelHubKernelHubKernelHubKernelHubKernelHub未就緒
codebuddyKernelHubKernelHubRuntime 原生KernelHubKernelHubKernelHub未就緒
geminiKernelHubRuntime 原生Runtime 原生KernelHubKernelHubKernelHub未就緒
kimiKernelHubKernelHubKernelHubKernelHubKernelHubKernelHub未就緒
mcpKernelHubKernelHubKernelHubKernelHubKernelHub未就緒
ohmypiKernelHubKernelHubKernelHubKernelHubKernelHub未就緒
piKernelHubKernelHubKernelHubKernelHubKernelHubKernelHub未就緒
Runtime 原生

這家 Runtime 自己有可驗證的開關,KernelHub 把授權落到它的引數上。驗證方式是真把命令列拼出來看,不是讀它的文件。

KernelHub

這家 Runtime 自己沒有這一檔的開關,這一格由 KernelHub 在它程序外面加的那道 OS 外層邊界守著 —— macOS 上是 seatbelt、Linux 上是 Landlock,這兩個平台預設開啟;Windows 上這一版預設關閉,那樣的機器上這一格印成「—」。它是可選的加固層,不是做事的前提;不管這一格是什麼,寫、改、執行照樣先經 Tool Server 按你的授權和工作區邊界核過。

這臺機器上證不出有誰守住這一檔。這一家會標 NOT_READY —— 那是記帳,不是攔路:它照樣接活,每一次寫、改、執行照樣要過你的授權、工作區邊界和執行規則。

為什麼這張表要公開
一張在沒人證得出邊界守得住時照樣印 SUPPORTED 的表,比沒有表更糟。所以這裡如實寫明每一檔由誰守住,缺檔就印成缺檔。缺檔不攔活 —— 不管你批了什麼,當場拒絕的只有兩類:碰憑據,和寫到工作區外面。

那道 OS 外層邊界是可選的加固層,做事不靠它。macOS(seatbelt)與 Linux(Landlock)上會畫;Windows 上這一版預設關閉,所以 Windows 機器上缺檔會多一些。畫不上的時候活照樣跑,只是那一格如實印成缺檔。這張表是按機器算的,與其暗示它放之四海皆準,不如把這句話寫在這兒。

即時工作區

不是一個轉圈。是真的 diff。

動畫:DateUtils.kt 裡一段真實的改動逐行寫出來——刪兩行、加六行——右上角 +8 −3 的計數條同時長滿。 LIVE DIFF · 1 FILE DateUtils.kt +8 −3 050607 080910 1112 @@ -5,4 +5,9 @@ import java.time.ZoneId import java.time.format.DateTimeFormatter - fun label(d: LocalDate) = "Today" - // FIXME hard-coded + private const val LABEL_TODAY = "Today" + private const val LABEL_YESTERDAY = "Yesterday" + fun label(d: LocalDate) = when { + d == today -> LABEL_TODAY 任務還在跑的時候,由 執行體 即時送上來的。 歸屬於這條任務

手機上發的一條任務、在筆記本上執行時的真實輸出。

歸到這條任務名下

任務開始前就已經改過的檔案、以及執行期間被別的程序改的檔案,單獨計數,不進這條任務的 diff。

證據,不是敘述

讀 / 跑命令 / 改檔案,發生一件記一件。來自檔案系統監視的那幾行會壓暗並用被動語態 —— 它只說檔案變了,說不出是誰改的。

事後可回放

每條任務都留著自己的時間線與改動。跑完之後開啟它,按順序讀它做了什麼。

安全

邊界就是產品本身

動畫:五檔權限依次點亮,第六檔「刪除 / 遷移」保持熄滅,下方是一條「憑據永遠拒絕」的橫條。 執行 聯網 推送 刪除 CREDENTIALS · ALWAYS DENIED 憑據路徑不因為你給了哪一檔而解封。 刪除 / 遷移預設永遠不給——你不為某一條任務單獨授權,它就一直是暗的。
原始碼留在本地

你的倉庫不會被上傳

執行發生在你的機器上。過網路的是任務原話、進度、你要看的 diff,以及核准。

憑據

任何授權都打不開的憑據路徑

憑據路徑 —— SSH 私鑰、雲配置、.env、鑰匙串 —— 以及高風險動作,與你批了什麼無關地被拒絕。你批一檔權限,這份清單一條都不會少。

任務級授權

「就這一次」真的只有一次

為某條任務批的權限只對那條任務、那個工作區生效,任務一進終態立刻失效 —— 靠讀時判定,不靠定時清掃。

管不住的邊界

守不住的時候,它會告訴你

當一條任務會碰到刪除 / 遷移這條邊界,而接手的 Runtime 表達不了拒絕清單時,KernelHub 會在動手之前停住,請你明確放行這一趟。點頭不批出任何一檔權限

工作區隔離

工作區之間不互通

任務在被下達的那個工作區裡跑。權限按裝置、按工作區記錄,沒有全域性開關。

為非互動而設計

不留一個沒人能答的提示

Runtime 通常會停下來問一個沒人在的終端。KernelHub 把那次決定搬到你手裡真的拿著的那塊螢幕上。

資料處理見隱私政策,使用條款見服務條款

拿你自己的倉庫試一次

演示完全跑在你的瀏覽器裡,不用註冊。真用起來,先裝好 Node.js LTS(自帶 npm),再在放著你程式碼的那台機器上跑一條指令。