Released vscode-mdv
A bit of backstory
As I wrote in an earlier post, I’ve been actively using AI in my creative work recently. One of the ongoing frustrations has been figuring out the best way to communicate with AI.
The primary interface is chat, but as the context you need to handle grows, it becomes increasingly common to co-edit Markdown documents with the AI. That trend became decisive once I got into Spec-Driven Development (SDD).
SDD is an approach that emerged to compensate for the weaknesses of so-called vibe coding: you write a specification first to decide the direction and details of a feature, and use that to close the gap between what you imagine and what actually gets built. I’ve been using tools like gotalab/cc-sdd, but the downside is you end up having to read and edit a lot of Markdown files.
Reading raw .md files got pretty rough, so at first I was using the Chrome extension Markdown Viewer.
But sometimes I’d end up cross-referencing 6 to 8 documents at once, and once the number of Markdown files I needed to view grew, a Chrome extension alone couldn’t keep up. I needed a more efficient way to browse multiple documents.
Building mdv
To solve these problems, I built the application that became the basis of the extension I just released. I called it mdv (built with Rust + Tauri).
mdv is a simple tool: pick a .md file in the left-hand file tree, and it renders in the right-hand pane. But just being able to switch between multiple documents using tabs made browsing a lot nicer.
I also added a feature I hadn’t seen elsewhere: you can attach comments (annotations) to a selected portion of the text, and later paste all of them into an AI chat at once.
This meant I could leave the Markdown files untouched and communicate only the intent of my changes to the AI. (If you edit the .md directly, the AI has to re-read the file to figure out what changed, so avoiding that also had a nice side benefit of reducing token consumption.)
vscode-mdv
I used mdv happily for a while, but having to launch both VSCode and mdv started to feel like a hassle, and I began getting by with VSCode’s built-in Markdown preview. At some point it hit me: what if I just built the Markdown rendering part as a VSCode extension? That’s how vscode-mdv came about.
Since I had a reference implementation, the port was pretty quick. I already had styles dialed in, so the experience didn’t change, and now it works over SSH and WSL too — it’s just plainly more convenient, and I’m really happy with it.
If there are any takeaways from this:
- When developing with AI, human cognitive capacity is the bottleneck. Tools that reduce cognitive load should be top priority.
- No matter how useful something is, if it’s annoying to get to, you stop using it.
- It’s better to keep the “environment” you always use and improve the “feel” of it.