.claude/skills/startup-diagnostic/SKILL.md
Use when starting a session and suspecting configuration issues, after hook failures, MCP connection errors, or degraded vault performance. Also useful as a periodic health audit.
npx skillsauth add DavidROliverBA/ArchitectKB startup-diagnosticInstall 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.
Examine all Claude Code startup components — configuration, hooks, MCP servers, indexes, plugins, and filesystem — report PASS/FAIL/WARN for each, and offer fixes for any failures.
Batch 1 (may-fail-gracefully — use Bash with 2>/dev/null, NOT Read tool):
Steps 1–2 read files that may not exist. A failed Read cascades and kills all sibling parallel calls. Check 5 (graph index) can also ENOENT — include it here.
Batch 2 (reliable — run in parallel): Steps 3–4 and 6–11 query indexes, npm, git, and filesystem. Safe to run together.
Shell gotcha: Never use !! (double-bang) in node -e strings — zsh expands it as history substitution. Use 'key' in obj instead of !!obj.key.
Check these files exist and parse as valid JSON/markdown:
| File | Check |
|------|-------|
| CLAUDE.md | Exists at repo root |
| .claude/settings.json | Valid JSON, has permissions, plansDirectory |
| .claude/settings.local.json | Valid JSON, has hooks and permissions |
| ~/.claude/settings.json | Valid JSON (global settings) |
| .mcp.json | Valid JSON, all mcpServers entries have command |
| .claude/AGENDA.md | Exists (WARN if missing) |
| .claude/vault-conventions.md | Exists |
node -e "JSON.parse(require('fs').readFileSync('.claude/settings.json','utf8')); console.log('OK')"
Flag any permission duplicates or contradictions between .claude/settings.json and .claude/settings.local.json.
Test every configured hook can execute without crashing. Pass minimal JSON on stdin, check exit code.
UserPromptSubmit:
echo '{"query":"test"}' | python3 .claude/hooks/secret-detection.py; echo "exit:$?"
echo '{"query":"test"}' | bash .claude/hooks/skill-context-loader.sh; echo "exit:$?"
PreToolUse:
echo '{"tool_name":"Edit","tool_input":{"file_path":"/tmp/test.md","old_string":"a","new_string":"b"}}' | python3 .claude/hooks/file-protection.py; echo "exit:$?"
echo '{"tool_name":"Edit","tool_input":{"file_path":"/tmp/test.md"}}' | python3 .claude/hooks/secret-file-scanner.py; echo "exit:$?"
echo '{"tool_name":"Grep","tool_input":{"pattern":"test"}}' | bash .claude/hooks/graph-search-hint.sh; echo "exit:$?"
echo '{"tool_name":"Bash","tool_input":{"command":"ls"}}' | python3 .claude/hooks/skill-rename-guard.py; echo "exit:$?"
echo '{"tool_name":"Bash","tool_input":{"command":"ls"}}' | python3 .claude/hooks/bash-safety.py; echo "exit:$?"
PostToolUse:
echo '{"tool_name":"Edit","tool_input":{"file_path":"/tmp/test.md"},"tool_result":"ok"}' | python3 .claude/hooks/frontmatter-validator.py; echo "exit:$?"
echo '{"tool_name":"Edit","tool_input":{"file_path":"/tmp/test.md"},"tool_result":"ok"}' | python3 .claude/hooks/tag-taxonomy-enforcer.py; echo "exit:$?"
echo '{"tool_name":"Edit","tool_input":{"file_path":"/tmp/test.md"},"tool_result":"ok"}' | python3 .claude/hooks/wiki-link-checker.py; echo "exit:$?"
echo '{"tool_name":"Edit","tool_input":{"file_path":"/tmp/test.md"},"tool_result":"ok"}' | python3 .claude/hooks/filename-convention-checker.py; echo "exit:$?"
echo '{"tool_name":"Edit","tool_input":{"file_path":"/tmp/test.md"},"tool_result":"ok"}' | python3 .claude/hooks/code-formatter.py; echo "exit:$?"
echo '{"tool_name":"Edit","tool_input":{"file_path":"/tmp/test.md"},"tool_result":"ok"}' | bash .claude/hooks/auto-commit.sh; echo "exit:$?"
Notification (Stop):
python3 .claude/hooks/session-summary.py; echo "exit:$?"
| Result | Status | |--------|--------| | Exit 0 | PASS | | Non-zero exit | FAIL (report stderr) | | ImportError / ModuleNotFoundError | FAIL (missing dependency) | | Timeout (>5s standard, >15s wiki-link-checker) | WARN |
Test each server from .mcp.json can start and respond:
| Server | Test |
|--------|------|
| context7 | ToolSearch for context7 tools, trivial query |
| memory | ToolSearch for memory tools, call read_graph |
| hostinger-mcp | ToolSearch for hostinger tools (auth failure OK — server started) |
Also check plugin MCP servers (MCP_DOCKER for Notion/Diagrams/YouTube) via ToolSearch.
Flag: missing npx package, auth issue, or network problem.
sqlite3 .data/vault.db "SELECT COUNT(*) as total FROM notes"
sqlite3 .data/vault.db "SELECT type, COUNT(*) FROM notes GROUP BY type ORDER BY COUNT(*) DESC LIMIT 5"
sqlite3 .data/vault.db "PRAGMA integrity_check"
Check freshness — files newer than the index:
find . -name "*.md" -not -path "./.git/*" -not -path "./node_modules/*" -newer .data/vault.db 2>/dev/null | wc -l
| Result | Status |
|--------|--------|
| Database missing | WARN — npm run vault:index (secondary index) |
| Integrity check fails | WARN — rebuild with npm run vault:index |
| >20 files newer than index | WARN — suggest reindex |
Note: SQLite is a secondary index. The primary search index is the Graph index (Check 5).
Run in Batch 1 (file may not exist — ENOENT crashes Node and cascades to siblings).
ls -la .graph/index.json .graph/search.json 2>/dev/null
node .claude/scripts/graph-query.js --stats 2>/dev/null | head -5
Check freshness — files newer than the graph index:
find . -name "*.md" -not -path "./.claude/*" -not -path "./.obsidian/*" -not -path "./node_modules/*" -not -path "./Templates/*" -newer .graph/index.json 2>/dev/null | head -1
Fallback if graph-query.js --stats is unavailable:
node -e "try{const g=JSON.parse(require('fs').readFileSync('.graph/graph.json','utf8'));console.log('Nodes:',Object.keys(g.nodes||{}).length,'Edges:',(g.edges||[]).length)}catch(e){console.log('MISSING:',e.code||e.message)}" 2>/dev/null
| Result | Status |
|--------|--------|
| Graph files missing | FAIL — npm run graph:build |
| Graph empty (0 nodes) | FAIL — rebuild with npm run graph:build |
| >0 files newer than index | WARN — suggest npm run graph:build |
| Stats available and current | PASS |
for dir in Meetings Projects Tasks ADRs Emails Trips Daily Incubator Forms People Attachments Archive Templates Objectives .claude/skills .claude/context .claude/rules .claude/agents .claude/scripts .data; do
[ -d "$dir" ] && echo "PASS $dir" || echo "FAIL $dir MISSING"
done
git status --porcelain | head -20
git stash list
git log --oneline -3
| Symptom | Status | |---------|--------| | Uncommitted .env / credentials | FAIL | | >20 untracked files | WARN | | >5 stale stashes | WARN | | Detached HEAD | WARN |
Sandbox config lives in .claude/settings.local.json (project-level), not ~/.claude/settings.json (global).
Verify .claude/settings.local.json has:
sandbox.enabled: truesandbox.permissions.additionalWritePaths includes /Users/david.oliver/.cache/pre-commitnode -e "const d=JSON.parse(require('fs').readFileSync('.claude/settings.local.json','utf8')); const s=d.sandbox||{}; console.log('enabled:', s.enabled); const paths=(s.permissions||{}).additionalWritePaths||[]; console.log('pre-commit:', paths.some(p=>p.includes('pre-commit'))?'PRESENT':'MISSING')"
Missing pre-commit path causes git hook failures.
Expected plugins (from ~/.claude/settings.json):
| Plugin | Expected | |--------|----------| | superpowers | enabled | | code-review | enabled | | atlassian | enabled | | compound-engineering | enabled | | claude-md-management | enabled | | ralph-loop | enabled | | hookify | enabled | | claude-code-setup | enabled (global) | | context7 (plugin) | disabled (MCP server used instead) |
Count skills in system-reminder. Significantly fewer than ~150 suggests a plugin failed to load.
# Lowercase skill.md files (should be SKILL.md)
find .claude/skills -name "skill.md" -not -name "SKILL.md" 2>/dev/null
# Total skill count
find .claude/skills -name "SKILL.md" | wc -l
Any lowercase results = FAIL (rename to SKILL.md).
cat "Daily/$(date +%Y)/Daily - $(date +%Y-%m-%d).md" 2>/dev/null && echo "EXISTS" || echo "MISSING"
cat .claude/AGENDA.md 2>/dev/null && echo "EXISTS" || echo "MISSING"
node .claude/scripts/graph-query.js --type=Task --where="status=active" --count 2>/dev/null || echo "QUERY FAILED"
## Startup Diagnostic — YYYY-MM-DD HH:MM
| # | Section | Status | Details |
|---|---------|--------|---------|
| 1 | Configuration Files | ✅ | All 7 files valid |
| 2 | Hook Execution | ⚠️ | wiki-link-checker slow (8s) |
| 3 | MCP Servers | ✅ | 3/3 connected |
| 4 | SQLite Index (Secondary) | ⚠️ | 12 files newer than index |
| 5 | Graph Index (PRIMARY) | ✅ | 847 nodes, 2341 edges |
| 6 | Filesystem | ✅ | All 16 directories present |
| 7 | Git Health | ✅ | Clean, on main |
| 8 | Sandbox | ✅ | pre-commit path included |
| 9 | Plugins | ✅ | 8/8 loaded |
| 10 | Skill Files | ✅ | 91 skills, all uppercase |
| 11 | Vault-Review | ⚠️ | No daily note |
**Overall: HEALTHY / NEEDS ATTENTION / DEGRADED**
### Fixes Required
1. [Actionable fix for each FAIL]
### Recommendations
1. [Suggestion for each WARN]
tools
--- context: fork --- # /youtube Save a YouTube video as both a Weblink (quick reference) and a detailed Page (full analysis). ## Usage ``` /youtube <url> /youtube <url> <optional title override> ``` ## Examples ``` /youtube https://www.youtube.com/watch?v=0TpON5T-Sw4 /youtube https://youtu.be/abc123 AWS re:Invent Keynote ``` ## Prerequisites This skill uses the MCP Docker YouTube tools: - `mcp__MCP_DOCKER__get_video_info` - Video metadata - `mcp__MCP_DOCKER__get_transcript` - Full trans
data-ai
Create and manage git worktrees for parallel agent sessions
testing
--- context: fork --- # /wipe Generate a context handoff summary, clear the session, and resume in a fresh conversation. Detects environment and provides automated (tmux) or manual workflow. ## Usage ``` /wipe /wipe quick # Minimal handoff, just essentials /wipe detailed # Comprehensive handoff with full context ``` ## Instructions When the user invokes `/wipe`: ### Phase 1: Detect Environment First, check the terminal environment: ```bash echo "Environment Detection:"
data-ai
--- context: fork --- # /weekly-summary Generate comprehensive weekly summary from daily notes, meetings, tasks, and project updates using parallel sub-agents. ## Usage ``` /weekly-summary /weekly-summary --last-week /weekly-summary --from 2026-01-01 --to 2026-01-07 /weekly-summary --output page # Create Page note instead of just outputting ``` ## Instructions This skill uses **5 parallel sub-agents** to gather data concurrently from different vault areas, then synthesizes a comprehensi