Skip to content

Single-channel skill catalog with instructions default + HTTP discovery-on-change#80

Merged
olaservo merged 1 commit into
mainfrom
catalog-channel-instructions-default
Jul 5, 2026
Merged

Single-channel skill catalog with instructions default + HTTP discovery-on-change#80
olaservo merged 1 commit into
mainfrom
catalog-channel-instructions-default

Conversation

@olaservo

@olaservo olaservo commented Jul 5, 2026

Copy link
Copy Markdown
Owner

Summary

  • BREAKING — single catalog channel: the <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.
  • instructions is the new default: server instructions arrive in the initialize handshake, 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-description mode remains available (dynamic via tools/listChanged) but requires ENABLE_TOOL_SEARCH=false.
  • HTTP discovery-on-change: HTTP mode now runs the same file watchers + GitHub/well-known polling as stdio, wired to a new state-only 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.)
  • Eval harness knobs: --catalog= (forwarded to the server under test) and --tool-search=on|off (sets ENABLE_TOOL_SEARCH explicitly both ways); both recorded in result JSON.
  • Docs updated throughout: README, CLAUDE.md, evals/README, skilljack-docs skill.

Eval evidence (agent-sdk 0.3.201, claude-sonnet-4-6, two batches)

Catalog Tool search code-style template-generator xlsx-openpyxl
instructions (default) on PASS PASS (incl. resource load) PASS
tool-description on FAIL (control — description deferred)
tool-description off PASS (regression)

Test plan

  • npm run build clean, npm test 246/246 (new: getCatalogMode parsing, per-mode getToolDescription/getServerInstructions, per-mode HTTP initialize instructions, HTTP freshness across connections)
  • End-to-end smoke: SKILL.md added while --http=0 server runs appears in a new client's initialize instructions
  • Eval batches above

🤖 Generated with Claude Code

…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]>
@olaservo
olaservo merged commit 5e9f7cd into main Jul 5, 2026
1 check passed
@olaservo
olaservo deleted the catalog-channel-instructions-default branch July 5, 2026 16:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant