![]()
你的AI编程助手每启动一次,都在为垃圾信息付费。开发者Jared Sumner写了个工具,扒了8个开源项目的上下文文件,发现74%的内容纯属浪费token。这不是理论推测——他用了8条确定性规则,零大模型参与,纯文件系统扫描,毫秒级出结果。
工具叫ctxlint。安装只需一行命令:npx @ctxlint/ctxlint check。它专门审计AGENTS.md、CLAUDE.md、GEMINI.md、.cursorrules这些文件——就是你放在项目根目录、每次对话都被完整加载的那堆"使用说明"。
token战争的隐藏战场
用大模型写代码的人有个共同习惯:给AI准备一份"入职手册"。文件里写满项目结构、代码规范、常用命令,指望AI少犯错。Jared Sumner最初也是这么干的,直到他开始系统性地审查这些文件。
问题比他想象的更普遍。他克隆了8个热门开源仓库,这些项目的上下文文件都由专业团队维护,按理说应该是标杆。ctxlint跑完,91%的检测结果准确,零崩溃——同时暴露了触目惊心的浪费模式。
最典型的三类垃圾信息:
目录树。几乎每份自动生成的上下文文件都有。AI自己会用ls和find,你写的树状结构只是重复占用token——平均每份文件浪费14个token在完全无用的层级展示上。
失效命令。上下文文件里写的npm run test:e2e,实际脚本早被重命名成test:integration。AI照做,报错,花token排查,最后自己找到正确答案。用户为同一件事付三倍钱。
幽灵文件引用。路径写的是src/config/auth.ts,实际文件在packages/core/src/config/auth.ts。monorepo项目里尤其常见,开发者按根目录思维写路径,文件却埋在两层深的workspace包里。
Jared Sumner把这些问题分成信号与噪音。理想比例是信号占主导,但他检测的典型文件里,62%是噪音,38%才是有用信息。按Claude Code的定价换算,每月能从0.09美元压到0.03美元——省67%不是画饼,是实打实的token账单。
8条规则的残酷筛选
ctxlint的8条规则全部基于文件系统事实,不调用任何大模型。这是刻意设计——规则必须可验证、可复现、毫秒级执行。
no-directory-tree直接封杀目录树。规则逻辑简单粗暴:检测到树状缩进结构就报错,建议删除。Jared Sumner的原话是:「Agents discover file structure via ls/find — this just adds noise.」
stale-command和stale-file-ref是双胞胎。前者交叉验证package.json里的scripts字段,后者检查路径是否存在。monorepo场景下,工具会递归扫描所有workspace,确保相对路径不会指向空气。
token-budget是算账规则。统计总行数、估算token数、计算信噪比。低于0.5的比例会被标黄,提醒用户这份"入职手册"已经臃肿到影响效率。
最棘手的是redundant-readme。上下文文件和README重复是普遍现象——开发者先写README,再抄一份给AI看。Jared Sumner用三元组重叠算法(trigram overlap)检测相似度,阈值设在40%。「At 40% threshold, it catches real duplication but occasionally flags sections that share vocabulary without actually saying the same thing.」他还在调这个参数,但宁可误报也不漏报。
style-guide-rules-already-covered是条隐蔽规则。很多人会在上下文文件里写"使用Prettier,单引号,无分号"——但.prettierrc早就配置好了。AI能读到配置文件,重复声明只是占用token的冗余保险。
最后两条处理绝对路径和敏感信息泄露。前者防止上下文文件里出现/home/username这种不可移植的路径,后者扫描API key、密码模式。这两条更多是为了健壮性,而非token经济。
开源仓库的体检报告
Jared Sumner没公布具体是哪8个仓库,但描述了它们的共性特征:都是GitHub上活跃的项目,star数可观,有专门的贡献者维护上下文文件。换句话说,这是做得最好的那一批,不是野生个人项目。
即便如此,问题依然密集。最普遍的病灶是monorepo路径混乱。开发者写docs/architecture.md,实际文件在apps/web/docs/architecture.md。AI收到指令,找不到文件,要么浪费token搜索,要么直接幻觉生成一个"合理"的架构描述。
失效命令的危害比浪费更严重。Jared Sumner观察到典型故障链:AI执行上下文文件推荐的命令→报错→进入调试模式→尝试修复→发现命令本身不存在→转而探索可用脚本。原本一次请求能完成的事,变成三次请求加一个错误排查流程。
「Stale commands are dangerous, not just wasteful. You paid triple.」
目录树则是纯粹的token黑洞。Jared Sumner发现几乎每份自动生成的上下文模板都包含完整的文件树,有些甚至嵌套到五层以上。AI不需要这个——启动时的工具调用(tool use)会自动探索文件系统,生成的树比静态文本更准确、更实时。
风格指南重复是另一个隐形消耗。很多团队把ESLint配置、Prettier规则逐字抄进上下文文件,生怕AI不知道。但ctxlint会检查这些规则是否已被配置文件覆盖——90%的情况下,AI读.eslintrc.json比读自然语言描述更高效。
工具背后的产品思维
Jared Sumner的身份背景很有意思:他曾是Bun的核心开发者,那个用Zig语言重写JavaScript运行器的激进项目。Bun的哲学是极致性能——启动快、执行快、内存省。ctxlint延续了同一套思维,只是把优化对象从运行时换成了上下文文件。
8条规则的选择体现了明确的取舍。没有AI参与的规则设计,意味着放弃了一些"智能"检测能力——比如无法判断某段文字描述是否清晰,只能检查文件是否存在。但换来了确定性:同样的输入永远得到同样的输出,运行成本趋近于零。
「Zero LLM dependency」是刻意为之的产品宣言。当整个行业都在把大模型塞进每个工具链环节时,Jared Sumner反其道而行——用确定性规则解决确定性问题,把大模型调用留给真正需要推理的场景。
这种设计也暴露了当前AI编程工具的尴尬处境。Claude Code、Cursor、Gemini CLI都支持上下文文件,但没有任何一个提供原生审计工具。用户只能凭感觉维护这些文件,不知道哪些内容在被实际使用,哪些只是历史遗留。
ctxlint填补了这个空白,同时也提出了一个尖锐问题:如果74%的上下文文件内容都是浪费,那平台方为什么不做内置优化?
可能的答案是商业动机。上下文文件越长,每次会话消耗的token越多,平台收入越高。但这只是推测——更可能的解释是优先级问题。平台团队忙于竞争功能完整性,token效率是用户侧才会痛感的成本。
从个人工具到行业镜子
ctxlint的GitHub仓库目前星标数未公开,但Jared Sumner的推文获得了显著传播。评论区最常见的反馈是:"我立刻检查了自己的AGENTS.md,发现三个失效路径。"
这种即时可验证性是小工具传播的关键。不需要理解复杂原理,运行一条命令就能看到自己项目的"体检报告"。错误列表具体到行号,修复建议直接可执行。
更深层的价值在于建立了评估标准。在此之前,"好的上下文文件"没有客观定义——有人追求详尽,有人追求简洁,全凭手感。ctxlint的8条规则提供了可量化的基准:无目录树、无失效引用、无重复配置、信噪比>0.5。
这些规则本身也会引发争议。比如目录树真的完全无用吗?某些复杂项目的架构说明可能需要可视化层级。Jared Sumner的回应是:工具提供的是默认严格模式,用户可以通过配置关闭特定规则。但默认立场很明确——先证明你需要它,再保留它。
redundant-readme规则的40%阈值同样可调整。Jared Sumner承认当前版本会误伤一些共享词汇但语义不同的段落,但他选择保守策略:宁可提醒用户手动检查,也不让真正的重复漏网。
这种产品哲学和Bun一脉相承。不追求覆盖所有边缘情况,而是在核心路径上做到极致。对于上下文文件这个新兴领域,这种聚焦可能比全面更有价值——毕竟规范本身还在演化,工具需要保持轻量才能快速迭代。
Token经济学的微观切片
ctxlint的检测报告里有个细节值得玩味:每月0.09美元到0.03美元的对比。这个数字基于特定假设——某个"典型"使用频率下的Claude Code定价。它很小,小到几乎可以忽略;但它也很诚实,诚实到无法被包装成"每年节省数千美元"的推销话术。
Jared Sumner选择展示真实数字,哪怕看起来不够震撼。这种克制本身就是信号:工具面向的是对token成本敏感的开发者,不是需要ROI报表的采购决策者。
但微观数字乘以规模就是宏观图景。假设一个10人团队每天启动50次AI会话,上下文文件平均浪费60%的token——月度浪费可能从几美元累积到几十美元。对于更大规模的组织,或者使用更昂贵模型(如GPT-4 Turbo)的场景,优化空间会进一步放大。
更重要的是注意力成本。大模型的上下文窗口是有限的,被垃圾信息占用的部分无法用于实际任务。当AI需要处理200行上下文文件才能开始写代码,其中120行是噪音,有效工作记忆就被压缩了40%。
这种压缩不会直接体现在账单上,但会体现在输出质量上——更频繁的幻觉、更长的响应时间、更多轮次的澄清对话。ctxlint的token-budget规则试图量化这种隐性成本,用信噪比作为健康指标。
当前版本的阈值设定(0.5)相当激进。大多数被检测的文件都低于这个标准,意味着需要大幅删减。Jared Sumner没有解释0.5的来源,可能是基于个人经验,也可能是早期测试的统计结果。无论如何,它设定了一个高门槛,迫使使用者重新审视自己的"入职手册"是否真的必要。
工具的未来迭代方向也值得关注。Jared Sumner提到redundant-readme规则"still tuning",暗示会有基于实际反馈的阈值调整。其他可能的扩展包括:检测过时的依赖版本、识别与代码实际风格冲突的文字描述、甚至建议缺失的关键上下文(反向的lint)。
但这些都需要保持零LLM依赖的核心约束。一旦引入大模型做语义分析,工具就失去了确定性优势,运行成本也会从毫秒级跳到秒级。Jared Sumner似乎在这个边界上很坚决——ctxlint是审计工具,不是写作助手。
这种定位让它可以和AI编程工具本身形成互补。Cursor或Claude Code负责生成和推理,ctxlint负责事后审计和持续维护。就像传统开发中的linter和formatter,各自专注,组合生效。
一个尚未回答的问题是:平台方会吸收这类功能吗?理想的用户体验是上下文文件在编辑时就获得实时反馈,而不是事后运行独立工具。但这也意味着平台需要暴露更多内部机制——比如哪些内容被实际加载、token如何分配、信噪比的实时计算。
目前看来,各大AI编程工具对此保持沉默。它们的竞争焦点仍在功能特性(多模态、agent能力、模型切换),而非效率优化。ctxlint的存在某种程度上是这种市场结构的副产品——用户被迫自己解决平台不愿解决的问题。
这也解释了为什么一个单行命令安装的小工具能获得关注。它切中的不是技术难题,而是信息不对称:用户不知道自己写的上下文文件有多低效,直到有人把数字摆到面前。
Jared Sumner的推文结尾没有呼吁行动,没有产品路线图,只有一行简单的安装命令和检测结果示例。这种克制和工具本身的设计风格一致——让事实说话,让用户自己决定。
但评论区已经有人开始追问:会不会有VS Code插件?能不能集成到CI流程?这些需求指向同一个方向:上下文文件的质量控制,应该从个人习惯变成团队规范。
如果ctxlint或类似工具成为标准配置,AI编程的工作流将被重新定义。不再是"写一堆说明让AI更聪明",而是"持续审计确保说明有效"。这种范式转换和测试驱动开发(TDD)有相似之处——先定义正确性标准,再迭代实现。
对于已经习惯AI辅助编程的开发者,这可能是个痛苦的调整。承认自己精心维护的AGENTS.md有74%是垃圾,比承认代码有bug更难——前者涉及对"如何与AI沟通"的根本假设。
但Jared Sumner的数据就在那里。8个仓库,91%检测精度,零崩溃。目录树 universally useless,失效命令 dangerous not just wasteful,幽灵引用 mislead agents into searching for ghost files。
这些结论不需要大模型验证,只需要文件系统扫描。或许正是这种确定性,让ctxlint在充满炒作的AI工具 landscape 中显得格格不入——又格外可信。
你上次检查自己的上下文文件是什么时候?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.