skills/meta/routing-table-updater/SKILL.md
Maintain /do routing tables when skills or agents change.
npx skillsauth add notque/claude-code-toolkit routing-table-updaterInstall 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.
This skill maintains the /do routing indices when skills or agents are added, modified, or removed. It implements a Phase-Gated Pipeline -- scan, extract, generate, update, verify -- with deterministic script execution at each phase.
The skill reads metadata from all skills and agents (never modifies them) and validates and repairs the generated routing indices skills/INDEX.json and agents/INDEX.json. PostToolUse hooks (hooks/posttooluse-sync-skill-index.py, hooks/posttooluse-sync-agent-index.py) regenerate the indices automatically on every SKILL.md or agent-file edit; this skill covers drift those hooks miss (bulk changes, deletes outside the harness, corrupted index files).
| Signal | Load These Files | Why |
|---|---|---|
| batch registration of many skills (invoked by pipeline-scaffolder) | batch-mode.md | Loads detailed guidance from batch-mode.md. |
| resolving trigger conflicts: priority rules and severity levels | conflict-resolution.md | Loads detailed guidance from conflict-resolution.md. |
| errors, error handling | error-handling.md | Loads detailed guidance from error-handling.md. |
| worked update scenarios: new skill, conflict, manual entry, complexity change | examples.md | Loads detailed guidance from examples.md. |
| extracting trigger phrases: 'use when' clauses, action verbs, domain keywords, complexity inference | extraction-patterns.md | Loads detailed guidance from extraction-patterns.md. |
| routing entry format: frontmatter routing block fields, INDEX.json entry shape, regeneration | routing-format.md | Loads detailed guidance from routing-format.md. |
| skill-entry examples for registering a newly created skill | skill-examples.md | Loads detailed guidance from skill-examples.md. |
Goal: Find every skill and agent file in the repository.
Constraints: Repository must be at agents toolkit root (requires commands/do.md); only scan skills/*/SKILL.md and agents/*.md formats; file permissions must allow reading.
Step 1: Run scan script
python3 ~/.claude/skills/meta/routing-table-updater/scripts/scan.py --repo $HOME/vexjoy-agent
Step 2: Validate scan output
Expected output is JSON with skills_found, agents_found, skills (array of paths to skills//SKILL.md), agents (array of paths to agents/.md).
Step 3: Check for gaps
Compare discovered count against expected. If missing, check directory naming, agent file naming, or file permissions.
Gate: All skill directories and agent files are discovered without permission errors. Proceed to Phase 2 only after the gate passes. See references/error-handling.md for gate failure recovery.
Goal: Extract YAML frontmatter, trigger patterns, complexity, and routing table targets from every discovered file.
Constraints: YAML frontmatter must be valid; required fields (name, description) must be present; trigger patterns extracted from description text; complexity inference must follow references/extraction-patterns.md.
Step 1: Run extraction script
python3 ~/.claude/skills/meta/routing-table-updater/scripts/extract_metadata.py --input scan_results.json --output metadata.json
Step 2: Verify extraction completeness
For each capability, confirm extracted fields: name, description, trigger_patterns (skills), domain_keywords (agents), complexity (Simple, Medium, Complex), routing_table (Intent Detection, Task Type, Domain-Specific, or Combination).
Step 3: Validate trigger pattern quality
Review against references/extraction-patterns.md. Patterns must be specific enough to avoid false matches, broad enough to catch common phrasings, and free of generic terms.
Description trimming: skill descriptions trim safely to ≤40 router-line tokens when the frontmatter routing.triggers array stays untouched — triggers carry routing weight independently of the description. Verify trims with scripts/skill-sprawl-audit.py plus the routing-benchmark and trigger-ambiguity CI jobs (evidence: PR #801, 11 trims, routing-benchmark 68/68).
Gate: All YAML parsed successfully, required fields are present, trigger patterns are extracted for skills, and domain keywords are extracted for agents. Proceed to Phase 3 only after the gate passes. See references/error-handling.md for gate failure recovery.
Goal: Map extracted metadata to routing entries and detect trigger conflicts before the indices are rebuilt.
Constraints: Deterministic generation (no randomness); pattern conflicts detected immediately; entries sorted alphabetically; duplicates within the same group block gate passage.
Step 1: Run generation script
python3 ~/.claude/skills/meta/routing-table-updater/scripts/generate_routes.py --input metadata.json --output routing_entries.json
Step 2: Understand the generation process
references/conflict-resolution.md)Step 3: Review conflict detection output
Low-severity conflicts: script applies specificity rules automatically. High-severity conflicts: script blocks gate passage and requires manual resolution.
Gate: All capabilities are mapped, conflicts are documented, and no duplicates remain within the same group. Proceed to Phase 4 only after the gate passes. See references/error-handling.md for gate failure recovery.
Goal: Bring skills/INDEX.json and agents/INDEX.json in line with filesystem state.
Constraints: Both indices are generated, gitignored artifacts — repair means regenerating from frontmatter via the repo scripts; hand-edits to index files are lost on the next regeneration; source SKILL.md and agent files stay untouched; run from the repo root.
Step 1: Regenerate both indices
cd $HOME/vexjoy-agent
python3 scripts/generate-skill-index.py
python3 scripts/generate-agent-index.py
Step 2: Check for phantom entries
Every entry's file path must exist on disk:
python3 - <<'EOF'
import json, os
for idx, key in (("skills/INDEX.json", "skills"), ("agents/INDEX.json", "agents")):
entries = json.load(open(idx))[key]
phantom = [n for n, e in entries.items() if not os.path.exists(e["file"])]
print(idx, len(entries), "entries,", len(phantom), "phantom", phantom or "")
EOF
Gate: Both generators exit 0 and both indices contain zero phantom file paths. On generator failure, fix the offending frontmatter (the error names the file) and rerun. Proceed to Phase 5 only after the gate passes.
Goal: Final validation of the skill package and the rebuilt indices.
Constraints: No duplicate trigger phrases within an index; every index entry's file path exists; complexity values must match Simple/Medium/Complex; overlapping patterns documented with priority rules.
Step 1: Run validation script
python3 ~/.claude/skills/meta/routing-table-updater/scripts/validate.py
Validates skill package structure, SKILL.md frontmatter, and script executability. Exit 0 = pass.
Step 2: Understand verification checks
file path exists (Phase 4 Step 2 check)Gate: All checks pass. Task complete ONLY if final gate passes. See references/error-handling.md for gate failure recovery.
See references/skill-examples.md for worked examples (new skill created, agent description updated, conflict detection, manual entry preserved).
When invoked by pipeline-scaffolder Phase 4 (INTEGRATE), this skill operates in batch mode to register N skills and 0-1 agents in a single pass.
See references/batch-mode.md for batch input format, batch process, and the batch vs single mode comparison table.
This skill is typically invoked after other creation skills complete:
Invocation by other skills:
skill: routing-table-updater
The skill reads metadata from all skills and agents but never modifies them. Its only write targets are the generated indices skills/INDEX.json and agents/INDEX.json, always via the repo generator scripts.
See references/error-handling.md for the full error matrix (YAML parse errors, routing conflicts, manual entry overwrites, markdown validation failures) and per-phase gate failure recovery.
${CLAUDE_SKILL_DIR}/references/routing-format.md: routing entry format specification (frontmatter routing block fields, INDEX.json entry shape, regeneration commands)${CLAUDE_SKILL_DIR}/references/extraction-patterns.md: Trigger phrase extraction patterns (regex, keyword maps, complexity inference)${CLAUDE_SKILL_DIR}/references/conflict-resolution.md: Conflict types, priority rules, severity levels, resolution process${CLAUDE_SKILL_DIR}/references/examples.md: Real-world examples of routing table updates (new skill, updated agent, conflict detection, manual preservation)${CLAUDE_SKILL_DIR}/references/skill-examples.md: Worked examples for the 5-phase pipeline (Phase 1-5 walkthroughs)${CLAUDE_SKILL_DIR}/references/batch-mode.md: Batch mode invocation by pipeline-scaffolder (input format, process, comparison)${CLAUDE_SKILL_DIR}/references/error-handling.md: Error matrix and per-phase gate failure recoverytools
Shell configuration: Fish and Zsh setup, PATH, completions, plugins.
tools
Kubernetes operations: debugging, security, RBAC, and infrastructure tooling.
development
Swift development: concurrency patterns, async/await, actors, testing with XCTest and Swift Testing framework.
development
PHP development: code quality, PSR standards, testing with PHPUnit.