Systems Lab

Agent skill

gtm-graph-health

Diagnoses knowledge base structure health by measuring tag sprawl, link density, and item age, not whether items are true, but whether the system is usable

activeSelf-containedActs undeclared1,653 words

From rvanshur/vertical-gtm-skills · 29 skill entries · 2 · pushed 2026-09-30

What it does when it runs

Diagnoses knowledge base structure health by measuring tag sprawl, link density, and item age, not whether items are true, but whether the system is usable

Automated analysis of the skill and the 1 file bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.

Keys and connectors you must supply
None found.
Hosts it reaches
No third-party host appears in the skill or its bundled files.
Tool permissions it declares
No allowed-tools in the frontmatter. It does act, so it runs under whatever permissions your session already grants.
Actions present in the files
writes files

Ask about gtm-graph-health

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/rvanshur/vertical-gtm-skills.git /tmp/vertical-gtm-skills
git -C /tmp/vertical-gtm-skills sparse-checkout set "operating/O7-graph-health"
mkdir -p ~/.claude/skills/gtm-graph-health
cp -R "/tmp/vertical-gtm-skills/operating/O7-graph-health/." ~/.claude/skills/gtm-graph-health/

Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗

The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.

Reproduced in full from rvanshur/vertical-gtm-skills/blob/835ab5b083ffe60bb98d6d7aeb604387a60abf25/operating/O7-graph-health/SKILL.md, which is licensed MIT (skill frontmatter). 1,653 words, 29 headings.

Graph Health

Overview

Measures whether your knowledge base is well-structured and usable as a system, independent of whether each individual item is true.

A base can be mostly accurate and still be a mess. Tags fragment into one-off variants that nothing will find, items sit isolated with no connections, half-finished items never get promoted or retired. None of that shows in a single item. All of it shows when you measure the structure.

This skill runs three gauges, tag sprawl, link density, and provisional item age, and produces a health score. It is read-only. It flags problems but does not fix them.

Core Principle: A system where every item is true but the structure is broken is unusable. Health is a property of the whole, not the parts.


Why This Skill Exists

Documentation systems decay silently. A wrong number looks exactly like a right one. There is no error message. The decay only surfaces when someone tries to find something and cannot.

The skill exists because of a specific pattern. A base was maintained carefully. Entries were added one at a time. Nobody kept count of the tags. One person used GTM-strategy, another used gtm-strategy, a third used go-to-market. The search surface fractured without anyone noticing. A base can be mostly true and completely unusable if its structure has broken.

The thresholds below are the author's working rules, not an industry standard, so tune them in CUSTOMIZE.md. Tag sprawl above 40% means search becomes noise, too many one-off tags that nothing else will find. Orphan items (fewer than three links) need discovery. A note nobody can find except by exact recall stays frozen. Hub items (more than ten links) are a sign that something needs splitting, nothing that large gets updated cleanly. Age of provisional items matters too. Mark something as emergent and it will stay emergent forever unless someone forces a call. Thirty days is when to decide. Sixty is when it becomes critical.


Role

You are a structural auditor, not a content reviewer. Your job is not to judge whether items are accurate or complete. It is to measure how well-formed the system is and flag where structure has broken.


Input Contract

If required input is missing, ask, do not guess.

InputRequiredNotes
Knowledge base locationRequiredWhere the items / nodes are stored (directory path)
Taxonomy fileRequiredThe blessed list of tags (if one exists)
Item metadata conventionsRequiredHow items are marked up (status field name, link format, etc.)

Output Contract

OutputAlwaysNotes
Health scoreYes0-100, with explanation
InventoryYesCount of items by domain, status, type
Tag analysisYesSprawl %, single-use tags, non-blessed tags
Link analysisYesOrphan items, hub items, broken links
Lifecycle analysisYesAging provisional items, decision points
RecommendationsYesTop 3 actions to improve health

Context

If profiles/client-profile.md has a ## Knowledge Base Structure section (this skill's CUSTOMIZE.md writes it), read it before starting and let it replace the generic defaults in this file. If the section is missing, run with the defaults and say once, at the start, that the skill is running uncustomized.


Core Workflow

Step 1. Inventory

Walk the knowledge base directory. Count all items:

  • By domain (if your system uses domain tags: technical, business, GTM, methodology, etc.)
  • By status (emergent, validated, canonical, archived)
  • By type (concept, pattern, case-study, framework, reference)

Report totals. This is your baseline.

Step 2. Tag Health Analysis

Read the taxonomy file (blessed tags). Then scan all item metadata:

  • Count unique tags actually in use
  • Count tags that appear only once
  • Count tags not in the taxonomy (sprawl)

Sprawl calculation: (single-use tags / total unique tags) * 100

Sprawl %Health
<20%Healthy
20-40%Warning
>40%Unhealthy

List the single-use tags and non-blessed tags.

Step 3. Link Health Analysis

For each item, count its connections (wiki-links, references, or whatever your system uses):

Link CountCategoryImplication
<3OrphanNobody will find this except by exact recall. Needs discovery
3-10ConnectedHealthy density
>10HubLikely needs splitting. Nothing this large gets maintained

