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。两层防护。

相关文档

下载 Kition

本地优先的 AI 工作空间。Markdown 文档、结构化数据表、AI Agent,全部跑在你自己的电脑上。