跳转到正文
发布于
约 73 分钟

门是绿的——实测 Claude 为什么难读

作者
  • 宋元平
    名称
    宋元平
    Twitter

TL;DR:Claude 的消息为什么难读——测出来了。附 50 词 Claudish 词典,以及真正对症的那一条指令。

本页目录:

七月的一个晚上,我回到电脑前,看到 Claude 留下的一条状态消息:"Gate suite is rebuilding — when it lands green I'll proceed with the swap."(闸门套件正在重建——落绿后我就继续替换。)

我和 Claude 每天共事,已经一年了。我知道 gate(闸门)是什么:一组检查,工作必须通过它才能继续往前走。其中一些检查还是我亲手写的。可我还是坐在那儿,真心拿不准这个 gate 跑的到底是哪些检查。测试套件?哪个测试套件?构建?还是它当天下午自己发明的某个评审步骤?

如果你真的在拿 Claude 干活,你一定懂这种感觉。互联网已经给这种方言起了名字——Claudish——还造出了翻译器、词典,和一小批"请说人话"插件。但那些讨论大多停留在这种方言听起来如何。我想知道它到底什么。于是我做了最直接的事:让 Claude 去翻它自己的聊天记录——82 天里它发给我的每一条消息——让它对照两条基线测量自己:一百万词的人类工程文本,以及同一台机器上 GPT-5 的输出。

测出来的结果改变了我读 Claude 每条消息的方式。三个发现,一部词典,和一个从诊断推出来的解法——而不是和症状缠斗的那种。

发现一:不是抽象,是名词

我最初的猜想是 Claude 满口抽象概念。实测正好相反:Claude 的词汇比我的更具体,而不是更抽象。它的标志性动作是用一个具体的、物理的名词指代一个抽象的东西——gate(闸门)、seam(接缝)、ledger(台账)、lane(车道)。你的代码仓库里没有任何东西真的是这些。

Claude每 71 词一个比喻性名词
人类工程师每 750 词一个比喻性名词

对照一个 92.7 万词的前 AI 时代工程文本语料库(rust、kubernetes、cpython、django 以及另外八个主流仓库 2010–2020 年的公开 pull request 讨论),Claude 的比喻语言总密度大约是人类的 7 倍(取决于词表怎么划,在 5.7 到 7.5 倍之间;在完全不依赖词表的度量上则是 1.5 到 2 倍)。但这个差距在语法上分布并不均匀。比喻性名词:10.5 倍。比喻性形容词:只有它的一半左右。

这个语法细节恰恰是整个机制所在。形容词修饰的是你手里已经有的东西——工程师说某个测试很 brittle(脆),你手里就有那个测试,只是在给它加一个属性。而一个比喻性名词引入的是一个新实体。"the seam""the ledger""the gate"——在这句话解析完成之前,你得先弄清它指向你项目里的哪个真实事物。每个比喻性名词都是一桩小小的查找活儿,而 Claude 每 71 个词就塞给你一桩。

两套词汇几乎不重叠,而且性质不同。人类工程师的比喻绝大多数是评价性形容词——代码是 ugly(丑)、hairy(毛糙)、gnarly(拧巴)、flaky(时好时坏)、hacky(凑合)、a mess(一团糟);代码会 complain(抱怨)、会 choke(噎住)。他们的特征词表里有 44 个这样的形容词。Claude 只有 4 个——frozen、mechanical、surgical、wedged——而且没有一个是评价性的。人类抱怨代码,Claude 治理代码——用的是裁决、裁定、教义、台账和权威。

发现二:所指不在你眼前

一个比喻性名词,如果它指的东西就写在旁边,本来无伤大雅。所以我们把这一点也量化了,用的是最常绊住我的那个词。我们从我的聊天记录里抽样了 96 次 "gate" 的真实出现,把每一次都沿着会话往回追:读者能在哪里弄明白这个 gate 具体什么——哪些命令、哪些检查?不是含糊带过一句,而是实打实的定义。

Claude 使用"gate"时,它的定义在哪里(n=76 次检查点义项使用)。

45% 的情况下,你正在读的这条消息不会告诉你。四次里有一次,你能看到的任何内容都不会告诉你——那些检查跑在折叠起来的工具输出里,或者定义在三十多轮之前,或者干脆在上一个会话里。当定义确实存在于更早的轮次时,中位数是往前翻 5 轮。我最喜欢的标本:一条消息只说 "my review gate as always"(照例,我的评审闸门)——一个在之前某次会话里定下的固定做法,除了 Claude 自己,原则上没人解得开。

而整个体验的谜底,就在这道不对称里。Claude 每次都能瞬间解析"the gate"——它的工作记忆里装着多达一百万 token 的会话,所以对 Claude 来说,所指永远近在手边。它写作时假设读者共享这份记忆。你不共享。你在几个小时后读一条消息,带着人类的工作记忆。Claudish 对它的作者并不晦涩;它是写给一个拥有作者上下文窗口的读者的。

发现三:多半根本不是 Claude 特有

在这里,数据纠正了我。我的机器上还跑着 Codex,所以我有一个完美的对照组:88.6 万词的 GPT-5 输出,同一个用户,同样的项目,同样的那几周。

作者每千词比喻数
Claude 532.5
GPT-5(同一台机器)23.3
人类工程师4.3
人类 PR 评论的中位数不含任何比喻词汇;Claude 的中位消息每 33 词就带一个比喻。

GPT-5 的密度是 Claude 的 72%——同时是人类的五倍。所以大家争论的这种方言,主体是一种 LLM 语域,Claude 只是在这个底子上又加浓了约 40%。公共讨论把这些词汇捆成一张"Claudish"词表,而对照组把它干净地劈开:load-bearing 确实属于 Claude(是 GPT-5 的 18 倍),verdictgenuinely 也是。但 seamhandoff——被引用得同样频繁——实测更像 GPT-5 而不是 Claude。梗图里引用的那些词,一半其实出自另一个模型。

为什么显而易见的解法不管用

