Repository navigation
docs: tool descriptions are activation contracts; deferred loading hides them (#4) - #31
Merged
Merged
Conversation
…des them (#4) Case study of the T3 delegation failure (toolboxmd/chromeria#66) and fix (#67), a triggers section, two anti-pattern entries, two glossary terms and the loader route. The alwaysLoad debug-log figures are re-checked on #4. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
6 tasks
Contributor
Author
|
APPROVE No findings. I reviewed exact head |
This was referenced Sep 29, 2026
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.
What: Adds the case study, triggers section and anti-pattern entries for the lesson that MCP tool descriptions are activation contracts and deferred loading hides them.
Why: A Claude Code planner in T3 ran
codex execin the shell instead ofspawn_threadbecause the tool was deferred and its description never named the shell route it replaces (toolboxmd/chromeria#66, fixed in #67).So what: Luna max review of the exact head, then the user merges.
Closes #4
Refs #7
Changes
case-studies/2026-09-29-t3-delegation-tool-descriptions.md(new): the failure, its three causes (the planner's own account), the fix at chromeriaf8a22e9with the before and afterspawn_threaddescriptions, whatalwaysLoaddoes (Claude Code docs plus a new debug log), the n=1 fresh-session result, and seven things the evidence does not prove.docs/05-authoring/triggers.md: section "Tool descriptions are activation contracts too" (lead with when to use it; name the rationalized alternative; keep the few decision-point tools always loaded; trigger first under the 2,048-character truncation), with its claim boundary. Intro sentence and Sources updated.docs/10-anti-patterns.md: "Shell recipe in memory outranking the host's routing" and "Decision-point tool deferred behind tool search".GLOSSARY.md: Deferred tool, Decision-point tool.docs.json,README.md, loaderSKILL.mdrouting row ("Before writing or changing an MCP tool description, or choosing which tools load at session start"),public/llms.txtregenerated.07-mechanism-vs-decoration.md"Measure, reword, mechanism last" instead of repeating it.Evidence notes
alwaysLoadre-check (posted on Tool descriptions are activation contracts; deferred loading hides them #4, Tool descriptions are activation contracts; deferred loading hides them #4 (comment)): the debug line isDynamic tool loading: X/Y deferred tools included. One marked tool of two gives0/1, no mark gives0/2, and the model saw only the marked tool's schema. So the PR's "0/19 with the mark, 0/20 without" means 19 against 20 deferred, not zero deferred.f8a22e9:spawn_thread541 characters (chromeria#67's body says 528, from before its review fix),prism_submit470.descriptionfrontmatter does not name tool descriptions, so the new row is reached only once the Skill loads for another action. Widening an always-listed description is outside this ticket's file-scope entry ("one row") and would need its own trigger check..version-policy.jsonorVERSION(adoption is Gate version anchors and CHANGELOG entries in npm test #22).Proof
npm ci && npm testunder Node 22.23.1 on this head: build-llms, check-docs-links (mint broken-links), llms coverage, no absolute paths, bare paths, provider-neutral docs all pass.53f1864(docs: activation and budget pages match measured behavior (#12) #28 merged).Elon record
f8a22e9and its parent26b5c3f; read Claude Code's MCP docs on tool search andalwaysLoad; ran the two-arm_metadebug-log probe on Claude Code 2.1.284; recomputed the description lengths; rannpm test.🤖 Generated with Claude Code