fix(tools): make every agent_skills pointer resolve - #473
Open
bbudaedu wants to merge 1 commit into
Open
Conversation
AGENT_GUIDE.md makes Layer 3 mandatory — "Every generation tool has an `agent_skills` field listing its Layer 3 skills. Read them before writing prompts. Layer 3 is not optional." Four of the 137 pointers the registry advertises name skills that do not exist, so the mandated read silently cannot happen, and `tts_selector` republishes its list to callers as `required_agent_skills`, propagating a dead name downstream. Each was repaired according to what the evidence showed it to be: - `hyperframes_compose` -> `website-to-hyperframes`. A stale name, not a missing file: .agents/skills/hyperframes/PROVENANCE.md records "`website-to-video` | Renamed upstream from `website-to-hyperframes`." The tool never followed the rename. Repointed; the other five entries in that list already resolve. - `openai_tts`, `tts_selector` -> `openai-docs`. Never vendored, and nothing in .agents/skills/ covers the OpenAI speech API. The nearest candidate, `text-to-speech`, documents HeyGen's Starfish endpoints and declares `allowed-tools: mcp__heygen__*`, so pointing there would send the agent at the wrong provider. Dropped rather than aimed somewhere misleading; tts_selector keeps its two entries that do resolve. - `screen_capture_selector` -> `screen-demo`. A category error: that names the Layer 2 pipeline directory, not a Layer 3 skill. No Layer 3 skill covers OS screen capture, and this selector routes only between screen_recorder (FFmpeg) and cap_recorder — neither `playwright-recording` nor `synthetic-screen-recording` describes what it does. Dropped; the capture guidance it wanted is already reachable through the pipeline manifest's per-stage `skill:` entries. An empty `agent_skills` is the BaseTool default and already the case for 18 of 102 tools, so the two removals need no further wiring. Coverage iterates the registry rather than naming tools, so a newly added tool is checked the moment it is discovered. Verified: the 4 pointers fail on the unfixed tree; full suite goes 964 -> 1103 passed with no regressions.
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.
The defect
AGENT_GUIDE.md makes Layer 3 mandatory:
Four of the 137 pointers the registry advertises name skills that do not exist under
.agents/skills/, so the mandated read silently cannot happen.tts_selectormakes it worse by republishing its list to callers asrequired_agent_skills, propagating a dead name downstream.The repair
Each pointer was repaired according to what the evidence showed it to be — repoint where a correct skill exists, drop where none does, rather than aiming at something merely adjacent.
website-to-hyperframes→website-to-video(stale name)Not a missing file.
.agents/skills/hyperframes/PROVENANCE.md:20records the rename:The tool never followed it. The other five entries in that same list already resolve.
openai-docs→ dropped (never vendored)Nothing in
.agents/skills/covers the OpenAI speech API. The nearest candidate,text-to-speech, documents HeyGen's Starfish endpoints and declaresallowed-tools: mcp__heygen__*— pointing there would actively send the agent at the wrong provider.tts_selectorkeeps its two entries that do resolve (text-to-speech,elevenlabs);openai_ttsis left with the default empty list and a comment saying why.screen-demo→ dropped (category error)That names the Layer 2 pipeline directory (
skills/pipelines/screen-demo/), not a Layer 3 skill. No Layer 3 skill covers OS screen capture, and this selector routes only betweenscreen_recorder(FFmpeg) andcap_recorder— neitherplaywright-recordingnorsynthetic-screen-recordingdescribes what it does. The capture guidance it was reaching for is already reachable through the manifest's per-stageskill:entries, so nothing is lost.An empty
agent_skillsis theBaseTooldefault and already the case for 18 of 102 tools, so the two removals need no further wiring.Coverage
tests/contracts/test_agent_skill_pointers.pyiterates the registry rather than naming tools, so a newly added tool is checked the moment it is discovered. It also guards against covering nothing, since a parametrized test over an empty list passes silently.Verification
make lint: passed.Related to #233 (".claude/skills out of sync with .agents/skills?") but deliberately narrower: this only makes existing pointers resolve and does not touch the two skill trees' relationship.
Independent of #468, #469 and #472 — no overlapping files.
🤖 Generated with Claude Code