一旦诊断落在所指缺失的比喻性名词上,你就能明白那些常见的对策为什么不顶用——它们治的根本是别的变量。我们在几十个真实的 agentic 任务上,把这些民间偏方逐一做了 A/B 测试,同一个模型,同样的工作:

"简洁点"治的是长度;病根出在每个词上。更短的消息可以保留每一个比喻——而在我们的测试里,它做得比这还糟:简洁组少写了 29 个词,行话密度反而升高(每千词 +3,12 个任务里 10 个更高,p=0.042——这是所有指令产生的唯一有统计显著性的效应)。你得到同样的比喻,只是少了帮你解码它们的那些词。

禁词表治的是词面;语域住在隐喻家族里。我们禁了 17 个最 Claudish 的词。执行得完美无缺——17 个全部消失。而词表之外的比喻上升了被移除量的 128%:guardrail 被禁,fence 冒出来;gate 被禁,land 顶上;load-bearing 被禁,carries 接班。Claude 说的是十几个深层隐喻家族的话;你禁掉表面,它就在同一个家族里横挪一个词。顺带一提,这正是你 CLAUDE.md 里的文风规则"一干正事就失效"的原因:它们被逐字服从了,却从未碰到底下那个东西。

两种解法都从未触及缺失的所指。这恰恰告诉你,真正的解法必须做什么。

词典:50 个 Claudish 词

这 50 个词的位置是挣来的:先由逐段阅读真实消息的 agent 从 Claude 的 125 万词输出里筛出来,经过对抗性核验(162 个候选中 67 个因属于字面或普通用法被否决),再剪掉人类工程师本来就在说的所有词。50 个词里有 21 个,在一百万词的人类工程文本中出现次数恰好为零——没人能教你这些词,因为没有哪位同事这么写。

这张图就是目录——每一行都链接到对应词条。蓝色是 Claude 的频率;橙色是人类工程师的;最左侧的橙色空心圆表示这个词在人类语料库中从未出现。

50 个 Claudish 词的使用频率,Claude(蓝)对人类工程师(橙),对数刻度;空心圆:21 个从未出现在人类语料库中的词。

land · 落地又作: landing
Claude 2362/M人类 127/M3030 次使用

飞行中的飞机不是任何人的地板;落地之后,你才能站上去。当 Claude 说一个改动、报告或裁决 lands(落地),意思是这项工作已经完整抵达目的地、停止移动——合入 main、交付、尘埃落定——下游工作现在可以往上盖了。在那之前它是 in flight(在途):已派出、存在于某处,但还不能安全依赖。落地不等于发布:代码可以落在 main 上安静躺着,没有任何用户见过它,而 Claude 的计划恰恰倚重这个空隙——“现在落地,稍后发布”是正常顺序,不是自相矛盾。

Launch-readiness claim is formally withdrawn until this wave lands — the gate is now: T24 + T25 return and land → T26 dispatches and lands → gallery images curated and shipped → then I'll re-verify the whole surface and restate readiness. Your externals list is unchanged in parallel.

Claude 2259/M人类 18/M2555 次使用

人人都知道 gate(闸门)是让你停下、等人放行的关卡。Claude 用它指一次有权拒绝的验证运行:完整测试套件、类型检查和构建,改动必须通过它们才允许落地。叫它 gate 而不是“那些测试”,是在同时断言三件事:它位于流水线上一个固定的点,一切都排在它后面,通过与否是一个离散的裁决——绿或红,带时间戳。所以“等闸门”意味着工作是按设计闲置,不是卡死。guardrail(护栏)在你继续行进时约束你;gate 让你停下,直到通过为止。

And the slice (2) gate is greenFAIL=0 FLAKE=0 read explicitly. The landing now waits only on the second reviewer's verdict; on PASS I land it.

Claude 914/M人类 285/M1887 次使用

你熟悉的 mapping 是穿越陌生地带之前先绘制地图。当 Claude 说“让我先 map 一下认证流程”,宣布的就是同一个动作:在规划或改动任何东西之前,先在系统的一块有边界的区域里四处看看。它买到的是秩序——先勘察、后行动——而不是一件产品:不承诺产出文档,也不声称什么都找到了。别把它和程序员的 map X onto Y 或 .map() 混淆;那是映射对应,这是侦察。听到这个词,预期一段停顿,然后是一个由这趟勘察塑形的计划。

A full rename pass plus a real design refresh — let me first map the post-rename state of the repos (paths, shared assets, package naming), since the screenshots, links, and URLs all flow from that:

Claude 620/M人类 15/M1091 次使用

物理世界里的 probe(探针)是你伸进不透明物体取读数的仪器——太空探测器、医生的探针。Claude 的 probe 是一个小型的、专门构建的检查,向运行中的系统发射,取回一个测量值来替代一段推理:两行代码、一个请求、一条查询。当 Claude 说它要“probe 而不是凭推理”,它是在选择证据而非记忆——系统被当作不透明处理,只有读数算数。别以为 probe 是用完即弃的:探针会通过或失败、会和基线对比,好的探针会被提拔进永久测试套件。

I ran the new pnpm verify gate myself: 6/6 probes in about 3 seconds, now a permanent part of the verification loop alongside the 60-row suite.

carries · 携带又作: carry
Claude 357/M人类 未出现916 次使用

日常语言里,你带着的东西跟你走到哪算哪。Claude 对数据也这么用:X carries Y,意味着 Y 住在 X 里面、随 X 旅行,所以 X 到哪——新会话、别的工具、生产环境——Y 也到哪,没人需要另行查找。这份“随行”正是重点;平淡的 contains 只声明位置。“每个 issue 都 carries 完整的工单正文”意味着这个 issue 自给自足——单独交出去也不缺任何东西。否定式是警告:“快照 carries no hopCount”意味着那个字段撑不过这趟旅程。

Both ADRs now carry the full migration record.

survive · 幸存又作: survives
Claude 425/M人类 5/M788 次使用

