漂流卫士mcp
用于Claude Code、Gemini CLI、Codex CLI和Cursor的实时AI对话漂移监视器。
长时间的人工智能会话会降级——模型会填充其上下文窗口,开始重复自己,并失去对您最初要求的跟踪。driftguard-mcp直接读取您的会话文件,测量实际预测的信号,并告诉您何时重新开始。
没有浏览器。没有API密钥。没有UI。作为MCP服务器,您的AI CLI可以在会话中期调用。
______________________________________________________________________
安装
npm install -g driftguard-mcp
driftguard-mcp setupsetup 自动配置计算机上所有支持的AI CLI。 运行AI CLI后,您必须重新启动它 --MCP服务器仅在启动时加载。
Manual config
克劳德代码-- ~/.claude.json
{
"mcpServers": {
"driftguard": {
"command": "driftguard-mcp",
"env": { "DRIFTCLI_ADAPTER": "claude" }
}
}
}Gemini CLI-- ~/.gemini/settings.json
{
"mcpServers": {
"driftguard": {
"command": "driftguard-mcp",
"env": { "DRIFTCLI_ADAPTER": "gemini" }
}
}
}Codex CLI-- ~/.codex/config.toml
[mcp_servers.driftguard]
command = "driftguard-mcp"
env.DRIFTCLI_ADAPTER = "codex"光标-- ~/.cursor/mcp.json
{
"mcpServers": {
"driftguard": {
"command": "driftguard-mcp",
"env": { "DRIFTCLI_ADAPTER": "claude" }
}
}
}DRIFTCLI_ADAPTER告诉driftguard-mcp要读取哪个CLI的会话。driftguard-mcp setup自动设置。
______________________________________________________________________
用法
从任何会话调用这些工具:
get_drift()--检查会话是否降级get_handoff()--写ahandoff.md继续新的会议get_trend()--用火花线记录满分历史
______________________________________________________________________
它是什么样子的
健康会话:
✅ Context is healthy.
Context depth ███░░░░░░░ 28
Repetition ██░░░░░░░░ 15
Score: 12/100 · 14 messages
Session size: 56,210 input tokens total需要重置的会话:
⚠️ Start fresh now — context is full and responses are repeating heavily.
Context depth █████████░ 88
Repetition ████████░░ 72
Length collapse █████░░░░░ 48
Score: 84/100 · 67 messages
Session size: 176,432 input tokens total
→ Call get_handoff() to get a structured prompt for writing handoff.md before starting fresh.分数以简单的英语推荐领先。最重要的两个条——上下文深度和重复——总是会出现。其他人只有在做出有意义的贡献时才会表现出来。
看实际效果

______________________________________________________________________
交接工作流程
当漂移较高时,呼叫 get_handoff()AI写了一个 handoff.md 在项目根目录中使用其完整会话上下文:
## What we accomplished
Implemented JWT authentication with refresh token rotation. Added middleware,
updated the user model, wrote integration tests. All tests passing.
## Current state
Auth flow is working end-to-end. Rate limiting is stubbed but not implemented.
The `/refresh` endpoint has a known edge case with concurrent requests (see TODO in auth.ts:142).
## Files modified
- src/middleware/auth.ts — JWT verify + refresh logic
- src/models/user.ts — added refreshToken field + index
- src/routes/auth.ts — /login, /logout, /refresh endpoints
- tests/integration/auth.test.ts — 14 new tests
## Open questions / next steps
- Implement rate limiting on /login (decided on: 5 attempts per 15 min)
- Fix concurrent refresh edge case
- Add token blacklist for logout
## Context for next session
Using jsonwebtoken@9, refresh tokens stored in DB (not Redis — decision was made
to keep it simple for now). Access token TTL: 15min. Refresh TTL: 7 days.负载 handoff.md 在你的下一次会议开始时。您可以在不失去上下文的情况下继续。
______________________________________________________________________
它衡量什么
权重根据两个公共数据集进行实证校准: LMSYS-Chat-1M (100万个真实会话——考虑转弯深度的行为)和 聊天机器人竞技场 (33K个人类偏好对——人类判断哪种对话更好):
| 因素 | 重量 | 它测量什么 |
|---|---|---|
| 上下文深度 | 已使用30% | %的上下文窗口--所有适配器的实际令牌计数 |
| 重复 | 25% | 3-gram在最近的响应中重叠——模型回收自己的输出 |
| 目标距离 | 22% | 词汇偏离了你的既定目标——Arena数据中最强的成对信号 |
| 不确定性信号 | 12% | 自我纠正密度(“我错了”,“让我纠正一下”) |
| 反应长度崩溃 | 8% | 反应越来越短——症状可靠,短期会话无法衡量 |
| 置信度漂移 | 3% | 对冲语言趋势(早期与晚期反应) |
上下文深度与真实长会话的转折指数(LMSYS)有+0.80的相关性。在Arena成对比较中,目标距离和重复是失败模型的最强预测因素。权重之和为1.00。
______________________________________________________________________
get_drift() 选项
传递可选 goal 将目标距离测量锚定到特定目标的字符串:
get_drift({ goal: "build a JWT authentication system" })没有它,目标距离返回0(没有锚=没有测量)。
______________________________________________________________________
配置
driftguard mcp在两个地方查找配置,合并在一起:
- 全球的:
~/.driftclirc - 每个项目:
.driftcli在项目根中
两者都是JSON格式。所有字段都是可选的。
{
"preset": "coding",
"warnThreshold": 60
}预设
| 预设 | 最适合 |
|---|---|
coding | 重点编码会议 |
research | 研究或规划——高度重视目标一致性 |
brainstorm | 头脑风暴——放松重复和信心惩罚 |
strict | 所有六个因素权重相等 |
所有选项
| 密钥 | 默认值 | 描述 |
|---|---|---|
preset | -- | 命名重量预设 |
weights | -- | 按因素权重覆盖,应用于预设值之上 |
warnThreshold | 60 | 警告的分数阈值 |
storage.enabled | true | 持续漂移快照 get_trend() |
storage.directory | ~/.driftcli/history | 覆盖快照存储路径 |
sessionResolution.cacheTtlMs | 5000 | 会话文件缓存TTL(ms) |
环境变量
| 变量 | 描述 |
|---|---|
DRIFTCLI_ADAPTER | 固定到特定CLI: claude, gemini,或 codex.自动设置 setup. |
DRIFTCLI_SESSION_ID | 强制特定会话UUID(仅限Claude代码)。 |
DRIFTCLI_HOME | 覆盖主目录以查找会话文件。 |
______________________________________________________________________
CLI监视器
实时终端仪表板,每3秒轮询一次:
driftguard-mcp watch______________________________________________________________________
支持的CLIs
| CLI | 状态 |
|---|---|
| 克劳德代码 | ✅ 支持——真实代币计数,200k窗口 |
| Gemini CLI | ✅ 支持——真实代币计数,1M窗口 |
| Codex CLI | ✅ 支持--真实令牌计数,会话JSONL的运行时窗口 |
| 光标 | ✅ 支持(监控克劳德代码/双子座/代码会议) |
______________________________________________________________________
如果driftguard mcp有用 帮助别人找到它。
