scarrillo/agent-plugins/tree/main/where-were-we
where-were-we
一個 Claude Code mod,會在轉錄中為提示加上時間戳,在頁尾加入上下提示導覽,並整理專案上一次工作階段停在哪裡。
關於這個 mod
where-were-we 是一個 Claude Code 外掛,會在轉錄中為提示加上時間戳,在頁尾加入用上下方向鍵瀏覽提示的功能,並提供 /where-were-we 指令,用來列出最近的提示、跳到這些提示、整理專案上一次工作階段如何結束,同時提供 claude --resume 指令。它也會在啟動時顯示一則整理上次工作階段的問候通知。設定(數量、順序、問候語)會持續儲存在 mod 自己位於 ~/.claude/ 下的 JSON 儲存空間。它需要 Claude Code 2.1.288+,以及用於跳轉提示的全螢幕版面。透過 /plugin marketplace add scarrillo/agent-plugins 和 /plugin install where-were-we@scarrillo 安裝。Mod 只在本機讀取工作階段轉錄與 Claude Code 提示歷史,不透過網路傳送任何內容,也不會修改 settings.json。
安裝
請先查看作者 README,確認 marketplace 與外掛名稱;指令可能隨儲存庫結構而變動。
claude plugin marketplace add scarrillo/agent-plugins claude plugin install where-were-we
原文 / README
where-were-we
A Claude Code mod that timestamps your prompts in the transcript, lets you jump back through them, and recaps where your last session in a project left off.
Install
/plugin marketplace add scarrillo/agent-plugins
/plugin install where-were-we@scarrillo
Requirements
- Claude Code 2.1.288 or later. Mods use Claude Code's function-hooks API, which is early access and can change between releases.
- Jumping to a prompt (footer arrows, clicking a list line) needs the fullscreen layout.
Features
- Prompt rows show when you sent them:
12:21:00 ❯ my promptfor today,2026-10-02 18:04:11 ❯ …for older prompts. Wrapped lines stay aligned under the prompt text. - Footer:
↑ ↓at the end of the hint line under the prompt. ↑ and ↓ step through your prompts; while navigating it shows your position (↑ ↓ 2/7). Sending a prompt resets it. /where-were-welists your 6 most recent prompts, newest at the bottom; click a line to jump to that prompt./where-were-we count [n]shows or sets how many prompts the list shows (1–50)./where-were-we order [chron|reverse]shows or sets the list order:chronputs the newest last (the default),reverseputs it first./where-were-we up | down | neweststeps like the arrows, from the keyboard (works mid-turn)./where-were-we lastrecaps how the previous session in this project ended: its final prompts (same count and order) and theclaude --resume <id>command to pick it up. It reads Claude Code's prompt history (~/.claude/history.jsonl), skipping slash and!commands, and never reads pasted content.- Startup greeting: when you start a fresh session in a project, a toast says how the last one ended:
Last here yesterday 18:04: "run the tests" · /where-were-we last. Not on--resume/--continue,/clearor compaction, and not inclaude -p. /where-were-we greeting [on|off]shows or sets whether the startup greeting appears (on by default)./where-were-we statusprints the mod's state and recent log lines for troubleshooting.
The count, order and greeting setting are kept in the mod's own store (a JSON file of its own under ~/.claude/), not in settings.json, and last across sessions.
Prompts sent while the mod is loaded are stamped as they're stored. Prompts from before (a --resume, or the mod enabled mid-session) and prompts queued mid-turn are read from the session's transcript file.
What it reads and runs
A mod runs with your permissions, so here is everything this one touches:
- This session's transcript (
~/.claude/projects/<project>/<session>.jsonl), filtered withgrepto the lines that can be your prompts, to recover their times. - Claude Code's prompt history (
~/.claude/history.jsonl), filtered withgrepto this project's lines, for/where-were-we lastand the startup greeting. Only the prompt text (display) is read, never pasted content. - Its own store, a JSON file under
~/.claude/, for the count, order and greeting settings.
It writes nothing else, sends nothing over the network, and never changes your files or settings.json. Run claude plugin validate <path> on the mod to see every hook it registers and every API it calls.
Limitations
- Jumping scrolls the transcript only in the fullscreen layout. On the main screen the history is the terminal's own scrollback, which a mod can't move.
- A row drawn as time-only today keeps that form past midnight until it redraws.
- The prompt list matches listing lines to prompts by second and text, since a command's output row carries no ids. A line that can't be matched draws dim and isn't clickable.
