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
- 显示位置
- 输入框上方
这个插件能做什么?
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.在 Claude Code 中一行安装
/plugin install where-am-i --marketplace hamzafer/claude-code-mods粘贴到正在运行的会话中(v2.1.275+)。Claude Code 会先询问是否添加该插件市场。
2.从终端安装
claude plugin marketplace add hamzafer/claude-code-mods claude plugin install where-am-i@claude-code-mods然后在所有已打开的会话中运行 /reload-plugins。
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 输入框上方显示 2 到 3 条可能的下一条提示词,按 1、2 或 3 即可填入草稿。
- 输入框上方
- 调用模型(消耗你的额度)
- 读取你的提示词
- 修改界面
已在 v2.1.291 实测
精选Context Bar
在 Claude Code 输入框上方用一条堆叠横条显示上下文窗口,每个类别一种颜色,并附带 token 数。
- 输入框上方
- 修改界面
- 添加命令/工具
- 存储数据
已在 v2.1.291 实测
精选Mission Control
在一个实时面板中查看 Claude Code 的主代理、子代理和每一次工具调用,并附带它们涉及文件的代码地图。
- 面板
- 输入框上方
- 读取文件
- 写入文件
- 执行命令
- 调用模型(消耗你的额度)
- 拦截工具调用
- 修改界面
- 添加命令/工具
已在 v2.1.296 实测