🎛️ OrchestKit — Sub-Agent & Skill Activation Audit

ork 8.57.0 verdict: under-activated real telemetry · agents Jun23 (30d) · skills →Mar6 (stale)

Your instinct was right — the specialized catalog is under-activated

Audited on real data: 937 agent spawns (last 30 days) + skill counts through Mar 6 + a 3-agent code audit of routing, telemetry, and lifecycle. The catalog is fully reachable (0 structural islands) but rarely selected.

14%
of agent spawns hit your 37-agent catalog
vs 74% generic CC agents
17/37
agents never fired in 30 days
20 fired · top one only 26×
2 of 4
activation telemetry streams are dead
+ the "canonical" skill stream is empty here
0
structural islands
all 31 user-invocable skills reachable
The one-line cause: agents fire ~1:1 with how often a high-traffic skill names them via subagent_type=. Two independent audit agents found this separately. The "routing index" that should fix it is non-functional, and the telemetry that should reveal it is half-dead.

The three compounding problems (not one)

🧲 1 · Selection

Skills hardcode generic agents (15× Explore, 4× general-purpose); specialists are named ≤1× each. The routing index meant to fix this is garbage keywords + advisory-only.

🔭 2 · Visibility

4 telemetry streams, 2 scopes, 4 events, 2 formats. 2 writers orphaned in refactors; the "canonical" skill stream writes nothing here. You couldn't see activation — so you couldn't fix it.

🗑️ 3 · Lifecycle

0 true orphans (a cleanup pass ran), but 6 agents are mis-triggered (table-rows / deep-team only, no real spawn path) and 11 are legit-but-niche. No audit:lifecycle tool exists.

Good news: this is not broken wiring (0 islands) and not bad descriptions (refuted by the audit — dormant agents have fine descriptions). It's discoverability + skill-wiring, which is directly fixable.

Where agent work actually goes

937 spawns, .claude/logs/subagent-spawns.jsonl, May 23 → Jun 23 (fresh).

Generic CC agents (Explore / general-purpose / workflow-subagent) do 74% of agent work. Your purpose-built 37-agent catalog: 14%. Even other plugins (candlekeep / cc-guide) out-spawn your catalog.

ork-catalog agents that fired (20 of 37)

Skill invocations (through Mar 6 — telemetry stale since)

Source: .claude/feedback/skill-usage.json. Top-5 ≈ 67% of all use; long tail dormant. (Live skill stream is empty — see Telemetry tab.)

Why you can't see activation: 4 fragmented streams, half dead

No single source of truth. Coverage has real gaps (agents blind Apr 8 → May 23; skills near-blind since Mar).

Coverage timeline (Jan → Jun 2026)

Writer map

FileWriter hookEventStatus
Worse than it looks: the "canonical" skill stream .claude/logs/skill-channels.jsonl is missing/empty in this project — so skill activation is effectively unmeasured right now. agent-usage.jsonl's writer was orphaned out of hooks.json in a consolidation refactor (dead code still in src/); skill-usage.jsonl's writer was deleted in #959 and only ever caught user-typed slash commands.
Fix shape: one .claude/logs/activations.jsonl, one recordActivation() lib, a discriminated-union schema (kind: agent|skill, channel: main|subagent|auto), schema-locked so drift-CI catches a dead writer — fan-in from the hooks that already exist + one new scan for auto-activated skills.

The dormant catalog — classified

17 agents never fired in 30 days. Per-agent code audit: 0 to prune, 6 mis-triggered (fixable), 11 niche (keep). Dormancy = "wired but rarely the right tool," not dead.

0
DEAD / prune
a prior orphan pass already ran
6
MIS-TRIGGERED — fix
no real spawn path from a busy skill
11
NICHE — keep
design / multimodal / perf / IaC / security-LLM

🔧 Fix triggers (6) — wire a real subagent_type= spawn from a high-traffic skill

✅ Keep / niche (11) — rare by nature, leave

Watch two near-duplicates before they rot: security-layer-auditor vs security-auditor (active), and component-curator vs the component-search skill — consolidation may beat re-triggering.
Tooling gap: the expected npm run audit:lifecycle does not exist; audit-skills covers skills only. Natural home to extend: scripts/list-invocable-agents.mjs.

Root causes (code audit, with evidence)

Phase-1 preview — descriptions rewritten to the CC standard

The documented lever (docs/en/subagents.md): "to encourage proactive delegation, include phrases like 'use proactively' in your subagent's description field." All 37 ork agents currently omit it. Here are 5 real before→after rewrites — the actual change Phase 1 would make.

Format: <role>: <capabilities>. Use proactively when <concrete triggers>. — capabilities kept verbatim; only the trigger clause is added.

Options — ranked by impact ÷ effort

Recommended sequence: #1 first (you must be able to measure), then #2 (the biggest activation lever), then #3–#5.

Honest caveat: "never fired" = absent from the available telemetry windows, which have real gaps — a strong signal, not absolute proof of zero. The 74/14 split and 17/37 dormant hold across a full fresh month of agent data.
Generated from real local telemetry + a 3-agent code audit · OrchestKit 8.57.0 · branch feat/activation-audit · interactive playground