Choosing Tools
Tool selection runs on fit, not volume. This skill states the dispatch policy
once, centrally, so no individual skill has to argue for its own attention —
descriptions describe, and this protocol ranks them.
This is a flexible skill: the procedure below is the default shape of the
decision, and the judgment inside each step is yours.
When this runs
At task starts and direction changes — the moments where work could take a
shape: build, fix, migrate, refactor, review, plan, audit. Inside a long
autonomous task the internal phase shifts are direction changes too —
design→build→run→report each invite a quick re-check and a one-line naming of
the active discipline, rather than riding the opening dispatch for hours. It
does not run on conversational turns, follow-up messages inside an active task,
or questions answerable directly. A dispatch check on "hang on" is ceremony,
not selection.
The dispatch procedure
- Name the task in one phrase. "Schema change with downstream consumers",
"unexplained test failure", "new feature, shape unclear". The phrase is
what candidates get ranked against.
- Shortlist candidates. Installed skills whose triggers plausibly match.
When unsure what is installed, get a live inventory rather than recalling
from memory — an inventory skill when one is installed (e.g.
session-workflow's toolkit-awareness), else the harness's skill listing or
a repo's
AGENTS.md index already in context.
- Read the target tool's own record. When the task will exercise a tool
that has a registered dogfooding-feedback intake (e.g. a
feedback-targets
binding, where session-workflow's loop is installed), read the newest
report's Misses/Friction from that intake — one Read — before settling the
shortlist. Dispatch is where a recorded miss must resurface: the same
under-dispatch recurred across six arcs, once the day after being written
down, because nothing read the record back at this step. No registered
intake → skip; the step costs nothing.
- Check positive and negative triggers. A candidate that matches the
phrase but sits in another skill's declared territory ("not for X — that
is Y") loses to the owner. Negative space decides ties.
- Load when the bar is met. Load the best fit when its expected benefit —
risk averted, rework avoided, discipline the task genuinely needs — clearly
exceeds its cost: the context it occupies and the way a loaded skill
anchors the plan. When a process discipline and an implementation skill
both apply, load the process discipline first; it shapes how the
implementation runs.
- Exit in one line when nothing clears the bar. "No installed skill owns
this; proceeding directly" is a complete, correct outcome. Record it and
move on.
- Set aside misfires plainly. A loaded skill that turns out not to fit is
abandoned explicitly — "loaded X; it assumes Y, which doesn't hold here;
continuing without it." Following a misfit skill to completion because it
was loaded is anchoring, not diligence.
The loading bar
The threshold is deliberately qualitative — "clearly exceeds" — because a
numeric cutoff in prose would be fake precision. What calibrates the bar over
time is measurement: the trigger evals and their gates, not adjectives. Two
rules of thumb hold:
- Cheap, scoped reference skills (a schema, a config convention) clear the bar
easily; heavyweight process skills that restructure the whole turn need a
task that actually has the failure modes they prevent.
- Keyword overlap alone never clears the bar. "Test" appearing in the task
does not load a TDD skill; implementing behavior does.
- Declining to load a skill is not declining its cheapest, most durable core.
The bar gates skill ceremony, not the cheap insurance some disciplines carry
(e.g. leaving a red-green regression test after a bug fix — seconds of work,
lasting protection — even when the full skill isn't worth loading). Apply the
core, skip the ceremony.
Boundaries
- The inventory is someone else's job — what is installed and who owns which
concern comes from an inventory skill (e.g. session-workflow's
toolkit-awareness), the harness's skill listing, or a repo's
AGENTS.md index.
This skill consumes that answer; it does not produce it.
- skill-authoring owns descriptions — when a skill keeps winning or losing
dispatch wrongly, fix its trigger surface there, never by inflating register;
selection quality depends on descriptions staying honest.
Dispatch-router hook
The plugin ships a UserPromptSubmit hook that runs a lexical router over each
substantive prompt and names each matching skill by its activation test — a
question to answer, not a coincidence to notice. It skips skills this install
lacks, and never reads the cwd's name as trigger vocabulary. On by default;
HUMBLEPOWERS_DISPATCH_PROMPT_INJECT=0 opts out.
1---2name: choosing-tools3description: Decide which installed skill or tool, if any, should own a task — a fit-ranking dispatch step at task starts and direction changes, not a per-message ritual. Use when starting substantive work that more than one installed capability could plausibly own, when unsure whether a discipline skill (TDD, debugging, data-contract guardrails) applies to the work at hand, when two skills seem to claim the same job, or when the user asks "which tool/skill should handle this". Ranks candidates against their descriptions' positive and negative triggers and loads one only when its expected benefit clearly exceeds its context and anchoring cost; exits in one line when nothing fits, and sets aside a loaded skill plainly when it turns out wrong. Pairs with toolkit-awareness, which answers what is installed — this skill decides whether and when to load it. Not for inventory questions (that is toolkit-awareness) and not for authoring or tuning skill descriptions (that is skill-authoring).4---56# Choosing Tools78Tool selection runs on fit, not volume. This skill states the dispatch policy9once, centrally, so no individual skill has to argue for its own attention —10descriptions describe, and this protocol ranks them.1112This is a **flexible** skill: the procedure below is the default shape of the13decision, and the judgment inside each step is yours.1415## When this runs1617At task starts and direction changes — the moments where work could take a18shape: build, fix, migrate, refactor, review, plan, audit. **Inside a long19autonomous task the internal phase shifts are direction changes too** —20design→build→run→report each invite a quick re-check and a one-line naming of21the active discipline, rather than riding the opening dispatch for hours. It22does not run on conversational turns, follow-up messages inside an active task,23or questions answerable directly. A dispatch check on "hang on" is ceremony,24not selection.2526## The dispatch procedure27281. **Name the task in one phrase.** "Schema change with downstream consumers",29 "unexplained test failure", "new feature, shape unclear". The phrase is30 what candidates get ranked against.312. **Shortlist candidates.** Installed skills whose triggers plausibly match.32 When unsure what is installed, get a live inventory rather than recalling33 from memory — an inventory skill when one is installed (e.g.34 session-workflow's toolkit-awareness), else the harness's skill listing or35 a repo's `AGENTS.md` index already in context.363. **Read the target tool's own record.** When the task will exercise a tool37 that has a registered dogfooding-feedback intake (e.g. a `feedback-targets`38 binding, where session-workflow's loop is installed), read the newest39 report's Misses/Friction from that intake — one Read — before settling the40 shortlist. Dispatch is where a recorded miss must resurface: the same41 under-dispatch recurred across six arcs, once the day after being written42 down, because nothing read the record back at this step. No registered43 intake → skip; the step costs nothing.444. **Check positive and negative triggers.** A candidate that matches the45 phrase but sits in another skill's declared territory ("not for X — that46 is Y") loses to the owner. Negative space decides ties.475. **Load when the bar is met.** Load the best fit when its expected benefit —48 risk averted, rework avoided, discipline the task genuinely needs — clearly49 exceeds its cost: the context it occupies and the way a loaded skill50 anchors the plan. When a process discipline and an implementation skill51 both apply, load the process discipline first; it shapes how the52 implementation runs.536. **Exit in one line when nothing clears the bar.** "No installed skill owns54 this; proceeding directly" is a complete, correct outcome. Record it and55 move on.567. **Set aside misfires plainly.** A loaded skill that turns out not to fit is57 abandoned explicitly — "loaded X; it assumes Y, which doesn't hold here;58 continuing without it." Following a misfit skill to completion because it59 was loaded is anchoring, not diligence.6061## The loading bar6263The threshold is deliberately qualitative — "clearly exceeds" — because a64numeric cutoff in prose would be fake precision. What calibrates the bar over65time is measurement: the trigger evals and their gates, not adjectives. Two66rules of thumb hold:6768- Cheap, scoped reference skills (a schema, a config convention) clear the bar69 easily; heavyweight process skills that restructure the whole turn need a70 task that actually has the failure modes they prevent.71- Keyword overlap alone never clears the bar. "Test" appearing in the task72 does not load a TDD skill; implementing behavior does.73- Declining to load a skill is not declining its cheapest, most durable core.74 The bar gates skill *ceremony*, not the cheap insurance some disciplines carry75 (e.g. leaving a red-green regression test after a bug fix — seconds of work,76 lasting protection — even when the full skill isn't worth loading). Apply the77 core, skip the ceremony.7879## Boundaries8081- **The inventory is someone else's job** — what is installed and who owns which82 concern comes from an inventory skill (e.g. session-workflow's83 toolkit-awareness), the harness's skill listing, or a repo's `AGENTS.md` index.84 This skill consumes that answer; it does not produce it.85- **skill-authoring** owns descriptions — when a skill keeps winning or losing86 dispatch wrongly, fix its trigger surface there, never by inflating register;87 selection quality depends on descriptions staying honest.8889## Dispatch-router hook9091The plugin ships a UserPromptSubmit hook that runs a lexical router over each92substantive prompt and names each matching skill by its activation test — a93question to answer, not a coincidence to notice. It skips skills this install94lacks, and never reads the cwd's name as trigger vocabulary. On by default;95`HUMBLEPOWERS_DISPATCH_PROMPT_INJECT=0` opts out.