跳到正文
claudemods

Context Inspector:找出 Claude Code 上下文浪费

显示 Claude Code 上下文窗口被什么占满、其中有多少是重复读取和重复输出,以及压缩保留了什么。

权限

  • 写入文件可以在你的电脑上创建或覆盖文件($.fs.write)。
  • 拦截工具调用能看到 Claude 发起的每一次工具调用(tool.call / tool.check),并可以阻止或修改它。
  • 读取你的提示词可以看到你输入的内容和对话记录(prompt.* / session.append / session.messages)。
  • 修改界面在 Claude Code 界面中绘制内容:横条、面板、状态文字、弹出通知(ui.render / $.ui.*)。
  • 添加命令/工具注册新的斜杠命令或工具,供你或 Claude 调用($.command.register / $.tool.register)。
实测版本
v2.1.303
最近实测
需要
Claude Code ≥ 2.1.287
显示位置
状态栏、面板、弹出通知

在 Claude Code 中安装:

/plugin install context-inspector --marketplace YeonwooSung/my-claude-code-mods
全部安装方式 ↓

这个插件能做什么?

Context Inspector 是一款查找 Claude Code 上下文浪费的社区插件,作者是 YeonwooSung(my-claude-code-mods)。它会为进入对话的所有内容(提示、回复、工具结果、附件)建立一本账,并回答三个问题:现在窗口里装着什么,为什么同样的信息一再回来,以及一次压缩保留或丢失了什么。

它会添加一个状态栏,形如 ctx 62% · waste≈8.1k,其中百分比是实测值,浪费量是估算值。它还添加三个命令。/context-inspect 打印文字报告,包含概览、占用者、重复读取、相似输出、压缩、效率和建议几个部分。/context-pane 打开实时面板。/context-export 把账本保存为 JSONL,只含元数据。

它的分析很具体。对文件的重复读取会被分类,例如较早的副本仍在窗口中而没有变化(纯粹的浪费)、编辑之后、压缩之后。近似重复的工具输出按词面 SimHash 分组,而不是按语义。压缩之后,它会检查已编辑和已读取的文件、错误和用户标识是否仍出现在摘要中。作者的 README 要求 Claude Code 2.1.287 或更高版本。

演示

录屏中,我们在小型演示项目里启动加载了该插件的 Claude Code,并让 Claude 读取 README.md,用一句话说明这个项目是什么。这一轮结束后,页脚显示 context-inspector: ctx 4% · waste≈0。随后我们运行 /context-inspect。报告列出了当前的存活 token(17 个条目中约 6.2k)、按类别排列的主要占用者(技能列表、MCP 说明和延迟加载工具这几类附件)、重复读取、相似输出、压缩、效率和建议。在这段很短的会话里没有任何文件被读两次,所以浪费为零,建议一栏写着没有突出的问题。

安装

使用安装区块中的任意一种方式;它们都直接从作者自己的插件市场安装。状态栏会在下一次会话开始后、第一轮对话完成时出现。

$ install context-inspector

需要 Claude Code ≥ 2.1.287

从作者自己的 marketplace 安装: YeonwooSung/my-claude-code-mods

  1. 1.在 Claude Code 中一行安装

    /plugin install context-inspector --marketplace YeonwooSung/my-claude-code-mods

    粘贴到正在运行的会话中(v2.1.275+)。Claude Code 会先询问是否添加该插件市场。

  2. 2.从终端安装

    claude plugin marketplace add YeonwooSung/my-claude-code-mods
    claude plugin install context-inspector@my-claude-code-mods

    然后在所有已打开的会话中运行 /reload-plugins。

  3. 3.免安装试用

    git clone https://github.com/YeonwooSung/my-claude-code-mods
    claude --plugin-dir ./my-claude-code-mods/context-inspector

    仅在当前会话中加载该插件,不会写入你的设置。

工作原理

模块是 hooks/register.tsx 中的一个 register 函数,它包装各个事件并原样往下传。每一步记账都经过一个会吞掉自身错误的辅助函数,因此检查器不会破坏会话。工具调用在执行前后各记录一次,返回的结果保持原样:

on('tool.call', async ($, e, next) => {
  const id = e.tool_use_id
  if (id !== undefined) safe(() => ingestToolCall(ledger, id, String(e.tool), e.agentId, e as unknown as Record<string, unknown>))
  const answer = await next(e)
  if (id !== undefined) safe(() => ingestToolResult(ledger, id, answer))
  return answer
}).catch(($, e, next) => next(e))

这段摘录来自 hooks/register.tsx。消息行通过 session.append 到达,实测的请求大小通过 turn.step 到达,压缩通过 session.compact 到达。每一轮之后,turn.complete 会排队一次重绘,读取 $.session.usage() 并写入状态栏。hooks/core/ 中的分析代码是纯 TypeScript,只有本地导入,账本上限为 20,000 个条目。

自定义

/config 中有两个选项。outputDir 设置 /context-export 的写入位置,留空表示 ~/.claude/context-inspector。toastAdvice(默认开启)会在每个会话中首次出现高严重度建议时弹出一次提示。两个命令都接受参数:/context-inspect advice 只显示一个部分,--agents 会包含子代理。

权限与安全

