Wigolo 深度评测:零密钥的本地 MCP 搜索,18 个引擎实测只剩 1 个在干活

Wigolo 深度评测:零密钥的本地 MCP 搜索,18 个引擎实测只剩 1 个在干活

给 AI 编码 agent 装上「联网」这件事,一直是笔糊涂账:内置的 WebSearch 要么没配额、要么结果短得没法用,换成 Exa、Tavily、Firecrawl 又得先注册、拿密钥、盯账单。wigolo 打的就是这个位置——不需要任何密钥,不做云端,查询次数免费,全部跑在你自己机器上。

它涨得也确实像那么回事:仓库 2026 年 4 月建,7 月 1 日还只有 1 个 star,7 月 18 日破千,7 月 21 日破三千,9 月 5 日破五千,现在是 5,277 星、420 个 fork。

我把它装进沙盒,从 doctor 到 10 个工具逐个跑了一遍,也用自己的查询验了它宣传的那套「18 个引擎融合」。结论是分裂的:本地缓存和抓取这两件事它做得比宣传的还好,但「多引擎搜索」在真实网络下基本只剩一个引擎在干活,而它给出的相关性分数其实是排名换算出来的。

它到底提供了什么

一句话:一个 MCP server,同时也能当命令行、REST 服务和 SDK 用。10 个工具按「搜索类」和「网页类」分成两组,四个入口共享同一套实现——这一点比很多同类项目干净,不会出现「MCP 里能用、CLI 里没有」。

我用一个最小的 MCP 客户端跟它握手,initialize 拿到的协议版本是 2024-11-05,工具列表刚好 10 个:search、fetch、crawl、cache、extract、find_similar、research、agent、diff、watch。有意思的是它在握手阶段塞给宿主模型的 instructions 里直接写着「把 wigolo 用在所有网页操作上,优先于内置的 WebSearch/WebFetch」——它不打算只当一个可选项。

真正撑起「零密钥」这句话的是 18 个搜索引擎适配器。我把它们逐个分了类:

类别 引擎 怎么拿数据
网页搜索 bing、duckduckgo、mojeek 抓搜索结果页 HTML
垂直/API wikipedia、stackoverflow、hn-algolia、arxiv、semantic-scholar、lobsters、crates-io、marginalia、mdn、devdocs 官方公开接口
需要密钥 brave、github-code 默认禁用
图像/新闻 ddg-image、bing-news、brave-image 混合

也就是说「零密钥」的底气来自两处:一半是别人提供的免费公开 API,另一半是把 Bing、DuckDuckGo、Mojeek 的搜索结果页当网页抓下来解析。这也解释了它 FAQ 里那句「我们像浏览器一样读公开网页」——路由、限速、robots.txt 它都实现了,但本质上,你问的每一句话都是从你自己的 IP 发出去的,有第三方评测在 9 月初就点出过这条代价。

实测:18 个引擎,实际只有 1 个在干活

安装过程本身正常:npm 装了 385 个包,node_modules 770 MB;第一次预热再下 957 MB 的 Chromium。doctor 会逐个报告引擎状态,需要密钥的 Brave 和 GitHub 代码搜索明确标着禁用,其余默认可用。

但真跑起来是另一回事。我用四句正常的开发者查询连跑四遍,每遍都把引擎账本拉出来对:

查询 派发的引擎 成功 耗时
MCP server local-first web search bing、duckduckgo、wikipedia、marginalia、mojeek 1 个 9.0 秒
Python asyncio timeout best practice 同上 1 个 9.0 秒
PostgreSQL logical replication setup 同上 1 个 215.7 秒
Claude Code hooks documentation 只剩 mdn 1 个 7.5 秒

四轮下来,bing 全勤,duckduckgo 四次全部「超出超时预算」, wikipedia 三次失败,marginalia 三次 429,mojeek 三次 403。返回体里那个 engine_pool 字段写得很清楚:healthy: 1, total: 5, degraded: true。