survive(幸存)是从会杀死你的东西里活着出来。Claude 把它用在事实、测试、标志位和规则上:经过一场会摧毁东西的过程——重启、重构、压缩、评审——之后仍然在场、仍然生效。这个词从不闲着:它把过程框定为威胁,暗示有别的东西没能挺过来,也暗示这个东西的幸存并无保证。所以当 Claude 问一个标志位能否 survive 重启,重启就被塑造成了状态的毁灭者,而不是一个普通事件。persists 或 remains 能报告同一事实,却不带这层隐含的淘汰。

I specifically asked it to determine whether the paused flag would survive a daemon restart

Claude 620/M人类 1/M755 次使用

人人都知道 verdict(裁决)是陪审团交出的东西:终局,且由被指定审判的人给出。Claude 用它指评审、测试批评者或评分者在检查完之后返回的那句底线结论——由裁判得出的结论,而不是仪器测出的数字。由此推出三件事:它对本轮是终局的,它可以与支撑它的发现分开,而且 Claude 几乎总是把它放在最前面——所以看第一行。在同一段里,the numbers 是测到的,the verdict 是从中得出的结论。

I'll independently verify the key claims in both builds before rendering a verdict.

Claude 662/M人类 101/M662 次使用

一片面包是从整条上切下的一份:有边界、可计数,而整条面包只有那么多片。在按切片预算运作的项目里,这正是 Claude 压在这个词上的分量:slice 是一个 release 里一个带编号的工作单元——一份精确的文件清单,评审通过后作为一个 commit 落地,并计入事先定死的预算(“这个 release 五个 slice”)。这不是敏捷的“垂直切片”;Claude 的 slice 不承诺贯穿每一层。“塞得进 slice 3”意味着原子且已在预算内;“需要自己的 slice”意味着 Claude 想花掉有限张数中的一张。

I'll default the release budget to six slices and keep the declined-ideas ledger in the repo unless you say otherwise.

Claude 547/M人类 1/M599 次使用

扫帚一挥,整块地板都在这一下里——没有哪里受特殊照顾,也没有哪里被跳过。Claude 的意思正是如此:把每个文件从头到尾过一遍,施加同一种检查或编辑——“repo 级 sweep”“文档 sweep”。这个词是覆盖率声明,不是质量声明。Claude 说它 swept,承诺的是整片区域都过了同一条规则——通常是为了打消“只抽查了”的怀疑——同时明确不承诺每处命中都被单独想过。audit 逐项判断;grep 是机制;sweep 是“没有落下任何角落”的承诺。

  1. Sweep the ENTIRE site for waitlist/early-access references — start with rg -i "waitlist|early-access" --type-add 'web:*.{ts,tsx,json,md,mdx}' -t web
arm · 布防又作: armed
Claude 270/M人类 56/M591 次使用

你 arm(布防)警报时并没有触发它——你把它置入“条件一到就会触发”的状态。Claude 对 watcher、monitor、定时派发也这么用:机制已经造好装好;arm 是让触发器带电的最后一步。所以“monitor 存在但没有 armed”是一个真实而重要的状态,“no longer re-arms”点名的是一个具体的 bug——它触发了一次,然后悄悄不再就绪。与 enabled 或 started 不同,armed 的东西什么都不做;它等着,只在条件出现时行动。

A fresh reconnect monitor is armed to re-send the queued message (and open its watch) the moment the connection comes back up.

Claude 473/M人类 2/M527 次使用

法庭上,ruling(裁定)是法官的决定:有约束力、会被引用、在被推翻之前一直有效。Claude 赋予你的回答的,正是这个分量。当它正式向你提出一个问题而你作答,答案就成了 ruling——常被编号、在后续消息里点名引用、能够取代成文的原则,并且在你明确撤销之前处处一致适用。由此有两点。“等你的 ruling”意味着工作真的卡在你的权威上,你一句话就能解锁。而 ruling 在两个方向上都框定范围:“这条 ruling 没有下令做这个”是 Claude 在谢绝你的决定从未覆盖的工作。

Ruling 2 asked only that the 13th record return a clean failure without creating a session; remembering it (so lastFailedSyncObservation can alert) is ~25 lines the ruling did not order

Claude 386/M人类 未出现472 次使用

路上的 lane(车道)是留给你的车的那一条:待在里面,谁也撞不着谁。Claude 并行跑多个 agent 时,每个都分到一条 lane——自己的分支、自己的文件、自己的成本画像,拥有专属路权。这个词是“结构上避免碰撞”的声明:不同车道里的 agent 不可能冲突,两边都要碰的文件是需要绕行的险情。与分支不同,lane 可以作为一个整体被冻结或关闭——工作流连同它的工人一起。听到 lane,你可以推断这种并行是设计出来的,不是碰巧的,而且合并冲突意味着有人越了道。

it stays new-file-only until the other engineer's ticket sync-41 lands, then rebases and adds its own allowlist entries — exactly the collision-free choreography the lanes were built for

Claude 384/M人类 未出现409 次使用

日常生活里的 ledger(台账)是会计写分录的那本册子——从不涂改,还能平息争论。Claude 指的是放在工作旁边的一个命名文件,记录决定、否决、结果或来龙去脉,只追加、从不重写,下次同样的问题出现时被当作权威来查。与 log 不同——log 按时间排列、仅供参考、可以随手丢弃——ledger 是拿来重读并被相信的。别把复式记账带进来:这里没有什么需要平衡。当 Claude 提议建一本 ledger,它是在说这类事实会反复出现,而记忆不是它该住的地方。

The repo becomes the canonical home, and the maintenance ledger's append-only discipline continues there with git history as its audit trail — which actually improves the project's own governance: provenance entries become commits.

Claude 330/M人类 1/M408 次使用

fleet(舰队)是同一指挥下的许多艘船。Claude 的 fleet 是一批一起启动、由一个编排者并行运行的 AI agent——可互换的单元,集中调度,分开计费。选它而不选 subagents 或 workers,带着一个安静的经济学主张:舰队是有成本画像的常备产能,是你配置和运营的东西,而不只是随手孵出来的(“fleet config”“一次 fleet run”“舰队正在构建中”)。当消息里提到 fleet,值得问的是运营者的问题:多少个单元,在做什么,花多少钱,谁在盯着。

