plan_and_execute. The choice is the model’s — but you have real influence over it.
The routing heuristics
- Simple lookups → direct tool calls. “List my urgent issues” is one
linear__list_issuescall; no plan needed. - Queries matching a plan’s purpose → the plan tool. The agent reads each plan’s
descriptionandexemplars, so “how’s the sprint going?” routes toplan__sprint_analysiswhen those exemplars say exactly that. - Novel multi-step tasks →
plan_and_execute, which authors and runs a validated plan with dataflow between steps.
Steering the router
- Write exemplars like your users talk. Exemplars are folded into the plan tool’s description verbatim — they’re the strongest routing signal:
- Make descriptions contrastive. If two plans overlap, say when to use which (“…for teams that track work by project, not cycles”).
- Force it when it matters. Naming the plan works reliably in conversation (“run the project_status plan for X”), and
graph plan runbypasses routing entirely — the guaranteed path for automation. - Trim the catalog. Per-server
include_tools/exclude_toolsin[mcp.*]config keeps irrelevant tools out of the agent’s context — fewer distractors, better choices.
Verifying what happened
The stderr trace shows routing live (→ plan__project_status … vs bare linear__* calls), and graph threads show preserves it after the fact. If the agent keeps improvising where a plan should fire, the fix is almost always sharper exemplars.