关于 permission-tuner
permission-tuner 是用于诊断重复权限提示并调整 Claude Code 设置的 Skill。它检查生效规则和拒绝记录,建议针对性修改,并要求先获批准再应用。
主要功能
- 01检查各设置文件中的规则
- 02查看实际生效的权限模式
- 03分类记录的拒绝原因
- 04建议针对性权限调整
- 05估算可减少的提示次数
适用场景
- 01减少常规批准命令的提示
- 02诊断自动模式阻止常规操作
- 03为新项目配置权限
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ rohitg00/ pro-workflow --skill permission-tuner安装后在 Claude Code 中输入/permission-tuner确认已加载。
详细介绍
权限调优器
通过解决权限提示产生的原因来减少提示,而不是不断叠加规则。
触发条件
适用于以下情况:
- 权限提示反复打断工作流程
- 自动模式不断阻止日常工作,或退回到对所有操作都发出提示
- 开始新项目并希望配置权限
提示如何产生
- 规则优先判定:deny > ask > allow。匹配的 ask 规则即使在自动模式下也会发出提示,而且返回
allow的 PreToolUse 钩子无法覆盖该规则。 - 在自动模式下,未被规则判定的操作会交由分类器处理。连续被阻止 3 次或在一个会话中被阻止 20 次后,自动模式会暂停,并对所有操作发出提示,直到你批准一次操作。
- 自动模式会舍弃宽泛的 allow 规则:
Bash(*)、带通配符的解释器(如Bash(node *))、包管理器运行命令、Agent和Monitor。 - 对无害命令返回退出码 2 的钩子会被视为拒绝,并使会话更容易触发上述回退机制。
工作流程
第 1 步:收集数据
规则会合并多个范围内的配置,因此请检查所有存在的文件,而不只是用户文件。/permissions 会显示 Claude Code 实际加载的规则,claude auto-mode config 会显示生效的 autoMode(分类器会忽略 .claude/settings.local.json 中的 autoMode)。
for f in ~/.claude/settings.json .claude/settings.json .claude/settings.local.json; do
[ -f "$f" ] && jq --arg f "$f" '{file: $f, mode: .permissions.defaultMode, allow: (.permissions.allow|length), ask: (.permissions.ask|length), deny: (.permissions.deny|length), autoMode: (.autoMode != null)}' "$f"
done
claude auto-mode config
ls -t ~/.claude/projects/*/*.jsonl | head -20 | xargs grep -ho '"toolDenialKind":"[^"]*"' | sort | uniq -c | sort -rn
在对话记录中见到的 toolDenialKind 值(未记录在文档中,可能会变化):permission-rule(规则或钩子)、automode-blocked(分类器)、automode-parsing-error 和 automode-unavailable(没有判定结果,无法调整)、user-rejected(你选择了拒绝)。
第 2 步:选择合适的修复方法
| 症状 | 修复方法 |
|---|---|
| 对你总会批准的操作发出提示 | 移除或缩小 ask 规则的范围 |
无害命令触发 permission-rule | 修复钩子的误报,或缩小 deny 规则的范围 |
| 分类器阻止你自己仓库、注册表或本地服务中的操作 | 添加 autoMode.environment 条目 |
| 分类器阻止某种日常操作模式 | 添加 autoMode.allow 条目 |
| 希望只有在你提出要求时才执行对外操作 | 添加 autoMode.soft_deny 条目 |
| 希望每次都由人工检查 | 保留一条简短的 permissions.ask 规则 |
第 3 步:生成规则
{
"permissions": {
"allow": [
"Bash(git status)",
"Bash(npm test)",
"Bash(npm run lint)"
],
"ask": [
"Bash(git push --force*)",
"Bash(git push * main)",
"Bash(git push * main *)",
"Bash(git push *:main)",
"Bash(git push *:main *)",
"Bash(git push * master)",
"Bash(git push * master *)",
"Bash(git push *:master)",
"Bash(git push *:master *)",
"Bash(gh pr merge *)",
"Bash(npm publish*)"
],
"deny": [
"Bash(rm -rf *)",
"Read(**/.env)",
"Read(**/.env.*)"
]
},
"autoMode": {
"environment": [
"$defaults",
"Source control: repositories under github.com/your-org are trusted; feature-branch pushes are routine."
],
"allow": ["$defaults"],
"soft_deny": [
"$defaults",
"Merging a pull request needs the user's approval for that specific merge."
]
}
}
autoMode 仅在 ~/.claude/settings.json、受管理的设置或 --settings 中生效。请在每个列表中保留 "$defaults"。使用 claude auto-mode config 检查结果,并使用 claude auto-mode critique 审查自定义规则。
输出
PERMISSION TUNER REPORT
Mode: [mode] Rules: [X] allow, [Y] ask, [Z] deny autoMode: [yes/no]
Denials: [n] permission-rule, [n] classifier, [n] no verdict, [n] you rejected
Remove (ask rules you always approve):
- Bash(...) -- approved [n]x
Add to autoMode.environment:
+ "..." -- clears [n] blocks
Add to autoMode.allow / soft_deny:
+ "..."
Fix hooks:
! [script] blocked [n] harmless commands
Keep asking:
~ force push, merge, publish, deploy
Estimated prompts saved per session: ~[N]
规则
- 优先添加
autoMode条目,而不是新增 ask 规则 - 破坏性操作应保留在 deny 或 ask 中
- 应用前始终先展示更改,等待用户批准
- 绝不要将
autoMode写入项目设置 - 包含预估的提示次数减少量
评论
支持 Markdown