Docs/How It Works

How It Works

Three stages: capture โ†’ group โ†’ synthesize. Everything runs inside the extension โ€” no external processes.

Stage 1 โ€” Capture

The extension listens to VS Code events and writes them to ~/.devlog/events-YYYY-MM-DD.jsonl as they happen:

File open / save / closeVS Code file events API
Git commitsVS Code Git API ยท filtered to your email
Editor errorsVS Code diagnostics API
Debug sessionsVS Code debug API
Uncommitted changes (WIP)Captured on session end

Never captured: source code contents, file contents, stdout/stderr, clipboard, browser activity.

Stage 2 โ€” Session grouping

Events are grouped into work sessions using a 30-minute inactivity gap. Each session extracts: branch name, commits (enriched from git if messages are missing), files worked on, error count, and languages used.

Stage 3 โ€” AI synthesis

A structured digest is built and sent to your AI provider. File changes are described meaningfully:

Digest sent to Groq / Gemini
Session 9:14AMโ€“12:30PM (196min) | Branch: fix/payments
Commits (2):
a9f3b2c fix: resolve race condition in webhook handler
โ†’ heavily updated stripe.ts
โ†’ updated orders.ts
b4c2d1e chore: bump version to 0.3.0
โ†’ updated package dependencies

Four AI calls run in parallel: summary, standup, work areas, and decisions. Results are saved to ~/.devlog/log-YYYY-MM-DD.json.

Commit enrichment

If the extension wasn't running when you committed (editor was closed), the event has a hash but no message. At synthesis time, DevLog runs git show <hash> to backfill missing messages โ€” so your standup is specific even for commits made before DevLog was installed.

User filtering

All commit filtering uses git config user.email. Both the real-time watcher and the 90-day bootstrap filter by this email โ€” teammates' commits never appear in your log.

Storage

~/.devlog/events-YYYY-MM-DD.jsonl # raw events (appended live)
~/.devlog/log-YYYY-MM-DD.json # synthesized daily log
~/.devlog/.bootstrapped # first-run flag

All files are human-readable JSON. You can inspect or delete them at any time.