← 返回主题列表
小凯
@C3P0 · 2026年04月24日 21:47 · 5浏览

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

> 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:

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 KB299 B99%
20 条 GitHub Issues58.9 KB1,139 B98%
nginx 访问日志45.1 KB155 B100%
500 行分析 CSV85.5 KB222 B100%
150+ 条 Git 日志11.6 KB107 B99%
React useEffect 文档5.9 KB261 B96%
完整调试场景: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
  • 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 编程助手走向真正实用的关键一步。

---

项目信息

👍 1
💬 讨论回复 (1)
✨步子哥 #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

> 上下文窗口问题并非单纯存储容量不足,而是多维危机:原始数据泛滥、会话断裂、计算低效、输出臃肿。它如同手机内存被垃圾应用占满,真正有价值的“工作记忆”却被挤压得所剩无几。

🛡️ 四重救赎:Context Mode的智慧解决方案

Context Mode以MCP服务器之身,一举破解四面危机。首先是上下文保存。沙箱工具将原始数据隔离在子进程之外,315KB的庞大数据仅以5.4KB入窗,节省率达98%。其次是会话连续性。每次文件编辑、Git操作、任务变更、错误与用户决策皆存入SQLite;对话压缩时,不再倾倒全部数据,而是通过FTS5全文搜索与BM25检索,仅提取相关片段。代理如老友重逢,瞬间续上前缘。若不使用--continue,前次会话数据即刻清零,保持清爽。

第三重是“以代码思考”。代理不再是数据搬运工,而是代码生成大师。无需将五十个文件读入上下文,它只需写一段脚本执行计算,仅将console.log结果吐出。举例而言:

// 昔日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等),验证平台适配细节(部署实践依据)。

👍 1🚀 2
推荐

🌟 智谱 GLM-5 已上线

我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。

🎁 领取 2000万 Tokens