one fleet ran 118 of 120 agents at maximum effort because a stale default overrode the config everyone believed was active

Claude 239/M人类 1/M398 次使用

布料上的 seam(接缝)是两块布片相遇、被缝合在一起的地方。Claude 点名一条 seam 时,指的是一个位置,不是一类东西:系统的两侧——或两个人的工作——相遇并协商的那一个点。它的主张关乎在哪里动手:把测试放在那儿,把防护放在那儿,在那儿停下,因为一侧的影响到接合处为止。它本身并不承诺任何一侧可以替换;只有 Claude 明说时(extract the seam)那个推断才成立。在工程师之间,seam discipline(接缝纪律)意味着谁也不能不经协调者就跨过共享的接合处改东西。

Both engineers independently flagged the same shared-file hazard and routed it through me rather than each other — the seam discipline is reflexive now.

Claude 298/M人类 6/M396 次使用

日常的 drift(漂移)是缓慢的、无人掌舵的移动——一条没人划的船。Claude 用它指两个本应保持一致的东西随时间悄悄分岔:文档对代码、fork 对上游、同一条规则的两份拷贝。这个词告诉你:没人决定过这件事,也没有单个改动造成它;每一步都小到没被注意。这也是为什么 drift 从不出现在 changelog 或 blame 里——你只能靠直接对比两份拷贝才发现它。所以 Claude 的修法从来不是一次性纠正,而是一个机制,比如让一份拷贝从另一份推导出来,使分岔不可能发生——“这样它就再也不会 drift 了”。

the hand-maintained ignore-list mirror should be replaced with the indexer's own derivation of the same set so it can't drift again

Claude 223/M人类 1/M311 次使用

日常的梯子让你一次上一级。Claude 的 ladder 是任何由命名层级构成的有序标尺——重试与回退序列、风险分层、课程阶段——这个比喻的重点是每一级都可以单独援引:你可以跟 rung 2 较真、让它退役、或把两级并成一级,而不动其余部分。只有升级类的 ladder 才隐含按序攀爬直到某级成功;分类用的 ladder 只是把东西摆上去。所以当 Claude 报告“我的 ladder 里有个缺陷”,预期一次外科手术式修复——重写一级——而不是重新设计。无序的备选项只是一张清单;ladder 有序且带编号。

The engineer just caught a real flaw in my ladder — rung 3 assumed probe evidence covers writes, which is true for one harness and false for the other.

park · 停放又作: parked
Claude 172/M人类 1/M303 次使用

你停车(park)是打算回来取的:车停在安全、找得到的地方,停在那儿也丝毫不说明车有问题。Claude park 一个想法、工单或决定时,主张的正是这三点——这一项已写在某个可检索的地方,没有对它作出任何否定判断,而且有人打算回来。这把 parked 与 declined(已判断并拒绝)和 blocked(有外部障碍)区分开:park 纯粹是时机的选择。尤其注意 parked with you——它意味着这件东西现在停在你家车道上,你不动,一切都不会动。

Still in flight: my own T12 verification (landing on green), the T14 import-path engineer, and the two items parked with you (the hosting account login for CLI ops, and tracker quota for the last two ticket syncs).

buy · 买到又作: buys, pays
Claude 143/M人类 4/M317 次使用

买东西是交出一样、换回一样,而 Claude 完整保留了这场交换:在 Claudish 里,每个设计选择都有价格——复杂度、延迟、一次迁移——X buys Y 点名这笔价钱买到了什么。你没法只说 buys 而不说回报,所以“这买到了什么?”是在要求成本自证其值,而 buys you nothing 是这门方言里最重的否决——纯成本,零回报。gives us 或 provides 暗示没付任何代价,所以永远给不出那个否决。当 Claude 量化——buys 1.5x——它是在审计一笔已经付款的买卖值不值。

  • Local SSDs: the page cache absorbs everything. The streaming reader already saturates the disk; the mmap path buys you nothing here.
  • Network mounts: the streaming reader is routinely stalled by round-trip latency. There, mmap is frequently the difference between a 3-second and a 90-second load.
Claude 244/M人类 12/M246 次使用

日常语言里的 machinery(机械)是装配起来的装置——零件、保养、一本操作手册。Claude 用它指那些为了让别的东西运转而存在、自身并非功能的代码:重试队列、同步脚手架、恢复路径。这个词断言了装配与维护成本,以及一条“整体报废”的边界——machinery 可以整个拆走,拆的时候 Claude 会报行数。这让成本收益问题变得可问,也是为什么 assertions, not machinery(要断言,不要机械)能当论据用;不过裁决来自周围的句子,不来自这个词。mechanism 是一台做一件事的命名装置;machinery 永远是聚合体,账单摆在眼前。

Impossible cases get assertions, not machinery. If triggering a path requires corruption or 2^53 events, the answer is a validation rejection, not handled recovery.

Claude 208/M人类 未出现201 次使用

钱和信任靠展示出的回报挣来,从不靠嘴上说,而这正是 Claude 划的那条线。一个组件 earns its keep(挣到了自己的位置),是它用真实、被观察到的价值支付了自己的持续在场——而且这个短语隐含未来的复审:继续挣,否则被删;is worth it 则是一锤子买卖的判断。更锋利的用法里,一个论断是 earned 的,是它立在被演示过的东西上,而不是被断言的东西上——经由真实运行证明的检查留下;靠一段硬编码字符串背书的检查出局。无论哪种,Claude 说 earned 时,援引的是证据,不是表达好感。

Lock on what you've proven, never on what you've been told. That's what separates the origin block (earned via a live handshake proof — stays) from my sender guard (a typed string — gone).

Claude 101/M人类 4/M197 次使用

你在护照或文件上盖章(stamp):某个确定时刻的一次按压,纸面从此带着那个印记。当 Claude 说一个值被 stamped——paid_at 被盖章、记录带着一枚 paid 印——意思是写入在事件发生的那一刻一笔完成,这条记录从此充当证据,而不是以后重算的东西。图章是单向的:标志位可以翻回去,图章则要在周围一切崩坏时活下来。见到这个词,问两件事:这个印记证明什么,哪个后续流程要读它——通常是一条指望这份证据的对账或恢复路径。

