Improve Search Skill Prompt Recognition

how to improve the entire search skill so when user says something like "research, search, investigate" it uses entire search cli. give ideas no implementation yet. also why doesn't it currently work that way
Why it doesn't trigger today
Skill routing in Claude Code is purely description matching. The model sees only the description: line in skills/search/SKILL.md:3, and that line is scoped to "prior work, checkpoints, or agent conversations". Nothing in it claims the verbs "research", "investigate", or bare "search", so those requests fall to the model's strong default priors: "search" means grep and Glob, "research" means WebSearch or reading files, "investigate" means systematic-debugging or the Explore agent. The using-entire orchestrator has the same gap. Its routing table maps "find prior work" to search, but its own description says "codebase exploration or understanding", which loses to the built-in tools for the same reason. Two other things compound it: the skill body says to prefer local grep for the working copy, which the model over-generalizes, and there is no hook or harness-level nudge, so nothing fires when the description match fails.
Ideas, roughly ordered by leverage
- Rewrite the description as a trigger list, not a definition. Follow the recall and teach pattern: "Triggers on: research X, investigate X, search for X, look into X, dig into X, find out how X works, what do we know about X". Include the negative boundary ("not for grepping the current working copy") so it competes cleanly with grep rather than being ignored.
- Claim the verb even when the target is ambiguous. Make the description say the skill is the first step of any research or investigation task: run one checkpoint search before reading code, then fall back. This turns it from a destination into a pre-step, which is the framing that actually wins against default tools.
- Strengthen
using-entireas the umbrella. Its description is the one most likely to match generic "investigate" and "research" phrasing. Add those verbs there and make its first action a search call, so routing succeeds even when the search skill itself is not selected. - Add a UserPromptSubmit hook in the plugin that regex-matches those verbs and injects a one-line reminder to run the entire search cli. Hooks are the only mechanism that guarantees a nudge when description matching fails. Keep the regex conservative to avoid noise on unrelated prompts.
- Add a "search first" default to the repo template. Ship a snippet users can paste into CLAUDE.md or AGENTS.md, since user instructions outrank skills. Your global CLAUDE.md already does this for MCP versus CLI, which shows the pattern works.
- Add eval prompts using
claude plugin evalwith phrasings like "research how auth tokens are refreshed" and "investigate the flaky deploy" so description changes are measured rather than guessed. Currently the repo has no eval suite. - Reduce harness friction so the skill is cheap to choose: the Codex sandbox section and the interactive-TUI warning are long and scary. A shorter, confident preamble lowers the model's hesitation to invoke it.
- Consider a plain-language alias skill named
researchorinvestigatethat just delegates to search. Skill names are also matched, and a name that echoes the user's verb is a strong signal.
The cheapest high-impact combination is 1, 3, and 6. Item 4 is the only one that makes the behavior deterministic.
Base directory for this skill: /Users/alisha/.claude/plugins/cache/claude-plugins-official/superpowers/6.3.0/skills/writing-skills
Writing Skills
Overview
Writing skills IS Test-Driven Development applied to process documentation.
Personal skills live in your runtime's skills directory (~/.claude/skills/ on Claude Code) — see codex-tools.md or gemini-tools.md for the path on those runtimes. Codex, Copilot CLI, and Gemini CLI all also recognize ~/.agents/skills/ as a cross-runtime alias.
You write test cases (pressure scenarios with subagents), watch them fail (baseline behavior), write the skill (documentation), watch tests pass (agents comply), and refactor (close loopholes).
Core principle: If you didn't watch an agent fail without the skill, you don't know if the skill teaches the right thing.
REQUIRED BACKGROUND: You MUST understand superpowers:test-driven-development before using this skill. That skill defines the fundamental RED-GREEN-REFACTOR cycle. This skill adapts TDD to documentation.
Official guidance: For Anthropic's official skill authoring best practices, see anthropic-best-practices.md. This document provides additional patterns and guidelines that complement the TDD-focused approach in this skill.
What is a Skill?
A skill is a reference guide for proven techniques, patterns, or tools. Skills help future agents find and apply effective approaches.
Skills are: Reusable techniques, patterns, tools, reference guides
Skills are NOT: Narratives about how you solved a problem once
TDD Mapping for Skills
| TDD Concept | Skill Creation |
|---|---|
| Test case | Pressure scenario with subagent |
| Production code | Skill document (SKILL.md) |
| Test fails (RED) | Agent violates rule without skill (baseline) |
| Test passes (GREEN) | Agent complies with skill present |
| Refactor | Close loopholes while maintaining compliance |
| Write test first | Run baseline scenario BEFORE writing skill |
| Watch it fail | Document exact rationalizations agent uses |
| Minimal code | Write skill addressing those specific violations |
| Watch it pass | Verify agent now complies |
| Refactor cycle | Find new rationalizations → plug → re-verify |
The entire skill creation process follows RED-GREEN-REFACTOR.
When to Create a Skill
Create when:
- Technique wasn't intuitively obvious to you
- You'd reference this again across projects
- Pattern applies broadly (not project-specific)
- Others would benefit
Don't create for:
- One-off solutions
- Standard practices well-documented elsewhere
- Project-specific conventions (put in your instructions file)
- Mechanical constraints (if it's enforceable with regex/validation, automate it—save documentation for judgment calls)
Skill Types
Technique
Concrete method with steps to follow (condition-based-waiting, root-cause-tracing)
Pattern
Way of thinking about problems (flatten-with-flags, test-invariants)
Reference
API docs, syntax guides, tool documentation (office docs)
Directory Structure
Flat namespace - all skills in one searchable namespace
Separate files for:
- Heavy reference (100+ lines) - API docs, comprehensive syntax
- Reusable tools - Scripts, utilities, templates
Keep inline:
- Principles and concepts
- Code patterns (< 50 lines)
- Everything else
SKILL.md Structure
Frontmatter (YAML):
- Two required fields:
nameanddescription(see agentskills.io/specification for all supported fields) - Max 1024 characters total
name: Use letters, numbers, and hyphens only (no parentheses, special chars)description: Third-person, describes ONLY when to use (NOT what it does)- Start with "Use when..." to focus on triggering conditions
- Include specific symptoms, situations, and contexts
- NEVER summarize the skill's process or workflow (see SDO section for why)
- Keep under 500 characters if possible
Skill Discovery Optimization (SDO)
Critical for discovery: Future agents need to FIND your skill
1. Rich Description Field
Purpose: Your agent reads the description to decide which skills to load for a given task. Make it answer: "Should I read this skill right now?"
Format: Start with "Use when..." to focus on triggering conditions
CRITICAL: Description = When to Use, NOT What the Skill Does
The description should ONLY describe triggering conditions. Do NOT summarize the skill's process or workflow in the description.
Why this matters: Testing revealed that when a description summarizes the skill's workflow, an agent may follow the description instead of reading the full skill content. A description saying "code review between tasks" caused an agent to do ONE review, even though the skill's flowchart clearly showed TWO reviews (spec compliance then code quality).
When the description was changed to just "Use when executing implementation plans with independent tasks" (no workflow summary), the agent correctly read the flowchart and followed the two-stage review process.
The trap: Descriptions that summarize workflow create a shortcut agents will take. The skill body becomes documentation agents skip.
Content:
- Use concrete triggers, symptoms, and situations that signal this skill applies
- Describe the problem (race conditions, inconsistent behavior) not language-specific symptoms (setTimeout, sleep)
- Keep triggers technology-agnostic unless the skill itself is technology-specific
- If skill is technology-specific, make that explicit in the trigger
- Write in third person (injected into system prompt)
- NEVER summarize the skill's process or workflow
2. Keyword Coverage
Use words an agent would search for:
- Error messages: "Hook timed out", "ENOTEMPTY", "race condition"
- Symptoms: "flaky", "hanging", "zombie", "pollution"
- Synonyms: "timeout/hang/freeze", "cleanup/teardown/afterEach"
- Tools: Actual commands, library names, file types
3. Descriptive Naming
Use active voice, verb-first:
- ✅
creating-skillsnotskill-creation - ✅
condition-based-waitingnotasync-test-helpers
4. Token Efficiency (Critical)
Problem: getting-started and frequently-referenced skills load into EVERY conversation. Every token counts.
Target word counts:
- getting-started workflows: <150 words each
- Frequently-loaded skills: <200 words total
- Other skills: <500 words (still be concise)
Techniques:
Move details to tool help:
Use cross-references:
Compress examples:
Eliminate redundancy:
- Don't repeat what's in cross-referenced skills
- Don't explain what's obvious from command
- Don't include multiple examples of same pattern
Verification:
Name by what you DO or core insight:
- ✅
condition-based-waiting>async-test-helpers - ✅
using-skillsnotskill-usage - ✅
flatten-with-flags>data-structure-refactoring - ✅
root-cause-tracing>debugging-techniques
Gerunds (-ing) work well for processes:
creating-skills,testing-skills,debugging-with-logs- Active, describes the action you're taking
5. Cross-Referencing Other Skills
When writing documentation that references other skills:
Use skill name only, with explicit requirement markers:
- ✅ Good:
**REQUIRED SUB-SKILL:** Use superpowers:test-driven-development - ✅ Good:
**REQUIRED BACKGROUND:** You MUST understand superpowers:systematic-debugging - ❌ Bad:
See skills/testing/test-driven-development(unclear if required) - ❌ Bad:
@skills/testing/test-driven-development/SKILL.md(force-loads, burns context)
Why no @ links: @ syntax force-loads files immediately, consuming 200k+ context before you need them.
Flowchart Usage
Use flowcharts ONLY for:
- Non-obvious decision points
- Process loops where you might stop too early
- "When to use A vs B" decisions
Never use flowcharts for:
- Reference material → Tables, lists
- Code examples → Markdown blocks
- Linear instructions → Numbered lists
- Labels without semantic meaning (step1, helper2)
See graphviz-conventions.dot in this directory for graphviz style rules.
Visualizing for your human partner: Use render-graphs.js in this directory to render a skill's flowcharts to SVG:
Code Examples
One excellent example beats many mediocre ones
Choose most relevant language:
- Testing techniques → TypeScript/JavaScript
- System debugging → Shell/Python
- Data processing → Python
Good example:
- Complete and runnable
- Well-commented explaining WHY
- From real scenario
- Shows pattern clearly
- Ready to adapt (not generic template)
Don't:
- Implement in 5+ languages
- Create fill-in-the-blank templates
- Write contrived examples
You're good at porting - one great example is enough.
File Organization
Self-Contained Skill
When: All content fits, no heavy reference needed
Skill with Reusable Tool
When: Tool is reusable code, not just narrative
Skill with Heavy Reference
When: Reference material too large for inline
The Iron Law (Same as TDD)
This applies to NEW skills AND EDITS to existing skills.
Write skill before testing? Delete it. Start over. Edit skill without testing? Same violation.
No exceptions:
- Not for "simple additions"
- Not for "just adding a section"
- Not for "documentation updates"
- Don't keep untested changes as "reference"
- Don't "adapt" while running tests
- Delete means delete
REQUIRED BACKGROUND: The superpowers:test-driven-development skill explains why this matters. Same principles apply to documentation.
Testing All Skill Types
Different skill types need different test approaches:
Discipline-Enforcing Skills (rules/requirements)
Examples: TDD, verification-before-completion, designing-before-coding
Test with:
- Academic questions: Do they understand the rules?
- Pressure scenarios: Do they comply under stress?
- Multiple pressures combined: time + sunk cost + exhaustion
- Identify rationalizations and add explicit counters
Success criteria: Agent follows rule under maximum pressure
Technique Skills (how-to guides)
Examples: condition-based-waiting, root-cause-tracing, defensive-programming
Test with:
- Application scenarios: Can they apply the technique correctly?
- Variation scenarios: Do they handle edge cases?
- Missing information tests: Do instructions have gaps?
Success criteria: Agent successfully applies technique to new scenario
Pattern Skills (mental models)
Examples: reducing-complexity, information-hiding concepts
Test with:
- Recognition scenarios: Do they recognize when pattern applies?
- Application scenarios: Can they use the mental model?
- Counter-examples: Do they know when NOT to apply?
Success criteria: Agent correctly identifies when/how to apply pattern
Reference Skills (documentation/APIs)
Examples: API documentation, command references, library guides
Test with:
- Retrieval scenarios: Can they find the right information?
- Application scenarios: Can they use what they found correctly?
- Gap testing: Are common use cases covered?
Success criteria: Agent finds and correctly applies reference information
Common Rationalizations for Skipping Testing
| Excuse | Reality |
|---|---|
| "Skill is obviously clear" | Clear to you ≠ clear to other agents. Test it. |
| "It's just a reference" | References can have gaps, unclear sections. Test retrieval. |
| "Testing is overkill" | Untested skills have issues. Always. 15 min testing saves hours. |
| "I'll test if problems emerge" | Problems = agents can't use skill. Test BEFORE deploying. |
| "Too tedious to test" | Testing is less tedious than debugging bad skill in production. |
| "I'm confident it's good" | Overconfidence guarantees issues. Test anyway. |
| "Academic review is enough" | Reading ≠ using. Test application scenarios. |
| "No time to test" | Deploying untested skill wastes more time fixing it later. |
All of these mean: Test before deploying. No exceptions.
Match the Form to the Failure
Before writing guidance, classify the baseline failure. The form that bulletproofs one failure type measurably backfires on another.
| Baseline failure | Right form | Wrong form |
|---|---|---|
| Skips/violates a rule under pressure (knows better, does it anyway) | Prohibition + rationalization table + red flags (see Bulletproofing below) | Soft guidance ("prefer...", "consider...") |
| Complies, but output has the wrong shape (bloated prompt, buried verdict, restated spec) | Positive recipe or contract: state what the output IS — its parts, in order | Prohibition list ("don't restate", "never narrate") |
| Omits a required element from something they already produce | Structural: REQUIRED field or slot in the template they fill in | Prose reminders near the template |
| Behavior should depend on a condition | Conditional keyed to an observable predicate ("if the brief exists, reference it") | Unconditional rule + exemption clauses |
Why prohibitions backfire on shaping problems: under a competing incentive ("make the prompt self-contained"), agents negotiate with "don't X". In head-to-head wording tests on dispatch-prompt guidance, the prohibition arm produced clearly more of the unwanted content than the recipe arm (fully separated distributions), and trended worse than even the no-guidance control — micro-test your own case rather than assuming, but never reach for the prohibition by default. A recipe leaves nothing to negotiate: the output matches the stated shape or it doesn't.
Rules for whichever form you pick:
- No nuance clauses. "Don't X unless it matters" reopens the negotiation — appending a single nuance clause to a winning recipe degraded it from consistent to noisy in the same wording tests. Express a real exception as its own conditional on an observable predicate.
- Exemption clauses don't scope. "This limit doesn't apply to code blocks" still suppresses code blocks. If part of the output must be exempt, restructure so the rule can't reach it.
Bulletproofing Skills Against Rationalization
Skills that enforce discipline (like TDD) need to resist rationalization. Agents are smart and will find loopholes when under pressure.
Scope: this toolkit is for discipline failures — an agent that knows the rule and skips it under pressure. For wrong-shaped output or omitted elements, prohibition-based bulletproofing backfires; use the forms in Match the Form to the Failure instead.
Psychology note: Understanding WHY persuasion techniques work helps you apply them systematically. See persuasion-principles.md for research foundation (Cialdini, 2021; Meincke et al., 2025) on authority, commitment, scarcity, social proof, and unity principles.
Close Every Loophole Explicitly
Don't just state the rule - forbid specific workarounds:
<Bad> ```markdown Write code before test? Delete it. ``` </Bad> <Good> ```markdown Write code before test? Delete it. Start over.No exceptions:
- Don't keep it as "reference"
- Don't "adapt" it while writing tests
- Don't look at it
- Delete means delete
This cuts off entire class of "I'm following the spirit" rationalizations.
Build Rationalization Table
Capture rationalizations from baseline testing (see Testing section below). Every excuse agents make goes in the table:
Create Red Flags List
Make it easy for agents to self-check when rationalizing:
Update SDO for Violation Symptoms
Add to description: symptoms of when you're ABOUT to violate the rule:
RED-GREEN-REFACTOR for Skills
Follow the TDD cycle:
RED: Write Failing Test (Baseline)
Run pressure scenario with subagent WITHOUT the skill. Document exact behavior:
- What choices did they make?
- What rationalizations did they use (verbatim)?
- Which pressures triggered violations?
This is "watch the test fail" - you must see what agents naturally do before writing the skill.
GREEN: Write Minimal Skill
Write skill that addresses those specific rationalizations. Don't add extra content for hypothetical cases.
Run same scenarios WITH skill. Agent should now comply.
REFACTOR: Close Loopholes
Agent found new rationalization? Add explicit counter. Re-test until bulletproof.
Micro-Test Wording Before Full Scenarios
Full pressure-scenario runs are the final gate, but they are slow and expensive per iteration. Verify the wording itself first with micro-tests:
- One fresh-context sample per call — a raw API call, or a single-shot subagent if you don't have API access. System prompt = the realistic context the guidance will live in (the full skill or prompt template, not the guidance in isolation); user message = a task that tempts the failure.
- Always include a no-guidance control. If the control doesn't exhibit the failure, there is nothing to fix — stop, don't author the guidance.
- 5+ reps per variant. Single samples lie.
- Manually read every flagged match. Score programmatically if you like, but template echoes and quoted counter-examples masquerade as hits; automated counts alone overstate both failure and success.
- Variance is a metric. When guidance lands, reps converge on the same shape. Five different interpretations across five reps means the wording isn't binding — tighten the form before adding words.
Micro-tests verify wording; they do not replace pressure scenarios for discipline skills.
Testing methodology: See testing-skills-with-subagents.md for the complete testing methodology:
- How to write pressure scenarios
- Pressure types (time, sunk cost, authority, exhaustion)
- Plugging holes systematically
- Meta-testing techniques
Anti-Patterns
❌ Narrative Example
"In session 2025-10-03, we found empty projectDir caused..." Why bad: Too specific, not reusable
❌ Multi-Language Dilution
example-js.js, example-py.py, example-go.go Why bad: Mediocre quality, maintenance burden
❌ Code in Flowcharts
Why bad: Can't copy-paste, hard to read
❌ Generic Labels
helper1, helper2, step3, pattern4 Why bad: Labels should have semantic meaning
STOP: Before Moving to Next Skill
After writing ANY skill, you MUST STOP and complete the deployment process.
Do NOT:
- Create multiple skills in batch without testing each
- Move to next skill before current one is verified
- Skip testing because "batching is more efficient"
The deployment checklist below is MANDATORY for EACH skill.
Deploying untested skills = deploying untested code. It's a violation of quality standards.
Skill Creation Checklist (TDD Adapted)
IMPORTANT: Create a todo for EACH checklist item below.
RED Phase - Write Failing Test:
- Create pressure scenarios (3+ combined pressures for discipline skills)
- Run scenarios WITHOUT skill - document baseline behavior verbatim
- Identify patterns in rationalizations/failures
GREEN Phase - Write Minimal Skill:
- Name uses only letters, numbers, hyphens (no parentheses/special chars)
- YAML frontmatter with required
nameanddescriptionfields (max 1024 chars; see spec) - Description starts with "Use when..." and includes specific triggers/symptoms
- Description written in third person
- Keywords throughout for search (errors, symptoms, tools)
- Clear overview with core principle
- Address specific baseline failures identified in RED
- Guidance form matches the failure type (see Match the Form to the Failure)
- For behavior-shaping guidance: wording micro-tested against a no-guidance control (5+ reps, every flagged match read manually) — N/A for pure reference skills
- Code inline OR link to separate file
- One excellent example (not multi-language)
- Run scenarios WITH skill - verify agents now comply
REFACTOR Phase - Close Loopholes:
- Identify NEW rationalizations from testing
- Add explicit counters (if discipline skill)
- Build rationalization table from all test iterations
- Create red flags list
- Re-test until bulletproof
Quality Checks:
- Small flowchart only if decision non-obvious
- Quick reference table
- Common mistakes section
- No narrative storytelling
- Supporting files only for tools or heavy reference
Deployment:
- Commit skill to git and push to your fork (if configured)
- Consider contributing back via PR (if broadly useful)
Discovery Workflow
How future agents find your skill:
- Encounters problem ("tests are flaky")
- Searches skills (greps descriptions, browses categories)
- Finds SKILL (description matches)
- Scans overview (is this relevant?)
- Reads patterns (quick reference table)
- Loads example (only when implementing)
Optimize for this flow - put searchable terms early and often.
Waiting on the docs lookup for the eval and hook schemas before writing the eval cases, since the baseline run has to come before the skill edits.
Committed on branch skill/search-research-triggers (not pushed). The pre-existing .entire/ changes were left out of the commit.
What changed
- Descriptions in
skills/search/SKILL.mdandskills/using-entire/SKILL.mdnow claim "research", "investigate", "look into", "dig into", and "search for", with an explicit boundary against local grep. The search skill also gained a Search First section and a shorter Codex sandbox note. - Hook at
hooks/research-nudge.shfires on research-shaped prompts and injects a reminder to run the Entire CLI search first. It stays quiet when the prompt mentions grep or ripgrep. Claude Code only. - README gained a section explaining the routing problem, the hook, and a one-line CLAUDE.md or AGENTS.md snippet for agents that ignore hooks.
- Evals under
evals/with nineclaude plugin evalcases, registered in the plugin manifest. Results directory is git-ignored.
Measured results (2 runs per case, all in evals/README.md)
| Case | Before | Descriptions only | With hook |
|---|---|---|---|
| dig into / look into | 0/2 | 2/2 | 2/2 |
| bare "Research X" / "Investigate X" | 0/2 | 0/2 | 2/2 |
| grep control (must not trigger) | 2/2 | 2/2 | 2/2 |
The descriptions fix the softer phrasings on their own, which is what Codex, Gemini, and Cursor installs will get. Bare "research" and "investigate" verbs only move with the hook or a CLAUDE.md line.
Left out
- No alias
researchskill. A second skill with the same trigger surface would compete with search in routing and get installed everywhere by the skills CLI. The hook covers the same gap deterministically. - Eval graders check Skill invocation, not the Bash call. The eval sandbox refuses Bash grants on this machine because Docker Desktop's plugin symlinks live under
~/.docker. If you move that store to a plain directory, a Bash grader forentire searchcan be added back. - Plugin version not bumped. Past commits do that in a separate release commit.
Running the evals requires CLAUDE_CODE_WALNUT_SPIRE=1, the early-access gate. Full run logs and HTML reports are in ~/.claude/tmp/search-skill-triggers/.
Base directory for this skill: /Users/alisha/.claude/skills/rubber-duck
Rubber Duck
The user is looking at something dense — usually a long agent response or a findings dump — and wants to understand it, not act on it. Your whole job is to be the clear, patient explainer and then a sounding board for their questions. Think out loud with them, in plain language.
The one job
Turn the wall of text into something a smart person with no context can follow in under a minute, then answer whatever they ask next — still briefly.
Hard rules (do not break these)
- Do NOT write a plan, and do NOT enter plan mode. No ExitPlanMode, no writing-plans/brainstorming skills, no "here's how we'd fix it" roadmaps.
- Do NOT change code, run builds, or edit files. This is understanding only.
- Do NOT make a todo list. It's a conversation, not a task.
- Stay read-only. Reading a file or scrolling the text to explain it is fine. Anything that does something is not.
- Be concise — this is the point of the skill. You are the antidote to the wall of text, so don't produce another one. Lead with the answer. Short sentences. No preamble, no "great question", no restating the question back.
- Plain language over jargon. No file paths, line numbers, symbol names, or
code snippets unless the user asks for them. Names of systems/people are fine;
citations are not. (This is the same spirit as the
architecture-findingsskill — the story, not the lookup table.)
First explanation — the format
Keep it to roughly this, and stop:
- One-line TL;DR. The single most important thing, first.
- 3–5 short bullets covering: what's actually going on, why it matters, and (if relevant) what's broken or being decided. One idea per bullet.
- One line on "so what" — the upshot, or the decision in front of them.
If the source genuinely has more than fits, say "there's more detail under X if you want it" and let them pull it — don't push it.
Use an analogy when it makes a hard idea click. Skip it when it doesn't.
The follow-up loop
After the first explanation, they'll ask things. For each:
- Answer the specific question and nothing more. One concept at a time.
- Stay just as concise — don't let answers creep back into walls of text.
- It's fine to say "not sure / the text doesn't say" rather than guess.
- If a question needs you to look something up to answer honestly, look (read only), then answer plainly.
Keep going as long as they're asking. You're the duck — they're thinking out loud and you're helping them see it.
When they're ready to act
The moment the user shifts from "help me understand" to "okay let's fix/build/ plan this," rubber-duck mode is over. Don't quietly start doing it inside this mode. Say something like: "That's action territory — want me to pick up that work?" and let them start the real task (a plan, a dispatch, an edit) as its own thing. Your job here ends at understanding.
TL;DR: The search skill wasn't triggering on "research" or "investigate" because the agent only reads a one-line description to decide which skill to use, and that line never claimed those words. I fixed it in two layers and proved it with before-and-after tests.
- How skill picking works: The agent sees a short description per skill and matches your phrasing against it. The old description said "prior work, checkpoints", so "investigate X" lost to the agent's habit of grepping or reading code.
- Layer one, descriptions: I rewrote the search and using-entire descriptions to explicitly claim "research", "investigate", "look into", "dig into". This alone fixed the softer phrasings and is the only part other agents like Codex or Cursor will get.
- Layer two, a hook: In Claude Code, a small script now watches each prompt you type. If it looks research-shaped, it slips the agent a reminder to run Entire search first. This is the only thing that moved bare prompts like "Investigate the flaky login redirect."
- Proof: I built nine test prompts and ran them before and after. Four failed before, all nine pass now, and a "just grep this repo" control still correctly does not trigger search.
- One snag: The test harness couldn't be given shell access on your machine because of Docker Desktop symlinks, so the tests check "did it pick the skill" rather than "did it run the command."
So what: It's committed on a branch, not pushed. The remaining judgment call is whether you want the hook in the plugin, since it's Claude-only and the README also offers a one-line CLAUDE.md alternative.
can you also add search to the key words / description. so if I say "search x" also do the test pass without the hook?
Done, committed as a second commit on the same branch.
- Description change: both the search and using-entire descriptions now list bare "search X" first, ahead of "search for X".
- New test: added a
search-plaincase with the prompt "Search rate limiting middleware." and ran it with the hook removed. It passed 2/2, as did the existing "Search for anything on rate limiting middleware" case.
Without the hook, the current state is:
| Phrasing | Without hook |
|---|---|
| search X, search for X, dig into X, look into X | pass |
| research X, investigate X (bare, no hint) | fail |
So "search" never needed the hook. The hook is only earning its keep on bare "research" and "investigate".
The two eval runs are taking longer than the foreground window and continue in the background. I'll wait for the completion notice rather than poll; nothing else can proceed until the hooks directory is restored by that command.
The ablation changes the story somewhat. With a realistic fixture repo, the old descriptions already triggered on bare "research" and "investigate" in 4 of 4 runs, and on bare "search" in 1 of 2. The earlier 0/2 failures were partly an artifact of the eval running in an empty scratch repo, where the agent concluded there was nothing to research and stopped.
With the new descriptions and the same fixture, all three bare cases went 6 of 6. So the new wording is at least as good and fixed the one flaky "search X" run, but the honest headline is that the fixture mattered more than I first thought.
The full nine-case run without the hook is still going. I'll report when it finishes, then update the evals README with the corrected numbers and commit.
It now works without the hook. Committed as a third commit on skill/search-research-triggers, still unpushed.
What changed
- Descriptions for the search and using-entire skills now say to invoke the skill as the first action on research, investigate, look into, dig into, or search requests, before Glob, Grep, or Read. They also state that an empty or unfamiliar working copy is not a reason to skip, since the history lives on the Entire server.
- Eval fixture. The three bare-verb cases now build a small fixture repo via a scaffold script. The earlier empty scratch directory made the agent conclude there was nothing to research, which was failing the cases for the wrong reason.
- Hook kept but marked optional in the README. Nothing depends on it anymore.
Results with the hook removed, 2 runs each
| Case | Old descriptions | New descriptions |
|---|---|---|
| dig into, look into | 0/2 each | 2/2 each |
| bare research, investigate | 2/2 each with fixture | 2/2 each |
| bare search | 1/2 | 2/2 |
| grep control (must not trigger) | 2/2 | 2/2 |
In every passing run the very first tool call was the Entire skill. The one correction to my earlier report: with a realistic repo, the old wording already caught bare "research" and "investigate" most of the time. The rewrite's clear wins are the softer phrasings and the flaky bare "search".
The hook is now dead weight unless you want the reminder as insurance. Say the word and I'll drop it from the branch.
Hook removed and committed. The hooks/ directory is gone, and the README and eval notes no longer mention it beyond a line stating the plugin ships none.
The branch skill/search-research-triggers now has four commits and is not pushed:
- Description rewrite, Search First section, evals, and README section
- Bare "search X" phrasing added
- Descriptions made sufficient on their own, plus eval fixture repo
- Hook dropped
What lands: rewritten descriptions in the search and using-entire skills, the eval suite under evals/ with its manifest entry, and a README section with the optional CLAUDE.md line. Pre-existing .entire/ changes remain uncommitted and untouched.
can you install it under search-test in my global claude so I can try it out. remove the current search-version
Installed. The old search-test skill in ~/.claude/skills/ was overwritten with the branch's search skill, renamed to search-test in its frontmatter so it doesn't collide with the plugin's entire:search.
Two things to know when trying it:
- New sessions only. Skill descriptions load at session start, so open a fresh Claude Code session to pick it up.
- Both versions coexist. The installed
entireplugin still provides the oldentire:searchwith the original description. If you want a clean comparison, temporarily disable the plugin or watch which one gets invoked; the response headerEntire Search:appears for both, so check the skill name in the tool call.
The using-entire orchestrator changes are not installed globally, since only the search skill was requested. Say so if you want that one too.
Base directory for this skill: /Users/alisha/.claude/plugins/cache/entire-internal/entire-internal/1.4.1/skills/github-pr-review
GitHub PR Review
GitHub PR interaction via gh CLI. For evaluating feedback, use superpowers:receiving-code-review.
Commands
Scripts are executable — invoke them directly using their full path (e.g. /path/to/pr-info), not via bash /path/to/pr-info.
Review threads (inline code comments)
| Operation | Command |
|---|---|
| Get PR context | pr-info → {owner_repo, number, author} |
| Unresolved threads | pr-threads <owner/repo> <pr> |
| Threads needing response | pr-threads <owner/repo> <pr> <author> |
| All threads (inc. resolved) | pr-threads <owner/repo> <pr> --all |
| Read a thread | pr-thread <thread_id> → {path, line, diff_hunk, is_resolved, comments} |
| Reply to a thread | pr-reply <owner/repo> <pr> <reply_to_id> <body> |
thread_id and reply_to_id come from pr-threads output.
General PR conversation
| Operation | Command |
|---|---|
| PR conversation comments | pr-comments <owner/repo> <pr> → [{id, author, body}] |
PR management
| Operation | Command |
|---|---|
| Create PR | gh pr create --title "T" --body "B" [--draft] |
| Mark ready / draft | gh pr ready [--undo] [number] |
| Edit PR | gh pr edit [number] --title "T" --body "B" |
Workflow: Respond to PR Review
- Get context:
pr-info - Fetch threads needing response:
pr-threadswith author filter - For each thread:
pr-threadto read full conversation + diff context- Group related threads (e.g. same line from multiple comments)
- Use
superpowers:receiving-code-reviewfor evaluation - IMPORTANT: Step through grouped feedback one by one with the user
- Fix code and/or note reply
- Commit and push fixes (need commit shas for replies)
- If rebased: re-fetch threads — comment IDs change after force-push
- Reply to each thread:
pr-replyusingreply_to_idfrom thread, with commit ref + description - Ask if ready to mark PR as ready for review
Common Mistakes
| Mistake | Fix |
|---|---|
| Top-level reply | Use pr-reply (hits /comments/{id}/replies, not /comments) |
| Wrong ID for reply | Use reply_to_id from pr-threads output, not thread_id |
| Re-responding to threads | Pass author arg to pr-threads to filter |
| Forgetting to reply after fix | Always reply to confirm fix |
| 404 after rebase | Re-fetch threads — IDs change after force-push |
Setup (One-Time)
Fine-grained PAT at github.com → Settings → Developer settings → Fine-grained tokens:
| Permission | Level |
|---|---|
| Pull requests | Read & Write |
| Contents | Read |
Permissions are configured in the plugin's settings.json.
PR opened: https://github.com/entireio/skills/pull/46
It is a regular (non-draft) PR against main with the four commits from skill/search-research-triggers. The body covers the routing problem, the description and eval changes, the measured before/after table, and the note that the hook was tried and dropped. The two uncommitted .entire/ files the warning mentions are your pre-existing local changes and are not part of the PR.
From the repo root on the branch:
What each part does:
CLAUDE_CODE_WALNUT_SPIRE=1opens the early-access gate. Without it the command prints "currently in early access" and exits. You can put it underenvin~/.claude/settings.jsoninstead of the shell.--scaffoldruns each case'sscaffold.sh, which builds the small fixture repo. Skip it and the bare-verb cases fail for the wrong reason.--allow-tools Skill Read Grep Globgrants the agent those tools. Bash is deliberately left out. Granting it fails on your machine because Docker Desktop's plugin symlinks live under~/.docker.--no-publishkeeps the HTML report local.
Useful variants:
Output lands in evals/results/<timestamp>/ with an aggregate-result.json and report.html. Each case shows a score and pass rate per run. A full 10-case run at 2 runs each costs roughly 4 to 5 dollars and takes about 5 minutes. --case takes a single glob, so repeating it only honors the last value; use --tag or a wildcard for subsets.
No. The version is still 0.7.3 in the plugin manifest, marketplace file, and Gemini extension. I left it alone because recent history bumps it in a separate release commit after merge, for example the "release: bump plugin version to 0.7.3" commit that followed the last skill change.
If you want it bumped in this PR, 0.7.4 is the natural next value across all three files. Say so and I'll add the commit.
Not automatically. There is no workflow or script that bumps it; a person does it by hand. The 0.7.3 bump was a manual commit by a teammate on the same PR branch as the last search change, and 0.7.1 was done the same way. Nothing in .github/ touches versions.
So if you merge as-is, the plugin stays at 0.7.3 and installed copies will not pick up the new descriptions until someone bumps it. The bump commit message from last time explains why it matters: plugin caches are keyed by version.
Recommendation: add the bump to this PR so the merge ships the change. It touches two files, the plugin manifest and the marketplace file, both to 0.7.4. Want me to push that commit?