Repository navigation
Keep duplicate /skill-doctor rows, refuse zero-row tables, report unused plugins; record the 2026-10-15 plugin dispositions - #1153
Open
seathatflowsinourveins wants to merge 1 commit into
Conversation
…sed plugins; record the 2026-10-15 plugin dispositions tools/skill-usage/skill_usage.py (Claude Code 2.1.300, binary sha256 674deba0bba9aee479f4503c438b49303b6fdd304b9a471b14977aaec5215453): - parse_skill_doctor_listings keeps every printed row; each name-keyed row keeps its cells as before and gains `listings`, so claude-native-practice, printed from userSettings and projectSettings, loses neither row. The report's duplicate_listings gives the sources, each row's context, their sum (table_context_tokens) and the one listing (listing_context_tokens): 2.1.300 lists a name once (T5r and Hfr pass the loaded skills through lodash uniqBy on "name"; tkn prints y.get(e.name) on every row), and all 182 initial skill_listing attachments of this repository's sessions since the personal copy appeared name it once. - A table that parses to zero rows is refused as not measured; the refusal says whether the text was empty and how many skills the Claude config's skillUsage lists (read in process, names and counts only, only then). - listing_sources groups rows by source; plugins_unused_7d names each plugin with a listed skill whose every row shows no use in the last 7 days, less the owner-direction exceptions of tools/skill-usage/plugin-exceptions.json (created empty). claude-native-practice skills-library row (slots.json, its layer page and the snapshot label): the built-in claude-api skill superseding the disabled claude-api@anthropic-agent-skills plugin (anthropics/claude-code CHANGELOG.md at 94506ff0d3bd9185f1752da36e968775021fb48f, L7009 and L3528), the typesafe plugin duplicate disabled with the preloaded typesafe-ai kept, the synced plugins disabled (#1138), the claude-native-practice double row recorded as one listing (option (a), re-checked each release), and the syncClaudeAiSkills rejection reworded: unset and `true` both sync (settings-reference `syncClaudeAiSkills`, client 2.1.300). Evidence: evidence/artifacts/skills-listing-20261015 (one /skill-doctor run through run_skill_doctor at 2026-10-15T06:13:14Z, 0 turns, $0: 72 rows, 71 names, 1 duplicate, 5 plugins unused 7d; and the aggregate listing counts). Co-Authored-By: Claude Opus 5.5 <[email protected]>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Scope
tools/skill-usage/skill_usage.pykeeps every/skill-doctorrow, so a skill listed from two sources loses neither row. It refuses a table that parses to zero rows as "not measured", and it reports each plugin whose listed skills all show no use in 7 days. The practice skill's skills-library row records the 2026-10-15 plugin dispositions and theclaude-native-practicedouble row (option (a), accepted by the command center).f165498aalane:foundationtools/skill-usage/skill_usage.py, itsREADME.mdandplugin-exceptions.json(new and empty);tests/test_skill_usage.py,tests/test_native_practice_skills_listing.py(new) andtests/fixtures/skill_usage/skill-doctor-duplicate.txt(new);slots.jsonandinstructions-skills.md, plus the slot manifest'ssha256_when_labeled;evidence/artifacts/skills-listing-20261015/(new);docs/decisions/2026-10-04-pwsh7-windows-guidance.md: a line reference only;manifests/evidence.json.Double listing, measured cost (a correction to the accepted basis): option (a) was accepted on a cost of about 130 tokens/turn for the second row. The model is in fact shown the skill once, so the second row costs 0:
T5r, byte 228551628) passes loaded skills throughOi(…,"name"), wherevar Oi=T(byte 216279796) is lodashuniqBy./skill-doctortable: its skill set (Hfr, byte 227068501) uses the same dedupe. The table (tkn, byte 238412509) prints that name's estimate on every row, and the use cells are keyed by name too.The report gives
table_context_tokens(260: the two rows added together, not a cost) andlisting_context_tokens(130). The row stays option (a): no setting change, with the same two checks re-run each release.Items:
listingslist.skillUsagelists.skillUsageis read in process, names and counts only, and only when no row parsed. An empty table counts as a broken capture, because the client prints "(no skills loaded)" rather than empty text.listing_sourcesandplugins_unused_7d, minus the exceptions inplugin-exceptions.json, which starts empty. Owner-direction exceptions are added there by pull request.claude-apiskill supersedes the disabledclaude-api@anthropic-agent-skillsplugin;typesafe-aiis kept;syncClaudeAiSkillsrejection is reworded. Unset andtrueboth sync. Afalsein.claude/settings.local.jsonis honored, and the shared.claude/settings.jsonis not.Fresh
/skill-doctorrun (2026-10-15T06:13:14Z, 2.1.300, 0 turns, $0): 72 rows and 71 names, so 1 duplicate.SOTA sources
674deba0bba9aee479f4503c438b49303b6fdd304b9a471b14977aaec5215453). Byte offsets:T5rat 228551628;Hfrat 227068501;Oi=Tat 216279796;tknat 238412509;tcsat 227067812.CHANGELOG.mdat94506ff0d3bd9185f1752da36e968775021fb48f:claude-api);8ba90434…),syncClaudeAiSkills;4d090296…).listing-cost.jsonat head9f63fc311acd14ca4551d62e125517f4f563c356.Evidence-class table
source_review+native_provenlisting-attachments.json(182 attachments)native_provenskill-doctor-rows.json(headless/skill-doctor, 0 turns)synthetictests/test_skill_usage.pywith the real-row fixtureLocal commands run
Notes for the reads
tools/skill-usage/daily_skill_usage.py:103passes no--claude-timeout. One of three headless/skill-doctorruns hit the 30 s default, and the retry took about 32 s.adoption/skills/manifest.jsonstill names the two disabled plugins.slots.jsonand page headers still say client 2.1.295.sha256_when_labeled, so later ones need a manifest rebase.Checklist
skillUsageis read names and counts only.🤖 Generated with Claude Code