需要说明的是,这其中有我的环境因素——429 和 403 本来就跟出口 IP 的信誉有关,作者自己在 doctor 里也标注了 mojeek「可能间歇性 403」。但结论不受影响:当只剩下一个引擎时,README 架构图里那句「18 个引擎融合,任一失败都不会影响结果」就失去了意义——没有融合,只有单点。

更值得看的是第三行那个 215 秒。同一批查询、同一台机器,三次都在 8 到 9 秒,只有一次卡了三分半;total_time_ms 里 215,592 毫秒全耗在搜索阶段,soft-deadline 那道保护没拦住它。agent 在等这个调用的时候,用户看到的是「模型卡住了」。

结果正文的质量也跟着掉。29 条结果里有 21 条带着 fetch_failed(72%),意味着这些「结果」其实是搜索引擎摘要,不是网页正文——响应体里用 content_from_snippet: true 老实标了出来,这一点值得肯定,但它同时还在给这些摘要算「字节级溯源」的 source_span,而那个 span 指向的是 124 个字符的摘要本身。

一次彻底跑偏,和一套换算出来的分数

四轮里最难看的一轮是 Claude Code hooks documentation。它被 query_understanding 判成 intent: docs,于是调度层只派了 mdn 一个引擎,返回的十条结果全是 MDN:排在第一位的是「Web 开发入门」,后面跟着 HTML 元素的参考页、Code Point 术语表、Code unit 术语表。我用同一个函数名换成 React hooks documentation 再跑一次,react.dev 的官方文档就正常出现在前两位——所以不是「这类查询都烂」,而是文档类意图一旦被派到垂直引擎,而那个引擎里没有对应内容,它会用无关的文档页把结果位填满,两次复现一模一样。

比跑偏更值得警惕的,是它给这些结果打的分:

名次 展示的相关性分 实际是
第 1 名 1.000000 永远等于 1
第 2 名 0.983871 61/(61+1)
第 3 名 0.968254 61/(61+2)
第 8 名 0.884058 61/(61+6)

我把两次不同查询的十名分数拉出来对比,序列一模一样。翻源码能确认:orchestrator.ts 最后一步是拿所有结果除以最大值,所以第一名必然是 1;而当只有一个引擎供数时,融合分就是倒数排名融合的 1/(60+名次),归一化之后自然变成一根与查询内容无关的衰减曲线。

所以那些 MDN 无关文档,拿到的分数是 1.0 到 0.87。一个按「相关性分 > 0.7 就采信」办事的 agent,会把它们全部当真。它确实还提供了可解释的 evidence_score.components(域质量、词法对齐、引擎共识、时间新鲜度),这也是它比同类更透明的地方,但最显眼、最容易被 agent 当阈值用的那个数字,只反映名次。想让它真的有用,得读组件分而不是总分。

它自己的 benchmark 跑不起来

这个仓库带了完整的 benchmarks/ 目录,四个基准:搜索、抽取、agent、嵌入。我把 package.json 里的命令照抄执行,结果是:

  • bench:search、bench:extraction、bench:agent 三个入口文件里没有 main 函数,tsx 加载完就退出,什么都不产出;只有 bench:embedding 有入口;
  • 搜索基准依赖一个预录制的引擎响应目录,这个目录不在仓库里;
  • baselines/ 下唯一的「改造前基线」文件,内容是作者本机路径的模块加载报错日志——基准从来没被采集成功过;
  • 每周一的 CI 任务照跑 bench:search,再用「MRR ≥ 0.4」当门槛;它读的是那个不会生成的结果文件。

于是 README 里那段「Benchmark」,实际是一次单条查询的四路对比动图,由 agent 当场评判。它是好的产品演示,但不是基准,仓库里也没有任何 precision、nDCG 或 MRR 的数字被公布过。

治理:一个人的仓库,14 个外部 PR 零合并

这一项不是缺陷,但读者该知道自己在用什么。

