Skip to content

Latest commit

Β 

History

19 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

DevNote

AI memory for developers. Never lose context on your own code.

You open a PR from two weeks ago and you can't remember why you made those decisions. You ask an AI for help and have to re-explain your codebase every single chat. Your past self doesn't talk to your present self, and the AI tools you work with don't remember you.

DevNote fixes both. It captures every decision you make as you make it β€” reads your git diff, uses Gemini AI to write a structured note, saves it permanently to your own Notion workspace and to a local memory inside your editor. Your code gets a brain. The context stays with you forever.

Built into VS Code. One keyboard shortcut. No leaving your editor.


What makes DevNote different

  • It remembers. Every synced note is stored locally in a SQLite memory (devnote.db) on your machine and synced to Notion. You get a Recent Notes list in the sidebar β€” browse and re-read any past note instantly, no network call, works on a plane.
  • It's AI-first, not AI-flavored. Gemini reads your entire branch diff and writes a structured note with Summary, What Changed, Why, Key Decisions, and Files Affected β€” not a generic "commit message on steroids."
  • It respects your flow. Lives in a persistent sidebar panel β€” no modal interruptions, no extra tabs, no context switches. Draft recovery if something fails mid-sync. You never lose work.
  • It's honest about scope. Notion is your human-readable archive (shareable, mobile, team-facing). SQLite is DevNote's own brain (fast, offline, MCP-ready). Both layers earn their place.
  • It's open and private. Your notes are yours. Secrets live in VS Code's SecretStorage (OS keychain). The local memory is a single devnote.db file in your user storage β€” delete it anytime with one button.

How it works β€” the flow in one picture

   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
   β”‚   1. You work. Make commits, changes, decisions.         β”‚
   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β–Ό
   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
   β”‚   2. Press Ctrl+Alt+D. DevNote sidebar opens.            β”‚
   β”‚      Type a title, optional description.                 β”‚
   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β–Ό
   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
   β”‚   3. Gemini reads your branch diff (main...HEAD)         β”‚
   β”‚      and generates a structured dev note.                β”‚
   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β–Ό
   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
   β”‚   4. Preview the note. Approve β†’ synced to Notion AND   β”‚
   β”‚      stored in your local memory (devnote.db).           β”‚
   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β–Ό
   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
   β”‚   5. The note appears in "Recent Notes" inside the      β”‚
   β”‚      sidebar forever. Click to re-read. Offline. Instant.β”‚
   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Two destinations, one action:

  • Notion β†’ the pretty, shareable, mobile-readable archive for humans
  • Local SQLite β†’ DevNote's own brain β€” powers search, RAG, and AI memory features

What feeds into the note today (v0.3.0)

Gemini generates the structured note from:

  • Full git diff (main...HEAD) β€” every added/removed line across the branch
  • Uncommitted changes β€” staged + unstaged diffs if you haven't committed yet
  • Files changed list β€” the paths touched in this branch
  • Commit count β€” how many commits are on the branch (the number, not the messages yet β€” see Beyond Phase 2 below)
  • Your form inputs β€” the title (required) and optional description you type

That's it. No hidden markers, no parsing of // TODO comments, no magic directives inside your code. Honest, inspectable, and tight.


Features

Currently shipping (v0.5.0)

Generate & sync

  • 🧠 Branch-aware AI notes β€” reads your entire diff vs main/master (auto-detected)
  • ✏️ Smart prompts β€” Gemini returns structured JSON: Summary, What Changed, Why, Key Decisions, Files Affected
  • πŸ”„ Automatic Gemini model fallback (gemini-2.5-flash β†’ gemini-2.5-flash-lite) when one is overloaded
  • πŸ“€ Notion sync with duplicate handling β€” Append, Replace, or Cancel when a title collides
  • πŸ’Ύ Draft recovery β€” if sync fails, your note survives restarts and shows as a banner

