Skip to content
claudemods

Where Am I Claude Code mod: a Claude Code session recap above the prompt

A recap above the Claude Code prompt: the session goal, what is happening now, what waits on you and the next step.

Permissions

  • Reads filesCan read files and list directories on your machine ($.fs.read / list / stat / exists).
  • Calls the model (uses your quota)Can send its own requests to Claude, which count against your plan's usage ($.model.* / $.agent.spawn).
  • Intercepts tool callsSees every tool call Claude makes (tool.call / tool.check) and could block or change it.
  • Reads your promptsCan see what you type and the conversation transcript (prompt.* / session.append / session.messages).
  • Changes the UIDraws into the Claude Code interface: bands, panes, status text, toasts (ui.render / $.ui.*).
  • Adds commands/toolsRegisters new slash commands or tools that you or Claude can invoke ($.command.register / $.tool.register).
tested with
v2.1.303
last tested
requires
Claude Code ≥ 2.1.287
surfaces
above-prompt

Install inside Claude Code:

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

What does this mod do?

Where Am I is a community mod by Hamza Zafar (hamzafer), part of his claude-code-mods collection. It keeps a Claude Code session recap above the prompt so you can look up and see where you are after a long answer or a break. The band shows the goal of the session, what is happening now, what Claude is waiting on you for, and the next step. The author wrote it for people who lose the thread easily, and the system prompt behind it asks for plain words.

The band has up to three lines. ◆ Goal: holds the overall aim, which the model is told to keep unless it clearly changed. The now: line follows Claude's work live, with labels such as reading src/index.js, and next: sits on the same line. A yellow waiting on you: line appears only when Claude needs something from you. Each field is cut to one sentence of at most 70 characters.

The recap is written by a small model call after each turn ends. /where writes a longer recap on request: up to six bullets built from the last 12 messages of the conversation. If you run several band mods, Where Am I sorts itself with them using a shared band order file, and the author's tests cover this.

Demo

The recording starts Claude Code with the mod loaded in the small demo project and asks Claude to read README.md and say what the project is in one sentence. While Claude works, the band above the prompt is still empty. When the turn ends, Claude's answer and the done line appear, and a few seconds later the recap shows up above the prompt: a Goal: line about understanding the demo app, a now: line saying it read the README, and a next: line. The clip then ends with Ctrl+C.

Install

Use any of the methods in the install block; they install straight from the author's own marketplace. The band appears after your first completed turn, and /where is registered at session start.

$ install where-am-i

Requires Claude Code ≥ 2.1.287

Installs from the author's own marketplace: hamzafer/claude-code-mods

  1. 1.One line, inside Claude Code

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

    Paste into a running session (v2.1.275+). Claude Code asks to add the marketplace first.

  2. 2.From your shell

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

    Then run /reload-plugins in any session that is already open.

  3. 3.Try it without installing

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

    Loads the mod for one session only. Nothing is added to your settings.

How it works

The recap lives in a host-held $.state atom, so it survives a hot reload. The model call that writes it runs from turn.complete and is not awaited, so the turn ends at once. From 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 calls $.model.complete with the haiku model. It sends the previous recap, your latest message (first 1500 characters), the labels of this turn's tool calls and the first 2500 characters of Claude's answer, and asks for JSON with goal, now, waiting and next. parseRecap accepts a code fence around the JSON, trims fields and replaces em dashes. A tool.call hook writes the now label and keeps the last 20 labels for the next recap; it only observes and returns the call unchanged. Subagent turns are skipped, and calls made by other mods are ignored by checking next.origin. The band is drawn on the AbovePrompt render site and goes away while a survey is open.

Customize it

There are no options in /config. /where is the only command. To change the look, edit register.tsx: MODEL picks the model for the recap, MAX_LOG sets how many tool-call labels are kept, clip sets the 70-character limit, and the two system prompts in summarize and longRecap set the tone. The order of the band among other band mods is read once per session from bands.json in the config folder, so restart Claude Code to apply a change.

Permissions & safety