paid_at is stamped — money really did arrive at that moment — so a pending row that carries a paid-at stamp is exactly the reconciliation worklist.

wedge · 楔子又作: wedged
Claude 108/M人类 未出现174 次使用

wedge(楔子)既是你塞在门底下卡住门的东西,也是劈木头时先敲进去的那个薄端。Claude 两个面都用,而且不说是哪个。作为坏消息,wedge 是卡死:进程活着却动不了——没崩、不是慢,是卡住——the wedge is here 指着把它钉住的那一步。作为好消息,wedge 是产品刻意选小的第一个用例:小是故意的,选它是因为它能撬开更大的东西。语境定夺。在调试报告里,找卡点;在战略笔记里,它指滩头阵地。

So the trigger fires correctly; the refresh machinery is not dead.

The wedge is one step later, in refreshEndpoints (transport.ts:1480-1610):

  1. New candidate connection resolved, probes run, health confirmed.
  2. retireGeneration closes the old connection and all its routes (transport.ts:1495).
Claude 98/M人类 2/M167 次使用

阅读本是对文本做的事,但 Claude 允许一切被“读”:一块屏幕、一种颜色、一次沉默、一组数字。It reads as X 主张的是:一个普通的观看者会从中带走 X——不管它实际是什么。感知与实际的这道裂缝正是重点:“这个按钮 reads as disabled”意味着用户会相信它不可用,哪怕它其实能用。与报告 Claude 自身印象的 looks like 或 seems 不同,reads as 是对你的受众的预测——所以它召唤的修复从来不在逻辑里,而永远在呈现上。

The hero image should make someone stop scrolling and screenshot it; ours reads as tasteful wallpaper.

Claude 133/M人类 未出现158 次使用

建筑里的承重墙(load-bearing wall),是你敲掉之后楼上地板会塌下来的那面。Claude 把它用于任何被其他东西结构性依赖的东西:一个测试、一行配置、文档里的一句话、论证里的一个事实。它刻意不是 important——重要说的是这东西有价值;load-bearing 说的是有别的东西压在它上面,并指明倒塌的方向。所以当 Claude 把一处差异或一个论断标为 load-bearing,被邀请的动作是具体的:改动或删除它之前,先问什么压在它上面——并先去检查那个。

Two of its claims are load-bearing enough to spot-check against the source (they drive every downstream estimate).

Claude 239/M人类 1/M156 次使用

在途(in flight)的飞机已经起飞、尚未降落——你不能登机、不能卸货、也没法便宜地召回。Claude 用 in flight 指处于这个中间态的已派发工作和已发送消息:已承诺、进行中、尚未落地。它常常只是个状态标题(In flight: T12, T15)。但这个短语带着一个主张:在途的工作无法从外部安全地编辑,而且如果系统此刻死掉,结局是不确定,而不是失败。这把它与 queued(未开始、仍可召回)和 landed(落地且终局)分开——in flight 是不可逆的中段,答案未出。

Both chunks are now in flight on disjoint trees — U3 (render-flicker follow-ups, UI files) and S5 (retry + backoff, sync files) — each getting its own verification pass.

Claude 110/M人类 未出现150 次使用

日常语境里,doctrine(教义)是定下来的官方教导——教会或军队写成文字,好让成员不再反复争论的东西。Claude 用它指被提升为常设法律的项目决定:X is now doctrine 意味着这个选择统辖未来所有同形的情况,而不只是引发它的那一件,Claude 会去查它而不是重新决定。它位于偏好和不变式之间——有约束力,但可经明确程序修订,绝不悄悄变。规则回答一个问题;doctrine 是新情况据以裁决的原则。见到它,预期这条规则会应用到没人想象过的情形上,而任何改动都会明告而来。

2. The danger-allow-all stance is now doctrine: the rule-of-thumb line explicitly says it's for runs you're watching live in an attached terminal, never for unattended fleets.

Claude 106/M人类 未出现149 次使用

房间的天花板不是关于该伸多高的建议——是你会撞上的那个面。Claude 用它指某人事先承诺的上限:工单上的行数预算、请求或重试轮数的封顶。选词本身携带效力:maximum 陈述一个数字;ceiling 陈述这个数字有约束力。超过它是一次会被 Claude 上报的违约(“净新增代码超过了约 400 行的 ceiling”),而缺一个 ceiling 本身就是值得点名的缺口。hard ceiling 意味着由代码而非约定强制执行——并且,抬高任何 ceiling 都会被当作你的决定,绝不是 Claude 的。

any future session proposing an addition has to name what it displaces, and moving the ceiling itself requires an explicit ruling from you.

Claude 161/M人类 2/M148 次使用

mechanical(机械的)通常形容机器做的事:每次同一个动作,不含思考。Claude 把它用于工作和规则,两种用法都是关于“判断力住在哪里”的主张。机械的工作足够刻板,照着流程走就是全部——所以这个标签是个路由决定:更便宜的模型或一个脚本就能干,评审它是检查合规,不是品味。机械的规则则是设计上不讲道理的:它见到自己的模式就触发,不管意图——这恰恰是它的价值:谁也说服不了它通融。反面是判断:需要品味的工作,或读意图的那一层。

the deny list is purely mechanical; the approval classifier is a separate, intent-based layer that runs after it

Claude 108/M人类 1/M147 次使用

家里的电线连接的是本来就各自能用的电器;台灯和插座都没毛病——问题在两者之间跑的是什么。Claude 的意思相同:连接组件的代码——注册一个 handler、传一个依赖、把模块挂进请求路径。wiring bug 是一种诊断:零件都健康,是连接缺失或接错了对象——所以 Claude 说“我的第一版 wiring 可能同时跑两台状态机”,而不是“我的第一版实现”。“wiring 在源码里是对的”把你引向同一个方向:连接声明无误——去运行时找故障。

it turned out the old settings sliders for volume and playback speed were never actually wired to it