Recent Notes (v0.3.0)

  • πŸ“œ Every synced note saved to a local SQLite memory (devnote.db)
  • πŸ‘€ Recent Notes list in the sidebar β€” scroll through your full history
  • ⚑ Click any note β†’ instant local preview (offline, no Notion round-trip)
  • πŸ”— Full-width "Open in Notion" button inside the preview for sharing/mobile
  • 🧹 "Clear all memory" with optional backup-to-JSON export and a safe confirmation popup

Semantic Search (v0.4.0)

  • πŸ” Type a natural-language query β†’ results ranked by meaning, not keywords
  • Uses Gemini gemini-embedding-001 (3072-dim, L2-normalized) β†’ dot product over your local memory
  • Sub-50ms search across thousands of notes
  • 87%-style match badges on each row so you know how strong the hit is
  • Lazy-spawned Python worker for the AI/ML layer β€” TypeScript orchestrates, Python executes
  • One-time backfill popup the first time you search, then cached forever
  • Settings β†’ "Reset Python environment" + "Re-index all notes" for power-user recovery
  • Threshold recalibrated to 0.70 in v0.4.2 to match the 3072-dim embedding noise floor

Chat with your memory (v0.5.0) β€” Phase 2 closer

  • πŸ’¬ Ask natural-language questions about your past notes β€” get grounded answers with citations
  • RAG pipeline: retrieval (v0.4.0 reused) β†’ augmentation (grounded prompt + last 4 turns of history) β†’ generation (gemini-2.5-flash streaming)
  • Inline clickable citation pills ([Note 1]) β€” click to open the source note in the existing preview
  • Light multi-turn β€” follow-ups like "when was that?" resolve pronouns from prior turns
  • Streaming token-by-token (~500ms time-to-first-token) for snappy chat feel
  • Refusal path: when the answer isn't in your notes, DevNote replies "I don't find that in your notes" β€” no hallucination
  • Top-5 retrieved notes per turn at threshold 0.70 β€” single source of truth across search and chat
  • Phase 2 of the AI Memory Arc closes here β€” DevNote now captures, searches, recalls, AND converses

Developer experience

  • 🎨 Persistent sidebar panel with a proper state machine β€” no modal disruptions
  • ⌨️ Single keyboard shortcut: Ctrl+Alt+D
  • πŸ” Secrets in VS Code SecretStorage (OS keychain) β€” never in plaintext
  • πŸͺͺ Verified publisher on Open VSX

Quick Start

  1. Install β€” search "DevNote" in the VS Code Extensions panel, or install the .vsix from Open VSX
  2. Open the sidebar β€” click the DevNote brain icon in the activity bar (left-side column)
  3. First-time setup β€” the sidebar shows a setup screen. Paste three things:
  4. Create your first note β€” on a feature branch with changes, press Ctrl+Alt+D or click Generate Doc in the sidebar. Fill the form. Approve. Done.

That's it. The note lands in your Notion database and appears in the Recent Notes list in the sidebar, forever.


Commands & Shortcuts

DevNote is now a single-command extension. Everything else lives in the sidebar.

Command Shortcut Description
DevNote: Create Dev Note Ctrl+Alt+D Opens the sidebar and triggers the generate flow

All legacy commands (DevNote: Sync to Notion, DevNote: Set Gemini API Key, DevNote: Set Notion Token) were removed in v0.2.0 β€” the sidebar handles all of that in-place. Use the gear icon (βš™οΈ) in the sidebar header to access Settings.


Setup: Notion Integration

Full step-by-step setup (5 minutes, one-time):

1. Create a Notion integration

  1. Go to notion.so/my-integrations
  2. Click + New integration
  3. Name it "DevNote" and give it access to your workspace
  4. Copy the Internal Integration Token β€” this is your Notion token

2. Create a Notion database

  1. In Notion, create a new page β†’ Database β†’ Full page
  2. Name it "Dev Notes" (or anything you like)
  3. Keep the default Name property β€” that's where DevNote writes your note titles

3. Share the database with your integration

  1. Open your database page
  2. Click the … menu β†’ Connections β†’ Add the DevNote integration
  3. Without this step, the API can't write to the database

4. Get the database ID

  1. Open your database as a full page
  2. Copy the URL β€” looks like https://notion.so/workspace/DATABASE_ID?v=...
  3. The DATABASE_ID is the 32-character string between / and ?

