Single-channel skill catalog with instructions default + HTTP discovery-on-change#80
Merged
Merged
Conversation
…ry-on-change BREAKING: the <available_skills> catalog is now delivered through exactly one channel, selected by --catalog=<instructions|tool-description> (env: SKILLJACK_CATALOG) — never both. The default is server instructions, which arrive in the initialize handshake and survive Claude Code tool search / deferred tool loading; evals confirm 3/3 previously-failing tasks now activate out of the box with tool search enabled. The previous behavior (catalog in both server instructions and the load-skill tool description) is removed; tool-description mode remains available but needs ENABLE_TOOL_SEARCH=false. HTTP mode now has discovery-on-change like stdio: file watchers and GitHub/well-known polling refresh skillState via a new state-only refreshSkillState(), and every request reads that state fresh — new connections get a current instructions catalog. Stateless HTTP still cannot push listChanged notifications; connected clients see changes on their next request or reconnect. On stdio, instructions mode freezes the catalog until restart (the SDK sets instructions at construction only). Eval harness gains --catalog and --tool-search=on|off knobs (ENABLE_TOOL_SEARCH is now set explicitly both ways); both settings are recorded in result summaries. Docs updated throughout (README, CLAUDE.md, evals/README, skilljack-docs skill). Co-Authored-By: Claude Fable 5 <[email protected]>
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.
Summary
<available_skills>catalog now goes through exactly one channel, selected by--catalog=<instructions|tool-description>/SKILLJACK_CATALOG, never both. The old always-on dual delivery (instructions + tool description) is removed.instructionsis the new default: server instructions arrive in theinitializehandshake, so the catalog reaches the model even with Claude Code tool search / deferred tool loading enabled — skill auto-activation now works out of the box on default modern clients (issue Skill catalog (dynamic, via tool description) is invisible under tool search / deferred tools #78).tool-descriptionmode remains available (dynamic viatools/listChanged) but requiresENABLE_TOOL_SEARCH=false.refreshSkillState(). Every request reads skillState fresh, so new connections always get a current catalog. (Stateless HTTP still can't push notifications; on stdio, instructions mode freezes the catalog until restart since the SDK sets instructions at construction.)--catalog=(forwarded to the server under test) and--tool-search=on|off(setsENABLE_TOOL_SEARCHexplicitly both ways); both recorded in result JSON.Eval evidence (agent-sdk 0.3.201, claude-sonnet-4-6, two batches)
Test plan
npm run buildclean,npm test246/246 (new:getCatalogModeparsing, per-modegetToolDescription/getServerInstructions, per-mode HTTPinitializeinstructions, HTTP freshness across connections)--http=0server runs appears in a new client'sinitializeinstructions🤖 Generated with Claude Code