Context Bar:看清 Claude Code 上下文窗口占用
在 Claude Code 输入框上方用一条堆叠横条显示上下文窗口,每个类别一种颜色,并附带 token 数。
权限
- 修改界面在 Claude Code 界面中绘制内容:横条、面板、状态文字、弹出通知(ui.render / $.ui.*)。
- 添加命令/工具注册新的斜杠命令或工具,供你或 Claude 调用($.command.register / $.tool.register)。
- 存储数据在插件的私有存储中跨会话保存数据($.store.*)。
- 实测版本
- v2.1.291
- 最近实测
- 需要
- Claude Code ≥ 2.1.287
- 显示位置
- 输入框上方
这个插件能做什么?
Context Bar 是一款显示 Claude Code 上下文窗口占用的社区插件,作者是 Hamza Zafar(hamzafer),属于他的 claude-code-mods 合集。它只回答一个问题:到底是什么占满了我的上下文窗口?它会在 Claude Code 输入框上方绘制一个带边框的小横条,里面是一条与终端同宽的堆叠条。这条堆叠条按照 /context 使用的相同类别来划分,例如系统提示词、工具、MCP 工具、记忆文件、技能和消息,后面接着空闲空间和自动压缩缓冲区。
标题行的形式类似 48k of 200k · compacts at 167k,并带有一个彩色百分比徽标。徽标默认为绿色,达到压缩点的 70% 时变黄,达到 90% 时变红(关闭自动压缩时则以整个窗口为基准)。在堆叠条下方,图例列出每个类别的 token 数和它占窗口的比例,按终端宽度需要排成若干行。按需加载的工具 schema 不计入其中,就像 /context 在它的网格中也把它们排除在外一样。
Context Bar 和我们自己的 上下文仪表 很接近,但两者展示的内容不同。上下文仪表 是状态栏中的一行文字,包含整体上下文百分比、5 小时与 7 天套餐窗口、会话花费,以及在 80% 时的一次性提醒。Context Bar 不显示套餐用量和花费,而是把上下文按类别拆开,让你看出占空间的是 MCP 工具、记忆文件,还是对话本身。作者的 README 要求 Claude Code 2.1.287 或更高版本。
演示
录屏中,我们在小型演示项目里启动加载了该插件的 Claude Code,并让 Claude 读取 README.md,用一句话描述这个项目。这一轮完成后,输入框上方的横条显示出按类别拆分的上下文窗口(系统提示词、系统工具、技能、消息、空闲空间)、类似 54k of 200k 的总量、自动压缩触发的位置,以及已使用的百分比。
安装
使用安装区块中的任意一种方式;它们都直接从作者自己的插件市场安装。横条会在下一次会话开始时出现,/context-bar 可以隐藏或显示它。
$ install context-bar
需要 Claude Code ≥ 2.1.287
从作者自己的 marketplace 安装: hamzafer/claude-code-mods
1.在 Claude Code 中一行安装
/plugin install context-bar --marketplace hamzafer/claude-code-mods粘贴到正在运行的会话中(v2.1.275+)。Claude Code 会先询问是否添加该插件市场。
2.从终端安装
claude plugin marketplace add hamzafer/claude-code-mods claude plugin install context-bar@claude-code-mods然后在所有已打开的会话中运行 /reload-plugins。
3.免安装试用
git clone https://github.com/hamzafer/claude-code-mods claude --plugin-dir ./claude-code-mods/mods/context-bar仅在当前会话中加载该插件,不会写入你的设置。
工作原理
插件把最新读数保存在由宿主持有的 $.state 原子中,因此热重载后依然保留,并在 AbovePrompt 渲染位置上重新绘制。以下是刷新函数,来自 hooks/register.tsx:
// Asks the engine for /context's breakdown, estimated locally (no token-count calls).
async function refresh($: EngineInterface) {
if (await read($, isHidden)) return
const usage = await $.session.usage({ breakdown: 'summary' })
const b = usage.context.breakdown
if (!b || !(b.rawMaxTokens > 0)) return // no window to measure against
await update($, reading, () => toReading(b))
}refresh 会在 session.start 时运行,在没有 agentId 的 turn.complete 时运行(子代理的轮次会被跳过),也会在 session.compact 时运行,因为 /compact 会在没有轮次结束的情况下清空窗口。toReading 会去掉延迟加载的类别和空类别,把已使用的行排在空闲空间和缓冲区之前,并分配颜色。纯函数 cells 和 legend 把读数转换成横条片段和图例行:每个已使用的类别至少占一个格子,四舍五入剩下的部分优先分给空闲空间。内部宽度不足 20 列时不绘制横条。当问卷占用了输入框上方的空间时,横条会暂时让位。
自定义
/config 中没有任何选项。唯一的开关是 /context-bar 命令,它的隐藏/显示状态通过 $.store 保存。若要改变外观,请编辑 register.tsx 顶部的常量:PALETTE 控制类别颜色,MESSAGES 控制消息的颜色,GLYPH 控制横条字符,MIN_WIDTH 控制仍会绘制的最小宽度。
权限与安全
在运行之前,我们读过了插件可以执行的每一个文件:hooks/hooks.json、hooks/register.tsx、类型声明以及测试。没有 package.json、安装脚本或打包后的代码。
修改界面对应的是输入框上方的横条。添加命令对应的是 /context-bar。插件通过 $.session.usage 读取上下文数据,用 $.store 保存一个真/假值,并把读数保存在 $.state 中。它不运行 shell 命令、不读写文件、不使用网络、不读取环境变量,也不调用模型。claude plugin validate 没有报告任何错误或警告,作者的 6 个测试在 Claude Code 2.1.291 上全部通过。
- 修改界面
- 在 Claude Code 界面中绘制内容:横条、面板、状态文字、弹出通知(ui.render / $.ui.*)。
- 添加命令/工具
- 注册新的斜杠命令或工具,供你或 Claude 调用($.command.register / $.tool.register)。
- 存储数据
- 在插件的私有存储中跨会话保存数据($.store.*)。
兼容性与故障排除
已在 macOS 上使用 Claude Code 2.1.291 检查(validate 和测试)。如果横条没有出现:
claude --version为 2.1.287 或更高版本。- 你之前没有把它隐藏:运行一次
/context-bar,看是否出现 "Context bar on"。 - 终端足够宽:横条至少需要 24 列。
- 输入框上方正打开着问卷;问卷关闭后横条会回来。
- 只有在 Claude Code 知道窗口大小之后才能拿到明细。如果刚开始时横条没有出现,先发送一条提示。
常见问题
- Context Bar 会消耗 token 或调用 API 吗?
- 不会。它向 Claude Code 请求与 /context 相同的汇总明细,代码注释说明这些数字是在本地估算的,不会调用 token 计数接口。插件自身不发出任何网络请求。
- 怎样隐藏这条横条?
- 运行 /context-bar。它会在关闭和开启之间切换,选择保存在插件自己的存储中,所以新会话会沿用你上次的状态。
- 横条什么时候刷新?
- 在会话开始时、主代理的每一轮对话结束后,以及一次压缩之后。子代理的轮次会被跳过,因为它们填充的是自己的窗口,而不是你的。
- 它和 上下文仪表(cm-context-meter)有什么区别?
- 上下文仪表 在状态栏写一行简短文字,包含上下文百分比、5 小时与 7 天套餐用量、会话花费,以及 80% 时的提醒通知。Context Bar 在输入框上方绘制一个带边框的横条,把上下文按类别拆开,不显示套餐用量和花费,也不弹出提醒。
- 颜色和符号分别代表什么?
- 每个已使用的类别(系统提示词、工具、MCP 工具、记忆文件、技能等)都从固定调色板中分到一种颜色,消息用橙色绘制。空闲空间是一条细灰线,自动压缩缓冲区则用斜线阴影表示。

