ann
Annotate a markdown document in the browser with CriticMarkup comments that land in the .md file.
Skill by davidsvaughn
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/davidsvaughn-ann
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents, productivity
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Node.js package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/ann
What's inside
- Skill name
ann- Description
- Annotate a markdown document in the browser with CriticMarkup comments that land in the .md file. Use when the user wants to annotate, comment on or review a markdown doc or a Claude response in the browser - /ann alone saves the previous response to .notes/drafts/ and opens it, /ann <question> answers in a file and opens it, /ann <path or doc name> opens that file.
- License
- MIT
- Instructions
- 61 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (19)
- README.md
- SKILL.md
- corpus-check.mjs · dev/
- fuzz.mjs · dev/
- criticmarkup.mjs · lib/
- dictation.mjs · lib/
- edit.mjs · lib/
- render.mjs · lib/
- server.mjs · lib/
- package-lock.json
- package.json
- criticmarkup.md · references/
- ann.mjs · scripts/
- dictation.test.mjs · test/
- edit.test.mjs · test/
- helpers.mjs · test/
- app.css · web/
- app.js · web/
- index.html · web/
SKILL.md (first lines)
# /ann - annotate markdown in the browser
Timestamp for a new file: !`date +%Y%m%d-%H%M%S`
Date for the header: !`date '+%Y-%m-%d %H:%M'`
Session id: ${CLAUDE_SESSION_ID}
(If the lines above show a command or a variable name instead of values, this harness does not fill
them in: run `date +%Y%m%d-%H%M%S` and `date '+%Y-%m-%d %H:%M'` yourself, and leave the session id empty.)
Arguments: the text the user typed after the skill name, which the harness appends after these
instructions (Claude Code as `ARGUMENTS: ...`, pi/OMP as `User: ...`); none appended means no arguments.
Paths in this file are relative to this skill's directory, which is stated where the skill was loaded.
## Decide the mode
1. **No arguments:** write your *previous* chat response, the last full assistant message before this
command, to a new file **verbatim**. Do not summarize, tidy, reorder, shorten, renumber, or add line
numbers or section numbers. Keep every heading, table, list, code block and link exactly as written,
including any closing question or offer. Then open that file.
2. **The arguments name a markdown file:** an existing path, or a name that matches exactly one tracked
file (`git ls-files '*.md' | grep -i <name>`). Open that file. A vague name with several matches: list
them and ask which one; do not open any.
3. **Anything else** is a question or request: write your full answer to a new file instead of to chat, in
the form you would have used in chat (plain markdown, no line numbers). Then open that file.
## New files (modes 1 and 3)
- Directory: `.notes/drafts/` in the current working directory. Create it if missing. Keep it out of git:
if `git check-ignore -q .notes/x` fails, tell the user once that `.notes/` belongs in their global
gitignore (`~/.gitignore` or `core.excludesFile`), and do not add the file to git.
- Name: `<timestamp>-<slug>.md`, where `<slug>` is 2-5 lowercase hyphenated words naming the topic.
- Content: this header, then the body, nothing else:
```
---
date: <date for the header>
session: <session id>
kind: captured-response | file-answer
prompt: <the user message this body answers, trimmed to one line - for a bare /ann, the message that preceded your previous response; for /ann <question>, the question>
---
```
## Open the file
```
node scripts/ann.mjs open <file>
```
It starts a local server for that file (or reuses a running one), opens the default browser on a
tokenised `127.0.0.1` URL and prints `url:`, `file:` and `log:`. Reply in chat with one line: the URL
and the file path. Then stop. Do not wait, poll, or watch the file: comments are saved into the `.md`
file as they are made, and the user comes back in the terminal with "address the annotations in
<path>". Handle that as `references/criticmarkup.md` says (inventory every
annotation, work out each one's scope, act on its intent, reply in chat, never edit or remove the
annotations); read it then if it is not already in context. The page reloads itself whenever the file
changes, including when you edit it.
If the command fails with "Dependencies are missing", run `npm ci` in the skill directory once (Node 20 or later).
`ann.mjs list` shows running servers, `ann.mjs stop <file>` stops one; they exit by themselves 30
minutes after the last tab closes. Details, internals and verification: `README.md` next to this file.From davidsvaughn/skills, MIT.
More from davidsvaughn/skills
- 0.570score
chat2md
davidsvaughn
Convert a shared ChatGPT or Claude conversation link (chatgpt.com/share/...
SkillAFreshness: AClaude Code +9 - 0.567score
draft
davidsvaughn
Save Claude's previous chat response (or the answer to a new question) as a plain markdown file under .notes/drafts/ so the user can annotate it in the editor…
SkillAFreshness: AClaude Code +9 - 0.565score
handoff
davidsvaughn
Write the next numbered handoff file (HANDOFF-001.md, HANDOFF-002.md, ...), a complete current-state snapshot that lets the next agent or session pick up the…
SkillAFreshness: AClaude Code +9 - 0.561score
whoami
davidsvaughn
Show this Claude Code session's messaging address (the name another agent passes to SendMessage), the live sessions it can message, and live sessions under…
SkillAFreshness: AClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 23, 2026 (5 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/davidsvaughn/skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from davidsvaughn
- 0.570score
chat2md
davidsvaughn
Convert a shared ChatGPT or Claude conversation link (chatgpt.com/share/...
SkillAFreshness: AClaude Code +9 - 0.567score
draft
davidsvaughn
Save Claude's previous chat response (or the answer to a new question) as a plain markdown file under .notes/drafts/ so the user can annotate it in the editor…
SkillAFreshness: AClaude Code +9 - 0.565score
handoff
davidsvaughn
Write the next numbered handoff file (HANDOFF-001.md, HANDOFF-002.md, ...), a complete current-state snapshot that lets the next agent or session pick up the…
SkillAFreshness: AClaude Code +9 - 0.561score
whoami
davidsvaughn
Show this Claude Code session's messaging address (the name another agent passes to SendMessage), the live sessions it can message, and live sessions under…
SkillAFreshness: AClaude Code +9
Cite this page
ann skill. Agent Mart. https://agentmart.dev/skills/davidsvaughn-ann (last updated 2026-10-24)