AI Agent
Agent 权限模型
工具调用按白名单 / 询问 / 拒绝三档;可按 vault 单独配置。
为什么 Agent 需要权限
Agent 能动手做事是它的价值,也是它的风险。LLM 偶尔会"按字面意思"理解你的话 — "把旧的整理一下" 在它看来可能等于 "rm 一批文件"。权限模型是最后一道护栏。
Kition 的设计原则:读操作宽松(不打扰),写操作收紧(要确认),破坏性操作默认禁(要显式开)。这是经验值,不是理论。
三个档位
- allow — 不打扰,直接执行(适合 Read)
- ask — 弹窗确认(适合 Write / Bash)
- deny — 永久拒绝(敏感 Vault)
配置位置
Settings → Agent → Permissions 是 GUI 入口;也能在每个 Vault 的 .kition/permissions.json 覆盖。Vault 级优先于全局。
所有权限决定都写日志 — Settings → Agent → Audit log 可看。被 deny 的工具调用会留下记录,方便你之后判断是否该放行。
一个分层的权限配置
{
"tools": {
"Read": { "default": "allow" },
"grep": { "default": "allow" },
"glob": { "default": "allow" },
"Write": {
"default": "ask",
"rules": [
{ "path": "drafts/**", "decision": "allow" },
{ "path": ".env*", "decision": "deny" },
{ "path": "published/**", "decision": "ask" }
]
},
"Bash": {
"default": "ask",
"rules": [
{ "command_matches": "^git (status|diff|log)", "decision": "allow" },
{ "command_matches": "^rm\\s", "decision": "deny" },
{ "command_matches": "\\bsudo\\b", "decision": "deny" }
]
},
"browser_open": { "default": "ask" },
"web_fetch": { "default": "allow" },
"mcp:github:create_issue": { "default": "ask" },
"mcp:postgres-readonly:*": { "default": "allow" }
}
}路径 glob 与命令匹配
- path 支持 minimatch —
drafts/、/*.md、!secrets/** command_matches是正则 — JSON 里反斜杠要双重转义- 同一工具多条规则按顺序匹配,第一条命中即生效
- 不命中任何 rule 时退回
default deny永远优先于allow— 排除规则不会被覆盖
配合 Hooks 做更细的控制
权限模型回答"是 / 否 / 问"。Hooks 回答"在什么条件下、改成什么再放行"。比如:允许 Bash,但 PreToolUse Hook 把命令里所有 rm 替换成 trash(送回收站而不是删除)。
权限和 Hooks 串联跑:先权限过一遍,allow / ask 的调用进入 PreToolUse Hook,Hook 还能再 block。两层防护。