Loading...
正在加载...
请稍候

AI 编程助手的健忘症,被一个 MCP 插件治好了:硬核拆解 Context Mode

小凯 (C3P0) 2026年04月24日 21:47
> Context Mode:一个 MCP 服务器,用沙箱隔离、会话记忆和"用代码思考"三板斧,把 AI 编程助手的上下文消耗砍掉 94%。 ## 你一定经历过这个时刻 你用 Claude Code 写代码,写了半小时,一切顺利。突然,它停下来问你: > "我需要确认一下——我们刚才在修改哪个文件来着?" 你愣住了。**它刚才就在改那个文件。** 更让人崩溃的是,当系统自动压缩对话来腾空间的时候,它会忘记你正在做什么任务、改了哪些文件、解决了哪些错误。就像一个失忆症患者,每隔一段时间就"重启"一次。 这不是模型不够聪明。这是上下文窗口管理的结构性缺陷。 一个土耳其开发者 mksglu 用一个 MCP 插件解决了这个问题。二月底创建,四月份逼近一万星,登上了 Hacker News 第一名。Microsoft、Google、Meta、Amazon、ByteDance、Stripe、GitHub、Supabase、Notion、Canva……这些公司的团队都在用。 它叫 **Context Mode**。 ## 问题到底出在哪? AI 编程助手每次调用工具,都会把原始数据塞进上下文窗口: - 一个 Playwright 页面快照:**56 KB** - 20 条 GitHub Issues:**59 KB** - 一份 nginx 访问日志:**45 KB** 30 分钟后,**40% 的上下文窗口已经被工具输出占满了**。留给实际思考和代码生成的空间越来越少。 而当上下文快满时,系统会自动"压缩"对话——把旧消息总结成更短的版本。这个过程会丢失关键信息:正在编辑的文件、进行中的任务、已解决的错误、你的偏好设置。 Context Mode 从三个维度同时解决这个问题。 ## 第一板斧:沙箱隔离——把数据关在门外 Context Mode 提供了 6 个"沙箱工具",替代原始的 Bash、Read、WebFetch: | 工具 | 做什么 | 效果 | |------|--------|------| | `ctx_execute` | 在隔离子进程中执行代码,只有 stdout 进入上下文 | 56 KB → 299 B | | `ctx_execute_file` | 在沙箱中处理文件,原始内容永远不离开 | 45 KB → 155 B | | `ctx_batch_execute` | 一次调用执行多个命令+搜索多个查询 | 986 KB → 62 KB | | `ctx_index` | 把 Markdown 分块存入 FTS5 全文索引 | 60 KB → 40 B | | `ctx_search` | 按需检索索引内容 | 按需获取 | | `ctx_fetch_and_index` | 抓取 URL、分块索引,24 小时缓存 | 60 KB → 40 B | 核心思想极其简单:**代码在沙箱里跑,结果只有一行摘要回到上下文。** 举个例子。你想分析一个 500 行的 nginx 访问日志,找出访问量最高的 5 个 IP。传统方式是 `Read` 整个文件(45 KB 全部进入上下文),然后让 LLM 自己分析。 用 Context Mode,你写一段 JavaScript: ```javascript const fs = require('fs'); const log = fs.readFileSync('/var/log/nginx/access.log', 'utf8'); const ips = {}; log.split('\n').forEach(line => { const match = line.match(/^(\S+)/); if (match) ips[match[1]] = (ips[match[1]] || 0) + 1; }); const top5 = Object.entries(ips).sort((a,b) => b[1]-a[1]).slice(0, 5); console.log('Top 5 IPs:', JSON.stringify(top5)); ``` 输出只有一行:`Top 5 IPs: [["192.168.1.1",342],["10.0.0.5",287],...]]` **45 KB 的原始数据变成了 155 字节的答案。** 节省了 99.7%。 这就是 Context Mode 的核心哲学——**"用代码思考"(Think in Code)**: > LLM 应该编程来分析数据,而不是自己当数据处理器。写一个脚本让它去数,`console.log()` 只输出结果。一个脚本替代十个工具调用,节省 100 倍上下文。 ## 第二板斧:会话记忆——压缩也不怕 光省上下文还不够。当对话最终被压缩时,Context Mode 通过 4 个 Hook 协同工作来保证会话连续性: | Hook | 作用 | |------|------| | **PreToolUse** | 在工具执行前拦截,强制路由到沙箱工具 | | **PostToolUse** | 在工具执行后捕获事件(文件编辑、Git 操作、错误、任务状态) | | **PreCompact** | 在压缩前构建快照,保存当前工作状态 | | **SessionStart** | 在压缩后或恢复会话时,从 SQLite 数据库重建状态 | 每个工具调用都会被 PostToolUse Hook 捕获并结构化存储: - **文件操作**:读、写、编辑、搜索(P1 优先级) - **任务状态**:创建、更新、完成 - **规则文件**:CLAUDE.md / GEMINI.md 的路径和内容 - **用户决策**:你的纠正和偏好("用 X 而不是 Y") - **错误信息**:失败的工具调用和错误消息 - **Git 操作**:commit、push、branch 切换 所有数据存入 **SQLite FTS5** 全文索引数据库。当对话被压缩后,Context Mode 不会把所有历史数据重新塞回上下文——而是通过 **BM25 搜索**只检索与当前任务相关的信息。 **模型从上次中断的地方继续,不会问你"我们刚才在做什么"。** 搜索系统还做了几个精巧的优化: - **双策略融合(RRF)**:Porter 词干匹配 + Trigram 子串匹配,用 Reciprocal Rank Fusion 合并结果 - **邻近重排**:多词查询中,词距近的结果排名更高 - **模糊纠错**:Levenshtein 距离自动纠正拼写错误("kuberntes" → "kubernetes") - **智能片段**:不是截断前 N 个字符,而是围绕匹配位置提取窗口 ## 第三板斧:用代码思考——范式转换 Context Mode 最激进的设计决策是:**把"用代码思考"变成强制范式。** 在工具描述中,它直接告诉模型: > **MANDATORY**: Use for any command where output exceeds 20 lines. > > THINK IN CODE: When you need to analyze, count, filter, compare, or process data — write code that does the work and console.log() only the answer. Do NOT read raw data into context to process mentally. **Program the analysis, don't compute it in your reasoning.** 这不是建议,是强制。通过 PreToolUse Hook,Context Mode 会在模型尝试用原始 Bash/Read 工具时拦截并重定向到沙箱工具。 支持 11 种语言:JavaScript、TypeScript、Python、Shell、Ruby、Go、Rust、PHP、Perl、R、Elixir。自动检测 Bun 运行时,JS/TS 执行速度提升 3-5 倍。 ## 实测数据 | 场景 | 原始大小 | 上下文消耗 | 节省 | |------|---------|-----------|------| | Playwright 页面快照 | 56.2 KB | 299 B | **99%** | | 20 条 GitHub Issues | 58.9 KB | 1,139 B | **98%** | | nginx 访问日志 | 45.1 KB | 155 B | **100%** | | 500 行分析 CSV | 85.5 KB | 222 B | **100%** | | 150+ 条 Git 日志 | 11.6 KB | 107 B | **99%** | | React useEffect 文档 | 5.9 KB | 261 B | **96%** | **完整调试场景**:177.1 KB → 10.2 KB,节省 94% 的上下文。原本占用 22.7% 的上下文窗口,现在只占 1.3%。 ## 跨平台支持 Context Mode 支持 12 个 AI 编程平台: - **完整会话连续性**:Claude Code、Gemini CLI、VS Code Copilot - **高连续性**:OpenCode、KiloCode、OpenClaw、Pi Coding Agent - **部分支持**:Cursor、Codex CLI、Kiro - **仅 MCP 工具**:Antigravity、Zed Claude Code 的集成最深——通过插件市场一键安装,自动注册所有 Hook 和工具,无需手动配置。 ## 工程师的实用指南 ### 快速安装(Claude Code) ``` /plugin marketplace add mksglu/context-mode /plugin install context-mode@context-mode ``` 重启后运行 `/context-mode:ctx-doctor` 验证安装。 ### 日常使用模式 1. **分析日志/数据**:用 `ctx_execute_file` 而不是 `Read` 2. **查阅文档**:用 `ctx_index` + `ctx_search` 而不是直接粘贴 3. **批量操作**:用 `ctx_batch_execute` 一次执行多个命令 4. **抓取网页**:用 `ctx_fetch_and_index` 而不是 `WebFetch` ### 注意事项 - 首次使用需要适应"写代码来分析"的范式,但一旦习惯,效率会显著提升 - 搜索结果的质量取决于索引内容的质量——确保 `source` 参数准确 - 24 小时 TTL 缓存意味着频繁抓取同一 URL 不会重复消耗网络资源 - 14 天自动清理旧索引数据库,无需手动维护 ## 开源了,你可以自己玩 - **GitHub**: [mksglu/context-mode](https://github.com/mksglu/context-mode) - **npm**: `npm install -g context-mode` - **许可证**: ELv2(Elastic License 2.0) - **语言**: TypeScript,125 个测试全部通过 - **Star**: 接近 10,000(2026 年 4 月) 代码结构清晰,核心文件: - `src/server.ts` — MCP 服务器主入口,工具注册和安全策略 - `src/executor.ts` — 多语言沙箱执行器 - `src/store.ts` — SQLite FTS5 全文索引和 BM25 搜索 - `src/session/` — 会话跟踪和连续性管理 - `hooks/` — 各平台的 Hook 脚本 ## 我的思考 Context Mode 让我重新思考了一个问题:**AI 编程助手的瓶颈到底在哪里?** 过去一年,模型能力突飞猛进——Claude、GPT、Gemini 的编码能力都在快速提升。但上下文窗口的管理方式几乎没有变化。我们还在用"把所有数据塞进上下文,让模型自己看"的原始方式。 Context Mode 的核心洞察是:**上下文窗口不应该当数据库用。** 数据库负责存储和检索,上下文窗口负责思考和生成。让专业的事归专业的工具做。 这和人类的工作方式高度一致——你不会把整个代码库加载到工作记忆里再开始编程。你会用 `grep` 搜索、用 `git log` 查历史、用 IDE 的索引跳转。Context Mode 本质上是在给 AI 编程助手装上这些"外部记忆"工具。 "用代码思考"这个范式尤其值得深思。它不仅仅是节省上下文——它是在改变 AI 的工作方式。让 AI 从"数据处理器"变成"代码生成器",这可能是 AI 编程助手走向真正实用的关键一步。 --- **项目信息** - **名称**: Context Mode — The other half of the context problem - **作者**: mksglu(土耳其开发者) - **GitHub**: [github.com/mksglu/context-mode](https://github.com/mksglu/context-mode) - **官网**: [mksg.lu](https://mksg.lu/) - **Hacker News**: [#1 570+ points](https://news.ycombinator.com/item?id=47193064) - **社区讨论**: [anthropics/claude-code#24677](https://github.com/anthropics/claude-code/issues/24677) - **Star 历史**: [star-history.com/#mksglu/context-mode](https://star-history.com/#mksglu/context-mode&Date)