priced · 已定价又作: price of, banked
Claude 95/M人类 未出现178 次使用

价签在你购买之前就锁定成本;估算只是猜一个。当 Claude 说一张工单已 priced(定价),附在上面的工作量数字是一份报价,不是预测:在派工之前给出,在那一刻可以争,之后就有约束力,只有在范围变动时通过明确的重新定价才能改——绝不悄悄漂移。同样的逻辑覆盖风险:一个“定价为可接受”的局限,意味着它的代价被说出了口、被知情地接受、记录在案。所以 Claude 给什么定价时,那就是你提出异议的时刻——过后,数字生效。

the hard fence the design review warned about, priced here as acceptable because our release cadence is fast

Claude 96/M人类 未出现133 次使用

rung 是梯子上的一级:你按顺序爬,每一级都是能真实站立的地方。Claude 用它指有序标尺上一个命名的层级——工单大小、升级步骤、回退偏好。选 rung 而不选 level,是坚持每一级都有定义好的内容,而不只是一个位置:rung 3 意味着“一个完整的功能”,你可以脱离它的位置去争论这个含义。它还暗示一次移动一级——跳级是值得点名的偏离。tier 是东西被归入的地层;rung 属于一把具体的、有人正在爬的梯子。

sized on rungs 1/2/3/5/8, the gaps forcing a real choice: 1 = happy path only (~120 source lines), 2 = plus the failures users actually hit (~260), 3 = a complete feature (~420), 5 = subsystem scope (~700), 8 = rare, needs the lead's sign-off (~1000+)

Claude 83/M人类 10/M127 次使用

院子里的 fence(围栏)围住的是一片区域,而不是堵住一扇门,而且围栏可能有洞。两个属性都被继承。当 Claude 说一个组件被 fenced——限到只读、限到白名单、限到 monitor 模式——意思是有一个被强制执行的机制,把这个组件的一切行为都圈在允许的范围内:一个你能找到并删掉的谓词或检查,不是一句某人承诺遵守的约定。因为 fence 圈的是区域而 gate 守的是单点,自然的评审问题是几何的:这道围栏真的围住了吗?The fence leaked 的意思分毫不差——圈地有洞。

everything version-shaped fences the affected surface to monitor-only and lets the rest of the sync daemon live. A different major fences unconditionally — no probe can activate writes

Claude 60/M人类 未出现107 次使用

lever(杠杆)是你拉动它来驱动机器的那根臂。当 Claude 把某样东西叫作 lever,它是在回答“我们实际能推什么?”——一个具体的、可用的、能改变结果的干预,通常来自一个被枚举的集合(“剩下的 lever 只有 X 和 Y”)。lever 会被列举、编号、施加、回滚。旁边的词很关键:knob 是你在设计好的范围内调的值;lever 是你为了改变结果去推的地方。所以“我们没有 lever 了”意味着枚举过的干预已经用尽——不是没主意了。

the only recorded levers are retryMin 3→2 and batchCap 12→16 (spec §6), which move the size envelope only and address none of the ten failures

Claude 57/M人类 未出现107 次使用

mint(铸币厂)是唯一获准铸造硬币的地方;其他任何人造币都是伪造。当创造伴随权威时,Claude 就会伸手拿这个词:the server mints the token 是说这个东西是全新的、由唯一有权签发的一方签发、并将流通——下游所有人照面额接受。平淡的 create 或 generate 不断言其中任何一点。它还延伸到词汇:minting a concept 意味着把一个新的命名抽象投入流通,此后每个读者都必须认识它——这也是为什么“没有 mint 新概念就解决了”是表扬。否定式——mints no OTP email——守卫的正是那个垄断。

Share links are minted server-side for owned rows only; tests assert the tombstone page answers byte-for-byte identically for a real id, garbage, and a guess, and mints no OTP email.

Claude 88/M人类 5/M97 次使用

你 burn(烧)的是燃料和现金:快速消耗,带一丝浪费的气味。Claude 烧的是计量配额——token、API 预算、模型额度、截止前的时间——在 spend 显得太客气的地方选这个词。burn 是“花”再加一项浪费的指控:无上限、无预算、或挥霍在不配的工作上的消耗。当 Claude 说一个重试循环 burns quota with no ceiling,这句话是一份控诉:循环无限消耗,什么也没买到。在报告里见到 burn,去找那个缺失的封顶——这个词几乎总是标记着某个机制本该约束、却没有约束的消耗。

live-model critique spend is completely unbounded by --budget; a retrying schema loop against the live API burns quota with no ceiling.

Claude 87/M人类 4/M89 次使用

家里的水管(plumbing)把水从源头送到龙头;没人指望一根管子做决定。Claude 指把一个值从产生处搬到使用处的连接性代码——参数透传、标志位到选项的接线、纯透传的层。把代码叫 plumbing 是断言它不做任何决定:它可以漏(值在途中丢失或变形),但绝不会主意错。所以 no plumbing gaps 意味着每个值都完好抵达,the plumbing is unexercised 是对透传路径的覆盖率抱怨,与逻辑无关。这个词也标出了不必去哪里找有趣 bug——不过藏在墙里的水管,恰恰是无聊的渗漏最容易被忽视的地方。

The hint flows straight through — the API returns the result object whole and the client passes it to ResultCard, so no plumbing gaps. Running the full gate:

Claude 86/M人类 1/M86 次使用

日常说的经济学研究的是东西的成本及其原因——稀缺、取舍、激励,作为一个系统挂在一起。Claude 借的正是这份“系统性”。The economics of X——消息经济学、token 经济学——不是一张价目表,而是一个主张:X 的成本有内部结构,有些东西稀缺,有些近乎免费,每个动作都从其中之一支取。正是这个结构,才让“经济学被倒置了”这类说法成立——对一串数字你说不出这种话。当 Claude 搬出 economics,它是在警告你的成本直觉可能失灵,并邀请你改从这个系统的稀缺性出发来推理。

The economics of an agent team are a human org inverted — coordination and trust are nearly free, and attention is the scarce thing.

Claude 101/M人类 未出现81 次使用