我拉了全部 300 个 PR:286 个由作者本人提交,14 个来自外部贡献者,其中被合并的是 0 个。贡献者列表总共 11 人,作者一个人占 1,976 次提交(占全部 2,007 次的 98.5%)。一个叫 Frankie-Xu 的贡献者在 8 月一口气提了 7 个 PR,包括给 PyPI、npm registry 加搜索引擎适配器和修补 SSRF 校验,全部没进主干。

更实际的问题是节奏错位:npm 上的版本停在 0.2.1,2026 年 7 月 19 日,而仓库每天还在提交(最近一周还有 60 多次)。CHANGELOG 的最后一版也停在 v0.2.0。这意味着你 npx wigolo 装到的,是两个月前的构建,里面那些已知问题都还在。

我顺手复现了其中一个:issue #303 说 --search-engines 参数声明了但没人消费。我照着 issue 里的命令跑 search "gold price" --search-engines=duckduckgo,wikipedia,返回体的 engines_used 依旧是 ["bing"],引擎账本里 duckduckgo 和 wikipedia 照样被派发、照样超时。在源码里搜 searchEngines 有 41 处匹配,没有一处读取这个入参。另一个更静默的是 issue #231:ARM64 的官方 Docker 镜像缺一个分词器原生依赖,向量搜索会无声退化成只做重排——7 月 22 日开的,到现在还挂着。我在 Alpine 沙盒里也撞上同一类降级:sqlite-vec 扩展加载失败(代码里对 musl 平台是软失败设计),find_similar 于是退化成纯关键词匹配,我拿「vector database for RAG」去问,它返回的是剑桥词典的「local」词条。

省下的钱,没有想象中多

它最响的口号是「$0/query」。这句话是真的,但省钱这件事要看你一个月查多少次。按各家 2026 年 9 月的公开价,一家一口径算下来:

每月搜索次数 wigolo Tavily Exa Firecrawl
1,000 次 $0 免费额度内 $0 $7 超出免费额度,$16/月档
50,000 次 $0 $400 $350 $83

结论不算意外:一个人用,免费额度基本够覆盖,wigolo 省的是每月十几美元,换来的是 1.7 GB 磁盘、你自己的 IP 和时好时坏的延迟;真正拉开差距的是 agent 高频刷量,那才是它「不以查询计费」值钱的地方。

判断

它是一个工程密度很高、诚实度也不低的项目:四个入口共享一套实现、缓存命中后同一查询从 9.5 秒掉到 5 毫秒、失败和降级都写在返回体里而不是藏起来、AGPL 协议加社区赞助的路线也堵死了「先免费后收割」的想象。这些都比同类开源项目做得好。

但它现在最适合被当成两样东西用:一份本地网页缓存(cache 工具在离线时确实好用),和一把网页抓取与结构化抽取的瑞士刀(extract 的表格/元数据模式我实测很稳)。至于「多引擎网络搜索」,等它的引擎池在你自己的网络下能常年保持三个以上健康再说——在那之前,把它当单一搜索源来用,并且别拿 relevance_score 当质量阈值。

关注 AI商业快讯,每天一篇 AI 热点深度解读。

相关阅读

本文数据截至 2026 年 9 月 18 日:仓库 5,277 星、420 fork、AGPL-3.0、npm 版本 0.2.1;实测在 Alpine Linux 沙盒内完成,wigolo 版本 0.2.1,节点 22。

Mnemosyne OS 深度评测:31 星的零依赖 AI 记忆系统,自曝 11 个缺陷,我实测又挖出 7 个

Mnemosyne OS 深度评测:31 星的零依赖 AI 记忆系统,自曝 11 个缺陷,我实测又挖出 7 个

用过 MCP 的人几乎都撞过同一堵墙:会话一长,模型就忘了你三小时前交代过的偏好,你得重新说一遍。市面上叫「AI 记忆」的项目多到能单独开一个分区,绝大多数是往提示词里灌 JSON 的壳。

