Read it. Mark it. Send it back.
Review Markdown in the terminal and send comments to your coding agent.
Install with Homebrew
brew install filipgutica/tap/annotermHomebrew builds from source and installs Rust. Install Homebrew if needed.
- Runs on
- macOS and Linux
- Written in
- Rust
- License
- MIT
- Source
- filipgutica/annoterm
Demo document in annoterm 0.2.0.
Read
Rendered mode · Ctrl+R switches to raw mode ┌Rendered · selected block: lines 7–7────────────────────────────────────────────┐┌Comments (0)────┐ │ Retry policy ││No comments yet │ │ ━━━━━━━━━━━━ ││ │ │ ││ │ │ Design notes for the sync worker. ││ │ │ ││ │ │ Behavior ││ │ │ ──────── ││ │ │ ││ │ │› Retries use a fixed five-second delay. The worker stops after three attempts. ││ │ │ ││ │ │ ┌─────────┬─────────┬───────┐ ││ │ │ │ Error │ Retried │ Delay │ ││ │ │ ├─────────┼─────────┼───────┤ ││ │ │ │ Timeout │ yes │ 5s │ ││ │ │ ├─────────┼─────────┼───────┤ ││ │ │ │ 4xx │ no │ none │ ││ │ │ ├─────────┼─────────┼───────┤ ││ │ │ │ 5xx │ yes │ 5s │ ││ │ │ └─────────┴─────────┴───────┘ ││ │ │ ││ │ │ Rollout ││ │ │ ─────── ││ │ │ ││ │ │ [x] Add the retry wrapper ││ │ │ [ ] Emit a metric for each attempt ││ │ │ ││ │ │ ││ │ └────────────────────────────────────────────────────────────────────────────────┘└────────────────┘ ↑/↓/wheel Blocks · a Comment · / Search · Ctrl+R Raw · ? Help
annoterm docs/retry-policy.mdOpens in rendered mode. The arrow keys select a block. The Comments panel starts empty.
Mark
Comment added ┌Rendered · selected block: lines 7–7──────────────────────────────────┐┌Comments (1)──────────────┐ │ Retry policy ││› 1/1 · Open (in feedback)│ │ ━━━━━━━━━━━━ ││ Explain why this uses a │ │ ││fixed delay instead of │ │ Design notes for the sync worker. ││exponential backoff. │ │ ││ │ │ Behavior ││ │ │ ──────── ││ │ │ ││ │ │● Retries use a fixed five-second delay. The worker stops after three ││ │ │attempts. ││ │ │ ││ │ │ ┌─────────┬─────────┬───────┐ ││ │ │ │ Error │ Retried │ Delay │ ││ │ │ ├─────────┼─────────┼───────┤ ││ │ │ │ Timeout │ yes │ 5s │ ││ │ │ ├─────────┼─────────┼───────┤ ││ │ │ │ 4xx │ no │ none │ ││ │ │ ├─────────┼─────────┼───────┤ ││ │ │ │ 5xx │ yes │ 5s │ ││ │ │ └─────────┴─────────┴───────┘ ││ │ │ ││ │ │ Rollout ││ │ │ ─────── ││ │ │ ││ │ │ [x] Add the retry wrapper ││ │ │ [ ] Emit a metric for each attempt ││ │ │ ││ │ └──────────────────────────────────────────────────────────────────────┘└──────────────────────────┘ ↑/↓ Blocks · a Comment · [/] Comments · j Jump · e Edit · x Resolve · ? Help
a, then EnterWrite the comment and press Enter. It saves to a sidecar file, so the Markdown stays unchanged.
Send
# Annoterm feedback Document: `../sync-worker/docs/retry-policy.md` Fingerprint: `sha256:ddea214df829949a13d370cd2a429da4d48fdd65cab7521512e90d1af4a8cece` Update the document to address every open annotation. Preserve unrelated content. Keep annotation identifiers in your response so the changes can be reviewed. ## Annotation `01a0efd0-2bde-7b93-b707-1469e866e604` Location: lines 7–7 State: anchored Selected text: > Retries use a fixed five-second delay. The worker stops after three attempts. Comment: Explain why this uses a fixed delay instead of exponential backoff.
annoterm export docs/retry-policy.md --output feedback.mdEach open comment carries its location, the quoted text, and a stable ID.
Commands
Feedback is copied after each comment change and on quit with open comments.
annoterm README.mdOpen rendered Markdown.
annoterm copy-feedback README.mdCopy feedback again if your clipboard was replaced.
annoterm export README.md --output feedback.mdExport feedback;
--forcereplaces an existing file.
Keys
? shows all shortcuts in rendered mode or the Comments panel.
- a
Comment on the selected block.
- Ctrl+R
Toggle rendered and raw modes.
- Ctrl+K
Comment on a raw selection or rendered block.
- Ctrl+S
Save raw changes.
- q
Quit rendered mode; copy open comments.
Good to know
Comments: JSON sidecars under ~/.annoterm, separate from your document. Anchors follow source changes.
External file changes stop saves. No merge view.
Linux clipboard: copying may need wl-copy for Wayland or xclip for X11. OSC 52 is the fallback.