命令字典
Slash 命令、CLI 子命令、Hook 事件、启动参数的字典与演进史。
Slash 命令、CLI 子命令、Hook 事件、启动参数的字典与演进史。
扫描转录稿并为常见工具添加许可白名单以减少提示
/fewer-permission-prompts 是 Claude Code 的一个内置捆绑技能(bundled skill)。它扫描当前项目的会话历史转录稿,识别反复触发许可弹窗的 Bash 和 MCP 工具调用,将符合条件的命令自动写入项目许可白名单(permissions.allow),从而减少手动点击"Yes, don't ask again"的次数。
官方文档(code.claude.com)将其归类为"bundled skill",与 /debug、/code-review 同级,无需安装,开箱即用。
在任意会话中输入:
/fewer-permission-prompts
技能会分析当前项目目录对应的历史转录稿,输出一张说明表(哪些命令被添加、哪些被跳过),并将规则合并写入 .claude/settings.json。
技能写入的是 permissions.allow 数组,格式与手动编辑完全一致:
{
"permissions": {
"allow": [
"Bash(npm run build:*)",
"Bash(pytest *)",
"mcp__github__get_*"
]
}
}
规则语法与 Claude Code 的 permission rule syntax 相同——Bash 规则支持 * 通配、:* 后缀等写法。
技能仅写入当前项目的 .claude/settings.json,不修改用户全局配置。Claude Code 的设置优先级如下,由高到低(来源:官方 permissions 文档 Settings precedence 节):
| 优先级 | 来源 | 说明 |
|---|---|---|
| 1(最高) | Managed settings | 企业/系统级托管设置,覆盖一切 |
| 2 | CLI args | 命令行参数 |
| 3 | .claude/settings.local.json | 本地项目(不提交) |
| 4 | .claude/settings.json | 共享项目(可提交版本库,团队共享) |
| 5(最低) | ~/.claude/settings.json | 用户全局 |
若希望生成的规则对所有项目生效,需手动将条目复制到 ~/.claude/settings.json。
以下约束来自第三方实测(wmedia.es)及 GitHub issue 描述,官方文档目前未在同一页面集中列出:
| 约束 | 说明 |
|---|---|
| 仅处理 Bash 和 MCP 调用 | 不分析文件读写类工具(Read/Edit) |
| 命令需出现 ≥ 3 次才被纳入 | 偶发操作不会进入白名单 |
| 最多推荐 20 条规则 | 按出现频率排序,取 top 20 |
| 排除已自动放行的只读命令 | ls、cat、git status 等内置只读命令不重复写入 |
| 排除高风险模式 | 含 sudo、Shell 解释器等危险特征的命令被过滤 |
| 扫描范围为当前项目转录稿 | 路径为 ~/.claude/projects/<dir>/*.jsonl,约 50 个最近会话(第三方数据) |
| 操作方式 | 触发时机 | 写入位置 | 适合场景 |
|---|---|---|---|
/fewer-permission-prompts | 会话后批量整理 | .claude/settings.json | 积累一段历史后统一生成白名单 |
| 弹窗点击 "Yes, don't ask again" | 每次遇到弹窗 | 按项目目录与命令持久保存(官方未指定具体文件) | 单条命令即时放行 |
直接编辑 settings.json | 任意时间 | 任选文件 | 已知规则,精确控制 |
/permissions 面板 | 任意时间 | 可视化增删 | 查看并管理现有全部规则 |
dontAsk 模式之前的准备:dontAsk 模式只放行预批准命令,先用此技能生成初始白名单可避免因规则缺失而寸步难行。环境变量前缀命令被静默丢失(已知 Bug)
当命令以环境变量赋值开头时(如 TEST_DB_URL="postgresql://..." uv run pytest),技能会误判为"已被 Bash(uv run:*) 覆盖"而跳过,但 Claude Code 的 Bash 权限匹配器是字面前缀匹配,不剥离环境变量前缀,导致这类命令实际上仍然会弹窗。一个生产环境案例中约 90 条精确匹配规则本可合并为 4 条前缀规则,但因此 bug 全部被遗漏。
来源:GitHub issue #51057
临时绕过:手动在 settings.json 写入包含环境变量前缀的规则:
"Bash(TEST_DB_URL=\"postgresql://...\" uv run:*)"
规则只写入项目文件,不影响其他项目
若忘记这一点,在多个项目中重复运行后才会意识到每个项目都要单独执行一次,或手动同步到 ~/.claude/settings.json。
复合命令的覆盖范围有限
Claude Code 的权限匹配器会将 &&、||、;、| 等操作符分拆后独立匹配每个子命令。技能生成的规则同样受此约束——Bash(safe-cmd:*) 不覆盖 safe-cmd && other-cmd。如需批准复合命令,需为每个子命令分别添加规则。(来源:code.claude.com/docs/en/permissions)