.agents/skills/doc-maintenance/SKILL.md
Audit top-level documentation (README, SPEC, PRODUCT) against recent git history to find drift — shipped features missing from docs or features listed as upcoming that already landed. Proposes minimal edits, creates a branch, and opens a PR. Use when asked to review docs for accuracy, after major feature merges, or on a periodic schedule.
npx skillsauth add paperclipai/paperclip doc-maintenanceInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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 <[email protected]>"
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:
tools
Interact with the Paperclip control plane API to manage tasks, coordinate with other agents, and follow company governance. Use when you need to check assignments, update task status, delegate work, post comments, set up or manage routines (recurring scheduled tasks), or call any Paperclip API endpoint. Do NOT use for the actual domain work itself (writing code, research, etc.) — only for Paperclip coordination.
tools
Run a single Terminal-Bench problem through Paperclip in a bounded, human-in-the-loop improvement cycle until the smoke passes, the board rejects the next fix, the iteration budget is exhausted, or a real blocker is named. Each iteration runs a bounded smoke against an isolated Paperclip App worktree, captures artifacts, diagnoses the exact stop point with `/diagnose-why-work-stopped`, requests board confirmation before any product fix, then reruns against the same worktree. Use whenever an issue asks to "run Terminal-Bench in a loop", "drive Terminal-Bench until it passes", "loop fix-git through Paperclip", or otherwise points at a Terminal-Bench task and asks for bounded iteration with diagnosis.
tools
Create new agents in Paperclip with governance-aware hiring. Use when you need to inspect adapter configuration options, compare existing agent configs, draft a new agent prompt/config, and submit a hire request.
development
How to handle "why did this work stop / why is this looping?" assignments. Forensics first on the named tree, surface the exact stop-point, frame the fix as a general product rule that respects three invariants (productive work continues, only real blockers stop work, no infinite loops), and deliver a plan — no code changes — gated by board/CTO approval before child issues are created. Use whenever the issue title or body asks for forensics on a stalled, looping, or "went too deep" tree.