高速公路的护栏(guardrail)是你永远不该碰到的东西:你在它内侧自由行驶,只有跑偏时它才起作用。Claude 指的是一条常设规则或自动检查——配置文件里的一条策略、任务里的中止条件、钉住已知失败模式的测试。你从不需要去满足一条 guardrail;撞上它是事故,不是检查点。所以 the guardrail fired 意味着一条常设规则叫停了这次运行——工作不是因自身失败而停;系统往往恰恰按设计运转了。gate 拦住你并要求被通过;tripwire 什么也不拦,只在事后报告。

That's almost certainly earned: your session visited ~900 pages in this morning's crawl, and this is precisely the signal the runner is built to detect and abort on rather than hammer through. Nothing in our pipeline misbehaved — the guardrail fired as designed. Recommendation: give the session a few hours' rest; the aborted run's remaining page is still queued, so the next resume will pick it back up.

Claude 71/M人类 未出现80 次使用

你的脊柱(spine)是让身体其余部分不至于瘫成一堆的东西:一切都附着其上、依其成形。当 Claude 把某样东西称作 spine——一个 schema、一份发布计划、一个组织性想法——它是在主张:其余一切因它而聚拢、离它便散架,这正是 spine work 不可推迟的原因:抛光可以等,脊柱不能。当 spine 是顺序性的——计划的日期、文档的章节次序——它还承载事情发生的顺序;core 只是个中心,spine 是一根轴,其余一切按位置挂在它上面。

The app has a genuinely coherent spine — every page is a "statement you could hand the accountant"

Claude 52/M人类 未出现73 次使用

功放上的旋钮(knob)生来就是被转的:调起来便宜、转回去容易、范围由设计限定。当 Claude 把一个参数叫作 knob,它在同时断言三件事——这个值本来就要变、变它没有结构性代价、它的范围是刻意选定的。这也是为什么“这是个以后可以调的 knob”能终结一场设计争论:现在随便选个合理值,因为调参不构成承诺。否定式同样重要:this is NOT a knob 警告说不存在这样的控制——改那个行为意味着重新设计,而一个伪造该控制的测试是在粉饰它的缺席。

Retry throttling is NOT a built-in knob. Existing tests monkey-patch the client to fake it.

Claude 65/M人类 未出现71 次使用

一位 stranded(滞留)的旅客是被困住的:没迷路、没受伤,只是身处一个没有前路的地方。Claude 用 strand 指被留在某个状态、任何代码路径都不会再把它挪走的记录或资源——行还能查到、数据完好,但没有任何进程会来管它。所以“支付路径不再可能 strand 一笔扣款”是一个很强的断言:现在每个状态都有出口。滞留记录的救治从来不是修一个 bug,而是新写一条恢复路径。orphan 失去了主人;stranded 的记录可能还有主人——它缺的是前进的路。

two are inert until their env keys arrive, so nothing user-visible changed today except that the payment path can no longer strand a charge.

Claude 62/M人类 14/M71 次使用

人人都懂 trade(交易):交出一样,换回一样,而这笔买卖本身可以被评判。当 Claude 把一个设计决定称为 a bad trade 或 the right trade,它已经把两侧折成了同一种货币——多耗点电换少等一会儿,多一坨机械换一点小赢——裁决落在汇率上,而不落在任何单独一侧。这让这句话成为一个完整的论证:改动可以完美生效,仍然是亏的。与只点名一种张力的 trade-off 不同,a trade 是一笔已敲定、已打分的买卖。想反驳,就去重新为某一侧定价——不要辩护功能本身。

Naive two-phase (index pass + existing file-based catch-up) = 60 + 90 ≈ 150ms/doc total: ~70% more total work and battery than today's single pass, to save a third on time-to-first-search. As a pure scheduling change, it's a bad trade.

Claude 70/M人类 3/M70 次使用

个人卫生预防的是你还没得的病,而这正是 Claude 归入这个词的那类工作:commit hygiene、data hygiene、leak hygiene。hygiene 项明确不是 bug——今天没有任何东西行为不当,Claude 用这个词恰恰是为了声明这一点(hygiene only; no behavioral impact)。但它也不是轻慢:卫生是例行且预防性的,偶尔跳过便宜,永远跳过毁灭。给分诊的翻译是:这个迭代推迟是安全的,永远推迟是危险的。

The empty-report rule first: strongly agree, and it's more than hygiene — it makes silence auditable.

Claude 55/M人类 未出现64 次使用

军事侦察(reconnaissance)是探路:去看,什么都别碰,回来报告,然后行动才开始。Claude 把它用于对代码库、API 或基础设施的同一形状的工作——在提交任何改动之前的一次有边界的只读排查。宣布 a quick recon 就是在宣布一个阶段边界,而且它带着 let me investigate 不带的契约:不会写入任何东西,这一遍以一份报告结束,真正的工作还在后面、另行把关。所以当一份 recon 报告落地,你被请求评审的是发现——不是一个改动。

Let me ground the discussion with a quick read-only recon: pull the actually-touched paths from both repos' histories and check their git remote state locally.

Claude 74/M人类 未出现62 次使用

磨刀不会给你一把不同的刀——同一片刃,切得更利。当 Claude sharpen 一个论断、一条原则或一段分析,那个东西保持身份、获得分辨力:之后它能分开从前一滑而过的情形。这也是为什么一个约束能 sharpen 一段分析——收窄刀刃正是让它咬得住的原因——以及为什么“把你的原则 sharpen 成一个可操作的测试”意味着同一条原则,如今精确到能裁决真实案例。One small sharpening 表示一次便宜的修改,不是重新设计。refine 只说更好;tighten 减少松弛;sharpen 专指增加分辨事物的能力。

Let me sharpen your principle into an operational test, then wire enforcement so it doesn't depend on anyone's discipline (mine included).

Claude 44/M人类 2/M50 次使用

