Highlight text and attach comments to it — without modifying the file. Comments live in
.comments.json
at the workspace root. Agents (Claude, via MCP) and you (via the editor or CLI) write to the same store, and the editor updates live.
Comments anchor to the text they quote, not to a line/character offset. Edit above a
comment and it follows the prose. Rewrap a paragraph and it still resolves (whitespace is
normalized away). Reword the quoted text entirely and the comment degrades to ⚠ stale
, pinned at its last known line — it is never silently dropped.
In the editor: select text → ⌥C
, or click the gutter +
on any line. Reply, edit, resolve, and delete from the thread UI.
From Claude: the MCP server exposes add_comment
, list_comments
, reply_to_comment
,
update_comment
, resolve_comment
, unresolve_comment
, delete_comment
. Claude's
comments show up labelled Claude
and appear in an open editor within ~1s.
From a terminal:
node dist/cli.mjs --workspace /path/to/project add \
--file Chapter2.tex --quote "the exact text" --body "your comment"
node dist/cli.mjs --workspace /path/to/project list --all
php
src/anchor.ts quote -> range resolution (pure Node)
src/store.ts .comments.json read/write (pure Node)
src/extension.ts Comments API, watcher, commands <- the only file importing 'vscode'
src/mcp.ts MCP stdio server
src/cli.ts CLI
anchor.ts
and store.ts
must never import vscode
— that module only exists inside the extension host, and the MCP server and CLI are plain Node processes.
npm install
npm run build # or: npm run watch
npm run typecheck
npm run package # -> inline-comments-0.1.0.vsix
| Setting | Default | |
|---|---|---|
inlineComments.file |
||
.comments.json |
||
| Store path, relative to workspace root | ||
inlineComments.author |
||
| OS username | Name recorded on comments you create | |
inlineComments.showResolved |
||
false |
||
| Show resolved threads in the editor |
Reflow re-anchoring collapses whitespace, but not line-comment markers. If you rewrap
text that is itself commented out (LaTeX %
, //
, #
), the rewrap inserts a marker
mid-quote and the comment goes stale
rather than re-anchoring. Rewrapping ordinary prose is unaffected.