内容
<p align="center">
<img src="./context-the-ripper.jpeg" alt="context-the-ripper" width="500" />
</p>
<p align="center">
<strong>去除无效上下文。保留有效信息。</strong>
</p>
<p align="center">
一个MCP服务器,自动管理您的对话上下文 —<br>
自动剪除无效分支,记录每一次剪切,保留审计轨迹。您只需专注于工作。
</p>
<p align="center">
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue?style=flat" alt="License"></a>
<a href="https://www.npmjs.com/package/context-the-ripper"><img src="https://img.shields.io/npm/v/context-the-ripper?style=flat&label=npm" alt="npm"></a>
<a href="https://github.com/M4NT/context-the-ripper/actions"><img src="https://img.shields.io/github/actions/workflow/status/M4NT/context-the-ripper/ci.yml?style=flat&label=tests" alt="CI"></a>
</p>
<p align="center">
<strong>中文</strong> ·
<a href="README.pt-BR.md">葡萄牙语</a>
</p>
<p align="center">
<strong>技能:</strong>
<a href="skills/context-the-ripper/SKILL.md">英文</a> ·
<a href="skills/context-the-ripper/SKILL.pt-BR.md">葡萄牙语</a> ·
<a href="skills/context-the-ripper/SKILL.es.md">西班牙语</a> ·
<a href="skills/context-the-ripper/SKILL.zh.md">中文</a> ·
<a href="skills/context-the-ripper/SKILL.ja.md">日语</a>
</p>
<p align="center">
<strong>ripper生态系统的一部分</strong> → <a href="https://github.com/M4NT/token-the-ripper">token-the-ripper</a>
</p>
---
## 问题
长时间的会话充满了噪音:替换的代码,解决的问题,失败的假设。每个工具要么自动剪除(不透明,无法审计),要么留给您(繁琐,破坏流程)。
context-the-ripper同时实现了这两点:**默认自动,审计按需**。
---
## 需求
- Node.js >= 22.5.0(使用内置的`node:sqlite`)
---
## 安装
<details>
<summary><strong>Claude Desktop</strong></summary>
添加到您的`claude_desktop_config.json`:
```json
{
"mcpServers": {
"context-the-ripper": {
"command": "npx",
"args": ["-y", "context-the-ripper"]
}
}
}
```
重启Claude Desktop。MCP服务器已激活。
</details>
<details>
<summary><strong>Claude Code</strong></summary>
添加到您的项目的`CLAUDE.md`:
```
@CONTEXT.md
```
然后将MCP服务器添加到您的Claude Code配置中:
```json
{
"mcpServers": {
"context-the-ripper": {
"command": "npx",
"args": ["-y", "context-the-ripper"]
}
}
}
```
在第一次`context_prune`或`context_checkpoint`之后,`CONTEXT.md`将被写入您的项目根目录。每个新会话都会自动读取它 - 无需注册命令。
</details>
<details>
<summary><strong>.gitignore</strong></summary>
如果您作为本地依赖安装(`npm install context-the-ripper`),则`postinstall`脚本会自动将`CONTEXT.md`添加到您的`.gitignore`中。
对于`npx`用户,请手动添加:
```bash
echo "CONTEXT.md" >> .gitignore
```
</details>
---
## 工作原理
1. 代理在您工作时为每个消息评分(显式标记,DDL模式,失败假设)
2. 已解决的问题和无效的分支会自动标记为`candidate`
3. 当上下文超过40%的噪音时,`context_prune`会静默触发
4. 每次剪切都会记录到`~/.context-the-ripper/context.db`
5. `CONTEXT.md`会在每次剪切或检查点后写入项目根目录
6. 下一个会话从`CONTEXT.md`开始 - 没有丢失上下文
**您永远不需要输入剪切命令。您只需工作。**
---
## 工具
| 工具 | 功能 |
|---|---|
| `context_session_id` | 生成`<project>-<date>-<fingerprint>`,每个机器唯一 |
| `context_add` | 注册消息,自动评分 |
| `context_mark` | 覆盖状态:`dead` / `keep` / `candidate` / `live` |
| `context_prune` | 删除无效/候选消息,写入`CONTEXT.md` |
| `context_checkpoint` | 将里程碑压缩为命名摘要,写入`CONTEXT.md` |
| `context_restore` | 通过ID撤销剪切 |
| `context_status` | Token使用情况,噪音百分比,检查点计数 |
| `context_get` | 返回会话的所有有效消息 |
---
## 评分规则
**自动标记为候选(下次剪切时删除):**
- `[resolved]`, `[done]`, `[fixed]` 标记
- `[dead]` 标记
- "didn't work", "won't work" 模式
**从不剪切:**
- `[!]` 不可逆操作标记
- `[keep]` 标记
- `[checkpoint]` 标记
- DDL语句(`CREATE TABLE`, `ALTER TABLE`, `DROP TABLE`)
- TypeScript `interface` 和 `type` 定义
---
## 标记
与[token-the-ripper](https://github.com/M4NT/token-the-ripper) 标记配合使用:
```
[dead] — 标记此消息为剪切
[keep] — 保护免剪切
[!] — 不可逆操作 - 始终保留
[checkpoint] — 压缩为命名摘要
[resolved] — 自动评分为候选
[?] — 来源未经验证 - 仍然回答,标记它
```
---
## 审计日志
所有剪切记录存储在 `~/.context-the-ripper/context.db`(SQLite,本地,无遥测)。
```
cuts { id, message_id, reason, rule, ts }
```
每个删除操作都可以通过`context_restore(cut_id)`撤销。30天前剪切的消息会自动在启动时被清理。
---
## 过时检测
`CONTEXT.md`嵌入了一个`written_at`时间戳。如果文件在读取时超过24小时,代理会看到一个内联的`[!]`警告并触发刷新。
---
## 哲学
> *"信息是产生差异的差异。"* — Gregory Bateson, *心灵的步骤*, 1972
无效上下文不是信息。它是熵。最好的工具在不询问的情况下删除它 - 并记录每次剪切,以便您可以撤销。
默认情况下不可见。按需可审计。每次剪切都为其在日志中的位置赢得了应有的关注。
---
## 基础
**克劳德·香农** — *通信的数学理论*, 1948
每个通道都有一个容量。承载没有新信息的令牌是噪音 - 它们消耗容量而不增加模型响应能力。
**赫伯特·西蒙** — *"为信息丰富的世界设计组织"*, 1971
*"信息丰富创造关注贫困。"* 上下文剪切是一种注意力分配机制:有限的注意力落在信号上,而不是无效的分支上。
**乔治·A·米勒** — *"神奇的数字七,加或减二"*, 1956
超过工作记忆限制会降低推理能力。把上下文窗口塞满到模型的实际跨度以上,是LLM等同于超过米勒限制。
**弗里德里希·尼采** — *"论历史在生活中的利弊"*, 1874
健康的思维需要*主动遗忘* — 溶解过去的能力,以便现在的行为仍然可能。不能遗忘的上下文会因其自身的记录而瘫痪。
**豪尔赫·路易斯·博尔赫斯** — *"记忆的弗内斯"*, 1942
伊雷内奥·弗内斯获得完美记忆后,再也不能抽象思考。完全回忆摧毁了推理能力。
**威廉·詹姆斯** — *心理学原理*, 1890
*"我的经验是我同意关注的东西。"* 意识是选择性的。会话的经验是剪切后保留的东西。
**艾伦·巴德利和格雷厄姆·希奇** — *"工作记忆"*, 1974
工作记忆是一个主动、容量有限的工作空间。上下文窗口是工程类比 - 剪切策略是其中央执行器。
**维克托·梅耶-施恩伯格** — *删除:数字时代遗忘的价值*, 2009
遗忘是自然的默认状态;保留需要努力。 context-the-ripper应用相同的非对称性:遗忘是默认状态,保留必须赢得。
---
## 开发
```bash
npm test # 运行41个测试(单元测试 + 集成测试)
npm run dev # 启动MCP服务器,监听文件变化
```
测试使用`node:test` - 不需要外部测试框架。
---
## License
MIT。 ripper生态系统的一部分。
---
## 横幅艺术
横幅是一张AI编辑的维多利亚时代雕刻版画,描绘了嫌疑人在伦敦怀特查佩尔的一条“MURDER”标志附近被观察。人物头部被替换成一个纸板箱,代表LLM上下文窗口:匿名,在雾中操作,剪除了不重要的部分。
© Stefano Bianchetti / Corbis Historical / Getty Images(ID [526614274](https://www.gettyimages.com.br/detail/526614274))。仅限编辑使用。原始插图约1891年。由AI数字编辑用于此项目。