April 25, 2026
The momentum dashboard: live session awareness for Claude Code
KeepGoing now shows a live status line at the bottom of every Claude Code session: model, context remaining, files touched, commits, and time since your last checkpoint. Here's what it does and how it works.
You are three hours into a Claude Code session. You have not thought about your context window in two hours. You have been shipping.
Then Claude starts hedging. Responses get shorter. It asks you to clarify things it would have just handled an hour ago.
You check the usage. You are at 9% context remaining. You never saw it coming.
This is a preventable problem. KeepGoing now surfaces the information you need, live, at the bottom of every session.
What the status line shows
When you install KeepGoing and configure the Claude Code hooks, a line like this appears after every tool call:
[KG] Sonnet 58% · 1h12m · 7✎ 3↑ · 6m ago
Reading left to right:
- Model + context remaining. “Sonnet 58%” means you are using Claude Sonnet and have 58% of your context window left. This reads from your actual session transcript, so it reflects real token usage.
- Time in session. How long since this session started.
- Files and commits. “7✎” is files you have touched this session. “3↑” is commits you have made since the session started.
- Time since last checkpoint. “6m ago” is when you last saved a checkpoint with KeepGoing.
When something needs your attention, the line shifts:
[KG] Opus ⚠11% · 3h2m · 12✎ 4↑ · ⚠47m ago
Two warnings here. Context is below 15%, shown with a warning glyph and amber color. And you have not saved a checkpoint in 47 minutes while touching 12 files, also amber. Both are nudges to act before it is too late.
No notifications. No modal dialogs. It is just there, in your peripheral vision, the same way a clock is on the wall.
What the warnings mean in practice
Context below 15%: This is the moment to either compact your session, start a new one, or at minimum save a checkpoint with your current progress. You have enough context left to do it cleanly. Wait until you are at 3% and it gets messier.
Unsaved checkpoint after 30 minutes of work: If something interrupts your session now, including a crash, a forced compaction, or just closing the terminal, that work has no formal record. Saving a checkpoint takes a few seconds and gives you something to hand back to Claude at the start of the next session.
Neither of these is catastrophic. But catching them at the right moment is the difference between a smooth handoff and starting the next session trying to reconstruct what you were doing.
How it works technically
The status line is rendered by a Rust binary called kg. Claude Code invokes it as a Stop hook, meaning it runs after every time Claude finishes responding.
The binary has one job: read the current state and render a line. It does it in milliseconds. This was a deliberate choice: the hook runs on every single tool response, so any latency you add is latency the developer feels. TypeScript was not fast enough. The binary startup overhead was too noticeable. Rust let the binary launch, do its work, and exit before the next prompt appeared.
The kg binary handles three hook events:
heartbeat(PreToolUse): records that the session is active, updates session start time and the git SHA at the start of the session.task-update(PostToolUse): appends the file you just edited to the session’s touched-files list.statusline(Stop): renders and prints the dashboard line.
For the context percentage, statusline reads the JSONL transcript file that Claude Code maintains. The last usage record in that file contains the current token count. The binary looks up the effective context window for the model family and computes the percentage remaining.
For commits, it reads sessionStartSha from the session data, runs a git rev-list from that SHA to HEAD, and counts the results. This gives you a commits-since-session-start count that is accurate even if you committed between Claude’s turns.
For the checkpoint timer, it reads lastCheckpointAt from .keepgoing/current-tasks.json. That field is written by the KeepGoing MCP server whenever you call save_checkpoint. If there is no checkpoint yet but you have touched files, the status line shows ⚠no save to let you know.
The whole thing exits silently on any error. Claude Code hooks must never block or crash the editor. If something is missing, corrupted, or the project does not have KeepGoing initialized, the binary exits quietly and nothing appears.
The source is in apps/hooks/src/statusline.rs if you want to read it.
Connecting the dots for a long session
Here is how a long session actually plays out with the dashboard:
You start. The status line shows 100% context, 0 minutes in, no files touched. It is quiet.
An hour in: Opus 72% · 1h01m · 9✎ 0↑ · 8m ago. You can see you have not committed anything yet. You make a commit. The ↑ counter updates on the next response.
Two hours in: Opus 31% · 2h08m · 18✎ 1↑ · 1h02m ago. The checkpoint timer is amber now. You save a checkpoint. The timer resets.
Three hours in: Opus ⚠12% · 3h14m · 24✎ 3↑ · 18m ago. Context warning. You know it is time to finish the current task, save a checkpoint, and either compact or start fresh. You do it deliberately instead of being surprised.
That is the loop. The dashboard does not make decisions for you. It keeps the information visible so you can make the decision at the right moment instead of discovering the problem after the fact.
What gets captured in a checkpoint
When you call save_checkpoint (via the MCP tool or by asking Claude to save one), KeepGoing records:
- A one-sentence summary of what you accomplished
- Your suggested next step
- Any blockers you flagged
- The files you touched this session
- The current branch and commit SHA
That data becomes the briefing for your next session. When you come back tomorrow, KeepGoing prints the summary before your first message. Claude knows where you left off before you type anything.
The checkpoint timer in the status line is what connects the live session to that cross-session memory. It keeps you honest about saving progress while the work is fresh.
Getting it set up
If you have not installed KeepGoing yet, the fastest path is:
curl -fsSL https://keepgoing.dev/install.sh | bash -s -- claude
This installs the CLI, configures the Claude Code hooks (including the kg Stop hook for the status line), and sets up the session-start greeting. Run it once and every project you open in Claude Code inherits the configuration.
If you already have KeepGoing installed and want to add the hooks:
keepgoing setup claude
The setup is idempotent. It will not duplicate existing configuration.
The momentum dashboard is free. Pro add-ons like decision detection and extended session awareness are available separately.
The status line is not a productivity tool in the way people usually mean. It does not help you write code faster. It just keeps a few numbers visible that you would otherwise have to hunt for. Three hours into a session, that visibility is worth a lot.
Get notified about new posts