跳到正文
claudemods

Where Am I:输入框上方的 Claude Code 会话回顾

在 Claude Code 输入框上方显示回顾:会话目标、当前进展、等你处理的事,以及下一步。

权限

  • 读取文件可以读取你电脑上的文件并列出目录($.fs.read / list / stat / exists)。
  • 调用模型(消耗你的额度)可以自行向 Claude 发送请求,这些请求计入你套餐的用量($.model.* / $.agent.spawn)。
  • 拦截工具调用能看到 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 where-am-i --marketplace hamzafer/claude-code-mods
全部安装方式 ↓

这个插件能做什么?

Where Am I 是一款社区插件,作者是 Hamza Zafar(hamzafer),属于他的 claude-code-mods 合集。它在输入框上方保持一份 Claude Code 会话回顾,让你在一段很长的回答或一次休息之后,抬头就能看出现在进行到哪里。这个横条显示会话的目标、当前正在做什么、Claude 在等你处理什么,以及下一步。作者是为容易丢失思路的人写的,背后的系统提示词要求使用平实的措辞。

横条最多有三行。◆ Goal: 是整体目标,模型被要求除非目标明显改变,否则保持不变。now: 一行实时跟随 Claude 的工作,标签形如 reading src/index.js,next: 在同一行。只有当 Claude 需要你处理某件事时,才会出现黄色的 waiting on you: 一行。每个字段都被截成一句话,最多 70 个字符。

回顾由每一轮结束后的一次小模型调用写成。/where 则按需写出更长的回顾:最多六条要点,依据对话的最近 12 条消息。如果你同时使用多个横条类插件,Where Am I 会借助一个共享的横条顺序文件与它们一起排序,作者的测试覆盖了这一点。

演示

录屏中,我们在小型演示项目里启动加载了该插件的 Claude Code,并让 Claude 读取 README.md,用一句话说明这个项目是什么。Claude 工作时,输入框上方的横条仍是空的。这一轮结束后,Claude 的回答和 done 行出现,几秒钟后回顾出现在输入框上方:一行 Goal: 说明目标是了解这个演示应用,一行 now: 说明刚刚读过 README,还有一行 next:。随后片段以 Ctrl+C 结束。

安装

使用安装区块中的任意一种方式;它们都直接从作者自己的插件市场安装。横条会在你完成第一轮之后出现,/where 在会话开始时注册。

$ install where-am-i

需要 Claude Code ≥ 2.1.287

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

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

    /plugin install where-am-i --marketplace hamzafer/claude-code-mods

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

  2. 2.从终端安装

    claude plugin marketplace add hamzafer/claude-code-mods
    claude plugin install where-am-i@claude-code-mods

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

  3. 3.免安装试用

    git clone https://github.com/hamzafer/claude-code-mods
    claude --plugin-dir ./claude-code-mods/mods/where-am-i

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

工作原理

回顾保存在由宿主持有的 $.state 原子中,因此热重载后依然保留。写回顾的模型调用从 turn.complete 发起,并且不被等待,所以这一轮会立刻结束。以下来自 hooks/register.tsx:

on('turn.complete', async ($, e, next) => {
  const r = await next(e)
  if (!e.agentId) {
    await update($, live, () => '')
    void summarize($, prompt, log, e.answer).catch(() => {}) // in the background, so the turn ends at once
  }
  return r
})

summarize 使用 haiku 模型调用 $.model.complete。它发送上一份回顾、你最近的一条消息(前 1500 个字符)、这一轮工具调用的标签,以及 Claude 回答的前 2500 个字符,并要求返回带有 goal、now、waiting 和 next 的 JSON。parseRecap 允许 JSON 外面包着代码围栏,会裁剪字段并替换长破折号。tool.call 钩子写入 now 标签,并保留最近 20 个标签供下一份回顾使用;它只观察,原样返回调用。子代理的轮次会被跳过,其他插件发起的调用则通过检查 next.origin 被忽略。横条绘制在 AbovePrompt 渲染位置上,问卷打开时会消失。

自定义

/config 中没有任何选项,/where 是唯一的命令。若要改变外观,请编辑 register.tsx:MODEL 选择写回顾所用的模型,MAX_LOG 设置保留多少个工具调用标签,clip 设置 70 个字符的上限,summarize 和 longRecap 中的两段系统提示词决定语气。横条在其他横条类插件之间的顺序,每个会话从配置文件夹中的 bands.json 读取一次,因此修改后需要重启 Claude Code 才会生效。

权限与安全