We read every file the plugin can execute before running anything: hooks/hooks.json, hooks/register.tsx, hooks/bands.ts, the type declarations and the tests. There is no package.json, install script, binary or bundled code, and we found no hidden characters, eval or dynamic imports. The MIT license is in the repository root.

  • Model calls. $.model.complete runs after every main-agent turn and on /where. It sends your prompt, tool labels and Claude's answer (or the last 12 messages for /where) to the haiku model through Claude Code, so it uses your plan or API usage. The mod itself has no network code, and nothing is sent to any other host.
  • Environment and files. It reads CLAUDE_CONFIG_DIR and HOME and, if present, one file, <config dir>/claude-code-mods/bands.json, to get the band order. It writes no files; the recap lives in $.state.
  • Hooks. prompt.submit and tool.call only observe and pass everything on unchanged, and validate notes that both lack a .catch. The mod does not block or rewrite anything. It adds /where and changes the UI above the prompt.
  • Not present. No processes, shell commands, daemons, telemetry, secrets or settings changes, and no instructions aimed at the model beyond the two recap prompts.

claude plugin validate reported no errors or warnings, and the author's 7 tests passed with claude plugin test on Claude Code 2.1.303.

Reads files
Can read files and list directories on your machine ($.fs.read / list / stat / exists).
Calls the model (uses your quota)
Can send its own requests to Claude, which count against your plan's usage ($.model.* / $.agent.spawn).
Intercepts tool calls
Sees every tool call Claude makes (tool.call / tool.check) and could block or change it.
Reads your prompts
Can see what you type and the conversation transcript (prompt.* / session.append / session.messages).
Changes the UI
Draws into the Claude Code interface: bands, panes, status text, toasts (ui.render / $.ui.*).
Adds commands/tools
Registers new slash commands or tools that you or Claude can invoke ($.command.register / $.tool.register).

Compatibility & troubleshooting

Checked with Claude Code 2.1.303 on macOS (validate, tests and a recording). If the band does not show up:

  • Finish one turn first; the recap is written after it, and a failed or unparsable model reply leaves the band empty.
  • A survey open above the input hides it until it closes.
  • If /where is unknown, Claude Code already has a command with that name, and the mod starts without it.
  • If /where says "Could not build a recap right now", the model call was not answered; try again.

The band reads next-steps state, so it hides its own next part when that mod shows its list.

FAQ

Does Where Am I spend tokens?
Yes, a few. After every turn of the main agent it makes one background call to the haiku model through Claude Code to write the recap, capped at 300 output tokens. Running /where makes one more call, capped at 500 output tokens. It makes no network requests of its own.
What does the recap contain?
Four short fields, each cut to about 70 characters and one sentence. Goal is the aim of the session, now is what was just done, waiting is what Claude needs from you (hidden when empty), and next is the next step.
How is the "now" line updated while Claude works?
A hook on every tool call from Claude replaces it with a plain label such as "reading src/login.js" or "running npm test". Calls made by other mods in the background are ignored, and when the turn ends the model's recap takes over again.
Why is there no recap after my first prompt?
The recap is written after a turn ends, by a background model call. It appears a few seconds after the first answer, and until then the band stays hidden.
What happens if I also use the next-steps mod?
When next-steps shows its list of next prompts, Where Am I leaves out its own "next" part so the two do not repeat each other.
Next Steps running in Claude CodeFeatured

Next Steps

Two or three likely next prompts above the Claude Code input after each turn. Press 1, 2 or 3 to draft one.

  • above-prompt
  • Calls the model (uses your quota)
  • Reads your prompts
  • Changes the UI

tested with v2.1.291

Context Bar running in Claude CodeFeatured

Context Bar

Your Claude Code context window as one stacked bar above the prompt, a color per category, with token counts.

  • above-prompt
  • Changes the UI
  • Adds commands/tools
  • Stores data

tested with v2.1.291

Mission Control running in Claude CodeFeatured

Mission Control

A live pane of Claude Code's main agent, subagents and every tool call, plus a code map of the files they touch.

  • pane
  • above-prompt
  • Reads files
  • Writes files
  • Runs commands
  • Calls the model (uses your quota)
  • Intercepts tool calls
  • Changes the UI
  • Adds commands/tools

tested with v2.1.296

More in Timers, todos, standups, Slash commands.