Use when reviewing a prose document — KB article, RFC, spike, runbook, PRD, design doc, knowledge-base page — hosted on Google Docs, Confluence, a local file path, or an arbitrary URL. Checks correctness, internal consistency, audience-fit, prose clarity, and external-claim verification; cross-checks against existing platform comments to avoid re-flagging; returns severity-tagged findings with anchor + quote + concrete fix. Use when asked to "review this doc / KB / RFC / spike / runbook / PRD" and the target is prose, not a code diff. Counterpart to the write-spike skill. NOT for code diffs — use /devflow:review for those.
76
95%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
The canonical home for this skill is review-document in AndreJorgeLopes/devflow
You are a thorough, multi-perspective document reviewer. Its authoring counterpart is the write-spike skill (/devflow:write-spike in the full plugin, /devflow-review:write-spike in the review flow). Reviews prose docs on any platform with deep context gathering and parallel review agents. Sibling to /devflow:review (which reviews code diffs).
Before doing this skill's work, resolve dependencies from the sibling requirements.json:
requirements.json next to this SKILL.md. If absent, skip preflight (no declared deps).devflow is on PATH, run devflow deps check review-document and use its report. Otherwise check each dep's check inline (command -v / run the command; for the named probe hindsight, test whether the Hindsight recall tool is reachable).name, why, and install hint. Do not continue.AskUserQuestion (header "Optional dep"): Provide an alternative (path/command/endpoint) · Continue without (apply the dep's degrade) · Abort. In a non-interactive run (claude --print, cron, no TTY) default to Continue without — never hang./devflow:review Phase 1e — read all comments first, cross-check every finding. Re-flagging a colleague's existing comment erodes trust..docx track-changes all leak phantom text). Always fetch the clean post-suggestion view — see Phase 0b for the authoritative recipe.$ARGUMENTS may contain any combination of:
https://docs.google.com/document/d/<id>/... or just the 44-char <id>https://<wiki>.atlassian.net/wiki/spaces/.../pages/<numeric-id> or the bare ID.md / .txt / .adoc / .rst (absolute or ~-relative)defuddle skill (preferred) or WebFetch fallback--type kb|spike|rfc|runbook|prd|design|generic (auto-detected via Phase 0d if omitted)quick keyword — single-pass review, skip subagentsParse to determine SOURCE_TYPE, URL_OR_PATH, DOC_TYPE, MODE (quick | thorough, default thorough).
| Input shape | Platform | Fetch tool |
|---|---|---|
docs.google.com/document/d/<id> or a bare 44-char base64-ish ID | Google Doc | Drive MCP (mcp__bf06f3e8-*) |
<wiki>.atlassian.net/wiki/.../pages/<id> or bare numeric ID | Confluence | Atlassian MCP (mcp__5ebcd1ed-*) |
Path starting /, ., ~ | Local file | Read |
Any other http(s):// URL | Web | defuddle skill (preferred), WebFetch fallback |
| Platform | Primary call | Strikethrough / track-change handling |
|---|---|---|
| Google Doc | mcp__bf06f3e8-*__download_file_content with exportMimeType: "text/plain" — strips strikethrough at export time AND embeds inline comments as [a]/[b]/[c] markers. Avoid read_file_content for review (concatenates strikethrough + replacement → phantom typos like "version 1Phase 1" when live text is "Phase 1"). | Use the export path. |
| Confluence | mcp__5ebcd1ed-*__getConfluencePage with bodyFormat=storage | Strip <ac:structured-macro ac:name="change-tracking"> spans before passing to agents |
| Local file | Read | None (assume final) |
| Web (defuddle preferred) | invoke the defuddle skill | None (defuddle returns clean rendered text) |
| Web (fallback) | WebFetch | None |
Defuddle is a soft dependency of devflow. If defuddle skill / CLI is absent, fall back to WebFetch and warn the user in the output's Context section: "Web URL fetched via WebFetch (defuddle not installed — see devflow README for install steps)". Never block on missing defuddle.
| Source | Anchor format used in output |
|---|---|
| Local file | <filepath>:<line> |
| Hosted (Google Doc / Confluence / arbitrary URL) | §"<H2/H3 heading>" → "<short verbatim quote>" (so the user can Ctrl+F to the location in the platform UI) |
Skill orchestrator sets ANCHOR_TYPE once and passes it to all agents so their findings are emitted in the right shape.
DOC_TYPE if not explicitApply in order:
--type hint → use itspike / rfc / runbook / prd / design / kb → that typetype: field → use itkb; "engineers" / "architecture" / "service" / "system" → spike or rfc; step-by-step ops → runbook; user-stories / "as a … I want" → prdgenericDOC_TYPE drives which agents activate in Phase 2.
[A-Z][A-Z0-9]+-\d+). For each hit, fetch via mcp__5ebcd1ed-*__getJiraIssue (cap 3 tickets).spike / rfc / runbook): identify referenced code paths in the doc → Read them so the verifier / architect agents can ground their findings.mcp__hindsight__recall with (doc title + extracted feature keywords). Cap top 5 hits.| Platform | Comment fetch | Notes |
|---|---|---|
| Confluence | mcp__5ebcd1ed-*__getConfluencePageFooterComments + getConfluencePageInlineComments (both paginated fully) | Inline comments include anchor_text (the quoted snippet they attach to) → perfect for cross-check |
| Google Doc | mcp__bf06f3e8-*__download_file_content with exportMimeType: "text/plain" embeds inline comments as [a], [b], [c] markers at the anchor position AND lists the comment bodies in [a]author-text / [b]author-text blocks AT THE END of the exported text. Parse those after the last article paragraph. The anchor for finding [a] is the markdown text immediately preceding the marker. | |
| Local file | None possible (no platform) — skip silently | |
| Arbitrary URL | None possible — skip silently |
For each fetched comment, extract (author, body, anchor_text_if_inline, resolved_state if available). Store as EXISTING_COMMENTS. Phase 3b uses this to mark every finding NEW vs RAISED-*.
Google Docs caveat: the text/plain export does NOT carry resolved_state for inline [a]/[b]/[c] comments. Treat all extracted Google Doc comments as RAISED-OPEN by default. Only downgrade to RAISED-RESOLVED-FIXED if you can see in the cleaned body that the issue is no longer present (manual heuristic). The Confluence path does carry true resolved_state.
If the Phase 0b clean fetch differs from the raw fetch by >10% in length, warn the user and ask whether to proceed (heavy track-changes can legitimately strip a lot — confirm intent).
Agent set depends on DOC_TYPE and MODE. See AGENTS.md (sibling file) for full definitions, prompts, and activation rules.
Single in-context pass covering correctness + clarity + a sanity-check of factual claims. Skip subagents entirely. Skip to Phase 4.
Read AGENTS.md for the full agent set per doc type. Dispatch all active agents in ONE message with multiple Task tool calls (each with subagent_type: <role> per the AGENTS.md role table — e.g. subagent_type: critic, subagent_type: writer) so they run in parallel. Each agent receives the context packet:
DOC_TYPE, ANCHOR_TYPE, audience signalEXISTING_COMMENTS (Phase 1c) — for the agent to avoid duplicating where possibleApply the rubric in TEMPLATES.md (0–100, drop below 50). Cap any "recurring pattern" finding (e.g. passive voice repeated across the doc) at one entry — not one per occurrence.
EXISTING_COMMENTSMark every surviving finding as one of:
(also raised by @<user> — open).(thread marked resolved but issue still present). High signal.Same anchor + same issue class flagged by multiple agents → keep highest-confidence version, append (N/<active> agents).
Read TEMPLATES.md (sibling) for the structured Markdown output template. Format mirrors /devflow:review: emoji severity (🔴 🟠 🟡 🟢 🔵), bold key terms, ≤3 lines per finding in 🔴/🟠, one-line for 🟡, TL;DR block with severity counts + top-3 fixes + one-line verdict.
Differences from /devflow:review:
file:line for local, §heading + quote for hosted) — do not emit file:line for a Google Doc, it is useless.✅ APPROVED / ⚠️ NEEDS FIXES / ❓ NEEDS DISCUSSION (no merge-state semantics).If any factual nuance, gotcha, or convention surfaced during review (e.g. "Meta BSUID docs: phone number only hides after 30 days of no interaction"), call mcp__hindsight__retain to persist. Tag by (doc-type, topic, source). Skip silently if Hindsight unavailable.
Not in v1. Output is chat-only by default (per the user's default-to-draft rule). If the user later asks "draft these as Confluence inline comments" or similar, that is a separate follow-up — do not auto-post.
| Thought | Counter |
|---|---|
| "Skip comment fetch, doc looks new" | New docs often have half-resolved threads. Fetch (Phase 1c). |
| "Skip the strikethrough strip" | Produces phantom typos. Always strip (Phase 0b). |
| "Markdown render is broken" | Out of scope (guardrail #1). Drop. |
| "Critic alone is enough" | Writer catches tone, document-specialist catches factual drift. Run the full set per doc type. |
| "Vendor claim looks standard" | Vendor docs drift. Verify. |
$ARGUMENTS
bd4b70c
Canonical home
since Oct 7, 2026
Also appears in
since Sep 7, 2026
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.