Mnemosyne OS 不属于这一类。它 31 颗星,却先交出了一份 11 条缺陷的公开台账,每条带实测数据、根因和修法。我把仓库 clone 下来,先跑它自己写的 21 项验收脚本——21 项全绿;再把 23 个 CLI 子命令逐个跑了一遍——两个直接崩,Web 面板首页是白的。

零依赖不是口号,是 16,132 行标准库

Mnemosyne 是零依赖、本地优先的 AI 记忆系统(MIT,作者 FrankHu-HK,7.0.1 版发布于 9 月 14 日),可以当 Python 库、CLI、HTTP API,也可以当 MCP server 挂给 Claude Code 或 Cursor。仓库 89 个文件、57 个 Python 文件、16,132 行代码,最大的 brain.py 2,404 行;文档 24,088 行 Markdown,其中一份 818 行的部署指南,逐行标注「这是什么」「为什么」。

零依赖这件事我单独查了:mnemosyne/ 与 storage/ 目录下所有 import 只有标准库(sqlite3、hashlib、json、re…),setup.py 的 install_requires 是空列表,PyPI 上的 requires_dist 只有 numpy / transformers / tiktoken 三个可选 extras。表上写着「no numpy, no torch, no vector DB」,这句是真的。

反直觉的地方在于它的设计取向:它把「记忆」当成一个可运营、可审计的对象,而不是一个向量库。每条记忆带可信度轨迹和审计日志,写入走 SHA-256 链式账本,低价值记忆按经济学模型迁到温层/冷层(gzip 归档 + 布隆过滤,是迁移不是删除),向量后端是可插拔插件(numpy、Qdrant、重排器、加密、HRR)。MCP 面 14 个工具,协议 2024-11-05,我实测握手正常、工具数与文档一致。

它自曝的 11 条缺陷里,有几条特别能说明这个项目的气质:

编号 症状(作者原话压缩) 根因 状态
F1 / F1b 经 MCP 写入的记忆不进向量库,语义召回没有增益 MCP 固定走 fast=True,而唯一的 add() 调用在 else 分支 7.0.1 已修
F6 无关查询也返回高分,任何「分数阈值」规则都失效 最终分是加权和,n_time×0.20 + conf×0.10 构成近似恒定的底 行为特性,不修
F7 retain 传了 confidence 不生效,落库恒为 0.7 Notary 评估段无条件覆盖调用方入参 7.0.1 已修
F9 拿到 recall 结果也无法遗忘或更正 返回项里没有 memory_id 7.0.1 已修
F11 forget 之后记录仍可能被召回 缓存失效判据用文件 mtime,而 SQLite 走 WAL 7.0.1 已修

真正狠的是它对 F6 的结论:相关查询首条 0.8332,无关查询首条 0.8232,分差只有 0.0100。作者自己写下一句「排序可用于挑选,分数不可用于过滤」,并把这条定性为「不可修复的行为特性」。一个项目愿意公开承认自己的打分没有绝对标度,这在万星仓库里都少见。

实测:它自曝 11 条,我又挖出 7 条

先说立住了的部分,这些都是我在这台机器上跑出来的:

  • scripts/verify_memory_lifecycle.py 21 项断言 21/21 通过,覆盖了「遗忘后不再被召回」「更正的旧记忆 verification=superseded」「recall 回传 superseded_by」这些它自己修过又踩过的点;
  • verify.py 自检通过,写入 2.50 ms/条、检索 2.39 ms/次;
  • 我通过 MCP 传 confidence=0.95,返回的就是 0.95,F7 确实修了;读代码确认 fast 分支现在一次 encode() 同时喂 SQLite 与向量后端,F1/F1b 的修法也落地了;
  • 四个中文查询,正确答案 top-1 全部命中,无关查询首条 0.415 对相关查询首条 0.442——与它自曝的 F6 完全一致;
  • Web 面板的静态资源里 0 个外部 CDN 引用,断网可用。

