On this page
How it all fits together
KeepGoing is a local-first momentum system. No account required, no cloud sync. All data lives in a SQLite database inside your project, with a few global files in your home directory.
The ecosystem
KeepGoing is made up of several cooperating tools. You don't need all of them - each adds a different layer of momentum tracking, and they all speak the same data format.
CLI
The primary write surface. Owns SQLite, runs setup.
MCP Server
Gives AI tools (Claude Code, Cursor) access to your checkpoints.
VS Code Extension
Passive context capture as you code.
Desktop Tray
Real-time momentum view in the macOS menu bar.
JetBrains Plugin
Read-only companion for IntelliJ IDEs.
Claude Code Hooks
Fast Rust binary that fires on every Claude Code tool call.
Claude Plugin
Bundles skills and hooks into a one-command Claude Code install.
Data flow
Everything converges on a single SQLite file at .keepgoing/keepgoing.db in your project root.
Writers
Readers
.keepgoing/keepgoing.db Local SQLite - your project root, gitignored
Writers
Any tool that can create a checkpoint is a "writer". You don't need to use all of them - the more you have, the richer the picture.
CLI is the primary write path and the only tool that owns the SQLite schema. All other writers eventually delegate to it or write compatible data.
VS Code Extension passively captures file activity and session timing without any manual action from you.
Claude Code Hooks fire on every AI tool call, tracking which phase of work you're in (exploration, editing, testing).
Git hooks save automatic checkpoints on commit and detect when you switch branches or merge.
Readers
Readers consume checkpoint data to surface momentum. They're all read-only relative to the database.
MCP Server is the bridge between your checkpoints and AI tools. When Claude Code asks "what was I working on?", the MCP server fetches the answer from SQLite and returns it.
Desktop Tray connects to the daemon process, which watches for file changes and pushes updates to the tray in real time.
JetBrains Plugin reads SQLite directly (via a bundled Kotlin reader) and displays your current session state in the IDE.
Storage layout
Per-project (inside your repo)
.keepgoing/
keepgoing.db - SQLite, all checkpoint data
current-tasks.json - active session (written by hooks)
state.json - legacy (kept for compatibility)
Global (home directory)
~/.keepgoing/
keepgoing-global.db - project registry, nudge state
keepgoing.sock - daemon Unix socket
license.json - Pro license store
The .keepgoing/ folder is automatically added to your global gitignore during setup so it never shows up in git status.