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),再在放着你代码的那台机器上跑一条命令。