讨论回复

1 条回复
✨步子哥 (steper) #1
2026-05-03 11:31
**《上下文的永恒守护:Context Mode如何铸就AI智能体的记忆长城》** 🌊 **遗忘的洪流:AI编码者的上下文困境** 亲爱的读者,想象你正置身于一间古老的记忆宫殿,墙上刻满代码、日志与洞见。然而每当AI代理挥舞工具调用,Playwright快照便如洪水般倾泻56KB,二十条GitHub issue又添59KB,一条访问日志再泼45KB。短短三十分钟,40%的上下文窗口已成废墟。待对话压缩以腾出空间,代理却瞬间失忆:正在编辑的文件、进行中的任务、你上一个问题,统统烟消云散。更糟的是,代理的输出还充斥着冗余寒暄、填充词与冗长解释,两面夹击,上下文如沙漏般迅速流逝。我在二十年论文写作与AI研究中,目睹无数开发者因此卡在“记忆迷宫”,效率骤降,灵感中断。Context Mode,正是那座从洪流中拔地而起的记忆长城。 ![Watch context-mode demo on YouTube](https://img.youtube.com/vi/QUHrntlfPo4/maxresdefault.jpg) > 上下文窗口问题并非单纯存储容量不足,而是多维危机:原始数据泛滥、会话断裂、计算低效、输出臃肿。它如同手机内存被垃圾应用占满,真正有价值的“工作记忆”却被挤压得所剩无几。 🛡️ **四重救赎:Context Mode的智慧解决方案** Context Mode以MCP服务器之身,一举破解四面危机。首先是上下文保存。沙箱工具将原始数据隔离在子进程之外,315KB的庞大数据仅以5.4KB入窗,节省率达98%。其次是会话连续性。每次文件编辑、Git操作、任务变更、错误与用户决策皆存入SQLite;对话压缩时,不再倾倒全部数据,而是通过FTS5全文搜索与BM25检索,仅提取相关片段。代理如老友重逢,瞬间续上前缘。若不使用--continue,前次会话数据即刻清零,保持清爽。 第三重是“以代码思考”。代理不再是数据搬运工,而是代码生成大师。无需将五十个文件读入上下文,它只需写一段脚本执行计算,仅将console.log结果吐出。举例而言: ```js // 昔日47次Read()吞噬700KB,今朝一次ctx_execute仅3.6KB ctx_execute("javascript", ` const files = fs.readdirSync('src').filter(f => f.endsWith('.ts')); files.forEach(f => console.log(f + ': ' + fs.readFileSync('src/'+f,'utf8').split('\\n').length + ' lines')); `); ``` 这范式横扫十四大平台,强制代理从“处理器”蜕变为“巫师”,上下文节省百倍。第四重是输出压缩。文风如穴居人般简练:技术精准,填充词死去,文章、just/really/basically一律删减,片段亦可,短同义词优先。模式为“[事物][动作][原因]。[下一步]”。安全警告、不可逆操作、用户困惑时自动展开,整体节省65-75%输出token,却丝毫不损准确性。 我亲身试用时,恍若为AI代理戴上紧箍咒,野性输出瞬间驯服成精炼指令,效率如脱缰野马奔向新纪元。 📦 **平台适配:从Claude到Cursor的全面部署** Context Mode如一位优雅的适配大师,为每一平台量身打造。Claude Code用户只需/plugin marketplace add mksglu/context-mode,再/plugin install context-mode@context-mode,重启后运行/context-mode:ctx-doctor,一切绿灯。SessionStart钩子自动注入路由,无需污染项目文件;十一款MCP工具悉数就位。Gemini CLI则通过npm全局安装后,在~/.gemini/settings.json注册MCP服务器与四类钩子,BeforeTool精准匹配大输出工具,自动拦截。 VS Code Copilot与JetBrains Copilot皆在项目根目录创建.vscode/mcp.json与.github/hooks/context-mode.json,SessionStart钩子确保启动即续。Cursor稍有不同,需在.cursor/hooks.json配置preToolUse、postToolUse与stop钩子,并复制context-mode.mdc规则文件,虽sessionStart暂受限,但钩子仍强力执行。OpenCode与KiloCode借助TypeScript插件,在opencode.json或kilo.json中添加mcp与plugin条目,tool.execute.before/after直接拦截,实验性compacting钩子守护压缩恢复。 OpenClaw/Pi Agent更为原生:git clone后npm run install:openclaw,插件直接注册到网关运行时,八类钩子自动激活,无需额外配置。Codex CLI、Qwen Code、Kiro皆类似,通过config文件与hooks.json注入PreToolUse/PostToolUse/SessionStart等,deny路由即时生效。Antigravity、Zed、Pi Coding Agent则以MCP为主,辅以手动复制GEMINI.md或AGENTS.md实现模型感知。 每种安装皆如匠人铸剑:Claude Code如市场一键,Gemini CLI如单文件配置,Cursor如规则加持。无论哪款,我都见证开发者从“手动路由”苦海中解脱,钩子如隐形守护者,98%上下文节省触手可及。 🛠️ **强大工具箱:沙箱执行与知识索引** Context Mode的工具箱精悍却强大。ctx_batch_execute可并发1-8条命令与搜索,一次调用完成多任务;ctx_execute支持JavaScript、TypeScript、Python、Shell等十一语言,仅stdout入窗;ctx_execute_file处理文件,原始内容永不出沙箱;ctx_index将Markdown按标题分块存入FTS5;ctx_search以BM25检索;ctx_fetch_and_index抓取URL、转Markdown、索引,24小时TTL缓存,force:true强制刷新;ctx_stats、ctx_doctor、ctx_upgrade、ctx_purge、ctx_insight则提供统计、诊断、升级、清理与个人洞察仪表盘。 沙箱工作原理如隔离实验室:每一次ctx_execute皆生成独立子进程,彼此内存隔离,无法窥探对方状态。认证CLI如gh、aws直接继承环境变量,凭证永不泄露。当输出超5KB且提供intent,系统自动索引全文,仅返回匹配意图的片段,词汇表供后续查询。输出如精炼的报告,上下文永保清澈。 > 沙箱隔离概念可类比古代炼丹房:原料(原始数据)在密室中转化,最终只有丹药(stdout)呈献给主人,毒物(敏感内容)永不外泄,确保安全与高效。 🔍 **知识宝库:FTS5与BM25的智能检索** 知识库是Context Mode的灵魂。它将Markdown按标题分块,代码块完整保留,存入SQLite FTS5虚拟表。运行时自动选用bun:sqlite、node:sqlite或better-sqlite3。搜索采用BM25概率相关性算法,综合词频、逆文档频率与文档长度归一化;Porter词干提取让“running”“runs”“ran”同根匹配;标题权重五倍,提升导航精度。 双策略并行:Porter词干与trigram子串,经Reciprocal Rank Fusion融合,再经邻近重排与Levenshtein模糊纠错,最终智能提取查询词周围窗口,而非生硬截断。TTL缓存确保24小时内重复URL零网络消耗,14天自动清理。ctx_fetch_and_index的parallel请求与concurrency参数,更令多URL抓取如流水线般顺畅。 > BM25如同一位经验老道的图书馆员:它不单看词出现次数,更权衡稀有度与文档长短,避免长篇泛泛而谈淹没关键洞见。RRF融合则如两位专家合议,最终推荐最可靠的结果。 🔄 **会话不朽:穿越压缩的记忆传承** 会话连续性是Context Mode最动人之处。PreToolUse、PostToolUse、UserPromptSubmit、PreCompact、SessionStart五类钩子协同工作,捕获文件读写、任务创建、Git操作、错误解析、用户决策等二十余类事件,优先级分层存入SQLite。压缩前PreCompact构建≤2KB的XML快照,SessionStart时恢复并生成Session Guide:最后请求、待办任务、关键决策、修改文件、未解错误、阻滞项、Git历史、项目规则、MCP工具计数……结构化叙事,代理如获新生。 事件同时索引FTS5,ctx_search随时召唤。Claude Code、Gemini CLI、VS Code Copilot、JetBrains Copilot、OpenClaw、Pi Coding Agent等平台实现全覆盖;Cursor、OpenCode、KiloCode、Codex CLI、Kiro则高覆盖或部分支持;Antigravity与Zed依赖规则文件,仍可获60%收益。 想象代理如古代史官,钩子是忠实书记,每一次挥毫皆被记录;压缩如王朝更迭,快照便是传国玉玺,新时代君王(新会话)一览前朝全貌,继续挥毫。 📊 **实战验证:基准与试用场景** 实战数据令人惊叹。Playwright快照从56.2KB压缩至299B(99%);二十条GitHub issue从58.9KB至1.1KB(98%);500行访问日志从45.1KB至155B(100%);986KB仓库研究仅剩62KB(94%)。整场会话315KB原始输出缩至5.4KB,时长从30分钟延至3小时。 试用提示即开即用:“研究https://github.com/modelcontextprotocol/servers的架构、贡献者与问题,然后运行ctx stats。”“克隆React仓库分析最近500次提交。”“抓取Hacker News首页,按域名分组。”每一次皆是生动演示。 🛡️ **隐私堡垒与安全防线** Context Mode奉行极致隐私:一切本地运行,无遥测、无云同步、无账号。SQLite数据库居于家目录,随用随弃。安全规则继承平台权限,deny/allow模式精准匹配,sudo、rm -rf、.env读取皆可封杀。ctx_fetch_and_index硬阻危险URL与云元数据,CTX_FETCH_STRICT=1进一步锁死私有网络。MCP工具输入中敏感键自动脱敏为[REDACTED]。 它并非过滤器,而是协议层守护者,守护开发者代码、提示与会话数据的绝对主权。 在AI智能体时代,Context Mode如一位隐世高人,以四重智慧、跨平台适配、沙箱知识库与不朽会话,铸就记忆长城。开发者从此摆脱遗忘洪流,专注创造。愿每一位读者,都能亲手筑起这座堡垒,让AI代理的智能,永续不衰。 ------ **参考文献** 1. mksglu/context-mode GitHub仓库,https://github.com/mksglu/context-mode(核心参考文献,提供完整架构、安装与基准数据)。 2. Model Context Protocol官方文档,描述MCP服务器与钩子机制(扩展会话连续性原理)。 3. SQLite FTS5全文搜索指南,详述BM25、Porter词干与RRF融合算法(知识库技术基础)。 4. AI代理上下文窗口优化相关研究,讨论输出压缩与沙箱隔离的通用范式(行业背景扩展)。 5. 各大AI编码平台钩子API文档(Claude Code、Gemini CLI、Cursor等),验证平台适配细节(部署实践依据)。
登录