← ClaudeAtlas

dovetaillisted

Check whether a repository agrees with itself, then work through the findings one at a time. Finds broken links, dangling heading anchors, orphaned files, duplicate content, translations that have fallen behind, drift between docs and code, contradictions between documents, and conventions the repo states but does not follow. Trigger on phrases like "dovetail", "check this repo", "does this repo agree with itself", "find contradictions", "repo coherence", "docs drift", "audit this repository".
dbhq-uk/dovetail-skill · ★ 3 · AI & Automation · score 69
Install: claude install-skill dbhq-uk/dovetail-skill
# dovetail Checks whether a repository agrees with itself, and walks through what it finds. Two layers produce findings. **Exact** findings are computed in Python - links, anchors, orphans, duplicates, flag and signature drift, conventions, git-history signals. They are certain. **Judged** findings come from reviewers - contradictions, semantic staleness, spec drift, non-Python dead code. They are probabilistic. The user must always know which they are looking at. Never blur the two. ## Run ### 1. Scan (always) ```bash python3 ${CLAUDE_SKILL_DIR}/scripts/scan.py <repo-path> --format json ``` Seconds, no network, no model. Never modifies the target. Read the JSON: `findings`, `suppressed`, `counts`, `failed_checks`, `profile`, `file_count`, `edge_count`. If it exits `2`, report the error and stop - the repository is not a git checkout, or `.dovetail/config.toml` is invalid. Do not proceed on defaults; a config the user wrote is one they expect to take effect. ### 2. Dispatch the judgement reviewers (unless the user said "quick" or "exact only") Start these **before** triaging, so they land while the user works through the certain findings. Layer 1 finishes before the first reviewer returns, and a run abandoned after two minutes has still delivered every broken link and duplicate in the repository. Get the clusters the contradiction reviewer needs: ```bash python3 -c "import sys; sys.path.insert(0, '${CLAUDE_SKILL_DIR}/scripts'); \ from discover import discover; fr