SLOPSHOPPER

defer-tools

Moves rarely used built-in tools behind ToolSearch, so their schemas load into context when Claude first calls them.

new
v0.1.0MITupdated 2026-10-23pt-hieu/defer-tools/plugins/defer-tools
A shopper browsing a rack in a slop shop
README

defer-tools

A Claude Code mod, and the local marketplace that lists it, that moves rarely used built-in tools behind ToolSearch. Claude sees each tool's name and loads its full schema into context the first time it calls the tool, so sessions that leave these tools unused keep their schemas out of context.

On Claude Code 2.1.308 with Opus 5.5, the mod brought the System tools row of /context from 13.4k tokens to 3.1k.

What it defers

ToolUsed for
WorkflowMulti-agent orchestration, when you ask for it
ScheduleWakeupSelf-paced /loop
ListAgentsFinding sessions to message with SendMessage, itself deferred
CronCreate, CronDelete, CronList/loop on a fixed interval

Workflow's schema is most of the saving. A tool listed in permissions.deny is removed before the mod runs and stays removed.

Install

From any Claude Code session:

/plugin install defer-tools --marketplace pt-hieu/defer-tools

Answer y to add the marketplace, then pick a scope.

The mod moves the tools when Claude Code builds the first request of a session, so check the result with /context after your first message.

For development, clone this repo and load the mod from its folder for one session:

claude --plugin-dir <path to this repo>/plugins/defer-tools

How it works

The mod hooks tool.describe for each listed tool and answers with the engine's description and isDeferred: true. Claude Code then announces the moved tools to Claude as new deferred tools. To change the list, edit DEFERRED_TOOLS in plugins/defer-tools/hooks/register.ts.

Development

bun install
bun run validate
bun run test
bun run typecheck

typecheck reads the API types the engine writes to plugins/defer-tools/.claude-plugin/types/ when it first loads the mod, so load the mod once with --plugin-dir before running it.

License

MIT

Source 1 files
hooks/register.ts 20 lines
1import type { Register } from 'claude-code'
2
3export const DEFERRED_TOOLS = [
4  'Workflow',
5  'ScheduleWakeup',
6  'ListAgents',
7  'CronCreate',
8  'CronDelete',
9  'CronList',
10] as const
11
12export const register: Register = on => {
13  for (const tool of DEFERRED_TOOLS) {
14    on('tool.describe', { tool }, async ($, e, next) => ({
15      ...(await next(e)),
16      isDeferred: true,
17    }))
18  }
19}
20