Skip to content

权限

权限系统有两层,建议同时理解:

  1. Permission mode — 会话姿态(要不要频繁询问、是否绕过)
  2. Declarative rulessettings.permissions.{deny,ask,allow} 规则表

Permission mode

bash
forgeax --permission-mode default
forgeax --permission-mode acceptEdits
forgeax --permission-mode plan
forgeax --permission-mode bypassPermissions

也可在 settings:

json
{
  "permissions": {
    "defaultMode": "acceptEdits"
  }
}

解析优先级:--permission-mode flag > settings.permissions.defaultMode > default

模式含义(概要)
default标准询问策略
acceptEdits更宽松地接受编辑类操作
plan规划向姿态
bypassPermissions绕过常规询问(危险;root / killswitch 下可能拒绝启动)

等价危险开关:

bash
forgeax --yes    # 自动批准全部权限提示(= dangerously-skip);root 下拒绝

声明式规则

语法对齐常见 coding agent 约定:ToolTool(content)

json
{
  "permissions": {
    "deny": ["Bash(rm *)", "Write(/etc/*)"],
    "ask": ["Bash(git push*)"],
    "allow": ["Read", "Bash(git *)"]
  }
}

引擎顺序(强 → 弱):deny → ask → … → allow

Shell 结构感知

对 Bash/Sh 类工具,内容规则按子命令结构匹配,而不是整行裸字符串:

  • deny Bash(rm *) 也能拦住 echo x && rm -rf /
  • allow Bash(git *) 不会覆盖 git status && rm -rf /(后者仍会 ask / 落入默认)
  • $() / 反引号 / 子 shell 等强制 ask

无效规则字符串会被静默丢弃(fail-closed:不当成 allow)。

OS 沙箱

权限规则约束「agent 被允许请求什么」;--sandbox 则在 OS 层约束 Bash 子进程可写何处:

bash
forgeax --sandbox

写操作被关进 cwd + temp;cwd 外路径由 OS 拒绝;.git / .forgeax 等受保护段保持只读取向。不可用时 loud degrade

实践建议

  1. 团队共享:在 .forgeax/settings.jsondeny / 基础 allow
  2. 本机密钥与更松规则:放 settings.local.json
  3. CI 无头:用窄 allow + 明确 --permission-mode,避免 --yes 除非隔离 runner
  4. 永远把 deny 当作不可绕过的最后防线

相关

Apache-2.0 · 开源