六档权限

你不说它能做什么,它什么都不做。各档分开授权,按设备、按工作区。

六档

read读工作区里的文件。几乎每条任务都要。
write在工作区里新建和修改文件。
exec跑命令 —— 构建、测试、格式化、包脚本。
web联网检索或抓取。
push推送到远端、fetch、pull。
danger删除或迁移数据。永远不走远程授权。

怎么授权

$ icloser grant read $ icloser grant write $ icloser grant exec

授权记在「这台设备 + 这个工作区」上。没有全局开关。

一次授权在哪里核

授权是在动作发生的地方核的,不是写进提示词里的一句「请你守规矩」。Runtime 的写、改、执行都经过 KernelHub 内建的 Tool Server,先对照授权和工作区边界核过再跑;命令还要过执行体的执行规则,每一步都记账。别的东西证不出某一档守得住时,那一家 Runtime 标成 NOT_READY,不把它算成强制。

任何授权都解不开的那部分

凭据路径 —— SSH 私钥、云配置、.env、钥匙串 —— 以及高风险动作,与你批了什么无关地被拒绝。那份清单不会因为你批了一档权限就少一条。

任务级批准

任务缺一档时会挂一张卡。批准只对那一条任务、那个工作区生效,任务一进终态立刻失效。

删除 / 迁移

这一档在手机上批不了。当一条任务会跨过这条边界、而接手的 Agent 表达不了拒绝清单时,KernelHub 会在动手之前停住,请你放行这一趟。点那张卡不批出任何一档权限 —— 拒绝清单原样不动。

「被拦下」不等于「失败了」

一条命令有两种结束方式,KernelHub 把它们分在机读字段上,不只是分在文字里:

被拦下权限系统不让它跑。盘上什么都没发生。它出现在 blocked_actions 里。
失败了它跑了,退出码非 0 —— 测试没过、构建断了。那是员工该自己处理的事,不是我们拒的。

分辨的依据是执行侧自己的判决记录,不看退出码,也不看错误文本的措辞go test 退出码非 0 不是一条被拦下的动作。

三种判决,外加一个不是判决的

每一次判决只有三种取值。合并任意两种,都会丢掉一个你在屏幕上看得见的区别。

allow已经批过,放行。
need_grant缺一档,而那一档可以在手机上批。会挂一张卡,任务在原地等。你点头之后同一趟接着跑 —— 什么都不用重来。
never_granted这一类从不长期授权。手机上不会有卡 —— 不是我们忘了显示,是这条路只有一个出口:在那台机器上当次确认(icloser approval)。凭据、删除 / 迁移都在这一档。

scope_violation 不是第四种判决,它是另一格,回答的是为什么:这条路径解到真身之后落在本任务的工作区之外。它和「缺哪一档」是两个不同的问题,所以单独一格。批任何一档都解不开它。六档全开也一样 —— 工作区之间不互通。要在别的项目里干活,就把任务下到那个工作区。

为什么这几件事各占一格,而不是从那句话里读出来:措辞会改,而它一改,靠措辞识别的地方就静默地不再认得。

接着看:发任务 · 批准