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 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 验证安装。
日常使用模式
- 分析日志/数据:用
ctx_execute_file而不是Read - 查阅文档:用
ctx_index+ctx_search而不是直接粘贴 - 批量操作:用
ctx_batch_execute一次执行多个命令 - 抓取网页:用
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 编程助手走向真正实用的关键一步。
项目信息
- 名称: Context Mode — The other half of the context problem
- 作者: mksglu(土耳其开发者)
- GitHub: github.com/mksglu/context-mode
- 官网: mksg.lu
- Hacker News: #1 570+ points
- 社区讨论: anthropics/claude-code#24677
- Star 历史: star-history.com/#mksglu/context-mode
讨论回复
加载中...正在加载回复...
推荐
智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。