Audit README, SPEC, and PRODUCT docs against recent git history for drift and make minimal PR-ready edits. Use when asked to review docs for accuracy, after major feature merges, or on a schedule.
Detect documentation drift and fix it via PR — no rewrites, no churn.
| Document | Path | What matters |
|----------|------|-------------|
| README | README.md | Features table, roadmap, quickstart, "what is" accuracy, "works with" table |
| SPEC | doc/SPEC.md | No false "not supported" claims, major model/schema accuracy |
| PRODUCT | doc/PRODUCT.md | Core concepts, feature list, principles accuracy |
Out of scope: DEVELOPING.md, DATABASE.md, CLI.md, doc/plans/, skill files, release notes. These are dev-facing or ephemeral — lower risk of user-facing confusion.
Find the last review cursor:
# Read the last-reviewed commit SHA
CURSOR_FILE=".doc-review-cursor"
if [ -f "$CURSOR_FILE" ]; then
LAST_SHA=$(cat "$CURSOR_FILE" | head -1)
else
# First run: look back 60 days
LAST_SHA=$(git log --format="%H" --after="60 days ago" --reverse | head -1)
fi
Then gather commits since the cursor:
git log "$LAST_SHA"..HEAD --oneline --no-merges
Scan commit messages and changed files. Categorize into:
feat, add, implement, support)remove, breaking, drop, rename)Ignore: refactors, test-only changes, CI config, dependency bumps, doc-only changes, style/formatting commits. These don't affect doc accuracy.
For borderline cases, check the actual diff — a commit titled "refactor: X" that adds a new public API is a feature.
Produce a concise list like:
Since last review (<sha>, <date>):
- FEATURE: Plugin system merged (runtime, SDK, CLI, slots, event bridge)
- FEATURE: Project archiving added
- BREAKING: Removed legacy webhook adapter
- STRUCTURAL: New .agents/skills/ directory convention
If there are no notable changes, skip to Step 7 (update cursor and exit).
For each target document, read it fully and cross-reference against the change summary. Check for:
Use references/audit-checklist.md as the structured checklist.
Use references/section-map.md to know where to look for each feature area.
# Create a branch for the doc updates
BRANCH="docs/maintenance-$(date +%Y%m%d)"
git checkout -b "$BRANCH"
Apply only the edits needed to fix drift. Rules:
Commit the changes and open a PR:
git add README.md doc/SPEC.md doc/PRODUCT.md .doc-review-cursor
git commit -m "docs: update documentation for accuracy
- [list each fix briefly]
Co-Authored-By: Paperclip <noreply@paperclip.ing>"
git push -u origin "$BRANCH"
gh pr create \
--title "docs: periodic documentation accuracy update" \
--body "$(cat <<'EOF'
## Summary
Automated doc maintenance pass. Fixes documentation drift detected since
last review.
### Changes
- [list each fix]
### Change summary (since last review)
- [list notable code changes that triggered doc updates]
## Review notes
- Only factual accuracy fixes — no style/cosmetic changes
- Preserves existing voice and structure
- Larger doc additions (new sections, tutorials) noted as follow-ups
🤖 Generated by doc-maintenance skill
EOF
)"
After a successful audit (whether or not edits were needed), update the cursor:
git rev-parse HEAD > .doc-review-cursor
If edits were made, this is already committed in the PR branch. If no edits were needed, commit the cursor update to the current branch.
| Signal | Category | Doc update needed? |
|--------|----------|-------------------|
| feat:, add, implement, support in message | Feature | Yes if user-facing |
| remove, drop, breaking, !: in message | Breaking | Yes |
| New top-level directory or config file | Structural | Maybe |
| fix:, bugfix | Fix | No (unless it changes behavior described in docs) |
| refactor:, chore:, ci:, test: | Maintenance | No |
| docs: | Doc change | No (already handled) |
| Dependency bumps only | Maintenance | No |
When the skill completes, report:
Copy a source-pinned command for your client. You run it yourself.
Destination: .claude/skills/doc-maintenance · pinned to the source commit
# Run from your project root
git clone https://github.com/paperclipai/paperclip.git .skillboard-tmp
git -C .skillboard-tmp checkout e168512f7bdbb6af6ea01954c6d7ed80b91e903e
mkdir -p ".claude/skills"
cp -r ".skillboard-tmp/.agents/skills/doc-maintenance" ".claude/skills/"
rm -rf .skillboard-tmpReview the source before running. This copies files into your project; it is not a one-click install and does not verify runtime safety.
sudo apt update && sudo apt install -y gitnpm install -g @anthropic-ai/claude-code# Run from your project root
git clone https://github.com/paperclipai/paperclip.git .skillboard-tmp
git -C .skillboard-tmp checkout e168512f7bdbb6af6ea01954c6d7ed80b91e903e
mkdir -p ".claude/skills"
cp -r ".skillboard-tmp/.agents/skills/doc-maintenance" ".claude/skills/"
rm -rf .skillboard-tmpDestination: .claude/skills/doc-maintenance
Scanner static-checks@0.1.0 · commit e168512f7bdb. Static checks cannot prove runtime safety – review the source and the exact diff before installing. How checks work.
No static rules matched. This is not a safety guarantee.