daily-dose
🗞 Daily Dose of Claude Code
A local newspaper-style memory system for everything you do with Claude Code. Nothing leaves your machine.
Persistent SQLite database of every Claude Code session, prompt, tool call, and file edit — across every repo
Newspaper UI at
http://localhost:3000with light/dark warm theme, date navigation, timeline, TODO desk, stats, and searchFirst-class TODOs, editable in the UI and manipulable by Claude via a local MCP server
Global Claude Code hooks (SessionStart, UserPromptSubmit, PostToolUse, Stop, PreCompact, SessionEnd), additively merged into your existing
~/.claude/settings.json(never overwritten, always backed up)Redaction of common secret formats before any write
No cloud, no API keys, no external LLM calls
Installation
Requirements: git, node ≥ 18 (which bundles npm), and Claude Code. Docker is not required — it's only an optional way to run the UI in a container instead of via npm run dev.
Option 1 — One-line installer (recommended)
curl -fsSL https://raw.githubusercontent.com/iamdevnitesh/daily-dose-of-claude-code/main/install.sh | bashOr, if you've already cloned this repo:
./install.shIt clones to ~/daily-dose-of-claude-code, installs deps, builds the hooks/MCP,
merges into ~/.claude/settings.json (backing up first), adds a small managed
section to ~/.claude/CLAUDE.md, and runs the doctor.
About Docker: it's optional. If you're on macOS and Docker isn't installed,
the installer asks whether to install Docker Desktop via Homebrew (brew install --cask docker-desktop). Skip it with --no-docker, auto-accept with --yes:
# Skip the Docker question entirely
curl -fsSL https://raw.githubusercontent.com/iamdevnitesh/daily-dose-of-claude-code/main/install.sh | bash -s -- --no-docker
# Or auto-install Docker Desktop when missing (macOS + Homebrew only)
curl -fsSL https://raw.githubusercontent.com/iamdevnitesh/daily-dose-of-claude-code/main/install.sh | bash -s -- --yesIf Homebrew isn't installed, the installer tells you how to get it and moves on — Daily Dose still installs fine.
Option 2 — npm
Once published, anyone can install globally:
npm install -g daily-dose-of-claude-code
daily-dose install
daily-dose dev # UI on http://localhost:3000Or run without installing:
npx daily-dose-of-claude-code installOption 3 — Docker Compose (UI only)
The hooks and MCP server must run on the host — Claude Code spawns them as subprocesses and can't reach into a container. Docker is useful for the newspaper UI only, which reads/writes the shared SQLite database via a volume mount.
# 1. Install hooks + MCP on the host first (any of the options above)
npx daily-dose-of-claude-code install
# 2. Run the UI in Docker
docker compose up -d
# → http://localhost:3000The compose file mounts ~/.daily-dose-claude (or $DAILY_DOSE_HOME) into the
container at /data, so the UI shares the exact same database the host-side
hooks and MCP server are writing to. Kill the container any time — capture keeps
running because it lives on the host.
Option 4 — Manual (developer / hackable)
git clone <repo> && cd daily-dose-of-claude-code
npm install
npm run build:node # compile hooks + MCP
npm run install:daily-dose # merge into ~/.claude/settings.json (backup first)
npm run doctor
npm run dev # http://localhost:3000The daily-dose CLI
Once installed globally (or via npx), the daily-dose command dispatches to
everything:
Command | What it does |
| Merge hooks + MCP into |
| Remove hooks/MCP; keep data unless |
| Verify everything is wired up |
| Start the newspaper UI in dev mode |
| Start the UI in production mode |
| Compile hooks/MCP + build the Next.js UI |
| Add demo activity for today |
| Empty the DB (backup first; schema preserved) |
| Snapshot the DB into |
| Print schema state |
Where things live
Path | Purpose |
| SQLite database (WAL, FTS5) |
| JSON-line hook log |
| Capture toggles + theme |
| Timestamped DB backups |
| Hooks + MCP registration (backed up before every write) |
| Contains a small |
Architecture
Claude Code
│
├─ Hooks (host-side Node): SessionStart, UserPromptSubmit,
│ PostToolUse, Stop, PreCompact, SessionEnd
│ → write to SQLite
│
└─ MCP server (host-side stdio, daily-dose)
→ same SQLite DB
Next.js UI (host or Docker, localhost:3000)
→ same SQLite DBThe UI does not need to be running for activity capture — hooks talk
directly to SQLite. You can kill Docker, kill next dev, uninstall the UI —
Claude activity will keep landing in your local database.
MCP tools
daily_dose_add_tododaily_dose_list_todosdaily_dose_update_tododaily_dose_complete_todo(acceptstitle_queryorid)daily_dose_delete_tododaily_dose_search_memory(FTS5 over activities + TODOs)daily_dose_get_daydaily_dose_get_recent_activitydaily_dose_remember
Testing
npm testTests run against a temporary DAILY_DOSE_HOME — your real database and Claude
configuration are never touched.
Notes and non-goals
No external AI calls — titles/summaries are deterministic
Full tool outputs (like giant
Readpayloads) are never persisted; only concise metadataRedaction runs on all writes; still, don't intentionally paste secrets
Hooks are fail-open — Daily Dose failures never block Claude Code
Docker is UI-only by design; hooks must live on host for Claude Code to spawn them