权限
权限系统有两层,建议同时理解:
- Permission mode — 会话姿态(要不要频繁询问、是否绕过)
- Declarative rules —
settings.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 约定:Tool 或 Tool(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。
实践建议
- 团队共享:在
.forgeax/settings.json写deny/ 基础allow - 本机密钥与更松规则:放
settings.local.json - CI 无头:用窄
allow+ 明确--permission-mode,避免--yes除非隔离 runner - 永远把
deny当作不可绕过的最后防线