List orphan items and hub items by name.

Step 4. Lifecycle Analysis

For items marked as provisional / emergent / incomplete:

  • Calculate age (today's date minus creation date or last update)
  • Flag items >30 days without a status decision as needing a call
  • Flag items >60 days as critical, decide now

Step 5. Check for Broken Links

Scan all references. For each link:

  • Does the target item exist?
  • Flag broken links

Count and list them.

Step 6. Calculate Health Score

Start at 100. Deduct:

  • -3 per stale item (>30 days, no decision point, no valid_until)
  • -4 per expired item (past expiry, not archived)
  • -5 per dead reference
  • -4 per broken link
  • -2 per single-use tag (max -10)
  • -3 per non-blessed tag (max -15)
  • -2 if tag sprawl is in warning band (20-40%)
  • -5 if tag sprawl is unhealthy (>40%)
  • -1 per orphan item (max -10)
  • -2 per hub item (max -10)

Floor at 0.

ScoreHealth
90-100Excellent, system is clean and usable
70-89Good, minor structure issues, no urgency
50-69Fair, accumulating debt, consolidation recommended
<50Poor, structure has broken, usability at risk

Step 7. Recommendations

Based on the analysis, list top 3 actions:

  1. Most impactful (usually: fix tag sprawl, archive aged items, or split hub items)
  2. Second
  3. Third

Be specific. "Consolidate tags" is not an action. "merge 7 single-use tags into 3 categories" is.

Step 8. Report

Present findings in this structure:

# Knowledge Base Health Report, {date}

## Summary
Overall Health: {score}/100 ({Excellent|Good|Fair|Poor})

## Inventory
Total Items: {N}
By Domain: {breakdown}
By Status: {breakdown}
By Type: {breakdown}

## Tag Health
Tag Sprawl: {X}% ({Healthy|Warning|Unhealthy})
Single-use tags: {count} ({list top 10})
Non-blessed tags: {count} ({list top 10})

## Link Health
Orphan Items (<3 links): {count}
  - Item 1 ({N} links)
  - Item 2 ({N} links)
Hub Items (>10 links): {count}
  - Item 1 ({N} links)
Broken Links: {count}

## Lifecycle Health
Aging Provisional Items (>30 days): {count}
  - Item 1 ({N} days, decision needed)
Critical Age (>60 days): {count}
  - Item 1 ({N} days, DECIDE NOW)

## Top Recommendations
1. [Specific, measurable action]
2. [Specific, measurable action]
3. [Specific, measurable action]

Quick Reference

MetricThresholdImplication
Tag Sprawl>40%Search becomes noise
Orphan Items>20% of baseDiscovery problem. Items are unfindable
Hub ItemsAnyProbably needs splitting
Broken Links>5Referential integrity broken
Aging Provisional Items>30 daysRequires a decision call
Critical Age>60 daysResolve immediately

Epistemic Rules

  • Structure is orthogonal to accuracy. A base can be mostly true and completely unusable. This skill measures usability, not truth.
  • Tags measure discoverability. A tag used once is not a bug. It is a sign that search surface has fragmented.
  • Orphans are not wrong. An item with no links is not bad in itself. It is unfindable except by exact recall, which is a discovery problem.
  • Hubs signal overload. An item with 15 links is trying to be a table of contents. It needs splitting.
  • Provisional is not a permanent status. If an item is marked emergent at creation, it should have a decision point, not drift forever.

Troubleshooting

SymptomLikely causeResponse
"KB directory not found"Path is wrong or KB does not existAsk for the correct path. If no KB exists, this skill does not apply
"Can't read metadata"Item format is unknownAsk what metadata format is in use. Each item should declare its metadata format
"High sprawl but most tags are intentional"Taxonomy is wrong, not tagsTags may be correctly specialized. This is when CUSTOMIZE.md matters. Adapt the threshold
"Lots of orphans but they are intentional"KB uses a different discovery patternSome systems use full-text search instead of links. Adapt the orphan rule in CUSTOMIZE.md

Best Practices

  • Run this after bulk ingestion of new content, and monthly as preventive maintenance.
  • Do not run this on a knowledge base that has <10 items. The metrics are meaningless on tiny bases.
  • Use the score as a trend. One month's score is a snapshot. Three months is a trajectory.
  • Share the report with the team. Structure health is everyone's responsibility.

Integration with Other Skills

  • O8-dream runs deep consolidation. This flags what that skill should focus on.
  • O6-weekly-review uses a lightweight version of this for weekly pulse checks.
  • O9-ingest adds new items. This measures whether the accumulated items form a usable system.
  • Together, ingest (add) → graph-health (check structure) → dream (prune) is the cycle.

Changelog

  • 1.1.0 (2026-09-29): Context section added, so the skill reads the profile section its CUSTOMIZE.md writes.
  • 1.0.0 (2026-09-28): Initial release. Structure health measurement across tag sprawl, link density, and provisional item age.

Files bundled with it

These load only when the skill asks for them, so they cost nothing until it runs.

Other skills for the same job

Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.

Need help setting it up?

This page tells you what gtm-graph-health does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.

Book a call →

The directory stays free. There is nothing gated behind this.