Blitzgedanke | Markdown notes you share with Claude Code
A notepad inside VS Code that you and Claude Code both write in. Each project is
a markdown page, with extra pages when you need them (research, plans,
tasks), stored as plain .md files. Every VS Code window shows the same
projects.
✨ What you get
- Markdown pages, no forms: each project is a page you write in freely, with
extra pages when you want to keep, say, research apart from tasks. Type
# for
a heading, - [ ] for a task, / for the command menu. Drag blocks to reorder,
Cmd/Ctrl+Enter toggles the task under the cursor, Cmd/Ctrl+F finds in the
page, Esc returns focus to VS Code.
- Real markdown on disk: one
.md file per project, in a folder every window
shares (or inside a repository, if you prefer). Paste markdown and it renders;
copy from the editor and you get markdown back.
- Shared with Claude Code: a skill and an MCP server let Claude read your
notes, add its findings to a page and keep your tasks. Hover any task and press
✦ to hand it to Claude Code.
- Safe concurrent edits: if a file changes while you type (Claude, git, another
window), both sets of edits are merged and your cursor stays where it was.
- Looks native: colors, fonts and sizes come from your VS Code theme.
- Private: files stay on your machine. No accounts, no network.
🎯 Getting started
- Open Blitzgedanke with the status bar item,
Cmd/Ctrl+Alt+T or the notebook
button in any editor title. It opens as an editor tab.
- Create a project with the New project button in the app's header. It opens
as an empty page with the cursor ready.
- Write. Everything is saved to
<project>.md in the projects folder as you go.
The header holds the project switcher, New project, Copy as Markdown and
Settings (text size, storage folder and the app version). The status bar
shows the current project.
📑 Pages
A project starts as one page. Click Add page under the header to give it
another, for example Research next to your notes and tasks. The project's own
page is called Main, and every page appears as a tab, with + to add more.
- ⋯ on the active tab (or a double-click on it) renames or deletes the page.
- Switching projects brings you back to the page you were on.
- Blitzgedanke: New Page in Current Project does the same from the Command
Palette.
- On disk, pages sit in a folder named after the project:
backend.md is the
main page, backend/research.md a page called Research.
By default the app opens as an editor tab, named after the project, with the
document centred at a comfortable line width. The Activity Bar icon opens the
tab too and closes the side bar again.
- Move to Sidebar (button in the tab title) moves the current project to the
sidebar and closes the tab. Open in Editor Tab (button in the sidebar
title) does the opposite.
- Move to Sidebar keeps the app in the sidebar until you open the tab again.
- Set
blitzgedanke.openIn to sidebar to make the Activity Bar icon, the
status bar item, Cmd/Ctrl+Alt+T and the editor title button use the sidebar.
- Both can be open at once, each on its own project. If both show the same
project, what you type in one appears in the other.
- The tab is restored when VS Code reloads.
📂 Where projects live
By default every VS Code window shows the same projects, kept in one folder in
the extension's storage. Settings (gear icon) shows the path, and
Blitzgedanke: Reveal Projects Folder opens it. To change it, set
blitzgedanke.storageFolder:
- An absolute path (
~ allowed), for example a synced folder. Every window
uses it.
.blitzgedanke in a workspace's settings. That workspace keeps its own
projects inside the repository, separate from your shared ones, and you can
share them with your team through git.
For workspace projects in a git repository, Blitzgedanke asks the first time
whether to commit them (your team shares the lists and the MCP server) or
keep them local (it adds .blitzgedanke/ and the skill to .gitignore and
registers the MCP server only for you). Change it later with
Blitzgedanke: Choose Whether Projects Are Committed to Git.
🤖 Working with Claude Code
Run Blitzgedanke: Set Up Claude Code Integration (Command Palette, or the
… menu of the view). It installs:
- a skill named
blitzgedanke that tells Claude where your projects and
pages are and how they are written; it loads when you talk about your notes,
research or tasks;
- an MCP server (
.mcp/server.cjs in the projects folder, plain Node, no
dependencies) registered as blitzgedanke, with the tools list_projects,
read_project, append_markdown, create_page, list_tasks, add_task,
set_task_status, update_project, create_project and archive_project.
Each one takes an optional page.
With shared projects both are installed for all your repositories: the skill in
~/.claude/skills/blitzgedanke/ and the server in Claude Code's user scope. For
workspace projects they apply to that workspace only. If the claude CLI is not
on your PATH, the registration command is copied to your clipboard.
Start a new Claude Code session and approve the blitzgedanke server when asked.
Then just ask:
- "Research card game timers and write what you find on Sidequest's Research page"
- "Add a task to the Backend project to rotate the API keys"
- "What's still open in Release 2.1?"
- "Mark the deploy task as done"
To send one task to Claude, hover it and click ✦. With the Claude
Code extension installed the prompt opens there, ready to send; otherwise it runs
the claude CLI in a terminal, or copies the prompt to your clipboard.
Embedded images are shown to Claude as short embedded-image:N tokens instead of
base64, and restored when Claude writes the project back.
---
title: Backend
created: 2026-01-31T10:00:00.000Z
---
## This week
- [ ] Open task
- [x] Finished task
- [ ] Nested sub-task
Extra pages use the same format, in a folder named after the project
(backend/research.md). Archived projects move to archive/ in the projects
folder, pages included. Deleting a project or a page moves it to the OS trash.
📋 Requirements
- VS Code 1.82 or newer. The extension is disabled in Restricted Mode (untrusted
folders).
- For the Claude Code integration: Claude Code
and
node on your PATH (the MCP server is a plain Node script).
🔒 Privacy
Everything stays on your machine: project files in a local folder, UI settings
in VS Code. The extension makes no network requests and sends no telemetry.
Images you insert are embedded in the markdown file; images you link by URL
are fetched by the webview when the document is shown.
⚠️ Known limitations
- In editor-tab mode, clicking the Activity Bar icon briefly opens the side bar
before the tab appears (VS Code offers no way to attach a command to the icon).
- Inserted images are stored as base64 inside the markdown file, which makes
large files and noisy diffs. A separate assets folder is planned.
- Edits from other tools are merged line by line; when both sides change the
same line, both versions are kept and you are notified.
⌨️ Commands
| Command |
Default shortcut |
| Blitzgedanke: Open Blitzgedanke |
Cmd/Ctrl+Alt+T |
| Blitzgedanke: Open in Editor Tab |
|
| Blitzgedanke: Move to Sidebar |
|
| Blitzgedanke: Switch Project |
Cmd/Ctrl+Alt+P |
| Blitzgedanke: New Project |
|
| Blitzgedanke: New Page in Current Project |
|
| Blitzgedanke: Export Project |
|
| Blitzgedanke: Reveal Projects Folder |
|
| Blitzgedanke: Set Up Claude Code Integration |
|
| Blitzgedanke: Choose Whether Projects Are Committed to Git |
|
| Blitzgedanke: Move This Folder's Projects to the Shared Folder |
|
⚙️ Settings
| Setting |
Default |
Description |
blitzgedanke.storageFolder |
(empty) |
Empty: one folder every window shows. Absolute path: that folder. .blitzgedanke: inside the workspace. |
blitzgedanke.openIn |
editor |
Where Open Blitzgedanke shows the app: editor tab or sidebar. |
Text size can be adjusted from the gear icon inside the view.
🔄 Upgrading
From 0.4.x. Lists and cards from earlier versions (stored in the browser
database) are imported automatically the first time the new version opens:
every list becomes a project file with one task per card. The old data is left
in place.
From 0.5.0. 0.5.0 kept projects in .blitzgedanke/ inside each workspace.
When a workspace still has some, Blitzgedanke offers to move them into the
shared folder or to keep using that workspace's folder. If you had set up
Claude Code there, moving also moves the integration to your user scope.
Development
pnpm install # extension host
cd original-nextjs-todo-app/app && pnpm install # webview
- F5 → "Run Extension" builds the host, the MCP server and the webview,
keeps them rebuilding on save, and opens
test-fixtures/playground in a
temporary, empty profile: no other extensions (an installed Blitzgedanke
cannot interfere), no restored views, default settings. Reload the
development window (Cmd/Ctrl+R) to see webview changes.
- "Run Extension (my profile)" uses your own settings and extensions, for
example to try "send to Claude" with the Claude Code extension.
- "Run Extension (webview hot reload)" serves the webview from Vite instead.
npm test runs lint, the host tests (store, merge, MCP server, git choice)
and the editor round-trip tests.
npm run test:vscode runs the integration tests inside a real VS Code (the
first run downloads it). CI runs both on every push.
npm run build:patch|minor|major packages a .vsix.
Found an issue or have a suggestion? Open an issue on GitHub.