Token Weather:Claude Code 上下文窗口预报
在输入框上方用天气预报显示 Claude Code 上下文窗口的占用,并附带最近几轮的趋势和提示缓存倒计时。
权限
- 读取文件可以读取你电脑上的文件并列出目录($.fs.read / list / stat / exists)。
- 执行命令可以在你的电脑上运行 shell 程序($.process.run / spawn)。具体运行哪些程序请查看源码。
- 修改界面在 Claude Code 界面中绘制内容:横条、面板、状态文字、弹出通知(ui.render / $.ui.*)。
- 存储数据在插件的私有存储中跨会话保存数据($.store.*)。
- 实测版本
- v2.1.307
- 最近实测
- 需要
- Claude Code ≥ 2.1.287
- 显示位置
- 输入框上方
这个插件能做什么?
Token Weather 是一款社区插件,作者是 Hamza Zafar(hamzafer),属于他的 claude-code-mods 合集。它在输入框上方用一行文字给出 Claude Code 上下文窗口预报:用一个天气词和图标表示窗口有多满,再加上百分比、相对窗口大小的 token 数、最近几轮的迷你柱状图,以及提示缓存还能保持多久的倒计时。
预报从 ☀ Clear(低于 25%)依次经过 ☁ Cloudy、☂ Showers 和 ☇ Storm,到 90% 及以上的 ↯ Compact soon。旁边的 last turns 用 ▁▂▃▄▅▆▇█ 画出最多 12 个读数,按其中最大值缩放,后面是上一轮增加或减少了多少,例如 ▲ +39.4k last turn。当这一行足够宽时,❄ cache 4:12 会倒数到提示缓存过期的时刻,最后一分钟变黄,之后显示 ❄ cache cold。
Token Weather 与我们的 Context Bar、上下文仪表 和 Cache Clock 有些重叠。Context Bar 按类别拆分窗口;上下文仪表 在状态栏显示百分比和套餐用量;Cache Clock 在状态栏下方显示缓存详情。Token Weather 则给出一行结论和变化趋势。作者的插件市场中列出的版本是 0.2.2。
演示
录屏中,我们在小型演示项目里启动加载了该插件的 Claude Code。在发送任何提示之前,输入框上方的这一行显示 ☀ Clear 0% of context 0 / 1M。接着我们让 Claude 读取 README.md,用一句话说明这个项目。第一次请求运行时,会出现 ❄ cache 5:00 倒计时。这一轮结束后,这一行显示 ☀ Clear 4% of context 39.4k / 1M、迷你柱状图、▲ +39.4k last turn,以及 ❄ cache 60:00,因为这次响应写入的是 1 小时的缓存。
安装
使用安装区块中的任意一种方式;它们都直接从作者自己的插件市场安装。这一行会在下一次会话开始时出现。插件只有一个选项,即提示缓存的有效期。
$ install token-weather
需要 Claude Code ≥ 2.1.287
从作者自己的 marketplace 安装: hamzafer/claude-code-mods
1.在 Claude Code 中一行安装
/plugin install token-weather --marketplace hamzafer/claude-code-mods粘贴到正在运行的会话中(v2.1.275+)。Claude Code 会先询问是否添加该插件市场。
2.从终端安装
claude plugin marketplace add hamzafer/claude-code-mods claude plugin install token-weather@claude-code-mods然后在所有已打开的会话中运行 /reload-plugins。
3.免安装试用
git clone https://github.com/hamzafer/claude-code-mods claude --plugin-dir ./claude-code-mods/mods/token-weather仅在当前会话中加载该插件,不会写入你的设置。
工作原理
插件把读数保存在由宿主持有的 $.state 原子中,因此热重载后依然保留。读数在会话开始时和主代理每一轮结束后获取,数据来自 $.session.usage 的上下文信息。缓存时钟会在主线程每次模型请求结束后重新开始,包括一轮之内工具循环中的请求。以下是 turn.step 处理函数,来自 hooks/register.tsx:
on('turn.step', async function* ($, e, next) {
const result = yield* next(e)
if (!e.agentId && result.stopReason !== null) {
const now = await $.clock.now()
await update($, lastRequestAt, () => now)
restart($, now, now, await ttlMsFor($, override))
}
return result
})在 auto 模式下,每一轮结束后它会读取会话记录(<config dir>/projects/<project>/<session id>.jsonl)的最后 1 MB,并在最近一次主线程响应的 cache_creation 中查找 1 小时或 5 分钟的 token。结果会保存在插件的存储中,供下一次会话使用。倒计时文字变化时,一个定时器会重绘这一行:剩余超过十分钟时每 30 秒一次,之后每 15 秒一次,最后两分钟每秒一次。
自定义
唯一的选项是插件设置中的 cacheTtl:auto(默认)、5m 或 1h。固定值会覆盖自动检测。预报的档位、12 个读数的历史和 60 秒的警告都是 register.tsx 顶部的常量。插件还会读取一个可选的顺序文件 <config dir>/claude-code-mods/bands.json,当同一作者的多个横条插件同时显示在输入框上方时,用它决定顺序。
权限与安全
在运行之前,我们读过了插件可以执行的每一个文件:.claude-plugin/plugin.json、hooks/hooks.json、hooks/register.tsx、hooks/bands.ts、类型声明和三个测试文件。没有 package.json、安装脚本、二进制文件或打包后的代码,它绘制的文字由数字拼成,不会向模型的提示中注入任何内容。仓库带有 MIT LICENSE。
它的全部行为如下:
- **网络:**无。
- **进程:**一个,
tail -c 1048576 <会话记录路径>,仅在会话记录大于 1 MB 时使用,否则直接读取文件。 - **读取的文件:**你自己的会话记录(用于检测缓存有效期)、Claude 配置目录下可选的
bands.json,以及通过$.settings.read读取的 Claude Code 设置(用来判断是否配置了 Cache Clock 状态栏)。它读取环境变量HOME和CLAUDE_CONFIG_DIR来定位这些文件。 - **写入的文件:**没有直接写入。它通过
$.store(插件自己的存储)保存检测到的缓存有效期(5m或1h)。 - **后台运行:**Claude Code 内部的一个重绘定时器,会话结束时停止。没有守护进程。
- **拦截:**无。它不会阻止或改写工具调用或提示。
claude plugin validate 没有报告插件本身的错误或警告(目录检查器提示缺少图标)。作者的 24 个测试在 Claude Code 2.1.307 上全部通过。
- 读取文件
- 可以读取你电脑上的文件并列出目录($.fs.read / list / stat / exists)。
- 执行命令
- 可以在你的电脑上运行 shell 程序($.process.run / spawn)。具体运行哪些程序请查看源码。
- 修改界面
- 在 Claude Code 界面中绘制内容:横条、面板、状态文字、弹出通知(ui.render / $.ui.*)。
- 存储数据
- 在插件的私有存储中跨会话保存数据($.store.*)。
兼容性与故障排除
已在 macOS 上使用 Claude Code 2.1.307 检查(validate、测试和录屏)。如果这一行没有出现:
- 安装之后你开启了新的会话;插件在会话开始时加载。
- 输入框上方没有打开问卷。问卷出现时这一行会让位,之后会回来。
- 窗口至少 60 列宽。更窄的终端只显示预报词、百分比和 token 数。
- 如果倒计时不对,把
cacheTtl设为5m或1h,而不是auto。项目路径特别长,或项目在会话期间被移动,可能导致找不到会话记录,此时会保留最近一次检测到的值。 /clear或恢复会话之后,倒计时会隐藏,直到下一次请求。
常见问题
- Token Weather 会调用 API 或消耗 token 吗?
- 不会。它不发出网络请求,也不调用模型,只通过 $.session.usage 读取 Claude Code 已有的上下文数据。它启动的唯一进程是对你自己的会话记录执行 `tail`,用来检测缓存有效期。
- Clear、Cloudy、Showers、Storm 和 Compact soon 分别代表什么?
- 它们是上下文占用的几个档位,都以 Claude Code 报告的窗口大小为基准。Clear 低于 25%,Cloudy 低于 50%,Showers 低于 75%,Storm 低于 90%,90% 及以上为 Compact soon。
- 它怎么知道提示缓存是 5 分钟还是 1 小时?
- 在默认的 `auto` 模式下,每次主线程对话结束后,它会读取会话记录的末尾,查看最近一次响应写入的是 5 分钟还是 1 小时的缓存 token。在看到之前,它按 5 分钟计算。你也可以在插件选项中固定为 `5m` 或 `1h`。
- 为什么我的屏幕上没有缓存倒计时?
- 它需要至少 60 列的正文宽度以及这一行有足够空间,而且只会在会话的第一次请求之后出现。如果已安装 Cache Clock 状态栏,它也会自动隐藏,因为状态栏会显示精确的倒计时。
- 它和 Context Bar 有什么区别?
- Context Bar 把窗口按类别拆成带颜色的横条并附图例。Token Weather 只有一行:一个结论、百分比、最近 12 轮的迷你柱状图,以及缓存倒计时。两者可以同时显示在输入框上方。
# 相关插件
精选Context Bar
在 Claude Code 输入框上方用一条堆叠横条显示上下文窗口,每个类别一种颜色,并附带 token 数。
- 输入框上方
- 修改界面
- 添加命令/工具
- 存储数据
已在 v2.1.291 实测
精选Cache Clock
在 Claude Code 状态栏下方显示提示缓存:热缓存的剩余时间、命中率,以及缓存变冷后需重新缓存的 token 数。
- 状态栏
- 读取文件
- 写入文件
- 执行命令
- 添加命令/工具
已在 v2.1.296 实测
精选
精选