在运行任何东西之前,我们读过了插件可以执行的每一个文件:hooks/hooks.json、hooks/register.tsx、hooks/bands.ts、类型声明以及测试。没有 package.json、安装脚本、二进制文件或打包后的代码,我们也没有发现隐藏字符、eval 或动态导入。MIT 许可证位于仓库根目录。

  • 模型调用。 $.model.complete 在主代理每一轮之后以及运行 /where 时执行。它会通过 Claude Code 把你的提示、工具标签和 Claude 的回答(/where 则是最近 12 条消息)发送给 haiku 模型,因此会占用你的套餐或 API 用量。插件本身没有网络代码,也不会向任何其他主机发送数据。
  • 环境变量与文件。 它读取 CLAUDE_CONFIG_DIR 和 HOME,并在存在时读取一个文件,即 <config dir>/claude-code-mods/bands.json,用来获得横条顺序。它不写任何文件,回顾保存在 $.state 中。
  • 钩子。 prompt.submit 和 tool.call 只观察,并把一切原样传下去;validate 提示这两个钩子都没有 .catch。插件不会拦截或改写任何东西。它添加 /where,并修改输入框上方的界面。
  • 不存在的内容。 没有进程、shell 命令、守护进程、遥测、密钥或设置修改,除了那两段回顾提示词之外,也没有针对模型的指令。

claude plugin validate 没有报告任何错误或警告,作者的 7 个测试在 Claude Code 2.1.303 上通过 claude plugin test 全部通过。

读取文件
可以读取你电脑上的文件并列出目录($.fs.read / list / stat / exists)。
调用模型(消耗你的额度)
可以自行向 Claude 发送请求,这些请求计入你套餐的用量($.model.* / $.agent.spawn)。
拦截工具调用
能看到 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、测试和一次录屏)。如果横条没有出现:

  • 先完成一轮对话;回顾在这一轮之后写出,如果模型调用失败或返回无法解析,横条会保持为空。
  • 输入框上方打开着问卷时它会被隐藏,问卷关闭后会回来。
  • 如果 /where 是未知命令,说明 Claude Code 已有同名命令,插件会在没有它的情况下启动。
  • 如果 /where 显示 “Could not build a recap right now”,说明模型调用没有得到回答;请再试一次。

横条会读取 next-steps 的状态,所以在该插件显示它的列表时,会隐藏自己的 next 部分。

常见问题

Where Am I 会消耗 token 吗?
会,但很少。主代理每完成一轮,它都会通过 Claude Code 在后台调用一次 haiku 模型来写回顾,输出上限为 300 个 token。运行 /where 会再调用一次,输出上限为 500 个 token。插件自身不发出任何网络请求。
回顾里有什么内容?
四个简短字段,每个都被截成一句话、约 70 个字符。goal 是会话的目标,now 是刚刚完成的事,waiting 是 Claude 需要你做的事(为空时隐藏),next 是下一步。
Claude 工作时,“now”一行是怎样更新的?
每当 Claude 调用工具,钩子就会把它换成一个通俗的标签,例如 “reading src/login.js” 或 “running npm test”。其他插件在后台发起的调用会被忽略,这一轮结束后,则由模型写的回顾重新接管。
为什么第一条提示之后没有回顾?
回顾是在一轮结束后由后台的模型调用写出的。它会在第一次回答的几秒后出现,在此之前横条保持隐藏。
如果我同时使用 next-steps 插件会怎样?
当 next-steps 显示它的下一条提示列表时,Where Am I 会省略自己的 “next” 部分,避免两者重复。
Next Steps 在 Claude Code 中运行精选

Next Steps

每轮结束后,在 Claude Code 输入框上方显示 2 到 3 条可能的下一条提示词,按 1、2 或 3 即可填入草稿。

  • 输入框上方
  • 调用模型(消耗你的额度)
  • 读取你的提示词
  • 修改界面

已在 v2.1.291 实测

Context Bar 在 Claude Code 中运行精选

Context Bar

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

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

已在 v2.1.291 实测

Mission Control 在 Claude Code 中运行精选

Mission Control

在一个实时面板中查看 Claude Code 的主代理、子代理和每一次工具调用,并附带它们涉及文件的代码地图。

  • 面板
  • 输入框上方
  • 读取文件
  • 写入文件
  • 执行命令
  • 调用模型(消耗你的额度)
  • 拦截工具调用
  • 修改界面
  • 添加命令/工具

已在 v2.1.296 实测

更多 计时、待办与站会、斜杠命令。