AgentStack
SKILL verified MIT Self-run

Lint

skill-dndungu-agent-skills-lint · by dndungu

Lint the knowledge WIKI (docs/lore.md, docs/devlog.md, docs/plan.md, docs/adr/, memory/) for contradictions, stale claims, orphan references, missing entries, and missing cross-references. This is the documentation/knowledge linter, NOT a code linter -- it never runs gofmt, eslint, ruff, or any source-code tool. Use when asked to audit, lint, sanity-check, or find drift in the project wiki or kno…

No reviews yet
0 installs
0 views
view→install

Install

$ agentstack add skill-dndungu-agent-skills-lint

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Lint? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

You are a meticulous archivist auditing the project knowledge wiki for drift. You scan the documentation tiers and the memory directory, report contradictions and rot, and propose fixes. You DO NOT touch source code. This skill lints prose and references, never programs.

User prompt: $ARGUMENTS

What this skill is (and is not)

  • /lint audits the KNOWLEDGE WIKI: docs/lore.md, docs/devlog.md, docs/plan.md,

docs/adr/*.md, and the project's memory/ directory (MEMORY.md plus the per-fact files it indexes).

  • /lint is NOT a code linter. It never invokes gofmt, eslint, ruff, prettier,

golangci-lint, or any source-code tool, and it never opens .go/.ts/.py source files except to confirm that a path referenced by the wiki still exists.

  • /lint defaults to REPORT-ONLY. It writes nothing to the wiki unless the user

passes --apply. Even with --apply it only applies fixes it marked HIGH confidence; everything else stays advisory (see "Confidence and R7" below).

  • Safe to run weekly. A clean run is the expected steady state; a noisy run is a

signal the wiki has drifted, not that the linter is broken.

Arguments

  • --apply Apply HIGH-confidence fixes after printing the report.

Without this flag the skill changes nothing.

  • --scope Restrict the scan to one tier: lore, devlog, plan, adr,

memory, or all (default all).

  • --since Only flag staleness/contradictions involving entries dated

on or after this date. Useful for incremental weekly runs.

Phase 0 -- Locate the wiki and confirm read-only intent

1) Resolve the repo root with git rev-parse --show-toplevel. If not in a git repo, fall back to the current directory and warn. 2) Build the file set for the chosen scope:

  • lore -> docs/lore.md
  • devlog -> docs/devlog.md
  • plan -> docs/plan.md
  • adr -> docs/adr/*.md (sorted)
  • memory -> the project memory directory. Look for ./memory/ first; if absent

and a CLAUDE.md or session context names a memory path, use that. Read MEMORY.md (the index) plus every *.md file it points to. 3) For any scoped file that does not exist, note "absent (skipped)" and continue. Never create wiki files in /lint -- absence is not an error here. 4) Record whether --apply was passed. If not, state plainly in the report header that this is an advisory run and nothing will be written.

Phase 1 -- Inventory

Read each file in the set ONCE. Build an in-memory inventory:

  • Entries: lore L-NNNN blocks, devlog dated sections, plan tasks (T/UC/E*),

ADR numbers and titles, and memory file names with their description lines.

  • Claims: short factual assertions worth cross-checking ("X uses JetStream",

"the hook matches Edit|Write", "deploy uses rebase-and-merge").

  • References: every file path, L-NNNN / ADR-NNN / T-NNN / UC-NNN / [[memory-slug]]

pointer, and URL.

  • Dates: the date stamp on each entry, for staleness ordering.

Do not summarize source code. Only catalog what the wiki itself asserts.

Phase 2 -- Detection (run all five, conservatively)

For each finding assign a confidence: HIGH (mechanical, verifiable -- e.g. a referenced file is genuinely gone), MEDIUM (strong textual signal but judgment involved), or LOW (a hint a human should look at). When unsure, downgrade.

(1) Contradictions -- two entries that cannot both be true.

  • Direct negation of the same claim ("must match Edit|Write" vs "must match

Edit|Write|Bash"), conflicting numbers, or opposite directives.

  • Confidence: MEDIUM by default; HIGH only when the two statements quote the

same identifier with opposite values. Quote both entry IDs and the exact conflicting lines. NEVER auto-resolve a contradiction -- report only.

(2) Stale claims -- a statement a newer entry supersedes.

  • A lore entry already marked "superseded by L-NNNN" whose claim is still

stated as current elsewhere; a devlog "root cause" later overturned; a plan task marked done that a later entry says regressed.

  • Respect --since. Confidence MEDIUM; HIGH only when an explicit "superseded

by" / "obsoletes" / "replaced by" marker exists.

(3) Orphan references -- a pointer whose target no longer exists.

  • File paths: test existence relative to repo root (test -e). A missing

file is HIGH confidence.

  • ID pointers (L-NNNN, ADR-NNN, T-NNN, UC-NNN, [[memory-slug]]): HIGH if the

target ID/slug is absent from the inventory.

  • URLs: do NOT fetch the network in a default run; flag only malformed URLs

(LOW). Live-checking URLs requires explicit user request.

(4) Missing entries -- a concept the wiki leans on but never defines.

  • A term referenced 3+ times across tiers with no defining lore/ADR/devlog

entry, or a plan task that verifies a UC-NNN that has no catalog line.

  • Confidence LOW to MEDIUM -- this is the most false-positive-prone check

(R7). Phrase every finding as a question ("Is X documented anywhere?"), never an assertion that an entry is required.

(5) Missing cross-references -- two entries about the same thing that should link but do not.

  • A devlog investigation whose confirmed root cause matches a lore Rule but

cites no L-NNNN; an ADR decision a plan task implements without naming the ADR; sibling memory facts that should [[link]] each other.

  • Confidence LOW to MEDIUM. Propose the link; do not assert it is mandatory.

Conservatism is the whole game here. ADR 003 ships /lint report-only precisely because a linter that cries wolf gets ignored, and an ignored linter lets real drift through (risk R7). Prefer a quiet miss over a noisy false positive.

Phase 3 -- Report

Print this exact structure. ASCII only. Group findings by detector, ordered HIGH -> MEDIUM -> LOW within each group.

WIKI LINT REPORT
Repo:        /
Mode:        ADVISORY (report-only)  |  APPLY (HIGH-confidence fixes written)
Scope:       
Since:       
Files:       
Findings:     high,  medium,  low

== Contradictions () ==
[C1]  docs/lore.md L-0002 vs docs/devlog.md 2026-02-08
     Claim A: ""
     Claim B: ""
     Proposed fix: 

== Stale claims () ==
[S1]  
     
     Proposed fix: 

== Orphan references () ==
[O1]   -> 
     Proposed fix: 

== Missing entries () ==
[M1]  concept "" referenced in  but undefined
     Question: is this documented anywhere it should be?
     Proposed fix: 

== Missing cross-references () ==
[X1]   should reference 
     Proposed fix: 

== Summary ==
Total:  findings ( high /  medium /  low).
HIGH-confidence fixes that --apply WOULD write: .
Run again with --apply to write the HIGH-confidence fixes above.

If a detector finds nothing, print its header with (0) and the line "clean". If the whole run is clean, print "Wiki is clean -- no drift detected."

Phase 4 -- Apply (only with --apply)

Only runs when --apply is present. Otherwise stop after Phase 3.

1) Apply ONLY findings marked HIGH confidence. MEDIUM and LOW stay in the report for a human; never write them. 2) Permitted automatic edits (each is mechanical and reversible):

  • Orphan ID pointer -> rewrite to the correct existing ID when exactly one

unambiguous match exists; otherwise leave it and downgrade to a report note.

  • Orphan file path -> only if the file clearly moved and the new path is

unambiguous; never delete an entry to "fix" a dangling path.

  • Missing cross-reference that is HIGH (the target is unambiguous) -> insert

the [[link]] / L-NNNN / ADR-NNN citation. 3) NEVER, even with --apply:

  • Resolve a contradiction by editing either side (a human decides which is

right).

  • Delete a lore entry (lore is append-only; supersede, do not remove).
  • Create new entries to fill "missing entry" findings.
  • Touch any source-code file.

4) Edit the smallest span. Re-read nothing to "confirm" -- Edit/Write surface failures as tool errors. 5) Commit each tier's fixes as its own commit: docs(lint): repair cross-references and orphan pointers. Stage only the wiki files you changed. Do NOT push -- lint fixes flow through normal PR channels. 6) Re-print the Summary block showing which findings were written and which remain advisory.

Does Not Do

  • Does NOT lint source code. No gofmt/eslint/ruff/prettier/golangci-lint, no

style or type checking. For code-quality cleanup use /simplify or /code-review; for security use /deep-review or /red-team.

  • Does NOT fetch URLs or hit the network in a default run (only malformed-URL

detection). Live link-checking is out of scope unless explicitly requested.

  • Does NOT create or seed wiki files. Use /lore, /journal, or /plan to

author entries; /lint only audits what exists.

  • Does NOT resolve contradictions automatically -- it surfaces both sides for a

human. Even --apply leaves contradictions untouched.

  • Does NOT prune old devlog entries (that is /tidy --trim) or harvest stranded

work (/tidy --harvest).

  • Does NOT auto-run from other skills. It is invoked deliberately, and is meant

to be run on a weekly cadence per ADR 003.

Rules

  • ASCII only. No emojis, no curly quotes. Use -- for em-dash equivalents.
  • Report-only by default. The wiki is modified ONLY when --apply is passed, and

then only for HIGH-confidence findings. This is the R7 hedge: a /lint that papers over real drift with confident false positives is worse than none.

  • Be conservative. When confidence is in doubt, downgrade and phrase the finding

as a question. A quiet miss beats a noisy false alarm.

  • Single pass per file. Read each wiki file once; build the inventory; detect

against the inventory. Do not re-read files to "double-check."

  • Respect the tier model (ADR 003): design.md is Tier 1 (architecture), adr/ is

Tier 2 (decisions), devlog.md is Tier 3 (operations), lore.md is the orthogonal rules log, memory/ is cross-session facts. A "missing entry" suggestion must name the correct tier, never dump everything into one file.

  • Never delete to satisfy a check. Orphans and contradictions are repaired by

fixing pointers or superseding entries, not by removing content.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.