5. Paste everything into DevNote's sidebar setup

On first launch, the sidebar shows a setup form. Paste the Gemini key, Notion token, and database ID β†’ click Save. You're live.


Where your memory lives

DevNote stores your local memory at:

OS Path
Windows %APPDATA%\Code\User\globalStorage\marudhu099.devnote\devnote.db
macOS ~/Library/Application Support/Code/User/globalStorage/marudhu099.devnote/devnote.db
Linux ~/.config/Code/User/globalStorage/marudhu099.devnote/devnote.db

A typical year of heavy use is under 10 MB. Smaller than a single phone photo. The file is cleaned up automatically when you uninstall DevNote. You can wipe it anytime via Settings β†’ Clear all memory (with optional JSON backup export).


Configuration

DevNote adds one VS Code setting:

Setting Type Default Description
devnote.notionDatabaseId string "" The Notion database ID where synced notes are created

The Gemini key and Notion token are stored in VS Code's SecretStorage, not in settings.


Requirements

  • VS Code 1.85.0 or newer
  • A git repository β€” DevNote reads git diffs to understand your changes
  • Gemini API key (free) β€” Google AI Studio
  • Notion workspace with an integration token and a database ID

Roadmap β€” Phase 2: AI Memory Arc (complete)

DevNote evolved from a one-way publisher into a true AI memory layer for developers across three releases. All three have shipped:

βœ… v0.3.0 β€” Recent Notes

Every synced note gets a permanent home in a local SQLite database. A scrollable Recent Notes list in the sidebar. Click any note β†’ instant inline preview served from local storage. Clear all memory with confirmation and optional export. SQLite foundation for everything that followed.

βœ… v0.4.0 β€” Semantic Search

Type a natural-language question into the sidebar ("notion rate limit thing", "the SQLite decision") and DevNote returns your most relevant past notes β€” ranked by meaning, not keywords. Powered by Gemini gemini-embedding-001 (3072-dim, L2-normalized vectors) + brute-force dot-product similarity over your local memory. Under 50ms for thousands of notes. TypeScript + Python hybrid started here β€” Python owns the AI/ML layer.

  • v0.4.1 patch β€” fixed a Windows Python detection race that caused false "Python 3.10+ not found" errors even when 3.12 was installed
  • v0.4.2 patch β€” recalibrated the similarity threshold from 0.35 β†’ 0.70 to match the 3072-dim embedding noise floor (the higher-dim model has a different similarity distribution; 0.35 let weak matches through)

βœ… v0.5.0 β€” RAG Chat

The memory became conversational. Ask natural-language questions about your past notes and get grounded, cited answers. Retrieval (v0.4.0 reused as-is) + Augmentation (grounded prompt + last-4-turns history) + Generation (gemini-2.5-flash streaming). Inline clickable citation pills, refusal path on no-match (no hallucination), light multi-turn for pronouns and follow-ups. Phase 2 closes here.


What's next β€” Phase 3 candidates

Phase 2 is shipped. Phase 3 is being scoped from real-use feedback. Items in flight or under active consideration:

🚧 v0.5.1 β€” UX overhaul + chat polish (in progress)

Real-use feedback on v0.5.0 surfaced rough edges, plus one production bug. v0.5.1 ships:

  • πŸ› Markdown rendering fix β€” marked.min.js was being blocked by the webview sandbox (HTTP 403) because it wasn't loaded via webview.asWebviewUri(...). Citations are clickable pills again, bold/italic/lists/code render correctly.
  • πŸ’¬ Chat moves to a dedicated tab (🏠 Home / πŸ’¬ Chat) β€” full-height with sticky bottom input, ChatGPT/Claude muscle memory. Reverses the v0.5.0 stacked-input layout after dogfooding showed it felt cramped.
  • β–  Stop button β€” replaces the send button while answers are streaming. Click stop β†’ the bubble freezes at its current text (partial preserved).
  • 3-stage loading state β€” "Searching your notes..." β†’ "Found N notes..." β†’ "Generating answer..." β€” replaces the silent-wait window between send and first token.

