mcpField
P
permission-tuner

permission-tuner

github.com/rohitg00Agent 工作流2.9k145 次安装4 周前更新
代码仓库

关于 permission-tuner

permission-tuner 是用于诊断重复权限提示并调整 Claude Code 设置的 Skill。它检查生效规则和拒绝记录,建议针对性修改,并要求先获批准再应用。

主要功能

  1. 01检查各设置文件中的规则
  2. 02查看实际生效的权限模式
  3. 03分类记录的拒绝原因
  4. 04建议针对性权限调整
  5. 05估算可减少的提示次数

适用场景

  1. 01减少常规批准命令的提示
  2. 02诊断自动模式阻止常规操作
  3. 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