pullmark + your coding agent · free & open source · native macOS

Your agent's plan deserves a real review.

Agents write serious Markdown now — implementation plans, specs, research write-ups — and the step that makes them good is your judgment. PullMark reads the draft rendered and puts your feedback in the file itself, as margin notes your agent addresses in place.

the moment

A 400-line plan just landed. Now what?

You know the drill: the agent finishes a plan, and the next move is yours. Reading raw Markdown in an editor hides what a reader would see — tables, structure, the shape of the argument. Pasting chunks back into the chat divorces every comment from the place it's about, and the agent has to guess where your "this part is wrong" points. And the one tool built for commenting on documents — a pull request — wants the draft committed, pushed, and reviewed in a browser first.

Not every document belongs committed, and not every working version of a doc should be pushed up.

A working draft needs the feedback loop you'd give a coworker at a whiteboard: point at the paragraph, say what's wrong, hand it back. That's what margin notes are.

the loop

Read rendered. Note in place. Hand it back.

1 · Read rendered

Open the draft in PullMark — or just pullmark plan.md from the terminal your agent runs in. Tables are tables, diagrams are diagrams, and the page re-renders every time the file changes.

2 · Note in place

Hover the block that's wrong, click the note bubble, write what you'd tell a coworker. Notes are signed with your @name and anchored to the exact passage — a note above the title covers the whole document.

3 · Hand it back

Tell your agent: "address my notes in plan.md." The notes live in the file as ordinary HTML comments, so the agent reads each one exactly where you left it — applies it, answers it, deletes it.

PullMark rendering an agent-written design spec titled Wind Gust Alerts with three margin notes shown as signed cards from the reviewer — a file-level note asking for a clean second revision, one challenging the spec's sampling-rate assumption, and one calling YAGNI on a feature — while the sidebar shows the spec in a docs/superpowers/specs folder of a git repository on branch main
An agent's spec, a first review pass: signed notes anchored to the exact blocks — no commit, no paste, no pull request.

No lock-in, by construction. A margin note is <!-- note @you: … --> in the Markdown — a comment that stays out of the rendered page. Your files stay plain text, your notes travel with the document, and anything that can read the file can read the feedback. The margin notes docs cover the mechanics; the feature is in beta and on by default.

Agents follow the convention better with one paragraph of context. This is the same text behind the Copy button in Settings → Experimental — paste it into your agent's instructions file (CLAUDE.md, AGENTS.md) or the conversation:

For your agent
## Margin notes

Markdown files may contain review notes as HTML comments:
`<!-- note @name: comment -->` (possibly multi-line, closing
with `-->` on its own line). Each note sits directly after the
passage it's about; a note above the first heading is about the
whole document. `--\>` inside a note means a literal `-->`.

When asked to address notes: work through each one, apply or
answer it, and DELETE the note (with its surrounding blank line)
once addressed. To reply or ask instead, leave your own note in
the same format below the original, signed with your own @name.
Don't add notes to code examples inside fenced blocks.

A note about one list item sits inside that item — directly after
the item's last line, indented to the item's content, with no
blank lines around it. Keep (or delete) the whole indented
comment; its indentation is what ties it to the item.

long documents

Notes that wait for you.

A thorough review of a long document — a research write-up, a complex design doc — can take an hour. Margin notes are built for that hour. The document holds still while you work: write the thought where it strikes and keep reading. When page thirty changes your mind about the note you left on page three, go back and sharpen it — or delete it. Nothing reaches your agent until the pass is done and your notes agree with each other, so the feedback lands as one coherent set instead of a running stream of corrections.

It earns its keep even for documents that will end up committed. Do the rough first pass in margin notes before the first commit, and the pull request opens clean — reviewers see the conversation that matters, not the scaffolding it took to get there.

the revision

Watch the edits land.

While the agent works through your notes, PullMark keeps up. The page re-renders on every save, and Compare shows the revision as a rendered diff — the agent's edits highlighted word by word, live as they land. One click compares the working file against any recent commit or branch; pullmark --diff plan.md does it from the terminal. It's the fastest answer to "what did the agent just change in my doc?" — and when the notes are addressed, they're simply gone from the file.

when it is a PR

And when the doc does go up for review…

Some documents do belong committed — and agent-heavy repos fill pull requests with Markdown: plans, ADRs, agent definitions, runbooks. PullMark shows those PRs as rendered diffs with just the changed words highlighted, lets you comment and suggest on the exact blocks, and submits your review to GitHub. The overview knows where the PR stands: decision, reviewer verdicts, checks, and the conversation as a readable timeline.

PullMark's pull-request overview: the PR title with an Open chip, a Changes requested capsule, a Checks passed capsule, reviewer avatars wearing verdict badges, a docs-guild team chip, the PR description rendered, and the conversation timeline whose first review comment shows a rendered table
The same review instincts, pointed at a pull request — the front page covers the whole review story.

Close the loop with your agent.

Free, open source, signed and notarized. macOS 13+.

Homebrew
$ brew tap jedijashwa/tap
$ brew trust jedijashwa/tap
$ brew install --cask pullmark
Direct download
Download PullMark

The latest DMG — open it, drag to Applications (PullMark handles the cleanup). All releases →

Either way, PullMark checks for updates and installs them with one click.