然后是它没写进台账的 7 条:

编号 我的实测证据 影响
A git clone 后启动 Web 面板,/、/login、/index.html 三条路由都返回 index.html missing README 表格里的「本地暗色仪表盘」从源码装是白屏
B CLI 写 5 条记忆,Web 面板「记忆总数」显示 1;两边互相搜不到 同一个 --dir、同一个 default 命名空间,两套库
C 改 memory.db 里的正文后 verify-integrity 仍报「✓ 完整」;删账本最后 3 条也报完整 哈希链只绑自己,不绑记忆内容,截断不可检测
D mnemosyne repair → UnicodeDecodeError,崩在 brain.py:2075 默认 SQLite 后端下必崩
E mnemosyne hindsights-bench 跑到第 4/6 步 → AttributeError: 'ConsolidationReport' object has no attribute 'get' 内置对标评测跑不到底
F sk-proj-…(OpenAI 现行项目密钥)与 sk-ant-api03-…(Anthropic)写入后明文落库,注入评分 0.0 脱敏只覆盖旧的 sk-+8 位格式
G status 显示「容量:100.0% (limit=8)」,库里只有 8 条 未设上限时 limit=total,容量条恒满

三条最值得展开。

第一,Web 面板是被自己的 .gitignore 吃掉的。 面板读 static/index.html,读不到就返回那句 index.html missing;而仓库的 .gitignore 里赫然写着一行 .html,只放行了 assets/*——前端入口正好在这个通配符下,从来没被提交过。setup.py 的 package_data 里倒是老老实实声明了 static/index.html 和 static/logo.jpg(后者同样缺失)。我下载了 PyPI 上的 wheel 解开看:index.html 26,100 字节、logo.jpg 7,620 字节,都在包里。所以同一份代码,pip install 能看到仪表盘,git clone 看不到。我把 wheel 里的静态文件补回源码树再刷新,登录页立刻出来了。

第二,CLI 和 MCP/Web 写进两个不同的文件。 python mnemosyne.py --dir ./mem retain 落在

/memory.db;MCP server 和 Web 面板落在 /data/namespaces/default/memory.db。根因在 storage/sqlite_backend.py 的 _resolve_paths:namespace 为假值时走「扁平 legacy 布局」,而 CLI 压根没有 --namespace 参数,另两个入口的默认值却是字符串 "default",于是走了命名空间目录。后果很具体:先用 CLI 把偏好灌进去,再挂 MCP 给模型用,模型看到的是一张空表。而 docs/RECALL_STRATEGY.md 的隔离表只写了「命名空间 → 独立 data/namespaces//memory.db」。

第三,那条哈希链只证明账本自己没被动过。 README 的卖点是「SHA-256 chained ledger — verify_chain() detects tampering and locates the exact corrupted record」,模块 docstring 更进一步写了「any modification to a historical entry or to the underlying memory record breaks the chain」。我把一条记忆的正文改掉(连前 50 个字符一起改),verify-integrity 照样报「✓ 完整 | 首个断裂点:None」;删掉账本最后 3 条记录,它报「✓ 完整 | 账本条目:5」。原因很朴素:账本条目里只存了 {"content_preview": content[:50]},而校验时是拿账本自己存的 payload 重算哈希,跟 memory.db 没有任何绑定。作为对照,我改了一下 ledger.db 里的 payload,它立刻报「✗ 损坏 | 首个断裂点:1」。检测有效,但范围是账本文件本身,不是记忆;纯截断因为没有外部锚点,也不可检测。审计留痕够用,当防篡改证据是过度承诺。

另外几条不用展开但值得知道:repair 崩是因为它把 index_path(SQLite 默认后端下就是 memory.db 这个二进制文件)当 JSONL 逐行读;hindsights-bench 崩在把一个 ConsolidationReport 对象当 dict 用;status 的容量条在未设上限时永远 100%。还有一处工程卫生问题:全仓 57 个 Python 文件、16,132 行代码,一个测试文件都没有(setup.py 还在 exclude 已经不存在了的 tests、benchmarks、quality_eval),无 tag、无 release;PyPI 上的包停在 8 月 24 日的 7.0.0,仓库已经是 9 月 14 日的 7.0.1——pip install 装到的,正好是 11 条缺陷一条没修的那一版。

还有一个不应该漏掉的细节:11 个源文件里有 97 处中英混排的残句,全都落在用户能看到的地方——引擎Version:7.0.1、❌ 未finds :、Type分布、均Value、可merges、关Key决策、Found 冲突 12、writes 机制Test。看起来像是某次批量「中译英」留下的半成品,demo 和 benchmark 两个命令里最密集。

它在坐标系里的位置

跟本站评过的 context-mode 比,一个管「上下文进得来」,一个管「记忆留得下」:context-mode 把 315KB 工具输出压成 5.4KB,解决的是爆上下文;Mnemosyne 解决的是跨会话失忆,两者叠起来才是一套。

跟 i-have-adhd 比,两者是同一种气质的极端版——自曝文档的质量远超自测覆盖。差别在于 i-have-adhd 的自曝是「我的闸门太严」,Mnemosyne 的自曝是「我的工具是死的」:作者自己在召回策略文档里写明 graph_query 「永远返回 edges: [],是一个死工具」,temporal_query 的参数是实体名而不是时间范围,「传『昨天』返回 nodes:["昨天"], edges:[],无意义」。在 14 个 MCP 工具里,这两个占了两席,而文档第 4 节直接建议集成方「从强制流程里删掉它们」。

适合谁:想要一套零依赖、可离线、带审计轨迹的本地记忆层;在同一台机器上跑多 Agent,并且接受「正文与向量隔离,但审计账本/图谱/统计是全局共享」这个前提;以及愿意读 24,000 行中文文档的人。

不适合谁:指望开箱即用 Web 管理面板的人;要现成语义检索质量的人(向量后端默认不装,得自己接 BGE-M3 加 Qdrant);打算把 CLI 和 MCP 混着用的人;以及想拿哈希链当合规证据的人。

判断:文档比代码值钱

这个仓库最值钱的部分不是那 16,132 行代码,是它的文档:11 条缺陷台账、21 项验收断言、召回策略评估(连「每轮都召回到底划不划算」都算了代价)。这套东西在万星项目里都少见——大多数项目连自己的缺陷都不敢写在仓库里,更不会写上「分差只有 0.0100,所以阈值规则全部失效」这种自断后路的话。代价同样明显:文档走到了够做验收的深度,代码和测试没跟上,所以 CLI 里还留在会崩的子命令,面板首页还躺在 .gitignore 里,脱敏规则还停在两年前的密钥格式。

真要用,我的建议是三条。第一,别 clone 源码跑 Web 面板——要么 pip install mnemosyne-os 拿前端完整的 7.0.0,要么 clone 7.0.1 之后从 wheel 里把 static/index.html 补回来。第二,先写测试再上生产,它自己一行都没有。第三,如果你只是想学「一个人的 AI 记忆系统该怎么自我验收」,docs/ 下的 KNOWN_DEFECTS.md、ACCEPTANCE_GUIDE.md、RECALL_STRATEGY.md 三个文件,比把项目跑起来更值得读。

关注 AI 商业快讯,每天一篇 AI 热点深度解读。

相关阅读:

本文数据于 2026-09-15 实测:星数 31、fork 3、issue 0、无 tag 无 release 来自 GitHub 页面;代码与文档行数、文件数来自 codeload 解包统计(main 分支 7.0.1);「自曝 11 条」取自仓库 docs/KNOWN_DEFECTS.md(编号含 F1b,F4 属外部宿主问题故未计入);21 项验收、2.50 ms 写入、2.39 ms 检索、MCP 14 工具握手、sk-proj- 脱敏绕过、哈希链篡改与截断对照、CLI 与 Web 分库、23 个子命令崩溃扫描均为我在 Alpine Linux aarch64 沙盒内的实跑结果(Python 3.12.13 / SQLite 3.48.0);index.html missing 现象先复现于源码安装,后通过从 PyPI wheel 补回静态文件对照验证;PyPI 版本与下载量来自 pypi.org 与 pypistats.org 公开接口。

context-mode 深度评测:21k Star 的 MCP 沙箱把 315KB 工具输出压成 5.4KB,AI 编程终于不用怕上下文爆了

context-mode 深度评测:21k Star 的 MCP 沙箱把 315KB 工具输出压成 5.4KB,AI 编程终于不用怕上下文爆了

用过 Claude Code、Cursor 这类 AI 编程工具的人,大概都撞过同一堵墙:会话跑着跑着,AI 开始「失忆」——忘了在改哪个文件、忘了进行到哪一步。不是模型笨,是上下文被工具输出吃光了。一次 Playwright 页面快照 56 KB,20 条 GitHub issue 59 KB,一条访问日志 45 KB,官方说半小时就能烧掉 40% 的窗口。今天评的这个项目反着来:不压缩数据,干脆别让脏数据进门。mksglu/context-mode,21k★,官方基准把 315 KB 工具输出压成 5.4 KB(省 98%),npm 累计下载 51.5 万,登过 Hacker News 榜首(570+ 分)。

它做了什么:在工具输出和上下文之间,加一道沙箱闸门

context-mode 是一个 MCP server + 插件套件,支持 18 个客户端——Claude Code、Cursor、VS Code Copilot、Codex CLI、Gemini CLI、Kimi、Qwen Code 等全在列,还挂 OpenClaw 网关。核心免费(ELv2 source-available),作者是伦敦 MKSF LTD 的 Mert Köseoğlu,2026-02-23 创建仓库。

它的思路和「压缩派」相反:LeanCTX 那类工具是等上下文满了再压缩重写,context-mode 是在源头拦截——模型每次调工具,钩子先截住,把命令丢进独立子进程沙箱执行,只有 stdout 进窗口。四个板斧:

板斧 机制 效果(官方口径)
沙箱路由 ctx_execute/ctx_execute_file 隔离执行,12 种语言运行时,>100KB 输出自动入索引只回指针 56 KB 快照 → 299 B
会话记忆 编辑/git/错误/用户决定实时写 SQLite FTS5,compact 后按 BM25 检索回填 治「压缩后失忆」
Think in Code 让模型写脚本算完再 console.log,而不是读 47 个文件进窗口 700 KB → 3.6 KB
不强制话术 不逼模型说人话,引 Moonshot 研究指 aggressive brevity 会降 benchmark 与输出纪律派划界

工具设计上有个反直觉点值得单独说:它把「分析」和「读」拆开了。以前模型要 grep、要 Read 一堆文件进上下文自己数,context-mode 逼它写段脚本在沙箱里数完只报结果——一次调用顶十次工具调用。hooks 能程序化拦截的平台(Claude Code 等)实测合规率约 98%;没 hooks 的 Zed 之类只能靠指令文件,作者自标约 60%。

仓库实证:6.5 个月、169 个版本、51.5 万下载

我 clone 了仓库全量核实(599 个文件):创建于 2026-02-23,6.5 个月冲到 21,024★ / 1,524 fork;HEAD 提交停在 2026-09-07 中午(写稿前一天还在推),版本号 v1.0.169。npm 侧数据能对上徽章:累计下载 515,145,5 月冲到单月 12.3 万的峰值,9 月第一周仍有 1.6 万。发布节奏极快——223 个 npm 发布记录,6.5 个月 169 个版本,约每天一个。

它的流量故事也清楚:2 月 25 日 Show HN 拿了 84 分,三天后作者博客长文直接登 HN 榜首 570+ 分、30 条讨论,之后 5 月下载量二次冲高。官方 BENCHMARK.md 给了可复现的 fixture 基准(21 个真实工具输出场景,非合成数据):总计 376 KB → 16.5 KB(省 96%),其中结构化数据处理那组 315 KB → 5.5 KB(省 98%),代码示例 100% 保真——文档类内容是精确检索不是摘要,125 个测试全过。

必须说明口径:以上基准是官方自测,我没有装进真实 Claude Code 会话复测(评测基于仓库 clone、官方 benchmark 与公开数据);Insight 付费分析层($20/座/月)也未购买,不评。

争议与边界:五个要自己掂量的坑

① npm 渠道已停更约 10 周。 最新版 1.0.169 在 npm 上停在 6 月 29 日,但仓库日更——分发明显迁到了 Claude Code 插件市场 + 自带的 ctx_upgrade 直拉 GitHub。从 npm 直接装可能拿到旧版,装完记得跑 ctx_upgrade。

② 用户数口径混乱。 GitHub 徽章自称 54.6 万用户,Insight 官网却写「331,200+ 开发者」——两处自报数字对不上;npm 累计 51.5 万下载可核实,量级可信,但「用户」的定义存疑(下载≠活跃)。

③ ELv2 不是 OSI 开源。 能 fork 能改能内部用,但禁止打包成托管 SaaS 转售、禁止删许可声明。作者明说选它就是为了防 MIT 被套壳——个人和公司内部用无碍,想基于它做生意的绕道。

④ 沙箱是进程边界,不是 OS 隔离。 作者自己在文档里承认:ctx_execute 跑的是任意代码且继承进程文件系统权限,「批准执行 = 批准任意代码」,#852 号 issue 就修过借 MCP 沙箱逃逸宿主读文件限制的漏洞。要配宿主层沙箱双保险,别裸奔。

⑤ 上手摩擦不小。 它激进地拦截 curl、裸 Read、grep 等常规操作逼你走沙箱——CLAUDE.md 里一长串「BLOCKED」清单。习惯「先想再写代码」的老手觉得爽,新手会觉得被管头管脚。另 214 个 open issues、无 hooks 平台只有 ~60% 合规、Codex 的 PreToolUse 只能拒绝不能改写参数(上游限制)。

坐标系与结论:省 token 正在从「压缩」走向「拦截」

站内评过这条赛道的几个代表:LeanCTX(压缩派,Rust 重写省 86% token)、Caveman(输出纪律派,砍 65% 输出 token)、flowctx(OpenClaw 上下文引擎,砍 56%)。context-mode 站在输入侧——它不动你的输出风格,甚至引用研究反对 Caveman 式的激进话术压缩,只管「什么数据能进窗口」。三种思路其实互补:输入拦截 + 输出克制 + 事后压缩,叠起来才是完整解。

适合:接了 Context7 / GitHub / Playwright 一堆 MCP 工具的重度用户、长会话多任务协作、被 compact 失忆反复折磨的人——尤其 Claude Code 用户,插件市场一条命令装完,10 分钟能见效果。不适合:轻度用户、不想改变工具习惯的人、必须在无 hooks 平台上要强约束的团队。

我的判断:上下文治理从「压缩」走向「源头拦截」是个真趋势,context-mode 是这条路上工程化最完整的选手——6.5 个月 169 个版本、18 客户端、HN 榜首、安全文档写得比多数商业软件诚实。免费层功能完整,值得装来试试;想省钱先看懂它的路由哲学,比装十个省 token skill 都值。相关阅读:LeanCTX 实测(压缩派) | Caveman 实测(输出纪律派) | flowctx(OpenClaw 上下文引擎)

关注「AI商业快讯」,每天一篇 AI 热点深度解读。(本文基于 2026-09-08 仓库快照与公开数据独立评测,与项目方无利益关系;Insight 付费层未购买、不构成推荐。)