在运行之前,我们读过了插件可以执行的每一个文件:清单、hooks/hooks.json、hooks/register.tsx 以及 hooks/core/ 下的全部文件,包括脱敏规则。没有 package.json、安装脚本、二进制文件或打包后的代码,导入的都是本地文件。

  • 网络、进程、守护进程、遥测: 都没有。没有 fetch,没有 shell 命令,也没有在 Claude Code 退出后继续运行的东西。
  • 修改界面: 状态栏、提示通知和面板。添加命令: 上面三个。
  • 观察每一次工具调用和消息行,通过 tool.call、session.append、turn.step 和 session.compact。这些是可以拦截的钩子,但每个都原样返回下一个处理器的结果并带有 .catch 兜底;不会阻止或改写任何内容。validate 还提示,在由组织管理 Claude Code 的环境中,个人安装的插件不会运行 session.compact 钩子,除非组织把它列入托管设置。
  • 文件写入: 只发生在 /context-export 时,通过 $.fs.write 写到 <outputDir>/<会话 id>/context-<load>-<n>.jsonl。默认位置在 ~/.claude 内插件自己的子文件夹中。它读取 HOME 来展开 ~。文件路径原样导出,其他目标尽力脱敏;作者建议分享导出文件前先检查。
  • 对提示的影响: 没有发现。它不向提示或工具结果注入文字;建议只显示给你。
  • 外部依赖: 无。许可证: Apache-2.0,仓库根目录有 LICENSE 文件。

claude plugin validate 没有报告错误或警告,只有上面提到的提示。作者的 102 个测试在 Claude Code 2.1.303 上全部通过。

写入文件
可以在你的电脑上创建或覆盖文件($.fs.write)。
拦截工具调用
能看到 Claude 发起的每一次工具调用(tool.call / tool.check),并可以阻止或修改它。
读取你的提示词
可以看到你输入的内容和对话记录(prompt.* / session.append / session.messages)。
修改界面
在 Claude Code 界面中绘制内容:横条、面板、状态文字、弹出通知(ui.render / $.ui.*)。
添加命令/工具
注册新的斜杠命令或工具,供你或 Claude 调用($.command.register / $.tool.register)。

兼容性与故障排除

已在 macOS 上使用 Claude Code 2.1.303 检查(validate 和测试)。如果状态栏没有出现:

  • claude --version 为 2.1.287 或更高版本。
  • 已经完成过一轮对话;状态栏在 turn.complete 之后绘制。
  • 即使没有状态栏,/context-inspect 也会打印报告,可用它确认插件已加载。
  • 在 VS Code 聊天面板中只有钩子和命令文字可用,请使用 /context-inspect。

README 中列出的已知限制:重新加载、恢复或 /clear 之后账本会重新开始;压缩后的留存按子串匹配判断,所以被改写过的内容会算作丢失。

常见问题

Context Inspector 会改动我的会话或调用模型吗?
不会。作者的 README 说它只做观察,代码也是如此:它的钩子会把每一次工具调用、消息行、步骤和压缩原样传下去,也从不调用模型。它读取的 Claude Code 状态只有用量数据,以及重新加载后一次性读取已有的消息。
浪费数字是精确的吗?
不是。窗口占用来自 API 报告的 token 数,但每个条目的大小和浪费数字都是估算值,报告中用 ≈ 标出。条目大小是字符数除以四,再乘以 0.5 到 2.0 之间的校准系数。
/context-export 会写入什么,写到哪里?
只写元数据,保存为 <outputDir>/<会话 id>/ 下的 JSONL 文件,默认位置是 ~/.claude/context-inspector。文件路径原样保留;命令、匹配模式和 URL 会尽力脱敏并截断到 200 个字符。在你运行该命令之前不会写入任何东西。
它和 Context Bar 有什么区别?
Context Bar 像 /context 一样按类别拆分窗口。Context Inspector 则跟踪进入对话的每一个条目,所以能指出哪个文件被读了两次、哪些输出在重复,以及压缩丢掉了哪些已编辑的文件。它提供的是状态栏、面板和文字报告,而不是横条。
/clear 或恢复会话之后还能用吗?
可以,但有限制。账本会被清空,然后从会话消息中一次性读回主对话。附件、子代理和时间信息无法恢复,而且重新加载后的第一次压缩会把恢复的提示和回复都算作被丢弃。
Context Bar 在 Claude Code 中运行精选

Context Bar

在 Claude Code 输入框上方用一条堆叠横条显示上下文窗口,每个类别一种颜色,并附带 token 数。

  • 输入框上方
  • 修改界面
  • 添加命令/工具
  • 存储数据

已在 v2.1.291 实测

Compact Adviser 在 Claude Code 中运行精选

Compact Adviser

在一段工作告一段落时告诉你该运行 /compact 了:由 TypeSafe 的 Jev 判断这是不是合适的检查点。

  • 状态栏
  • 面板
  • 弹出通知
  • 读取文件
  • 写入文件
  • 网络访问
  • 读取你的提示词
  • 修改界面
  • 添加命令/工具
  • 存储数据

已在 v2.1.291 实测

上下文仪表 在 Claude Code 中运行精选

上下文仪表

在状态栏显示上下文窗口占用、5 小时与 7 天套餐用量和会话花费,并在接近上限时发出提醒。

  • 状态栏
  • 弹出通知
  • 修改界面

已在 v2.1.310 实测

更多 上下文、额度与费用、斜杠命令、面板与仪表盘。