πŸ’‘ v0.6.0+ β€” under consideration

Listed in priority order based on user feedback so far. Tracked transparently so the direction is visible:

  • Persistent chat history β€” ChatGPT-style browseable list of past conversations. Today chats are in-memory only and cleared on VS Code restart.
  • User-selectable chat model β€” Settings option to pick between Flash (default), Flash-Lite (cost-sensitive), or Pro (deep thinking). Today the model is hardcoded.
  • Dynamic suggested questions β€” generate prompts from the user's actual notes via Gemini, instead of hardcoded examples.
  • Progressive markdown rendering β€” render bold/lists/pills inline as the stream completes each fragment, instead of waiting until done to render.
  • Python-side stream cancellation β€” Stop button currently discards chunks on the TS side; making the worker actually cancel the Gemini call would save quota for cost-sensitive users.
  • Retrieval evaluation harness β€” a golden set of 30 questions with known relevant notes, automated metrics (Recall@5, Precision@5, MRR) to drive future tuning instead of vibes.

Beyond Phase 2 β€” planned enhancements

Ideas we're deliberately NOT shipping during the Phase 2 memory arc, but actively tracking for the releases after v0.5.0. Listed here so the direction is transparent.

Richer note generation inputs

Today Gemini sees the diff + files changed + commit count. Post-v0.5.0 we plan to extend this with:

  • Commit messages folded into the prompt β€” your own intent, encoded in messages like fix: prevent sync from deleting local file on 429, is invisible to the AI right now. Adding subject lines (and optionally bodies) gives Gemini the narrative you already wrote.
  • Smart commit filtering β€” drop low-signal commits (wip, single-letter, merge commits) so the prompt stays focused.

Notion as an optional sync target

Today all three credentials (Gemini key, Notion token, Notion DB ID) are required. Post-v0.5.0 we plan to support a local-only mode for devs who don't use Notion β€” DevNote would work entirely off the local memory (devnote.db) with no Notion dependency. The "Open in Notion" affordance would simply hide for local-only notes.

Per-note delete from the Recent Notes list

Today you can only Clear all memory (the nuke button). Post-v0.5.0 we plan to add a per-note delete action so you can remove a single bad/embarrassing/obsolete note without wiping your whole history. Open question we'll brainstorm when we get there: does deleting locally also archive the Notion page, or leave Notion alone?

One-time Notion import (historical backfill)

Today v0.3.0 starts with an empty local memory β€” existing Notion pages from your v0.1.x/v0.2.0 era are not imported automatically (the reverse transformation is lossy). Post-v0.5.0 we plan to offer a DevNote: Import from Notion command for users who want their full Notion archive pulled into local memory, with clear warnings about reconstruction fidelity.

Inline note editing and annotations

Today the Recent Notes preview is read-only. If you want to edit, you open Notion. Post-v0.5.0 we're evaluating whether DevNote itself should support in-place annotations and edits β€” this is a meaningful product-mode shift (capture + recall β†’ capture + author), so we're not committing to it until user demand is clear.

Product visuals

Screenshots and short GIFs of the sidebar flow in the README and Open VSX listing β€” following real feedback that the Notion sync feature is currently undiscoverable for new users.


Why DevNote exists

Developers lose context on their own code. Two weeks after you ship a feature, you open the PR and stare at your own diff like it was written by a stranger. AI tools lose context too β€” every new chat starts blank. You re-explain your codebase, your decisions, your constraints every time.

DevNote solves both with one mechanism: capture every decision as you make it, store it permanently, feed it back to whoever needs it later β€” future-you, future-AI, or your teammates.

That's the soul. Not a note-taking app. Not a dev journal. A memory layer that makes forgetting structurally impossible for developers and the AI tools they work with.


License

MIT β€” see LICENSE.


Author

Built by Marudhupandiyan (@marudhu099) as part of the CodeVantage platform.

Feedback, issues, feature requests β†’ GitHub issues.

About

AI-generated dev notes from git diffs. Save locally, sync to Notion, never lose context again.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages