Run condition-based vault health diagnostics. An agent skill from agenticnotetaking/arscontexta.

MITAuto-check: notes

Install Health

skills CLI
$ npx skills add agenticnotetaking/arscontexta --skill health -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install agenticnotetaking/arscontexta health --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/agenticnotetaking/arscontexta.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/health .claude/skills/health && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
health
GitHub stars
3.5k
Token cost
~7.1k tokens
SKILL.md length
2,175 words
Files
2
Skills in repo
25
Repo updated
First seen
Licence
MIT

At a glance

Run condition-based vault health diagnostics. An agent skill from agenticnotetaking/arscontexta.

  • Works in 4 steps: ops/derivation-manifest.md — vocabulary… → ops/config.yaml — processing depth,… → Three-space reference —… → …
  • Check vault health
  • SKILL.md covers Runtime Configuration (Step 0…, EXECUTE NOW, The 8 Diagnostic Categories and Condition-Based Maintenance…, plus 5 more sections
  • Calls rg, jq and git

What it does

Health is an agent skill from agenticnotetaking/arscontexta. Run condition-based vault health diagnostics. 8 categories — schema compliance, orphan detection, link health, description quality, three-space boundaries, processing throughput, stale notes, MOC coherence. 3 modes — quick (schema+orphans+links), full (all 8), three-space (boundary violations only). Returns actionable FAIL/WARN/PASS report with specific fixes ranked by impact. Triggers on "/health", "check vault health", "maintenance report", "what needs fixing".

Its SKILL.md is about 7.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `skill.json`).

The repository describes itself as: Claude Code plugin that generates individualized knowledge systems from conversation. You describe how you think and work, have a conversation and get a complete second brain as… The licence is MIT.

When your agent uses it

  • Check vault health
  • Maintenance report
  • What needs fixing

Example prompts

  • “/health”
  • “check vault health”
  • “maintenance report”
  • “/health”

Requirements

  • Pre-approved tools (allowed-tools): Read, Grep, Glob, Bash, mcp__qmd__vector_search

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. ops/derivation-manifest.md — vocabulary mapping, folder names, platform hints
  2. ops/config.yaml — processing depth, thresholds
  3. Three-space reference — ${CLAUDE_PLUGIN_ROOT}/reference/three-spaces.md for boundary rules (load only for full and three-space modes)
  4. Templates — read template files to understand required schema fields for validation

What it can do on your machine

Read from SKILL.md and the folder at commit 2acfd5c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Grep
    • Glob
    • Bash
    • mcp__qmd__vector_search

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • rg
    • jq
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Health loads about 7.1k tokens when it runs. Until then it costs about 119 tokens; SKILL.md has 2,175 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~119
When it runs · the whole SKILL.md, loaded when a task matches
~7.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Read, Grep, Glob, Bash, mcp__qmd__vector_search

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from agenticnotetaking/arscontexta at commit 2acfd5c, republished under its MIT licence (© agenticnotetaking). 2,175 words, ~7,138 tokens.

Download SKILL.mdSave it as .claude/skills/health/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
health
description
Run condition-based vault health diagnostics. 8 categories — schema compliance, orphan detection, link health, description quality, three-space boundaries, processing throughput, stale notes, MOC coherence. 3 modes — quick (schema+orphans+links), full (all 8), three-space (boundary violations only). Returns actionable FAIL/WARN/PASS report with specific fixes ranked by impact. Triggers on "/health", "check vault health", "maintenance report", "what needs fixing".
allowed-tools
Read, Grep, Glob, Bash, mcp__qmd__vector_search
version
1.0
generated_from
arscontexta-v1.6
context
fork
model
opus
argument-hint
[optional: 'quick', 'full', or 'three-space']

Runtime Configuration (Step 0 — before any processing)

Read these files to configure domain-specific behavior:

  1. ops/derivation-manifest.md — vocabulary mapping, folder names, platform hints

    • Use vocabulary.notes for the notes folder name
    • Use vocabulary.inbox for the inbox folder name
    • Use vocabulary.note for the note type name in output
    • Use vocabulary.topic_map for MOC/topic map references
    • Use vocabulary.topic_maps for plural form
  2. ops/config.yaml — processing depth, thresholds

  3. Three-space reference — ${CLAUDE_PLUGIN_ROOT}/reference/three-spaces.md for boundary rules (load only for full and three-space modes)

  4. Templates — read template files to understand required schema fields for validation

If these files don't exist (pre-init invocation or standalone use), use universal defaults:

  • notes folder: notes/
  • inbox folder: inbox/
  • topic map: topic maps in notes/

EXECUTE NOW

Target: $ARGUMENTS

Parse the invocation mode immediately:

InputModeCategories Run
empty or quickQuick1 (Schema), 2 (Orphans), 3 (Links)
fullFullAll 8 categories
three-spaceThree-Space5 (Three-Space Boundaries) only

Execute these steps:

  1. Detect mode from arguments
  2. Scan the vault — inventory all note files, {vocabulary.topic_map} files, inbox items, ops files
  3. Run each applicable diagnostic category in order (1-8)
  4. Classify each result as PASS, WARN, or FAIL using the thresholds below
  5. Surface condition-based maintenance signals (check against threshold table)
  6. Generate the health report with specific file paths, counts, and recommended actions
  7. Write report to ops/health/YYYY-MM-DD-report.md

START NOW. Reference below explains each diagnostic category in detail.

Platform Adaptation

Checks adapt to what the platform supports:

  • If semantic search (qmd) is not configured, skip semantic-dependent checks and note their absence
  • If hooks are not available, note that validation is convention-only (no automated enforcement)
  • If self/ directory does not exist (disabled by config), skip self-space checks but verify ops/ absorbs self-space content correctly

Report what CAN be checked, not what the platform lacks.


The 8 Diagnostic Categories

Category 1: Schema Compliance (quick, full)

What it checks: Every {vocabulary.note} in {vocabulary.notes}/ and self/memory/ (if self/ is enabled) has valid YAML frontmatter with required fields.

How to check:

bash
# Find all note files (exclude topic maps)
for f in {vocabulary.notes}/*.md; do
  [[ -f "$f" ]] || continue
  # Check: YAML frontmatter exists
  head -1 "$f" | grep -q '^---$' || echo "FAIL: $f — no YAML frontmatter"
  # Check: description field present
  rg -q '^description:' "$f" || echo "WARN: $f — missing description field"
  # Check: topics field present and links to at least one topic map
  rg -q '^topics:' "$f" || echo "WARN: $f — missing topics field"
done

Additional checks:

  • Domain-specific enum fields have valid values (check against template _schema blocks if templates exist)
  • description field is non-empty (not just present)
  • topics field contains at least one wiki link

If validate-kernel.sh exists in ${CLAUDE_PLUGIN_ROOT}/reference/, run it and include results.

Thresholds:

ConditionLevel
Any note missing YAML frontmatterFAIL
Any note missing description fieldWARN
Any note missing topics fieldWARN
Any invalid enum valueWARN
All notes pass all checksPASS

Output format:

[1] Schema Compliance ............ WARN
    2 notes missing description:
      - notes/example-note.md
      - notes/another-note.md
    1 note missing topics:
      - notes/orphaned-claim.md
    12/15 notes fully compliant
Category 2: Orphan Detection (quick, full)

What it checks: Every {vocabulary.note} has at least one incoming wiki link from another file.

How to check:

bash
# For each note file, check if ANY other file links to it
for f in {vocabulary.notes}/*.md; do
  [[ -f "$f" ]] || continue
  basename=$(basename "$f" .md)
  # Search for [[basename]] in all other files
  count=$(rg -l "\[\[$basename\]\]" --glob '*.md' | grep -v "$f" | wc -l | tr -d ' ')
  if [[ "$count" -eq 0 ]]; then
    echo "WARN: $f — no incoming links (orphan)"
  fi
done

Nuance: Orphans are not automatically failures. A note created today that hasn't been through /{vocabulary.cmd_reflect} yet is expected to be orphaned temporarily. Check file age:

ConditionLevel
Orphan note created < 24 hours agoINFO (expected — awaiting reflect phase)
Orphan note created 1-7 days agoWARN
Orphan note older than 7 daysFAIL (persistent orphan needs attention)
No orphans detectedPASS

Output format:

[2] Orphan Detection ............. WARN
    3 orphan notes detected:
      - notes/new-claim.md (created 2h ago — awaiting reflect) [INFO]
      - notes/old-observation.md (created 5d ago) [WARN]
      - notes/forgotten-insight.md (created 14d ago) [FAIL]
    Recommendation: run /reflect on forgotten-insight.md and old-observation.md

What it checks: Every wiki link [[target]] in every file resolves to an existing file.

How to check:

bash
# Extract all wiki links from all markdown files
# For each unique link target, verify a file with that name exists
rg -oN '\[\[([^\]]+)\]\]' --glob '*.md' -r '$1' | sort -u | while read target; do
  # Search for file matching this name
  found=$(find . -name "$target.md" -not -path "./.git/*" 2>/dev/null | head -1)
  if [[ -z "$found" ]]; then
    echo "FAIL: dangling link [[${target}]] — no file found"
    # Show which files contain this dangling link
    rg -l "\[\[$target\]\]" --glob '*.md'
  fi
done

Thresholds:

ConditionLevel
Any dangling link (target does not exist)FAIL
All links resolvePASS

Why FAIL not WARN: Dangling links are broken promises. Every [[link]] a reader follows that leads nowhere erodes trust in the graph. Fix these immediately.

Output format:

[3] Link Health .................. FAIL
    2 dangling links found:
      - [[nonexistent-note]] referenced in:
        - notes/some-claim.md (line 14)
        - notes/another-claim.md (line 8)
      - [[removed-topic]] referenced in:
        - notes/old-note.md (line 22)
    Recommendation: create missing notes or remove broken links
Category 4: Description Quality (full only)

What it checks: Every {vocabulary.note}'s description adds genuine information beyond the title — not just a restatement.

How to check:

For each {vocabulary.note}:

  1. Read the title (filename without extension)
  2. Read the description field from YAML frontmatter
  3. Evaluate: does the description add scope, mechanism, or implication that the title does not cover?

Quality heuristics:

CheckThreshold
Description length50-200 chars ideal. < 30 chars = too terse. > 250 chars = too verbose
Restatement detectionIf description uses >70% of the same words as the title = restatement
Information addedDescription should mention mechanism, scope, or implication not in title

Thresholds:

ConditionLevel
Description is a clear restatement of the titleWARN
Description is < 30 charactersWARN
Description is missing entirelyWARN (also caught by Category 1)
Description adds genuine new informationPASS

This check requires judgment. Use semantic understanding, not just string matching. A description that uses different words but says the same thing as the title is still a restatement.

Output format:

[4] Description Quality .......... WARN
    2 descriptions are restatements:
      - notes/quality-matters.md
        Title: "quality matters more than quantity"
        Description: "quality is more important than quantity in knowledge work"
        Issue: restates title without adding mechanism or implication
      - notes/structure-helps.md
        Title: "structure without processing provides no value"
        Description: "having structure without processing it is not valuable"
        Issue: exact restatement
    Recommendation: rewrite descriptions to add scope, mechanism, or implication
Category 5: Three-Space Boundary Check (full, three-space)

What it checks: Content respects the boundaries between self/, {vocabulary.notes}/, and ops/. Each space has a purpose — conflating them degrades search quality, navigation, and trust.

Before running this check: Read ${CLAUDE_PLUGIN_ROOT}/reference/three-spaces.md for the full boundary specification.

Six conflation patterns to detect:

5a. Ops into Notes (Infrastructure Creep)

Queue state, health metrics, task files, or processing artifacts appearing in {vocabulary.notes}/ directory.

Detection:

bash
# Check for ops-pattern YAML fields in notes
rg '^(current_phase|completed_phases|batch|source_task|queue_id):' {vocabulary.notes}/ --glob '*.md'
# Check for task file patterns in notes
rg '## (Create|Reflect|Reweave|Verify|Enrich)$' {vocabulary.notes}/ --glob '*.md'
FoundLevel
Any ops-pattern content in {vocabulary.notes}/WARN
5b. Self into Notes (Identity Pollution)

Agent identity or methodology content mixed into user's knowledge graph. Agent's operational observations appearing in user's {vocabulary.notes}/ space.

Detection:

bash
# Check for agent-reflection patterns in notes (methodology observations, workflow assessments)
rg -i '(my methodology|I observed that|agent reflection|session learning|I learned)' {vocabulary.notes}/ --glob '*.md'
FoundLevel
Any agent-reflection content in {vocabulary.notes}/WARN
5c. Notes into Ops (Trapped Knowledge)

Genuine insights trapped in session logs, observations, or ops files that should be promoted to {vocabulary.notes}/.

Detection:

bash
# Check for claim-like content in ops that could be notes
# Look for files with description fields in ops/observations/ or ops/methodology/
rg '^description:' ops/observations/*.md ops/methodology/*.md 2>/dev/null
FoundLevel
Content in ops/ with note-like schema (description + topics)INFO (may be intentional, flag for review)
5d. Self into Ops / Ops into Self

Temporal state stored in self/ (should be in ops/), or identity content stored in ops/ (should be in self/).

Detection:

bash
# Check for temporal/queue content in self/
rg '^(current_phase|status|queue):' self/ --glob '*.md' 2>/dev/null
# Check for identity content in ops/
rg -i '(my identity|I am|who I am|my personality)' ops/ --glob '*.md' 2>/dev/null
5e. Notes into Self

Domain knowledge stored in self/ instead of {vocabulary.notes}/.

Detection:

bash
# Check self/memory/ for notes that have topics linking to notes-space topic maps
rg '^topics:.*\[\[' self/memory/*.md 2>/dev/null | grep -v 'identity\|methodology\|goals\|relationships'
5f. Self Space Absence Effects (when self/ is disabled)

When self/ is disabled, verify ops/ absorbs self-space content correctly. Check that goals and handoffs are in ops/, not floating in {vocabulary.notes}/.

Detection:

bash
# If self/ doesn't exist, check that goals/handoffs are in ops/
if [[ ! -d "self/" ]]; then
  # Check for goals or handoff content in notes/
  rg -i '(my goals|current goals|handoff|session handoff)' {vocabulary.notes}/ --glob '*.md'
fi

Thresholds:

ConditionLevel
Any boundary violation (5a, 5b, 5d, 5e)WARN
Trapped knowledge in ops (5c)INFO
Self-absence effects (5f)WARN
All boundaries intactPASS

Output format:

[5] Three-Space Boundaries ....... WARN
    1 boundary violation detected:
      Ops into Notes (infrastructure creep):
        - notes/task-tracking.md contains queue state fields (current_phase, batch)
        - Should be in ops/queue/ not notes/
    1 potential trapped knowledge:
      - ops/observations/interesting-pattern.md has note-like schema
        Consider promoting to notes/ via /reduce or direct creation
    Recommendation: move task-tracking.md to ops/queue/
Category 6: Processing Throughput (full only)

What it checks: The inbox-to-knowledge ratio. High ratios indicate collector's fallacy — capturing more than processing.

How to check:

bash
# Count items in each space
INBOX_COUNT=$(find {vocabulary.inbox}/ -name '*.md' -not -path '*/archive/*' 2>/dev/null | wc -l | tr -d ' ')
NOTES_COUNT=$(find {vocabulary.notes}/ -name '*.md' 2>/dev/null | wc -l | tr -d ' ')
QUEUE_COUNT=$(find ops/queue/ -name '*.md' -not -path '*/archive/*' 2>/dev/null | wc -l | tr -d ' ')

# Calculate ratio
if [[ $((INBOX_COUNT + NOTES_COUNT)) -gt 0 ]]; then
  RATIO=$((INBOX_COUNT * 100 / (INBOX_COUNT + NOTES_COUNT)))
else
  RATIO=0
fi

echo "Inbox: $INBOX_COUNT | Notes: $NOTES_COUNT | In-progress: $QUEUE_COUNT | Ratio: ${RATIO}%"

Thresholds:

ConditionLevel
Inbox-to-total ratio > 75% (3:1 inbox to notes)FAIL
Inbox-to-total ratio > 50%WARN
Inbox items > 20WARN (regardless of ratio)
Inbox-to-total ratio <= 50% AND inbox <= 20PASS

Output format:

[6] Processing Throughput ........ WARN
    inbox: 12 | notes: 8 | in-progress: 3 | ratio: 60%
    Inbox items outnumber processed notes — collector's fallacy risk
    Recommendation: run /reduce on oldest inbox items or /pipeline for end-to-end processing
Category 7: Stale Note Detection (full only)

What it checks: Notes not modified recently AND with low link density. Staleness is condition-based (low link density + no activity since N new notes were added), not purely calendar-based.

How to check:

For each {vocabulary.note}:

  1. Check last modified date (stat or git log)
  2. Count incoming links (same as orphan detection, but counting instead of boolean)
  3. Flag notes with: modified > 30 days ago AND < 2 incoming links
bash
for f in {vocabulary.notes}/*.md; do
  [[ -f "$f" ]] || continue
  basename=$(basename "$f" .md)

  # Last modified (days ago)
  mod_days=$(( ($(date +%s) - $(stat -f %m "$f" 2>/dev/null || stat -c %Y "$f" 2>/dev/null)) / 86400 ))

  # Incoming link count
  incoming=$(rg -l "\[\[$basename\]\]" --glob '*.md' | grep -v "$f" | wc -l | tr -d ' ')

  if [[ $mod_days -gt 30 ]] && [[ $incoming -lt 2 ]]; then
    echo "STALE: $f — $mod_days days old, $incoming incoming links"
  fi
done

Thresholds:

ConditionLevel
Any note > 30 days old with < 2 incoming linksWARN
Any note > 90 days old with 0 incoming linksFAIL
All notes either recent or well-connectedPASS

Prioritization: Sort stale notes by:

  1. Age (oldest first)
  2. Link density (least connected first)
  3. Topic relevance (notes in active topic areas are higher priority)

Output format:

[7] Stale Notes .................. WARN
    4 stale notes detected (>30d old, <2 incoming links):
      - notes/old-observation.md (92d, 0 links) [FAIL — consider archiving or reweaving]
      - notes/early-claim.md (45d, 1 link) [WARN]
      - notes/setupial-thought.md (38d, 1 link) [WARN]
      - notes/first-draft.md (31d, 0 links) [WARN]
    Recommendation: run /reweave on these notes to find connections, or archive if no longer relevant
Category 8: {vocabulary.topic_map} Coherence (full only)

What it checks: Each {vocabulary.topic_map} has a healthy number of linked notes, and notes in the same topic area are actually linked.

How to check:

For each {vocabulary.topic_map} file:

  1. Count notes that link TO this {vocabulary.topic_map} (notes with this in their topics footer/field)
  2. Check if there are notes in the same topic area NOT linked to the {vocabulary.topic_map} (coverage gaps)
  3. Verify context phrases exist on Core Ideas links (not bare links)
bash
# For each topic map
for moc in {vocabulary.notes}/*.md; do
  [[ -f "$moc" ]] || continue
  # Check if this is a topic map (has type: moc in frontmatter)
  rg -q '^type: moc' "$moc" || continue

  moc_name=$(basename "$moc" .md)

  # Count notes linking to this topic map
  note_count=$(rg -l "\[\[$moc_name\]\]" {vocabulary.notes}/ --glob '*.md' | grep -v "$moc" | wc -l | tr -d ' ')

  echo "$moc_name: $note_count notes"
done

Thresholds:

ConditionLevel
{vocabulary.topic_map} with < 5 notesWARN (underdeveloped — consider merging into parent)
{vocabulary.topic_map} with > 50 notesWARN (oversized — consider splitting into sub-{vocabulary.topic_maps})
{vocabulary.topic_map} with > 40 notesINFO (approaching threshold)
Notes exist in topic area but not linked to {vocabulary.topic_map}WARN (coverage gap)
All {vocabulary.topic_maps} in 5-50 range with good coveragePASS

Context phrase check:

bash
# Check for bare links in topic map Core Ideas (links without context phrases)
for moc in {vocabulary.notes}/*.md; do
  rg -q '^type: moc' "$moc" || continue
  # Look for "- [[note]]" without " — " context
  rg '^\s*- \[\[' "$moc" | grep -v ' — ' | grep -v '^\s*- \[\[.*\]\].*—'
done

Bare links without context phrases are address book entries, not navigation. Every link in a {vocabulary.topic_map} should explain WHY to follow it.

Output format:

[8] MOC Coherence ................ WARN
    3 topic maps checked:
      - knowledge-work: 28 notes [PASS]
      - graph-structure: 52 notes [WARN — oversized, consider splitting]
        3 bare links without context phrases
      - agent-cognition: 3 notes [WARN — underdeveloped, consider merging]
    Recommendation: split graph-structure into sub-topic-maps; add context phrases to bare links

Show full SKILL.md (861 more words)Show less

Condition-Based Maintenance Signals

After running all applicable diagnostic categories, check these condition-based triggers. These are NOT the 8 categories above — they are cross-cutting signals that suggest specific skill invocations.

ConditionThresholdRecommendation
Pending observations>= 10 files in ops/observations/Consider running /rethink
Open tensions>= 5 files in ops/tensions/Consider running /rethink
Inbox items>= 3 itemsConsider /reduce or /pipeline
Unprocessed sessions>= 5 files in ops/sessions/Consider /remember --mine-sessions
Orphan notesAny persistent (> 7d)Run /reflect on orphaned notes
Dangling linksAnyFix broken references immediately
Stale notesLow links + oldConsider /reweave
{vocabulary.topic_map} oversized> 40 notesConsider splitting
Queue stalledTasks pending > 2 sessions without progressSurface as blocked
Trigger coverage gapKnown maintenance condition has no configured triggerFlag gap itself

How to check condition counts:

bash
# Pending observations
OBS_COUNT=$(find ops/observations/ -name '*.md' 2>/dev/null | wc -l | tr -d ' ')

# Open tensions
TENSION_COUNT=$(find ops/tensions/ -name '*.md' 2>/dev/null | wc -l | tr -d ' ')

# Inbox items
INBOX_COUNT=$(find {vocabulary.inbox}/ -name '*.md' -not -path '*/archive/*' 2>/dev/null | wc -l | tr -d ' ')

# Unprocessed sessions
SESSION_COUNT=$(find ops/sessions/ -name '*.md' 2>/dev/null | wc -l | tr -d ' ')

# Queue stalled
PENDING_TASKS=$(jq '[.tasks[] | select(.status=="pending")] | length' ops/queue/queue.json 2>/dev/null || echo 0)

The meta-trigger: Include a "trigger coverage" check. Compare known maintenance conditions against what is actually being checked. If a maintenance condition has no corresponding check or trigger configured, that gap itself is a finding. This prevents the failure mode where maintenance debt accumulates undetected.


Output Format

The complete health report follows this structure. Every report, regardless of mode, uses this format.

=== HEALTH REPORT ===
Mode: [quick | full | three-space]
Date: YYYY-MM-DD
Notes scanned: N | Topic maps: N | Inbox items: N

Summary: N FAIL, N WARN, N PASS

FAIL:
- [Category N]: [brief description of failure]
  [specific files and details]

WARN:
- [Category N]: [brief description of warning]
  [specific files and details]

PASS:
- [Category N]: [confirmation]

---

[1] Schema Compliance ............ PASS | WARN | FAIL
    [details — specific files, specific issues]

[2] Orphan Detection ............. PASS | WARN | FAIL
    [details — specific files, age, link count]

[3] Link Health .................. PASS | WARN | FAIL
    [details — specific dangling links, where referenced]

[4] Description Quality .......... PASS | WARN | FAIL  (full mode only)
    [details — specific files, title vs description comparison]

[5] Three-Space Boundaries ....... PASS | WARN | FAIL  (full/three-space mode)
    [details — specific boundary violations by type]

[6] Processing Throughput ........ PASS | WARN | FAIL  (full mode only)
    inbox: N | notes: N | in-progress: N | ratio: N%

[7] Stale Notes .................. PASS | WARN | FAIL  (full mode only)
    [N notes older than 30d with <2 incoming links, sorted by priority]

[8] MOC Coherence ................ PASS | WARN | FAIL  (full mode only)
    [details — note count per topic map, coverage gaps, bare links]

---

Maintenance Signals:
    [condition-based triggers from table above, if any thresholds met]
    - observations: N pending (threshold: 10) [TRIGGERED | OK]
    - tensions: N pending (threshold: 5) [TRIGGERED | OK]
    - inbox: N items (threshold: 3) [TRIGGERED | OK]
    - sessions: N unprocessed (threshold: 5) [TRIGGERED | OK]

---

Recommended Actions (top 3, ranked by impact):
1. [Most impactful action — specific command + specific file]
2. [Second priority — specific command + specific file]
3. [Third priority — specific command + specific file]
=== END REPORT ===
Report Storage

Write every health report to ops/health/YYYY-MM-DD-report.md. If multiple reports are run on the same day, append a counter: YYYY-MM-DD-report-2.md.

This creates a health history that /architect can reference when proposing evolution. Trends across reports reveal systemic patterns that individual reports miss.


Quality Standards

Be Specific

Every finding MUST name the specific file(s) involved.

Bad: "some notes lack descriptions" Good: "notes/example-note.md and notes/another-note.md are missing the description field"

Bad: "there are dangling links" Good: "[[nonexistent-claim]] is referenced in notes/old-note.md (line 14) and notes/related.md (line 22) but no file with that name exists"

Prioritize by Impact

Not all issues are equal. The recommended actions section ranks by impact:

Impact TierExamplesWhy
HighestDangling links, persistent orphansBroken promises in the graph — readers hit dead ends
HighSchema violations, boundary violationsStructural integrity — compounds into larger problems
MediumDescription quality, stale notesRetrieval quality — degraded but not broken
Low{vocabulary.topic_map} size warnings, throughput ratioMaintenance debt — matters at scale
Don't Overwhelm
  • Focus on the top 5-10 issues in the recommended actions
  • Group related issues (3 notes missing descriptions = 1 finding, not 3)
  • For large vaults, cap per-category detail at 10 specific files, then summarize: "...and 15 more"
Distinguish FAIL from WARN
LevelMeaningAction Required
FAILStructural issue — something is brokenFix before it compounds
WARNImprovement opportunity — something is suboptimalAddress when convenient
PASSCategory is healthyNo action needed
INFONoteworthy but not actionableContext for understanding

FAIL is reserved for: Dangling links (broken graph), persistent orphans (> 7 days), severe schema violations (missing frontmatter entirely), critical boundary violations.

WARN is for everything else that is suboptimal but not broken.


Mode-Specific Behavior

Quick Mode (default)

Runs categories 1-3 only: Schema, Orphans, Links.

Use when:

  • Session start health check
  • Quick pulse on vault integrity
  • After a batch of note creation

Runtime: Should complete in < 30 seconds for vaults up to 200 notes.

Full Mode

Runs all 8 categories plus maintenance signals.

Use when:

  • Periodic comprehensive health review
  • After significant vault changes (large batch processing, restructuring)
  • When something "feels wrong" about the vault
  • Before a /architect or /reseed session

Runtime: May take 1-3 minutes for larger vaults due to description quality analysis and {vocabulary.topic_map} coherence checks.

Three-Space Mode

Runs category 5 only: boundary violation checks.

Use when:

  • After /reseed to verify boundaries are intact
  • When search results seem contaminated (ops content in knowledge queries)
  • When self/ is being enabled or disabled
  • Debugging "why does my search return weird results?"

Runtime: Should complete in < 30 seconds.


Edge Cases

Empty Vault

A vault with 0 notes is not unhealthy — it is new. Report:

Notes scanned: 0 | Topic maps: 0 | Inbox items: N
All categories PASS (no notes to check)
Maintenance Signal: inbox has N items — consider /reduce to start building knowledge
Self Space Disabled

When self/ does not exist:

  • Skip self-space boundary checks (5b, 5d, 5e inbound)
  • But DO check that ops/ correctly absorbs self-space content (5f)
  • Note in the report: "self/ is disabled — boundary checks adapted accordingly"

When qmd/MCP tools are unavailable:

  • Skip any checks that depend on semantic search
  • Note in the report: "Semantic search unavailable — some checks skipped"
  • All file-based checks (schema, orphans, links, boundaries) still run
Large Vaults (500+ notes)
  • Cap per-category file listings at 10, then summarize
  • Consider running checks in batches if performance degrades
  • Focus recommended actions on highest-impact items

Integration with Other Skills

Health report findings feed into other skills:

FindingFeeds IntoHow
Orphan notes/reflectRun reflect to find connections for orphaned notes
Stale notes/reweaveRun reweave to update old notes with new connections
Description quality issues/verify or manual rewriteFix descriptions to improve retrieval
Schema violations/validateRun validation to fix specific schema issues
Boundary violationsManual restructuringMove files to correct space
Processing throughput/reduce or /pipelineProcess inbox items to improve ratio
{vocabulary.topic_map} oversizedManual split or /architectSplit oversized {vocabulary.topic_maps} into sub-{vocabulary.topic_maps}
Accumulated observations/rethinkReview and triage observations
Accumulated tensions/rethinkResolve or dissolve tensions

The health-to-action loop:

/health (diagnose) -> specific findings -> specific skill invocation -> /health (verify fix)

Health is diagnostic only — it measures state without prescribing changes. /architect reads health reports and proposes changes with research backing. The separation matters: health tells you WHAT is wrong, architect tells you WHY and HOW to fix it.

© agenticnotetaking, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in skills/health of agenticnotetaking/arscontexta.

  • SKILL.md
  • skill.json

Open the folder on GitHubat commit 2acfd5c

Compare with similar skills

Health next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Health compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Health this skillagenticnotetaking/arscontexta3.5k—~7.1kAutomated safety check: NotesMIT
Org Health Diagnosticalirezarezvani/claude-skills28k1 repos~2.1kAutomated safety check: PassMIT
SaaS Business Health Diagnosticdeanpeters/Product-Manager-Skills7.2k1 repos~5.8kAutomated safety check: PassCustom licence
Skin Health Analyzersickn33/agentic-awesome-skills47k2 repos~293Automated safety check: PassMIT
Codebase Health Dashboardgarrytan/gstack136k—~11kAutomated safety check: NotesMIT
Obsidian Vault Maintaineropenclaw/openclaw392k1 repos~262Automated safety check: PassMIT

Similar skills

  • Org Health Diagnostic

    alirezarezvani/claude-skills

    Cross-functional organizational health check combining signals from all C-suite roles.

    28k GitHub starsUsed in 1 repo~2.1k tokens
    Auto-check passed
  • SaaS Business Health Diagnostic

    deanpeters/Product-Manager-Skills

    Diagnoses SaaS business health across growth, retention, unit economics and capital efficiency, then prioritizes fixes by urgency for board or quarterly reviews.

    7.2k GitHub starsUsed in 1 repo~5.8k tokens
    Business, Finance & HRAuto-check passed
  • Skin Health Analyzer

    sickn33/agentic-awesome-skills

    Analyze skin health data, identify skin problem patterns, assess skin health status.

    47k GitHub starsUsed in 2 repos~293 tokens
    Productivity & AutomationAuto-check passed
  • Runs a project's own type checker, linter, test runner, dead-code detector and shell linter, combines them into a weighted 0-10 score and tracks the trend.

    136k GitHub stars~11k tokensUpdated yesterday
    DevelopmentAuto-check: notes
  • Obsidian Vault Maintainer

    openclaw/openclaw

    Maintain an Obsidian-friendly memory wiki vault with wikilinks, frontmatter, and official Obsidian CLI awareness.

    392k GitHub starsUsed in 1 repo~262 tokens
    Knowledge ManagementAuto-check passed
  • Official

    A skill your agent uses when designing or implementing Biome user-facing diagnostic presentation or APIs, including messages, advice, markup, details, code frames, categories, severity, and…

    26k GitHub stars~1.2k tokensUpdated today
    DevelopmentAuto-check passed

More from agenticnotetaking/arscontexta

All 25 skills in this repo
  • Graph

    agenticnotetaking/arscontexta

    Interactive knowledge graph analysis. An agent skill from agenticnotetaking/arscontexta.

    3.5k GitHub stars~4.9k tokensUpdated 7 mo ago
    Auto-check: notes
  • Help

    agenticnotetaking/arscontexta

    Contextual guidance and command discovery. An agent skill from agenticnotetaking/arscontexta.

    3.5k GitHub stars~3.3k tokensUpdated 7 mo ago
    Auto-check: notes
  • Learn

    agenticnotetaking/arscontexta

    Research a topic and grow your knowledge graph. An agent skill from agenticnotetaking/arscontexta.

    3.5k GitHub stars~1.9k tokensUpdated 7 mo ago
    Auto-check: notes
  • Next

    agenticnotetaking/arscontexta

    Surface the most valuable next action by combining task stack, queue state, inbox pressure, health, and goals.

    3.5k GitHub stars~4.9k tokensUpdated 7 mo ago
    Auto-check: notes
  • Pipeline

    agenticnotetaking/arscontexta

    End-to-end source processing -- seed, reduce, process all claims through reflect/reweave/verify, archive.

    3.5k GitHub stars~2.4k tokensUpdated 7 mo ago
    Auto-check: notes
  • Recommend

    agenticnotetaking/arscontexta

    Get research-backed architecture advice for your knowledge system.

    3.5k GitHub stars~5.1k tokensUpdated 7 mo ago
    Auto-check passed

Questions about Health

What does Health do?

Run condition-based vault health diagnostics. An agent skill from agenticnotetaking/arscontexta. Health is an agent skill from agenticnotetaking/arscontexta. Run condition-based vault health diagnostics.

When should I use Health?

Health fits situations like: check vault health; maintenance report; what needs fixing.

How do I install Health in Claude Code?

Run `npx skills add agenticnotetaking/arscontexta --skill health -a claude-code`. Or copy the skill folder (skills/health in agenticnotetaking/arscontexta) into .claude/skills/health in your project. Claude Code loads it when a task matches its description.

How do I install Health in Codex?

Run `npx skills add agenticnotetaking/arscontexta --skill health -a codex`. Or copy the skill folder (skills/health in agenticnotetaking/arscontexta) into .agents/skills/health in your project. Codex loads it when a task matches its description.

Can I use Health in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add agenticnotetaking/arscontexta --skill health -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/health, .gemini/skills/health, .github/skills/health and .opencode/skills/health in your project.

What does Health need to run?

Going by SKILL.md and its folder, Health needs the command-line tools its instructions call (rg, jq and git). Its frontmatter pre-approves these tools: Read, Grep, Glob, Bash, mcp__qmd__vector_search.

Does Health access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Health safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Health use?

Health is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Health use?

About 7.1k tokens (SKILL.md is roughly 29k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Health?

Skills that share tags, products or a category with Health: Org Health Diagnostic (alirezarezvani/claude-skills, 28k stars), SaaS Business Health Diagnostic (deanpeters/Product-Manager-Skills, 7.2k stars), Skin Health Analyzer (sickn33/agentic-awesome-skills, 47k stars) and Codebase Health Dashboard (garrytan/gstack, 136k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Health?

agenticnotetaking (a GitHub organization) maintains it in agenticnotetaking/arscontexta, which has 3,493 GitHub stars. The repository holds 25 skills in this directory. The repository was last updated on February 24, 2026.

Source: agenticnotetaking/arscontexta on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.