跳到正文
claudemods

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
显示位置
输入框上方

在 Claude Code 中安装:

/plugin install token-weather --marketplace hamzafer/claude-code-mods
全部安装方式 ↓

这个插件能做什么?

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. 1.在 Claude Code 中一行安装

    /plugin install token-weather --marketplace hamzafer/claude-code-mods

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

  2. 2.从终端安装

    claude plugin marketplace add hamzafer/claude-code-mods
    claude plugin install token-weather@claude-code-mods

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

  3. 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 中运行精选

Context Bar

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

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

已在 v2.1.291 实测

Cache Clock 在 Claude Code 中运行精选

Cache Clock

在 Claude Code 状态栏下方显示提示缓存:热缓存的剩余时间、命中率,以及缓存变冷后需重新缓存的 token 数。

  • 状态栏
  • 读取文件
  • 写入文件
  • 执行命令
  • 添加命令/工具

已在 v2.1.296 实测

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

上下文仪表

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

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

已在 v2.1.310 实测

Usage Meter 在 Claude Code 中运行精选

Usage Meter

在 Claude Code 输入框上方用小横条显示 5 小时与 7 天套餐用量、重置倒计时和会话花费。

  • 输入框上方
  • 弹出通知
  • 修改界面

已在 v2.1.291 实测

更多 上下文、额度与费用、状态栏与提示栏。