From up-docs
Comprehensive documentation drift analysis across infrastructure and wiki. Gathers live server state via SSH, syncs Outline wiki, resolves internal contradictions, verifies and enriches links, then updates Notion. This skill should be used when the user runs /up-docs:drift.
How this skill is triggered — by the user, by Claude, or both
Slash command
/up-docs:driftThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Comprehensive drift analysis and correction across live infrastructure, Outline wiki, and Notion. Designed for Opus with 1M context: read aggressively, hold many pages simultaneously, and minimize re-reads.
Comprehensive drift analysis and correction across live infrastructure, Outline wiki, and Notion. Designed for Opus with 1M context: read aggressively, hold many pages simultaneously, and minimize re-reads.
If a collection name is provided, scope the analysis to that Outline collection. Otherwise, analyze all collections.
Four sequential phases, each running in a convergence loop:
Each phase converges independently before the next begins. Read ${CLAUDE_PLUGIN_ROOT}/skills/drift/references/convergence-tracking.md for the iteration mechanics.
Browse all Outline collections (or the scoped collection):
list_collections()
get_collection_structure(id: "<collection_id>")
Build a page inventory: page title, page ID, collection, and any hostname or service name extractable from the title or structure.
Read the project CLAUDE.md for any explicit hostname/service mappings. Also check Notion's infrastructure hierarchy for the authoritative inventory of what exists:
notion-search(query: "infrastructure")
For each documented service/server page in the inventory:
Read the wiki page in full. Extract:
SSH into the relevant server and gather actual state. Read ${CLAUDE_PLUGIN_ROOT}/skills/drift/references/server-inspection.md for inspection patterns by service type. The general pattern:
ssh <hostname> "<inspection-command>"
Match inspection commands to what the page documents. If the page describes nginx configuration, inspect nginx. If it describes Docker containers, inspect Docker.
Compare documented state against actual state. Categorize each discrepancy:
Update the wiki page with corrections. Preserve existing structure and tone. For missing documentation, add new sections following the page's existing conventions. For stale content, remove or mark as deprecated.
Track per iteration: pages_checked, discrepancies_found, pages_updated.
Convergence: A pass with zero discrepancies across all pages. If a pass finds discrepancies, apply fixes and re-check only the affected pages on the next pass.
Use the full 1M context window. Read 10-20 related wiki pages before beginning SSH inspection, grouping by host. This allows cross-referencing during inspection and reduces re-reads.
Read all wiki pages touched or related to Phase 1 (and any additional pages in scope). For each page, extract factual claims:
Build an in-context map of these claims, keyed by the fact being claimed.
Scan the map for contradictions:
For each contradiction:
Try to resolve from page metadata: the more recently updated page, the page with more specificity, or the page that is the canonical reference for that service wins.
If unresolvable from pages alone, SSH to the relevant server to check actual state. This is the exception in Phase 2, not the rule — most contradictions can be resolved by identifying which page is authoritative.
Update the incorrect page(s). When both pages contain partially correct information, update both to be consistent.
Track per iteration: contradictions_found, resolved_from_pages, resolved_via_ssh, pages_updated.
Convergence: A full pass with zero contradictions.
For each wiki page in scope:
Extract all links:
Verify external URLs using WebFetch. Classify each as:
Verify inter-wiki links using get_document_id_from_title or read_document. Check each linked page exists and the link target is correct.
Fix broken links:
After fixing broken links, scan for enrichment opportunities:
Missing cross-references: when page A discusses a concept, service, or tool that page B is the canonical reference for, and there's no link from A → B, add one.
Related services: when two services have a dependency relationship documented in their respective pages but neither links to the other, add bidirectional links.
Orphan pages: pages with zero incoming links that are still relevant. Find natural insertion points in related pages to link to them.
Use get_document_backlinks(id: "<page_id>") to understand existing link topology.
Do not over-link. Add a cross-reference only when it provides genuine navigational value. A page about nginx does not need to link to every page that mentions HTTP.
Track per iteration: links_checked, broken_fixed, new_links_added.
Convergence: Zero broken links found and zero high-value enrichment opportunities remaining.
Read ${CLAUDE_PLUGIN_ROOT}/skills/notion/references/notion-guidelines.md before making any Notion changes.
Review all changes made in Phases 1-3. For each change, determine whether it has strategic or organizational significance:
For each Notion-relevant change:
Read ${CLAUDE_PLUGIN_ROOT}/templates/summary-report.md for the base format. Extend it for drift analysis:
## Drift Analysis Report
### Phase 1: Infrastructure → Wiki Sync
**Iterations:** N | **Converged:** yes/no
| # | Wiki Page | Host | Discrepancies Found | Action |
|---|-----------|------|---------------------|--------|
| 1 | Page title | hostname | 3 config values drifted | Updated |
**Totals:** N pages checked | N discrepancies found | N pages updated
### Phase 2: Wiki Internal Consistency
**Iterations:** N | **Converged:** yes/no
| # | Contradiction | Pages Involved | Resolution |
|---|--------------|----------------|------------|
| 1 | Port conflict for service X | Page A, Page B | Updated Page B (confirmed via SSH) |
**Totals:** N contradictions found | N resolved
### Phase 3: Link Integrity & Enrichment
**Iterations:** N | **Converged:** yes/no
| # | Page | Link Issue | Action |
|---|------|-----------|--------|
| 1 | Page title | Dead URL: example.com/old | Removed |
| 2 | Page title | Missing cross-ref to Page B | Added |
**Totals:** N links checked | N broken fixed | N new links added
### Phase 4: Notion Sync
| # | Notion Page | Action | Summary |
|---|-------------|--------|---------|
| 1 | Page title | Updated | New service added to dependencies |
**Totals:** N pages updated | N created | N unchanged
npx claudepluginhub l3digitalnet/claude-code-plugins --plugin up-docsAudits markdown wiki for broken links, orphan pages, contradictions, stale claims, missing frontmatter, coverage gaps; generates categorized report with fixes after ingests.
Health checks an Obsidian wiki vault for orphan pages, dead wikilinks, frontmatter gaps, stale claims, missing cross-references, and empty sections. Optionally generates Dataview dashboards and canvas maps. Runs on phrases like "lint", "health check", "clean up wiki", "wiki audit".
Build, maintain, and query a personal LLM-managed markdown wiki where the LLM owns all writing, cross-referencing, and bookkeeping while the user curates sources. Includes idempotent scripts for ingest, query, and lint.