The discussion stays on the line it’s about.
Start a thread on a heading or a requirement, and it stays there as the text around it changes. People and agents reply under their own names. Every thread is saved in the file as plain markdown, so it shows in the diff and in what your agent reads.
Free for macOS, Windows, and Linux. No account, no subscription.

Everywhere
One list of every open thread
Threads sit on blueprints, top-level docs, tasks, and canvas pages. The Comments activity lists every open one: what it’s on, who started it, and the last word. Click one to open the page at the thread. For me shows the threads you wrote in or are mentioned in.
- Filter by status, host, author, mention, or anchor
- Closed and orphaned threads one click away

In the file
Readable in the file, and in git
Each file keeps its threads at the foot, open and closed, between two markers the plugin maintains. A reviewer sees the discussion in the diff. An agent reading the blueprint reads what was asked about it. A comment is a save, so it lands in history like any other change.
$ tail -n 11 specs/playback/resume-playback.md
### Functional › REQ3 (t-nx5dwq)
- **Tomás Reyes** (developer) · 2026-10-07 05:31 UTC
Does every film carry a credits marker, or only the ones ingested since the new pipeline?
- **Claude** · 2026-10-07 05:31 UTC
Only films ingested since August carry one, about 60% of the catalogue. For the rest, T-R08 can treat the last five minutes as finished. Want me to add that as REQ5?
- **Maya Okafor** (project-manager) · 2026-10-07 05:31 UTC
Yes, add it. Five minutes is fine for now.
- **Claude** · 2026-10-07 05:39 UTC
Added as REQ5.
<!-- /comments:threads -->Anchored to content, not line numbers
A + beside a heading or a requirement starts a thread there. The thread points at that text, not a line, so edits above it move nothing. If the text is deleted, the thread shows as orphaned for you to re-anchor, close, or delete. It never quietly attaches to something else.
Reactions and @mentions
React with as many emoji as you like. Each shows its count, and hovering shows who reacted. Type @ to mention a project user, and the thread waits for them under For me.
Agents sign as themselves
An agent replies under its own name, never as the person it works for. The AI Agent signs as its own user. From a terminal, an agent passes --as with its alias, and a name that isn’t a project user is refused.
How it connects
A thread can sit on anything a plugin shows.
- Blueprints
A thread points at a blueprint by its permanent id and at a section by its heading, so renaming the file never strands it.
- Backlog
Threads at the foot of any task.
- Canvas
Comment pins on a node or a page move with the node.
- AI Agent
The agent reads a blueprint’s threads along with it and replies as itself, never as you.
- Git
Each message is signed with the git identity matched to a project user, and every thread is in the file’s history.
From the shell
Threads, from a terminal
How an agent reads a blueprint’s threads before it edits, then replies as itself.
$ eidos comments @B-V63
blueprint B-V63 (3 threads)
t-7pk5cv Out of Scope
Tomás Reyes (developer) · 2026-10-07 03:50
Do we need to say anything about a film the viewer removed from their history? Right now it would still resume.
👍 1
Maya Okafor (project-manager) · 2026-10-07 03:50
Good catch. Removed history stays removed; I added it to Out of Scope.
t-nx5dwq Functional › REQ3
Tomás Reyes (developer) · 2026-10-07 05:31
Does every film carry a credits marker, or only the ones ingested since the new pipeline?
…
$ eidos comments add @B-V63 "Added as REQ5." --reply t-nx5dwq --as claude
✓ replied on t-nx5dwq (blueprint B-V63) as ClaudeWrite down what you’re making.
Download Eidos MD, open a folder, and start from the framework closest to your work. You can reshape it all later.
Free for macOS, Windows, and Linux. Your files stay plain text in a folder you own.