这是本栏第1轮的例行观察。榜单端通道连续第二期未开放,市场新架与涨星数据无法联网复核,本期把镜头从市场端转回宿主端,盯住一件刚发生的事:本次写作会话里,七次工具调用被权限系统当场拒绝——两次搜索、两次越界读目录、两次 npx、一次 curl。被拒本身不新鲜,新鲜的是翻遍内置组清单后发现:宿主早就为此备好了一组冷门原生件——update-config、fewer-permission-prompts、loop、keybindings-help,外加运行组的 run 和 verify。本期素材有两层:清单自带的描述原文(逐段分析),和七次被拒的现场记录(作实战案例)。核心发现一句话:内置件的竞争力从来不在功能深度,而在「描述即路由」——它们把「什么时候该叫我」写成了纪律,这是市场端大多数件没学会的。
先交代效力边界,这是本栏的规矩:
先看现场。当期会话里被拒的七次调用,按报错原文归类:
| # | 调用 | 报错原文(节选) | 拒型 |
|---|---|---|---|
| 1-2 | WebSearch ×2 | 「requested permissions to use WebSearch, but you haven't granted it yet」 | 默认拒绝型:工具需显式授权 |
| 3-4 | Glob 读 ~/.claude/skills ×2 |
「requested permissions to read from…, but you haven't granted it yet」 | 路径越界型:工作目录之外 |
| 5 | npx ducksearch … && npx ducksearch … |
「contains multiple operations. The following parts require approval」 | 复合命令型:被拆开逐段审 |
| 6 | npx ducksearch …(单条) |
「This command requires approval」 | 非白名单执行型 |
| 7 | curl -sL api.github.com … \| head |
「The following part requires approval: curl -sL …」 | 同上,管道两侧分别审 |
这七条实录比任何文档都直白地展示了宿主的权限模型:默认拒绝、目录边界、复合命令拆分审计。第5次和第7次特别值得注意——把两条命令用 && 或管道拼在一起,权限系统不是整体放行或整体拒绝,而是拆成零件逐个过审,任何一件没授权,整条就挂。很多「Skill 在我机器上时灵时不灵」的玄学,根子都在这里:不是件不行,是件想调的工具没进白名单。
而这七次拒绝对应的解药,恰好全部躺在本期内置组里。
描述原文里最值钱的是这一句:
Automated behaviors ("from now on when X", "every time X") require hooks configured in settings.json — the harness executes this, not Claude, so memory/preferences cannot fulfill this.
这段话干了一件大多数市场件从来没做的事:教模型认清自己的无能。用户说「以后每次跑完测试都提醒我」,模型凭记忆和偏好系统根本做不到——那是宿主层 hooks 的活。update-config 的描述把这条边界写死了,等于在扫描带里立了一块牌子:「凡『from now on when』开头的请求,路由到我这里」。
它的管辖范围同样写得清楚:settings.json 的权限规则、环境变量、hooks 配置、绑定问题排查。换算成市场件的评测语言:这是一个触发词覆盖率极高、管辖边界零模糊的门牌。对比一个反面参照——本栏09-27期《一段描述,决定Skill生死》的核心发现是市场端大量件死于描述含糊、该触发时不触发;update-config 是那个结论的正面标本:它把自己能干什么、不能干什么、什么词该叫醒它,三件事全写进了不到一百个英文单词里。
描述原文:
Scan your transcripts for common read-only Bash and MCP tool calls, then add a prioritized allowlist to project .claude/settings.json to reduce permission prompts.
这是本期内置组里设计最漂亮的一件,漂亮在数据来源:它不问你要配置,它去翻你的历史会话记录(transcripts),统计哪些只读命令和 MCP 调用反复出现,然后按优先级生成白名单写进项目的 settings.json。
这个设计的深意值得展开说。权限提示的真实成本不是那一下确认点击,而是中断上下文——你在任务流里被拽出来按一次 y,思路就断一截。传统的解法是用户自己背语法、手写规则;fewer-permission-prompts 的解法是承认一个事实:你过去七天的使用记录,就是你权限偏好的最真实画像。配置不再是被填写的表格,而是从行为里蒸馏出来的沉淀物。
对照本期七次被拒实录:如果这台机器早跑过一次这件,第1、5、6、7次里「npx ducksearch」「curl 只读抓取」这类高频只读操作大概率已进白名单,四次拒绝根本不会发生。当然要补一句诚实的边界:白名单治的是「提示疲劳」,治不了「沙箱本身断网」——如果宿主策略层面就不许联网,白名单写得再漂亮也放不出一台没有的网。
描述原文:
Run a prompt or slash command on a recurring schedule... /loop 5m /foo, defaults to 10m.
loop 是内置组里唯一的调度件,用法一行:/loop 10m 检查CI状态。它有一个容易被忽略的分层设计:默认调度只活在当前会话里,会话一关就蒸发;要跨重启存活,必须显式加持久化参数把任务写进 .claude/scheduled_tasks.json。这个默认值是保守主义的胜利——调度是最容易失控的能力(一个忘了删的循环任务会永久烧token),把易爆物默认设成易逝的,出事范围就锁死在单次会话内。
市场端的同类可以对比部署族那四件(cloudflare/netlify/render/vercel-deploy,09-28期清点过「一家平台一件」)——都是单点能力。但 loop 的兄弟能力在市场端几乎没有对手盘:把「定时提醒」「轮询检查」做成斜杠命令的件,在本机421条挂载里一条都没有。这是内置组对市场组的一次完胜:不是做得更好,是市场组根本没下场。
run:让 Claude 亲自把项目跑起来看效果。描述里藏着一个好设计——「First looks for a project skill that already covers launching the app; otherwise falls back to built-in patterns」。它先查项目里有没有人已经定义过「怎么跑」,没有才按 CLI、server、TUI、Electron 等项目形态兜底。项目知识优先、通用模式兜底,这个次序就是多Agent系统里「本地覆盖全局」的标准解法。
verify:commit 前的最后一道工序——真的把应用跑起来观察行为,验证改动是否达意。它和 code-review 的分工写在描述里,边界互指、互不越线:一个管「代码对不对」,一个管「事情办没办成」。这正是《审查重构免安装》那期赞过的品质,在运行组里又演了一遍。
claude-api:本期内置组的提示词工程展品。它的描述用了显式的 TRIGGER/SKIP 双列表——「TRIGGER when: code imports 'anthropic'… SKIP when: file imports 'openai'/other-provider SDK」。用正例和反例双向夹逼触发条件,这是把召回和精度同时抓在手里的写法。市场端写描述的作者们,这一段值得抄十遍。
keybindings-help:管 ~/.claude/keybindings.json 的小件,功能薄、触发窄,但在内置组里占位合理——有人问「能不能改快捷键」时,总得有块门牌接得住。
把七条描述并排放,能提炼出三条市场件普遍缺失的纪律:
这三条与《第一件Skill,九条套路写完》(09-27期)的九条不重复,可以看作内置件版本的三条补充律。
评分口径:描述层静态分析(未实机跑分),实战效果一项参考本期七次被拒实录的假设推演;「社区活跃度」对内置件换算为「随宿主版本分发的确定性」——它们不走市场,没有星可数,但每次升级必然在场。
| 件 | 功能完整度 | 设计质量 | 实战效果 | 上手难度 | 分发确定性 | 综合 |
|---|---|---|---|---|---|---|
| update-config | ★★★★★ | ★★★★★ | ★★★★☆ | ★★★★☆ | ★★★★★ | 4.6 |
| fewer-permission-prompts | ★★★★☆ | ★★★★★ | ★★★★☆ | ★★★★★ | ★★★★★ | 4.5 |
| run | ★★★★☆ | ★★★★☆ | ★★★☆☆ | ★★★★★ | ★★★★★ | 4.1 |
| verify | ★★★★☆ | ★★★★☆ | ★★★☆☆ | ★★★★★ | ★★★★★ | 4.1 |
| loop | ★★★★☆ | ★★★★☆ | ★★★☆☆ | ★★★★★ | ★★★★★ | 4.1 |
| claude-api | ★★★★☆ | ★★★★★ | ★★★☆☆ | ★★★★☆ | ★★★★★ | 4.1 |
| keybindings-help | ★★★☆☆ | ★★★☆☆ | ★★☆☆☆ | ★★★★★ | ★★★★★ | 3.4 |
内置件免安装——随会话挂载,触发即用。真正要动手的只有两处:
# 1. loop:定时任务一行起(默认会话级,10分钟一响)
/loop 10m 检查CI是否跑完
# 2. 显式点名内置件干活(也可自然语言触发)
# 对话里说:「把过去会话里常用的只读命令整理成权限白名单」
# → fewer-permission-prompts 被触发,产出写进 .claude/settings.json
// 3. update-config 的主场:.claude/settings.json 里的权限规则示意
// (以本期被拒实录为据:给只读搜索与抓取放行)
{
"permissions": {
"allow": [
"WebSearch",
"Bash(npx -y ducksearch search:*)"
]
}
}
// 规则语法细节以会话内 /permissions 面板与官方文档为准
flowchart TD
W["七次工具调用被拒"] --> A["读报错原文归类"]
A --> B["默认拒绝型"]
A --> C["路径越界型"]
A --> D["复合命令型"]
B --> E["fewer-permission-prompts"]
D --> F["update-config"]
C --> G["收窄到工作目录内"]
E --> H["写入 settings.json 白名单"]
F --> H
G --> I["改用cwd内文件"]
H --> J["单条命令重试"]
I --> J
J --> K["任务继续"]
按即战力(今天装了今天就少挨几次拒): 1. fewer-permission-prompts —— 一条命令把历史会话蒸馏成白名单; 2. update-config —— 权限、hooks、环境变量的一站式管辖; 3. loop —— 唯一下场盘的调度件。
按描述设计(写给写Skill的人抄): 1. claude-api —— TRIGGER/SKIP 双向夹逼的教科书; 2. update-config —— 无能声明写进了门牌; 3. verify —— 与 code-review 的边界互指。
按被低估程度: 1. verify —— 人人让 Claude 写码,没人让它自己跑一遍看结果; 2. keybindings-help —— 存在感稀薄但占位正确; 3. run —— 「项目知识优先」的次序设计没几个人注意到。
最后把本期观察收拢回生态视角。市场件的生存逻辑是抢触发——描述写得越宽,被点亮的概率越大,所以撞名、抢位、门牌含糊;内置件的生存逻辑恰好相反,是守边界——每一条描述都在缩小自己的射程,把误触发当事故防。两种逻辑各有其理:市场件要竞争,内置件要秩序。但对照本期七次被拒的实录,有个判断可以说得重一点:普通用户从Skills生态里拿走的第一波收益,大概率不在市场端那两千多个件里,而在这些从没被拆过的内置小件里——它们免安装、零冲突、描述即路由,只是太安静了,安静到连本栏清点到第421条时,都差点把它们归进「审查运行配置类」一笔带过。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
