项目快照:mksglu/context-mode,约 23,635 个 Star,1,706 个 Fork;最新推送时间 2026-09-19T12:05:41Z。本文基于仓库公开资料撰写。
项目地址:https://github.com/mksglu/context-mode · https://context-mode.com

项目速览(TL;DR)
context-mode 是一个用 TypeScript 编写的模型上下文协议(Model Context Protocol,MCP)服务与插件集合,目标是减少 AI 编程代理在工具调用、长会话和上下文压缩过程中消耗的上下文窗口。仓库描述的核心能力包括:将工具输出放入沙箱、通过 SQLite 持久化会话记忆,并通过 MCP 与钩子机制在多个平台之间执行路由。
仓库资料显示,该项目有 23635 个 Star、1706 个 Fork,默认分支为 main。README 给出的数据点是:原始工具输出从 315 KB 降至 5.4 KB,减少 98%;项目还以 Playwright 快照、GitHub issue 和访问日志为例,说明原始工具输出会迅速占用上下文窗口。上述数据属于仓库资料中的项目说明,不等同于本文独立测试结果。
“The other half of the context problem.”
来源:README
- 项目类型:MCP 服务、AI 编程代理插件与会话钩子。
- 主要语言:TypeScript。
- 默认分支:
main。 - 包版本:
1.0.169,来自仓库package.json。 - 许可证元数据:GitHub 仓库信息标注为
NOASSERTION;仓库中的 LICENSE 文件明确写明为 Elastic License 2.0(ELv2)。许可证判断应以仓库 LICENSE 文件为准。
定位与目标用户
该项目针对的不是普通文本聊天记录压缩,而是 AI 编程代理在调用代码搜索、浏览器自动化、日志读取、Git 操作和文件编辑工具时产生的上下文膨胀。它把问题拆分为工具输出、会话连续性、模型思考过程和工具路由四个方向,其中 README 明确列出了上下文保存与会话连续性机制。
目标用户是已经使用 Claude Code、Gemini CLI、VS Code Copilot、OpenCode、Codex CLI 或仓库包配置中出现的其他适配器,并且需要处理长时间代码任务的开发者。若使用场景只涉及短对话、少量工具输出,或者现有代理已经满足上下文管理需求,则部署该项目需要额外引入构建、插件适配和本地会话数据库,收益需要结合任务规模评估。
核心功能
核心功能不是简单截断工具输出,而是改变工具输出进入模型上下文的路径。资料中的实现由 MCP 服务、沙箱执行、SQLite 会话数据库、FTS5(全文搜索引擎)索引、BM25(相关性排序算法)检索以及平台适配器共同组成。
工具输出沙箱与上下文节省
工具调用返回的原始内容先在沙箱或服务侧处理,而不是把完整结果直接写入对话上下文。README 以 315 KB 原始数据变为 5.4 KB 上下文内容为例,宣称可实现 98% 的减少;输入是工具产生的大型文本结果,输出是供代理继续决策的压缩后结果或查询结果。
package.json 将该能力描述为 “Sandboxed code execution”,并将 code-execution、context-window、mcp 列为关键词。资料没有给出沙箱的系统调用清单、资源配额、网络策略完整表或每个工具的输入输出接口签名,因此部署前应以最新 README 和源代码为准,不能把“沙箱”理解为已经满足任意生产隔离等级。
会话连续性与压缩恢复
会话连续性通过 SQLite 保存文件编辑、Git 操作、任务、错误和用户决策等事件。README 说明,这些事件会被索引到 FTS5 中,并通过 BM25 搜索只取与当前问题相关的信息,而不是在上下文压缩后把全部历史重新塞回模型。
触发条件是代理会话发生上下文压缩或需要继续读取历史任务;输入是本地会话事件,处理中间层是 SQLite、FTS5 与 BM25,输出是相关历史片段。README 还规定:使用 --continue 时可以延续上一会话;不使用该选项时,之前的会话数据会立即删除,从而开始一个干净会话。
代码中思考与查询
README 的章节标题包含 “Think in Code”,package.json 也将 code-execution 列为项目关键词。这表明项目希望让代理通过代码执行和搜索来处理数据,而不是把完整数据集直接展示在对话中。
资料没有提供该功能的完整工具名称、参数结构、返回值 schema 或权限模型,因此不能在没有源代码依据的情况下编写具体 MCP 工具调用。实际接入时,应使用仓库构建产物、适配器配置和官方文档中给出的接口定义。
跨平台路由与适配器
项目描述称其通过 MCP 加钩子机制在 17 个平台之间强制执行路由;README 和 package.json 明确出现的平台包括 Claude Code、Gemini CLI、VS Code Copilot、OpenCode、Codex CLI、OpenClaw、Pi 和 OMP 等。路由的作用是让不同宿主按照相应适配器加载插件、扩展或钩子。
package.json 中可以看到多个适配器入口:OpenCode 使用 build/adapters/opencode/plugin.js,OpenClaw 使用 build/adapters/openclaw/plugin.js,Pi 使用 build/adapters/pi/extension.js,OMP 使用 build/adapters/omp/plugin.js。资料没有列出完整的 17 个平台名称及其兼容版本,平台数量应视为项目描述中的规模信息,而非本文逐项验证结果。
系统架构与关键模块
从仓库的 package.json、构建脚本和发布文件可以确认,该项目采用 TypeScript 源码加构建产物的结构。构建阶段使用 TypeScript 编译器和 esbuild 生成 Node.js 运行的 ESM 包,并将服务器、CLI、会话钩子和安全模块分别打包。
服务层与命令行层
服务入口是 src/server.ts,构建后生成 server.bundle.mjs;命令行入口是 src/cli.ts,构建后生成 cli.bundle.mjs。package.json 的 bin 字段将 context-mode 命令映射到 ./cli.bundle.mjs,因此安装包后可以使用该 CLI 执行仓库提供的 setup 和 doctor 脚本。
会话模块与安全模块
构建脚本明确列出了 src/session/extract.ts、src/session/snapshot.ts、src/session/db.ts 和 src/security.ts。对应的发布文件分别包括 hooks/session-extract.bundle.mjs、hooks/session-snapshot.bundle.mjs、hooks/session-db.bundle.mjs 和 hooks/security.bundle.mjs。
其中 session/db 与 package.json 中的 better-sqlite3 依赖相互对应;FTS5 和 BM25 的使用说明来自 README。安全模块的确切拦截规则没有完整出现在所给资料中,但 OMP 描述明确写有 “hard-block curl/wget”,因此不能把这一条直接扩展成所有平台都具有相同规则。
适配器、插件与技能目录
package.json 的 pi、openclaw 和 omp 字段分别声明了对应扩展入口;files 字段还包含 skills、.claude-plugin、.codex-plugin、.openclaw-plugin、configs 和 hooks 等发布内容。这种布局说明 npm 包不仅包含 MCP 服务,也包含面向宿主平台的安装和集成材料。
依赖与运行环境
项目使用 Node.js 生态,构建脚本中的 esbuild 目标为 node18,因此资料至少明确了构建目标为 Node.js 18。该信息是构建目标,不代表仓库在所有更高或更低 Node.js 版本上都经过验证。
package.json 的依赖包括 @modelcontextprotocol/sdk、better-sqlite3、@clack/prompts、@mixmark-io/domino、picocolors、turndown 和 turndown-plugin-gfm;构建脚本还将 better-sqlite3、turndown、turndown-plugin-gfm 与 @mixmark-io/domino作为外部依赖处理。
- 语言与模块格式:TypeScript 源码,package.json 设置
"type": "module"。 - 数据库:
better-sqlite3,用于本地 SQLite 会话数据。 - 协议 SDK:
@modelcontextprotocol/sdk。 - 构建目标:esbuild 的
--platform=node --target=node18 --format=esm。 - 平台要求:OpenClaw 安装脚本在 Windows 上要求使用 Git Bash 或 WSL;该限制来自 package.json 中的安装脚本提示。
快速开始
仓库提供了构建、安装、设置和诊断脚本,最小闭环可以从本地源码完成。下面的命令只针对本地目录,不包含远程目标访问、账号自动化或敏感参数配置。
安装:获取源码并安装依赖
以下命令使用仓库地址和 package.json 中存在的 npm 脚本。构建依赖安装完成后,项目会按照其 postinstall 脚本执行安装后处理。
git clone https://github.com/mksglu/context-mode.git
cd context-mode
npm install运行:构建并执行设置命令
npm run build 会执行 TypeScript 编译、bundle、bundle 校验和非对称漂移校验。npm run setup 调用 src/cli.ts setup,用于执行仓库定义的设置流程;设置细节没有在所给资料中展开,因此不应假定它会自动修改某个具体宿主的配置文件。
npm run build
npm run setup验证:运行诊断和测试
项目提供 doctor、typecheck、test 和多个测试脚本。最小验证可以先运行诊断,再执行类型检查与测试;测试脚本的 pretest 会先执行构建。
npm run doctor
npm run typecheck
npm test如果只安装 npm 包而不从源码构建,package.json 已声明 context-mode CLI 入口;但宿主平台的 MCP 注册方式、配置文件位置和启动参数未在所给资料中给出,需查阅官方文档。
配置说明
所给资料没有提供独立的 .env.example、YAML 配置样例或完整宿主注册文件,因此以下表格只列出 package.json 中真实存在的包元数据和集成字段。未提供的默认值不做推断,运行时配置应以最新 README 和对应宿主文档为准。
| 字段名 | 类型 | 默认值 | 作用 |
|---|---|---|---|
name |
字符串 | context-mode |
npm 包名称及 CLI 生态中的项目标识。 |
version |
字符串 | 1.0.169 |
当前 package.json 声明的包版本。 |
type |
字符串 | module |
声明 Node.js 模块格式为 ESM。 |
main |
字符串 | ./build/adapters/opencode/plugin.js |
包的默认入口,指向 OpenCode 适配器构建产物。 |
license |
字符串 | Elastic-2.0 |
package.json 中声明的许可证标识;具体限制以 LICENSE 为准。 |
bin.context-mode |
字符串 | ./cli.bundle.mjs |
将命令行名称映射到 CLI bundle。 |
pi.extensions |
字符串数组 | ["./build/adapters/pi/extension.js"] |
声明 Pi 宿主加载的扩展入口。 |
openclaw.extensions |
字符串数组 | ["./build/adapters/openclaw/plugin.js"] |
声明 OpenClaw 宿主加载的插件入口。 |
资料没有给出端口、监听地址、API 密钥环境变量、SQLite 数据库路径或并发参数。若部署说明要求这些字段,官方仓库未提供该信息,建议以最新 README 为准;不要根据其他 MCP 项目的约定自行填入配置。
进阶用法
仓库的 npm scripts 为进一步验证提供了明确入口,但不同命令的测试数据和输出格式需要结合源代码阅读。进阶使用的重点是确认会话生命周期、宿主适配器和构建产物是否一致,而不是只检查 CLI 是否能启动。
npm run benchmark:执行tests/benchmark.ts。npm run test:use-cases:执行tests/use-cases.ts。npm run test:compare:执行tests/context-comparison.ts。npm run test:ecosystem:执行tests/ecosystem-benchmark.ts。npm run test:watch:启动 Vitest 监听模式。
这些命令来自 package.json,但资料没有提供每个测试的输入数据、验收阈值和报告格式。因此,不能把脚本名称直接解读为独立的性能承诺,也不能将 README 的 98% 数字替换为某个环境下的实测结果。
会话继续与清理策略
当任务需要在上下文压缩后继续时,应使用 README 所述的 --continue 语义。未使用该选项时,之前的会话数据会立即删除;这意味着“新会话”具有清理历史数据的语义,而不是只创建一个新的显示窗口。
如果团队需要保留审计记录,应先确认 SQLite 文件的保存位置、备份方式和删除策略。上述路径和备份接口在资料中没有给出,不能直接假定 SQLite 文件适合跨主机复制或作为长期审计库。
可观测性与运维
项目提供 doctor、构建断言、类型检查和测试脚本,形成了从依赖安装到构建产物校验的基础维护路径。对本地开发而言,先运行诊断和类型检查,再运行测试,可以区分环境问题、编译问题和行为问题。
- 运行
npm run doctor,检查项目定义的诊断项。 - 运行
npm run typecheck,确认 TypeScript 类型检查。 - 运行
npm run build,检查 bundle 和非对称漂移断言。 - 运行
npm test,执行 Vitest 测试。 - 发生宿主适配问题时,检查
build/adapters、hooks和发布包中的配置文件是否存在。
资料没有提供日志格式、指标名称、健康检查端点、告警规则、SLA 或远程运维控制面。生产环境若需要这些能力,官方仓库未提供该信息,建议以最新 README 和源代码为准,不应将 doctor 命令视为完整监控系统。
安全与合规边界
项目涉及代码执行、工具调用、会话持久化和工具输出路由,安全边界应以授权的本地开发环境、测试仓库和组织批准的宿主为前提。本文只讨论在拥有明确授权的环境中运行,不提供针对未授权目标的访问、绕过检测或攻击教程。
- 数据最小化:工具输出可能包含源代码、日志、路径、用户数据或凭据痕迹;沙箱减少上下文暴露,不等于自动完成数据脱敏。
- 本地数据库保护:会话事件写入 SQLite,文件权限、备份范围和删除时机应纳入组织的数据治理规则。
- 网络能力边界:OMP 描述中明确出现对
curl和wget的硬阻断,但资料没有证明所有适配器共享同一套网络策略。 - 执行权限:代码执行应限制在授权的工作区和测试数据中,不能因为存在“sandbox”字段就跳过操作系统级权限隔离。
- 敏感信息:资料没有给出 API 密钥环境变量;不要把真实密钥写入示例、会话内容、源码或提交记录。
根据本文作者的经验判断,采用该项目的团队应把“上下文减少”和“安全隔离”分开验收:前者关注模型收到多少内容,后者关注工具实际能访问什么资源。两者不是同一个控制面。
许可证与商用条款
仓库 LICENSE 文件明确写明许可证为 Elastic License 2.0(ELv2),版权行写有 Copyright 2026 Mert Koseoglu;package.json 的 license 字段为 Elastic-2.0,而仓库元信息中的许可证显示为 NOASSERTION。在这些信息存在差异时,应以仓库 LICENSE 文件为准,并在引入前进行组织法务审查。
ELv2 文本授予非独占、免版税、全球范围的使用、复制、分发、提供和制作衍生作品的许可,但包含明确限制。许可证禁止将软件作为托管或管理服务提供给第三方,并禁止移动、改变、禁用或规避许可证密钥功能,也不得删除或遮蔽许可、版权和其他通知。
- 可以否商用:许可证文本没有以“非商业使用”作为一般性限制,但具体商业模式必须检查是否构成向第三方提供托管或管理服务。
- 分发要求:获得副本的对象必须同时获得这些许可证条款;修改后的副本必须显著声明已经修改。
- 版权与通知:不得移除或遮蔽许可、版权和其他相关通知。
- 专利条款:许可证包含专利授权及终止条件;若个人或公司提出软件专利侵权主张,相关专利许可会按条款终止。
- 责任范围:LICENSE 以“按现状”方式提供,并包含无担保和责任限制条款。
以上是对所给 LICENSE 内容的事实概括,不构成法律意见。是否可以在具体产品中商用、是否触发托管服务限制,以及修改和再分发方式是否合规,应以仓库 LICENSE 和适用法律为准。
局限性与已知限制
项目资料清楚描述了目标和主要组件,但没有覆盖完整的部署契约。尤其是平台清单、配置字段、数据库路径、MCP 工具 schema、网络隔离细节和生产运维指标,在所给材料中并不完整。
- README 截取内容没有给出全部功能章节,因此无法仅依据片段确认每个功能的完整参数和边界。
- 没有提供端口、监听地址或服务启动参数,不能据此编写固定的远程连接配置。
- 没有提供官方性能测试环境、测试数据集、吞吐量、延迟或并发上限;98% 是 README 的上下文减少示例。
- 会话数据使用 SQLite,但资料没有声明数据库文件位置、加密方式、锁策略或跨进程并发保证。
- 许可证元数据与 LICENSE 文件显示不同,许可证判断应以 LICENSE 为准。
- 依赖版本范围来自 package.json 的部分字段;所给资料没有完整展示全部依赖内容,不能补写未出现的版本。
适合谁
是否采用该项目,应看现有代理工作流是否确实受到工具输出和会话压缩影响。以下信号来自项目能力与仓库资料的对应关系,可用于初步筛选。
- 需要让 AI 编程代理连续处理文件编辑、Git 操作、错误修复和用户决策,并且任务会跨越上下文压缩。
- 工具会返回大型 Playwright 快照、GitHub issue 集合或访问日志,需要减少原始文本进入模型上下文。
- 技术栈已经使用 MCP,或者正在使用 package.json 明确列出的 Claude Code、Gemini CLI、VS Code Copilot、OpenCode、Codex CLI、OpenClaw、Pi 或 OMP 适配方向。
- 团队能够接受本地 SQLite 会话数据,并有明确的源码、日志和会话隐私管理要求。
- 团队愿意通过 npm scripts、构建校验和测试脚本维护 TypeScript 项目,而不是只需要一个无需构建的单文件工具。
不适合谁
以下情况说明引入成本或合规风险可能高于上下文节省收益。这里的判断不代表项目缺陷,而是根据已提供资料对使用前提进行边界划分。
- 只运行短时、低数据量的代码问答,工具输出从未接近 README 所举的大型快照、issue 或日志规模。
- 组织禁止在本地持久化任务事件、代码编辑记录或用户决策,且无法为 SQLite 数据制定保留与删除策略。
- 需要明确的生产 SLA、官方支持窗口、远程监控指标或固定端口契约,而仓库资料没有提供这些承诺。
- 计划把项目直接包装成面向第三方的托管或管理服务;ELv2 对此有明确限制,应先进行许可证审查。
- 目标宿主不在仓库资料明确的适配方向内,并且团队没有能力阅读源码、补充适配或验证 MCP 集成。
常见问题与排查(FAQ / Troubleshooting)
为什么安装后找不到命令?
先确认依赖安装成功,并检查 package.json 的 bin.context-mode 是否指向 ./cli.bundle.mjs。从源码运行时先执行 npm run build,再运行 npm run doctor;如果仍然失败,官方仓库未提供该错误的统一诊断表,建议以最新 README 和命令输出为准。
为什么构建时出现 SQLite 相关错误?
项目依赖 better-sqlite3,构建脚本也将它作为外部依赖处理。可先重新执行 npm install,然后运行 npm run build;仓库还提供 scripts/heal-better-sqlite3.mjs,但所给资料没有说明该脚本的参数和适用条件,不能在没有输出依据时指定额外参数。
如何确认会话是否连续?
README 规定使用 --continue 继续上一会话,不使用该选项时旧会话数据会立即删除。资料没有提供查看 SQLite 事件或 FTS5 索引的公开 CLI,因此不能假定存在某个未列出的 inspect 命令。
98% 是否是所有项目的固定结果?
不是。98% 是 README 对上下文保存能力的项目描述,示例为 315 KB 变成 5.4 KB;具体结果取决于工具输出内容、查询方式和宿主适配器。仓库虽然提供 benchmark 相关脚本,但所给资料没有报告其测试环境和结果。
Windows 是否完全不支持?
资料只明确指出 OpenClaw 安装要求 bash,Windows 需要 Git Bash 或 WSL。不能据此推断所有功能都不支持 Windows;应区分 OpenClaw 安装脚本与其他宿主适配器,并以对应文档为准。
是否有端口或 API 密钥需要配置?
所给资料没有提供端口、监听地址或 API 密钥环境变量。不要自行添加示例值;官方仓库未提供该信息,建议以最新 README 为准。
项目地址与资源
以下链接均来自项目资料、仓库元数据或 README 中出现的官方项目页面。使用前应核对目标分支和最新文档内容。



