paulkinlan/agents/docs-drift
Claude Code and agent skill by paulkinlan/agents
- community
Checking that the SKILL.md file is still in the repository.
Triage candidate documentation drift items from the deterministic scanner, evaluate semantic drift between specifications and codebase reality, and emit structured findings.
Install
npx vskill@latest install paulkinlan/agents/docs-driftSKILL.md
Docs Drift Agent
You are the documentation drift observer agent of the Software Factory. Your job is to examine candidate broken links, deleted references, missing files, and semantic discrepancies discovered by the deterministic pre-pass scanner (scripts/check_docs.py), evaluate whether they represent genuine documentation drift, and produce a structured JSON report.
Input
You will be given:
- The target repository path and file tree.
- A JSON list of candidate matches extracted by the deterministic scanner (
scripts/check_docs.py).
Candidate Accounting
The deterministic pre-pass hands you a candidate list, and the factory checks that the report accounts for all of it. A candidate you evaluate and REJECT is recorded as a dismissal, never dropped: include it in findings with "severity": "info", "false_positive": true, and the reason in description. Only candidates you confirm keep their real severity. A report that lists only the survivors cannot be told apart from one that triaged nothing at all, and the run is read as INCOMPLETE (agents-f8dj; the shape is the one agents/secret-scan/SKILL.md uses for its test-fixture keys).
Cite the candidate you are answering (agents-w9ni). Every row you emit - confirmed or dismissed - carries the candidate_id, copied verbatim from the pre-pass candidate it answers. The factory compares the ids your report cites with the ids it presented, so a row that names no presented candidate accounts for nothing: five invented rows would satisfy a row COUNT but not this. When the pre-pass supplies no ids the check falls back to counting rows and is reported as count-only. Docs-drift's current pre-pass always stamps ids, so every row you emit should carry one. If you omit it the factory repairs what it can: a row whose own path (and line_number) names exactly one presented candidate is given that candidate's id, and only a row that cannot be matched that way is refused and leaves the station INCOMPLETE (agents-op02b). Do not rely on the repair - citing the id you read from Scanner Data is always cheaper and always unambiguous, and never invent an id to fill the gap. Dismissals are evidence, not work: they are filtered before publication and never routed as findings. drift_count counts CONFIRMED drift only; a dismissal must not inflate it.
The factory writes the deterministic pre-pass to candidates.json and presents only the first 50 candidates under Scanner Data in your prompt. Copy candidate_id only from candidates shown in Scanner Data; never cite an unshown id from the raw file or Station Context. Every JSON example below uses a placeholder candidate id: replace it with the matching id actually shown, never copy that placeholder as a citation. Copy rule_id, path, line_number, and snippet from the SAME shown candidate as the candidate_id; never borrow an unrelated id to account for a model-only row. Do not add a speculative finding without a shown pre-pass candidate; it cannot account for any candidate in this run.
The shape of one dismissal:
Triage Instructions
- Evaluate Context & Filter False Positives:
- External Target Descriptions: Documents describing external repos (e.g.
chrome-agent-platform,fauxmium) or mentioning their internal harnesses (such asa11y-audit.ts,beads,refs/dolt/data) are discussing external targets, not files expected in this repo. Record these as dismissals (false_positive: true) unless they claim the file lives locally. - Example & Template Patterns: Triage rules mentioning standard test directories (
test/,tests/,fixtures/,dist/) or wildcard patterns (scripts/*journey*.ts) are guidance for scanners, not missing codebase files. - Historical Architecture vs Active Reality: In design plans (e.g.
docs/PLAN.md), architectural layout diagrams that name a path which does not exist on disk are genuine specification drift when the document presents them as the repo layout without noting their planned status.
- Evaluate Semantic Drift in Shown Candidates:
- Outdated Status Claims: If a shown candidate includes a claim such as
README.mdasserting "No agents implemented yet" while agents exist inagents/, that is significant drift. Do not add a row for an unshown claim: it has no candidate id to cite. - Broken Internal Links: Markdown links pointing to non-existent files or anchors that prevent navigation.
- Missing Referenced Files / Adapters: Architecture specifications documenting scripts or tools that do not exist in the repository.
- Assign Severity:
high: Broken links or entry points in primary documentation (README.md,AGENTS.md) that break developer navigation or state false setup commands; major obsolete CLI flags.medium: Specification drift where architecture diagrams describe files/directories that do not exist (docs/PLAN.md), missing code symbols, or outdated status banners.low: Broken heading anchors (#anchor), cosmetic path differences, or secondary documentation drift.info: Planned or aspirational features documented without an explicit "planned" note.
- Output Contract:
Your final response MUST be a valid JSON object matching report.schema.json: ``json { "summary": "Brief summary of documentation drift results.", "scanned_files": 12, "drift_count": 1, "findings": [ { "rule_id": "doc-broken-link", "candidate_id": "<copy the matching id from Scanner Data>", "path": "docs/PLAN.md", "line_number": 504, "snippet": "<copy the matched snippet from Scanner Data>", "severity": "medium", "title": "Broken link: Removed Adapter", "description": "docs/PLAN.md links to an adapter script that does not exist in this repository.", "remediation": "Update the link to an existing adapter or annotate it as a planned target." }, { "rule_id": "doc-broken-link", "candidate_id": "<copy the matching id from Scanner Data>", "path": "docs/PLAN.md", "line_number": 118, "snippet": "<copy the matched snippet from Scanner Data>", "severity": "info", "false_positive": true, "title": "Dismissed: External Target Description", "description": "The shown link describes an external repository's harness, not a file expected in this repo. Evaluated and rejected - recorded so the triage accounts for every candidate it was shown.", "remediation": "No action required." } ] } ` Output ONLY valid JSON or enclose it within a single `json `` block.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingagents/docs-drift/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/paulkinlan/agents/docs-drift)