Skill Usage Rates — Full-History Session Audit
alignment_status: review
Full-history read of Claude Code and Codex prompt history plus rich assistant transcripts (20,971 user prompts, Dec 10 2025 - Jul 4 2026) answering: with 184 active skills in this repo, at what rates do users invoke skills and how often do agents invoke or recommend them? Headline: direct user usage is still head-heavy (/ship alone is 13.6% of every Claude prompt; the top 3 user commands are 66.5% of all direct user skill invocations), while agents touch a much wider surface: 3,215 user-authored repo-skill invocations versus 9,125 assistant-side skill contract-load events (3,747 distinct session-skill pairs) and 1,267 assistant recommendation/use-reference events. The largest adoption gap remains habit, not coverage: ~550 hand-typed "why is..." prompts shadow /investigate, which was directly invoked 166 times.
- 1. Overview Stats
- 1b. User-Invoked vs. Agent-Invoked Skill Counts
- 2. Top Skills by Invocation (chart)
- 3. Usage Concentration — Head vs. Dead Tail
- 4. Manual Prompts That Shadow Existing Skills (chart)
- 5. Claude vs. Codex Personality Split
- 6. Token & Cost Check
- 7. Ranked Recommendations
- 8. Highest-Impact View
- 9. Evidence Matrix
- 10. Confidence & Assumption Register
- 11. Glossary Additions Gate
- 12. Artifact Destination & Proposed File Changes
- 13. Post-Approval Route
- 14. Compile (bottom)
1. Overview Stats
| Metric | Claude | Codex |
|---|---|---|
| Date range | 2025-12-10 → 2026-07-04 | 2026-01-20 → 2026-07-04 |
| User prompts | 11,704 | 9,267 |
| Slash/command prompts | 4,779 (incl. built-ins) | 708 |
| Direct user repo-skill invocations | 2,714 | 501 |
Built-in harness cmds (/clear, /usage…) | 1,502 | — |
| Manual (non-command) prompts | 6,925 | 8,559 |
Method: a user skill invocation is counted as a leading /command (Claude history.jsonl display field) or leading //$command (Codex history.jsonl text field), matched against the 184 active skill directories under packs/*/{claude,codex}/*/SKILL.md. Built-in harness commands (/clear, /usage, /resume, /model, /pack...) are separated out and not counted as repo-skill usage. Agent-side counts come from assistant records in ~/.claude/projects/**/*.jsonl and ~/.codex/sessions/**/*.jsonl: exact skill contract loads are assistant tool-call arguments that read a recognized SKILL.md; recommendations/use-references are assistant-authored text such as "Using the x skill" or "Recommended next skill: /x". Reproduce this snapshot with node scripts/analyze-skill-usage-actors.mjs --cutoff 2026-07-04T20:45:12.007Z; the cutoff prevents this analysis session from changing its own counts during later verification.
1b. User-Invoked vs. Agent-Invoked Skill Counts
The actor split changes the interpretation of "unused." Direct user commands cover 91 of 184 active skills, but assistant-side skill-contract loads touch a much broader slice of the registry, especially orchestration and design-tree skills that are often loaded by the agent during execution rather than typed by the user.
| Actor / signal | Count | Meaning | Best use |
|---|---|---|---|
| User-authored direct skill invocations | 3,215 | Leading /skill or $skill prompts matched to active repo skills | Measures user habit and command discoverability |
| Assistant-side skill contract-load events | 9,125 | Assistant tool-call arguments reading a recognized SKILL.md | Measures agent execution of skill contracts; raw events can include repeated reads in one session |
| Assistant distinct session-skill pairs | 3,747 | Unique source:session:skill pairs with at least one contract load | Best conservative "agent invoked skill in a session" count |
| Assistant recommendation/use-reference events | 1,267 | Assistant-authored text recommending or declaring use of a skill | Measures routing/handoff visibility, not necessarily execution |
| Top direct user skills | User invokes | Top assistant-loaded skills | Contract-load events | Top assistant recommendations | Events |
|---|---|---|---|---|---|
ship | 1,598 | customer-discovery | 493 | exec | 244 |
ship-end | 375 | user-flow-map | 482 | investigate | 125 |
investigate | 166 | ux-variations | 479 | ship | 86 |
sync | 105 | competitive-analysis | 436 | roadmap | 53 |
benchmark-test-skill | 84 | ui-interview | 433 | guide | 51 |
Interpretation: "Agent invoked" is not identical to "the user typed a skill." The strongest agent-side signal is a contract-load event because it proves the assistant read a skill contract while acting. The session-skill-pair count is less inflated than raw reads and is the best single count for "agents invoked skills." Recommendation events are reported separately because they may be handoff text rather than actual execution.
2. Top Skills by Invocation (all-time, Claude + Codex)
| Command | Uses | % of Claude prompts | Command | Uses |
|---|---|---|---|---|
| /ship | 1,598 | 13.6% | /roadmap | 73 |
| /ship-end | 375 | 3.2% | /spec-interview | 53 |
| /investigate | 166 | 1.4% | /exec | 50 |
| /sync | 105 | 0.9% | /analyze-sessions | 44 |
| /benchmark-test-skill | 84 | Codex-heavy | /customer-discovery | 40 |
| /session-triage | 77 | Codex-heavy | /plan-phase | 40 |
| /competitive-analysis | 29 | Mixed | /benchmark-agent-review | 33 |
3. Usage Concentration — Head vs. Dead Tail
The distribution is still skewed, but the actor split matters. For direct user commands, the top 3 (ship, ship-end, investigate) account for 2,139 of 3,215 invocations (66.5%). For assistant contract loads, the top 5 are research/design orchestrators (customer-discovery, user-flow-map, ux-variations, competitive-analysis, ui-interview), which shows agents exercise a different part of the skill surface.
| Invocation tier | Repo skills | Share of 184 |
|---|---|---|
| Never invoked directly by user command | 93 | 51% |
| Invoked exactly once | 29 | 16% |
| Invoked 2–5 times | 27 | 15% |
| Invoked more than 5 times | 35 | 19% |
Caveat — "unused" ≠ "dead": the 93-skill tail is measured only as never directly typed by the user. Rich transcript parsing now proves agents do load skill contracts independently, so direct-command absence is not enough to delete a skill. Separating dead from new/library/agent-only/parent-invoked is exactly what a skill-inventory pass would resolve (Rec 2).
Q3 (required) — Do you confirm the concentration reading (spike + dead tail)?
4. Manual Prompts That Shadow Existing Skills
Your follow-up question: cases where I'm manually typing prompts that skills already cover. I scanned all 15,349 manual (non-command) prompts for intents that map to a shipped skill. The finding: the gap is discovery/habit, not missing skills — the skill exists, and the request is still hand-typed. Counts are exact pattern matches (with real examples pulled from history).
| Manual intent | Manual prompts | Skill that covers it | Skill's actual uses |
|---|---|---|---|
| "why is / investigate X" | ~550 | /investigate | 166 |
| "update docs and push" | ~258 | /ship-end, /reconcile-dev-docs | 375 / 31 |
| "commit & push to github" | ~211 | /ship, /ship-end | 1,598 / 375 |
| "run/start the app / dev server" | ~61 | /run | 121 (in harness) |
| "update TODO.md / roadmap" | ~47 | /roadmap | 73 |
4.1 /investigate — the standout gap (~3:1 manual-to-skill)
Every bare "why is X" skips the skill's claim-validation → root-cause → git-history-trace and just gets an ad-hoc answer. This is the largest single shadowed intent and the one where skipping the skill costs the most.
4.2 Git / docs / roadmap shipping asks typed as sentences
Why this is a habit gap, not a skill gap: /ship is muscle memory (1,598 uses) because it's the natural end-of-turn action. The shadowed skills fire from a mid-work realization ("wait, why is this...") where you're already typing a sentence, so the slash prefix never happens. Bare "why is X" also doesn't feel like it needs a skill — but that's exactly /investigate's job.
Count precision: "commit & push" is the tightened count (requires git/github/commit-message/branch context, excludes database/seed pushes). A looser "commit OR push" match returns ~696 but folds in DB-push false positives, so the tightened 211 is the conservative figure. Buckets use first-match keyword classification and are not mutually exhaustive.
5. Claude vs. Codex Personality Split
The two tools are used for different jobs — usage rates reflect that clearly:
- Claude = the shipping surface. Dominated by
ship/ship-end/investigate/sync— day-to-day dev flow. - Codex = the skill-development bench. Its top direct commands are
benchmark-test-skill(82),session-triage(65),benchmark-agent-review(32), andcustomer-discovery(32) — authoring, testing, and research/design orchestration rather than routine product shipping. - Only 708 of 9,267 Codex prompts (7.6%) are command prompts, and 501 are active repo-skill invocations. Claude has 2,714 direct repo-skill invocations across 11,704 prompts (23.2%), so Claude remains the heavier direct-command surface.
6. Token & Cost Check
- Claude:
~/.claude/history.jsonlcarries no token/usage fields — a permanent coverage gap for this source regardless of parse depth. - Codex: rich
~/.codex/sessions/**records were parsed for assistant messages and tool-call arguments, but token-count events were intentionally left out of this actor split. - Cost: unavailable. No cost fields in either log, no pricing table provided, no provider pricing verified this run. Per skill constraints, no dollar estimate is made.
7. Ranked Recommendations
| # | Pattern | Frequency | Type | Suggested action | Owner surface | Validation |
|---|---|---|---|---|---|---|
| 1 | "why is…" typed raw instead of /investigate | ~550 manual vs 166 skill | Standing instruction (hook) | UserPromptSubmit hook: detect a bare why (is|does|isn't|won't)… opener and suggest routing through /investigate | settings.json hook (via update-config) | fire the hook on a sample "why is X" prompt; confirm suggestion, no false-trigger on /investigate |
| 2 | 93 never-directly-user-invoked skills (dead vs new/library/agent-only unknown) | 51% of 184 | Inventory audit | Run /skill-inventory to classify the tail; prune/archive genuinely dead skills to shrink the registry and improve recall | skill-dev pack (installed ✓) | inventory output separates dead / new / library / indirect / agent-only |
| 3 | commit-push / update-docs typed as sentences | ~470 combined | Standing convention nudge | Lightweight CLAUDE.md nudge (+ optional hook) so end-of-turn "push/update docs" reaches for /ship-end | CLAUDE.md shared conventions | spot-check the nudge text; measure recurrence next audit |
Q4 (required) — Recommendation 1: add the /investigate prompt-nudge hook?
Q5 (required) — Recommendations 2–3 (skill-inventory audit of the dead tail; CLAUDE.md ship-end nudge)?
8. Highest-Impact View (avoided manual prompts)
/investigateprompt-nudge hook — ~550 historical hits, the largest single shadowed intent, and the highest-value one (it restores claim-validation before an answer).- skill-inventory audit — resolves the 93-skill direct-command tail ambiguity in one pass; a smaller and better-labeled registry improves skill recall for every future session.
- ship-end / docs nudge — ~470 combined commit-push/update-docs sentences; pure convention change, zero new code.
- Already-won baseline:
/shipat 1,598 uses is the single largest user-invoked automation in the dataset — proof the head of the distribution is healthy; the opportunity is in the tail, the agent-only surface, and the shadowed mid-work intents.
9. Evidence Matrix
| Claim | Evidence (source · observation · date) | Inference | Confidence | Decision impact |
|---|---|---|---|---|
/ship is 13.6% of all Claude prompts | history.jsonl · 1,594 leading /ship of 11,704 Claude prompts · Dec 2025–Jul 2026 | Shipping is fully automated and habitual | High | No action on git-flow head |
| Top 3 user commands = 66.5% of direct user skill invocations | history.jsonl · ship 1,598 + ship-end 375 + investigate 166 = 2,139 / 3,215 · same window | User command usage remains a spike, but less extreme after including Codex/user updates | High | Frames the whole audit (Q3) |
| 93 of 184 active repo skills were never directly invoked by a user command | packs/*/{claude,codex}/*/SKILL.md active inventory (184) ∩ command counts (91 seen) · Jul 2026 | Over half the surface is not user-discoverable or is agent-only/parent-invoked | High for direct-command count; Medium for "dead" (agent-only/library/new not separated) | Approve/reject skill-inventory audit (Q5) |
| Agents invoked or touched skills far more often than users typed them | rich transcripts · 9,125 assistant-side skill contract-load events; 3,747 distinct session-skill pairs; 1,267 recommendation/use-reference events · Mar-Jul 2026 | Agent use is broad and should be analyzed separately from user command habit | High for contract-load count; Medium for recommendations (text-pattern classified) | Prevents mislabeling agent-only skills as dead |
"why is…" is hand-typed ~550× vs 166 /investigate | history.jsonl+codex · 550 regex matches over 15,349 manual prompts; 166 /investigate invocations · full window | Largest shadowed intent; ~3:1 manual-to-skill | Medium-High (keyword classification, not exhaustive) | Approve/reject the nudge hook (Q4) |
Commit-push typed ~211× despite /ship | history.jsonl+codex · tightened match (git context, excl. DB) · full window | End-of-turn intent occasionally bypasses the skill | Medium (looser match = ~696 with false positives) | Approve/reject the CLAUDE.md nudge (Q5) |
| Codex is the skill-dev bench, Claude the shipping surface | codex history · top direct commands benchmark-test-skill 82, session-triage 65, benchmark-agent-review 32, customer-discovery 32 vs Claude ship/investigate/sync · full window | Tool roles are specialized | High | Context only; no action |
Q1 (required) — Is the evidence base sufficient for these recommendations?
Q2 (required) — Could missing context change the recommendations? (Rich assistant transcripts were parsed for skill contract loads, but token spend and semantic intent classification were not re-run.)
10. Confidence & Assumption Register
| Conclusion | Status | What would change it |
|---|---|---|
| User command usage is head-heavy; top 3 = 66.5% | Evidence-backed (exact command counts) | Nothing plausible — direct count |
| 93 skills are "unused" by direct user command | Provisional — measured as never typed as a command; rich transcript parsing shows agents load many skills separately | Inventory classification that labels each tail skill as dead, new, library, parent-invoked, or agent-only |
| Agent-side skill usage is larger than user direct usage | Evidence-backed for contract-loads: 9,125 events / 3,747 session-skill pairs | Deduping multiple reads inside a session would lower raw events but not erase the session-pair signal |
/investigate is the top shadowed intent | Evidence-backed (~550 vs 166), keyword-classified | A stricter classifier that excludes rhetorical "why" questions could lower the 550 |
| Commit-push shadowing volume | Provisional — 211 tightened vs 696 loose; DB false positives in the loose count | Manual review of the ~485 delta prompts |
| Codex = skill-dev bench | Evidence-backed (command mix) | — |
Alternatives considered
- Do nothing — the head is healthy. Rejected as a full answer: true for shipping, but it leaves the ~550 shadowed
/investigateasks (the highest-value gap) on the table. - Auto-run
/investigateon any "why" prompt. Rejected — too aggressive; a suggestion nudge preserves user control and avoids false triggers on rhetorical questions. - Delete all 93 direct-command-unused skills now. Rejected — can't distinguish dead from new/library/agent-only/indirect without the inventory audit first (Rec 2).
Source coverage gaps
- Claude
history.jsonlhas no token/cost metadata; all dollar costs unavailable. - Agent-side skill contract loads are counted, but semantic categories such as parent-invoked, framework-invoked, library-only, and genuinely dead still need inventory classification.
- Codex rollup token events were not parsed for this update; rich Codex records were used only for assistant messages/tool-call arguments.
- Intent buckets use first-match keyword classification and are not mutually exhaustive.
Downstream implications
- Approving Rec 1 routes to
update-config(a settings.json hook edit — local, reversible). - Approving Rec 2 routes to
/skill-inventory(available in current session) to classify the 93-skill direct-command tail. - Approving Rec 3 edits CLAUDE.md shared conventions, which propagates to future sessions repo-wide.
11. Glossary Additions Gate
Proposed for research/glossary.md (flat repo — single parent glossary). Only approved terms are appended during the confirmed-page write step. Note: "manual ask" / "steering prompt" may already exist from a prior analyze-sessions run — if so, these Approve actions are no-ops.
| Term | Definition | Source | Category |
|---|---|---|---|
| skill shadowing | Hand-typing a freeform prompt whose intent an existing skill already covers end-to-end (e.g. typing "why is X" instead of invoking /investigate); an adoption/habit gap rather than a coverage gap | analyze-sessions skill-usage-rates | workflow |
| dead tail | The set of repo skills that are never (or almost never) invoked, distinct from genuinely dead skills because it can include new, library, or indirectly-invoked skills that no user types as a command | analyze-sessions skill-usage-rates | workflow |
Q6 (required) — Term: "skill shadowing"
Q7 (required) — Term: "dead tail"
12. Artifact Destination & Proposed File Changes
Already written this run (review-stage): this alignment page; the machine-local insights store update (.session-insights/insights.md + watermark — gitignored, not committed); and the prompt-history log under prompts/analyze-sessions/.
On approval (Stage 3), the proposed canonical writes are:
- Write the approved report to
research/analyze-sessions-skill-usage-rates.md(flat research path, matching existing layout). - Append approved glossary terms to
research/glossary.md(create with standard header if missing). - Convert this page to
confirmedand updatealignment/index.html. - Commit + push the page, report, glossary, and index (the insights store stays local/gitignored).
Q8 (required) — Approve the canonical artifact destination and file-change scope above?
13. Post-Approval Route
If Rec 1 is approved, the natural follow-up is update-config to wire the /investigate prompt-nudge hook. If Rec 2 is approved, route to /skill-inventory (skill-dev pack, installed ✓). Both are available in the active session.
Q9 (required) — Route after this page is confirmed?
14. Compile
Feedback-only path: select emphasize / 👎 / clarify on any section above, add notes, then compile feedback YAML here (or locally under that section) — available even with gate questions unanswered.
Final approval path: answer all 9 required questions, then compile answers.