当 AI 编码代理运行 30 分钟后,上下文窗口的 40% 已被工具输出消耗殆尽。一次 Playwright 快照消耗 56KB,二十个 GitHub Issue 消耗 59KB,单个访问日志消耗 45KB。上下文压缩时,模型遗忘正在编辑的文件、进行中的任务、上一次的修改要求。这是当前 AI 编程工具面临的结构性难题,而 Context Mode 提供了正交的工程解法。
上下文窗口的四个消耗面
Context Mode 作为 MCP 服务器,从四个维度解决上下文膨胀问题。第一是上下文保存—— 沙箱工具将原始数据拦截在上下文窗口之外,315KB 原始输出压缩至 5.4KB,达成 98% 的缩减比例。第二是会话连续性—— 通过 SQLite 持久化每个文件编辑、Git 操作、任务状态和用户决策,在上下文压缩时索引事件至 FTS5,通过 BM25 检索恢复关键状态,模型从上次中断处继续而非重新询问用户。第三是代码思维—— 要求模型编写分析脚本而非读取文件进行分析,47 次文件读取消耗 700KB,一次脚本执行仅消耗 3.6KB。第四是输出压缩—— 去除填充词、客套话、冗余解释,仅保留技术实质,达成 65%-75% 的输出 Token 削减且保持技术准确性。
这四个维度形成完整的上下文保护体系。沙箱隔离解决的是数据入口问题,会话连续性解决的是状态丢失问题,代码思维改变的是模型的工作范式,输出压缩解决的是数据出口问题。四个机制协同运作,而非简单的输出过滤。
沙箱执行的技术实现
ctx_execute 是核心沙箱工具,支持 11 种语言运行时:JavaScript、TypeScript、Python、Shell、Ruby、Go、Rust、PHP、Perl、R 和 Elixir。每次调用启动独立的子进程,脚本无法访问其他调用进程的内存或状态。子进程运行代码并捕获标准输出,仅有 stdout 进入对话上下文。原始数据 —— 日志文件、API 响应、快照、页面内容 —— 从未离开沙箱。
当输出超过 5KB 且提供了 intent 参数时,Context Mode 切换至意图驱动的过滤模式:索引完整输出至知识库,根据 intent 搜索匹配段落,返回仅与意图相关的片段并附带可检索术语词汇表,供后续查询使用。认证 CLI(如 gh、aws、gcloud、kubectl、docker)通过凭证传递机制继承环境变量和配置路径,但不向对话暴露敏感信息。
沙箱安全性与宿主平台的权限体系一致。如果用户在平台配置中阻止了 sudo 命令,ctx_execute、ctx_execute_file 和 ctx_batch_execute 同样会执行该阻止规则。安全策略从 Claude Code 的设置格式读取,跨所有平台通用。网络获取模块默认阻止非 HTTP/HTTPS 协议、链路本地地址(169.254.0.0/16)、多播和保留地址,同时默认允许本地回环和 RFC1918 私有地址以支持本地开发。
知识库与检索架构
ctx_index 将 Markdown 内容按标题分块并保持代码块完整,存入 SQLite FTS5 虚拟表。后端自动选择:bun:sqlite 在 Bun 运行时、node:sqlite 在 Linux + Node.js 22.13+、better-sqlite3 在其他环境。检索采用 BM25 排名算法 —— 基于词频、逆文档频率和文档长度归一化的概率相关性评分。索引时应用 Porter 词干提取,使 "running"、"runs"、"ran" 匹配同一词干。标题和 - heading 权重为 5x,提升导航查询的精准度。
ctx_search 返回围绕匹配查询词的智能片段,而非截断的前 N 个字符。当输出超过 5KB 且提供 intent 时,系统自动切换为检索模式,模型通过搜索获取信息而非接收完整输出。
多查询场景使用 ** Reciprocal Rank Fusion(RRF)** 合并两种策略的结果:Porter 词干匹配("caching" 匹配 "cached")和三元组子串匹配("useEff" 找到 "useEffect")。在 RRF 排名下,两种策略都表现良好的文档比仅在单一策略中表现良好的文档排名更高。多词查询还会进行邻近度重排序,查询词越接近的段落排名越靠前。拼写错误通过 Levenshtein 距离纠正后再搜索。
ctx_fetch_and_index 从 URL 获取内容、转换为 Markdown、分块并索引。24 小时 TTL 缓存避免重复获取 ——24 小时内对同一 URL 的调用返回缓存提示而非重新获取。14 天清理机制在启动时删除过期内容。
14 平台的适配策略
Context Mode 支持 14 个主流 AI 编码平台,适配策略分为三类。
Hook 完整支持平台:Claude Code、Codex CLI、VS Code Copilot、JetBrains Copilot、Cursor、OpenCode、KiloCode、OpenClaw、Pi Coding Agent。Hook 机制在工具调用前拦截(PreToolUse)并可阻止危险命令或重定向至沙箱工具,工具调用后捕获(PostToolUse)事件用于会话追踪,会话开始时恢复状态(SessionStart),上下文压缩前构建快照(PreCompact),用户提交提示时捕获决策(UserPromptSubmit)。Claude Code 通过插件市场安装全自动,Cursor 因 sessionStart Hook 被验证器拒绝而改用 .cursor/rules/context-mode.mdc 文件传递路由指令。
Hook 部分支持平台:Gemini CLI、Qwen Code、Kiro。提供 PreToolUse、PostToolUse、SessionStart 和 PreCompact,但 UserPromptSubmit 不可用。Kiro 的 agentSpawn(SessionStart 等效)尚未实现,会话压缩后无法恢复。配置方式为修改平台设置文件添加 MCP 服务器声明和 Hook 规则。
无 Hook 平台:Antigravity、Zed。仅支持 MCP 服务器注册,无编程拦截能力,依靠手动复制路由指令文件(AGENTS.md 或 GEMINI.md)引导模型行为,合规率约 60%。
各平台的 Hook 覆盖完整度直接影响会话连续性。Claude Code、OpenCode、KiloCode 实现完整的五 Hook 覆盖;VS Code Copilot、JetBrains Copilot、OpenClaw、Pi Coding Agent 实现高覆盖但缺少 UserPromptSubmit;Cursor、Codex CLI、Kiro 实现部分覆盖;Antigravity、Zed 无会话支持。
可操作参数清单
生产环境部署时,以下参数需明确配置:
MCP 服务器注册。所有平台均需注册 context-mode 为本地 MCP 服务器,命令行为 context-mode(全局安装后路径自动解析)。Claude Code 除外,其通过插件市场自动处理。
Hook 启用。Hook 完整支持平台应确保所有五个 Hook 类型生效 ——PreToolUse、PostToolUse、SessionStart、PreCompact、UserPromptSubmit。缺少 Hook 会导致每次未经沙箱的工具调用向上下文注入数十 KB 数据,瞬间抵消全部压缩收益。
路由文件。无 Hook 平台需手动复制对应路由文件至项目根目录。Antigravity 复制 GEMINI.md,Zed 复制 AGENTS.md,Kiro 复制 KIRO.md。即使在 Hook 平台,手动复制路由文件可作为编程拦截的补充,提升模型行为引导的可靠性。
安全策略。在 .claude/settings.json(或对应平台的全局设置)中配置 permissions.deny 和 permissions.allow 规则。格式为 Tool(匹配模式),* 匹配任意字符串。deny 规则优先级高于 allow。例如:
{
"permissions": {
"deny": ["Bash(sudo \\*)", "Bash(rm -rf \\*)", "Read(.env)", "Read(*/.env*)"],
"allow": ["Bash(git:\\*)", "Bash(npm:\\*)"]
}
}
严格网络模式。在共享服务或多用户环境中,设置 CTX_FETCH_STRICT=1 环境变量以阻止回环、RFC1918 和 ULA 地址的网络获取。
会话恢复。使用 --continue、--resume 或 /resume 恢复会话时,Context Mode 从 SQLite 读取历史快照并索引至 FTS5,向模型注入包含 15 个类别的会话指南(最近请求、任务状态、关键决策、修改的文件、未解决的错误、阻塞事项等),实现无缝继续。
性能基准与效果
在 21 个场景的基准测试中,典型压缩效果如下:Playwright 快照从 56.2KB 压缩至 299B(99%),20 个 GitHub Issue 从 58.9KB 压缩至 1.1KB(98%),500 条访问日志从 45.1KB 压缩至 155B(100%),500 行 Analytics CSV 从 85.5KB 压缩至 222B(100%),153 次 Git 提交记录从 11.6KB 压缩至 107B(99%)。完整会话统计显示 315KB 原始输出压缩至 5.4KB,会话持续时间从约 30 分钟延长至约 3 小时。
数据安全与隐私
Context Mode 的架构设计遵循本地优先原则。原始数据在沙箱子进程中处理,从未进入对话上下文。Web 页面、API 响应、文件分析、快照、日志 —— 一切在完全隔离的环境中处理。不存在遥测、云同步、使用追踪或账户要求。SQLite 数据库位于用户主目录,会话结束时自动清除。MCP 协议层的 tool_input 在持久化前会对 authorization、token、secret、password、api_key、cookie、signature、private_key 等敏感字段进行脱敏处理。
数据压缩发生在源头而非云端仪表板,这是设计哲学而非功能缺失。许可证采用 Elastic License 2.0,源码开放但禁止作为托管服务再分发。
资料来源:GitHub 仓库 mksglu/context-mode(MIT License/ELv2),Hacker News 讨论 #44376123。