炉子上的 dial(旋钮)是转的,不是扳的——连续调节,不是开关。当 Claude 把一个参数称为 dial,指的是机制建成之后再设定的可调量:桶大小、补充速率、成本与质量的平衡点。Two tunable dials 承诺两个独立的调节,各控一个属性,并把未来的分歧框定为选一个档位而不是重新设计什么——转一转就能解决。在 Claude 的用法里,dial、knob、lever 几乎可以互换;真正的对照是 toggle 或 mode,那是离散的。一个不相干的同形词:网络段落里一个服务在 dials,只是在建立出站连接——语境会让这一点显而易见。

Two tunable dials. Bucket capacity bounds burst size; refill interval bounds sustained rate.

Claude 39/M人类 未出现42 次使用

炸弹的 blast radius(爆炸半径)是以它为圆心的那个圈:圈里的一切都会被波及,圈外的一切安然无恙。Claude 用这个短语指一个改动、一份凭证或一个 bug 出事时能损害的确切集合——并把这个集合当作行动之前就能枚举的东西(“确切地说:我们的一个服务、我们的数据库、我们的桶——没有别的”)。这条边界正是 impact 和 risk 缺少的。因为边界能提前画出,它也就能被缩小,Claude 的设计论证很大一部分就是在任何东西运行之前缩小它。别把它和严重度混为一谈:blast radius 数圈里有什么;severity 说每一击有多疼。

The dev machine's blast radius is then exactly: our one service, our database, our storage bucket — nothing else in the account, no other environments, no other products.

Claude 35/M人类 未出现42 次使用

scout(斥候)被派往陌生地带去看、回来报告——从不接敌。Claude 用这个词指带着完全相同命令派进陌生代码的子 agent 或先行的一轮侦察:测绘地形,交回一份书面报告,什么也不改。角色即契约——scout 报告常带“仓库未动”的印记——所以交回来的是一张地图(路径、行号、部件如何相连),而每个决定仍属于派它出去的人。当 Claude 说“让我先 scout 一下”,只读侦察先于任何计划;engineer agent 动手,scout 从不。

Let me scout the repo shape first, then fan out the migration workflow.

Claude 34/M人类 未出现38 次使用

headroom 字面上是你头顶到天花板之间的空间——在你生长的方向上、以一个硬止点结尾的余量。Claude 用它指当前测量值与一个被点名的上限之间的距离,表述为你可以自由支配的容量:对着预算说 2.4x headroom,意味着负载翻倍还不止,才会有东西坏。与 margin(留作储备的缓冲)或 slack(不含上限暗示的闲置容量)不同,headroom 是生长的许可——而且它预设上限是硬的:到了顶你会撞上天花板,而不是缓慢退化。

Worst case is 620 requests — 41% of the 1,500 budget, 2.4× headroom.

解法:向老板汇报

电影《商海通牒》(Margin Call)里有一幕:杰里米·艾恩斯饰演的银行 CEO,让一个年轻分析师解释即将终结这家公司的危机:

也许你可以告诉我现在到底是怎么回事。还有,拜托,就当是讲给一个小孩子听,或者讲给一条金毛犬。把我带到这个位置的可不是脑子,这一点我可以向你保证。
—— John Tuld,《商海通牒》(2011)

这份假谦虚正是重点。Tuld 是屋里最敏锐的人,而要求听大白话版本,是他检验说话者是否理解自己在说什么的方式。这正是修复 Claudish 的正确框架——因为"the gate is green"与"不知道是哪个 gate"完全兼容,而"安装、类型检查和 771 个测试全部零退出"不兼容。大白话版本不是降智,是工作量证明。

/report-to-the-boss

一个从这两个发现——而不是从症状——出发构建的 Claude Code skill。它不禁任何一个词,也从不要求简洁——两者都被实测证明无效。它只设定一个立场和一条机械规则:

立场:每条消息都是写给一个人的汇报——这个人很敏锐、刚才不在场、只读这一条消息,并且把你的大白话解释当作你是否理解自己工作的检验。

规则:50 个词随便用——但在一条消息里第一次用到时,必须在一两句话之内点名它的具体所指。检验标准:读者能否仅凭这条消息回答*"具体是哪一个?"*

获取方式:https://github.com/YuanpingSong/boss-skill —— /plugin marketplace add YuanpingSong/boss-skill,然后 /plugin install report-to-the-boss

关于它的现状,实话实说:指令遵循数据表明这个设计应该有效——我们测试中的模型精确服从那些机械的、点名的规则(词表、距离规则),而无视抽象的恳求。但这个 skill 本身刚刚写完,我正在用唯一有意义的方式评估它:fork 我自己的真实会话,开着它重新生成 Claude 的汇报。前后对照我会发出来。

测量方法

一段话讲清方法——核心方法是语料库语言学里最古老的那一个:对照参考语料库,统计每百万词的 n-gram 频率——承袭 Google Books Ngram 项目的传统;它既启发了这项研究,也充当了它的第一条基线(还有最后一条:我们正是用 Books 词频,把 baked in 这类日常比喻从词典里剪掉的)。三个专门构建的参考语料库各排除一种解释:一百万词的前 AI 时代人类工程文本("写代码的人本来就这么写")、88.6 万词的同机 GPT-5("LLM 都这么写")、以及我自己敲的提示词("Claude 是在学你说话")。统计筛选只负责提名候选词;一百多个阅读 agent 逐一对照真实段落核验,对抗性一轮又否掉了 162 个中的 67 个。之后每个数字都从原始文本重新计算。控制越严,数字越——早期一个天真的对比说 15 倍;诚实的数字约为 7 倍——而把数字缩小的那场审计,正是这项研究自己的 agent 跑的。数字一路走低的这个方向本身,就是我能拿出的最好的可信度证明。

诚实的局限:一个用户的聊天记录、一台机器、82 天、只有英文。gate 的溯源统计由 agent 判定(n=76 次检查点义项使用,保留了逐字的规格引文,人工抽查核对)。词典例句是轻度匿名化的真实消息。给从业者的一条模型层备注:在这批记录上,Fable 5 的语域最浓(每千词 33.8 个比喻),Opus 5 较淡(24.6),Sonnet 5 最淡(17.9)——不过后两者的测量文本量要少得多。