DevLog — Your Engineering Brain
Passively captures your coding activity and synthesizes it into a daily engineering journal. Zero manual input. Zero discipline required.
What is DevLog?
You spend 8+ hours a day writing code, debugging, making decisions, and solving hard problems — yet almost none of it gets captured. Three months later, nobody remembers why a decision was made. Performance review season is painful guesswork. Standups take 10 minutes of trying to remember what you did yesterday.
DevLog fixes this silently. It watches your editor activity, groups it into work sessions, and uses Groq AI to synthesize everything into a readable daily engineering log — automatically, at the end of every day.
Features
- 🔇 Passive capture — watches file opens, saves, edits, git events, errors, and debug sessions. You do nothing differently.
- 🧠 AI synthesis via Groq — uses free-tier Groq (llama3) to write your daily log in plain English. No OpenAI bill.
- 📋 One-command standup — run
devlog standup in your terminal and get a ready-to-paste standup update.
- 🗄️ Local-first — all events stored in
~/.devlog/ on your machine. Nothing leaves without your action.
- 🔍 Session grouping — automatically clusters activity into coherent work sessions. No manual tagging.
- 👁️ Full transparency — a live Output channel shows exactly what's being captured in real time.
Requirements
- VS Code 1.88+ or Cursor
- Node.js 18+
- A free Groq API key — no credit card required
Quick Start
1. Set your Groq API key
# Add to ~/.zshrc or ~/.bashrc
export DEVLOG_GROQ_API_KEY=gsk_...
source ~/.zshrc
Or set it directly in VS Code settings (Cmd+, → search devlog):
{
"devlog.groqApiKey": "gsk_..."
}
2. Install the CLI
The extension captures events. The CLI synthesizes them into logs.
npm install -g @devlog-app/cli
devlog status
3. Code like normal
The extension activates automatically. You'll see 📓 DevLog in the status bar — that means it's capturing.
4. Get your journal
# At the end of your day
devlog synthesize
# View the full log
devlog log
# Get your standup
devlog standup --format slack
Extension Settings
| Setting |
Default |
Description |
devlog.groqApiKey |
"" |
Your Groq API key. Falls back to DEVLOG_GROQ_API_KEY env var. |
devlog.groqModel |
llama-3.1-8b-instant |
Groq model for synthesis. Use llama-3.3-70b-versatile for higher quality. |
devlog.captureTerminal |
true |
Enable terminal command capture (requires shell hook). |
Commands
Open the Command Palette (Cmd+Shift+P) and search for:
| Command |
Description |
DevLog: Show Today's Log |
Opens a webview with today's synthesized log |
DevLog: Generate Standup |
Opens a webview with yesterday's standup, ready to copy |
DevLog: Synthesize Now |
Triggers synthesis immediately |
CLI Commands
devlog synthesize # synthesize today's events with Groq AI
devlog synthesize --model llama-3.3-70b-versatile # higher quality model
devlog log # print today's full log
devlog standup # plain text standup
devlog standup --format slack # slack-formatted standup
devlog standup --format markdown # markdown for Notion / Linear
devlog status # show capture counts and recent logs
devlog terminal-hook # print shell hook for terminal capture
What DevLog captures
| Signal |
How |
| Files opened / edited / saved / closed |
VS Code file system events |
| Editor errors and warnings |
VS Code diagnostics API |
| Debug session start / stop |
VS Code debug API |
| Git commits, branch switches |
VS Code Git extension events |
| Terminal commands + exit codes |
Optional shell hook |
What DevLog never captures
- ❌ Source code content — only filenames and metadata
- ❌ Terminal output / stdout
- ❌ Browser activity or clipboard
- ❌ Audio, screen, or biometric data
All data is stored locally in ~/.devlog/. Nothing is transmitted without your explicit action.
Sample output
Daily log:
═══ DevLog — 2026-03-23 ═══
Spent the morning resolving a race condition in the Stripe webhook handler
causing duplicate order creation. Resolved by awaiting the DB write inside
the async handler (commit a9f3b2c). Afternoon migrated 4 legacy API routes
to async/await and resolved an ESLint config conflict.
Active: 312 min | Sessions: 2 | Languages: TypeScript
Work Areas:
• Payments module (187 min)
Fixed async race condition in Stripe webhook handler
• API route migration (125 min)
Callbacks → async/await, 4 routes completed
Standup (Slack format):
*Yesterday:* Fixed a race condition in the Stripe webhook handler causing
duplicate orders. Migrated 4 API routes to async/await.
*Today:* Write integration tests for the webhook fix, review auth PR.
*Blockers:* None.
Troubleshooting
0 events captured after installing
Open the Output panel (Cmd+Shift+P → View: Toggle Output → select DevLog). You should see Extension activated. DB ready. If not, try Developer: Reload Window.
Groq API key not set error
Make sure the env var is set in the same terminal session running the CLI: echo $DEVLOG_GROQ_API_KEY. If empty, add it to ~/.zshrc and run source ~/.zshrc.
better-sqlite3 compilation error
Run npm rebuild better-sqlite3 from your devlog project root.
For more help, visit the full documentation or open an issue on GitHub.
Privacy
DevLog was designed with developer trust as a hard constraint. The capture layer is open source — you can audit exactly what gets recorded. Every event written to ~/.devlog/ is human-readable JSON. Run cat ~/.devlog/events-$(date +%Y-%m-%d).jsonl at any time to see everything DevLog knows about your day.
License
MIT © Madhankumar