Runs the built-in Explore subagent on a chosen model and effort (default Haiku, medium) whenever the Agent call leaves them out. Keeps Anthropic's Explore…

A Claude Code mod. The built-in Explore subagent runs on the main conversation's model unless the Agent call names one. This mod fills model and effort on Explore calls that leave them out: Haiku at medium effort by default. Explore keeps Anthropic's prompt and read-only tools; only the model and effort change. A call that names its own model or effort keeps it.
Why Haiku: benchmarks/explore-model/ in this repository. On audiobook-boss, Haiku matched the main-model Explore on every task at about 1/30 the cost.
The mod sets the alias haiku. The Agent tool accepts only aliases (haiku, sonnet, opus, fable), and Claude Code resolves each one to a model:
haiku is Haiku 5.5 today and moves to the next Haiku when it ships.haiku is Haiku 4.5.To pin an exact model, set ANTHROPIC_DEFAULT_HAIKU_MODEL to a full model ID in the env block of your Claude Code settings. The pin applies everywhere haiku is used, not only to Explore.
Options (model, effort) are in .claude-plugin/plugin.json. Needs function hooks (early access).
Install with /plugin install explore-model --marketplace Allmight97/agents. Test with claude plugin test plugins/explore-model.
hooks/explore-model.ts 25 lines1/**
2 * explore-model — Claude Mod (EARLY ACCESS)
3 *
4 * The built-in Explore subagent runs on the main conversation's model unless
5 * the Agent call names one. This fills `model` and `effort` on Explore calls
6 * that leave them out, so Explore keeps Anthropic's prompt and read-only tools
7 * and only the model changes. A call that names either keeps its own choice.
8 */
9import type { Register } from 'claude-code'
10
11type Defaults = { model: string; effort: string }
12
13export function withExploreDefaults<T extends { subagent_type?: string; model?: string; effort?: string }>(
14 input: T,
15 defaults: Defaults,
16): T {
17 if (input.subagent_type !== 'Explore') return input
18 return { ...input, model: input.model ?? defaults.model, effort: input.effort ?? defaults.effort }
19}
20
21export const register: Register = (on, options) => {
22 const defaults: Defaults = { model: String(options.model), effort: String(options.effort) }
23 on('tool.call', { tool: 'Agent' }, ($, e, next) => next(withExploreDefaults(e, defaults)))
24}
25