Tools and skills
How the agent discovers tools through search instead of seeing the full catalog, and how skills load just in time.
The Dispatch agent has access to a few dozen tools across all the connectors a user might have active. Putting that whole catalog into every system prompt would be expensive, would inflate latency, and would lower accuracy. The model gets worse at selecting tools as the catalog grows. Dispatch avoids that by surfacing tools through a search registry: the model sees a small always-on subset on every call, and reaches for the rest through a tool_search tool.
Always-on tools
A small set of tools is included without going through tool_search. The exact set depends on the run type, because not every run shape benefits from the same tools:
tool_search: discover other tools by name pattern. Present on every run.send: the agent's primary way to send a message back to the user. Present on every run.read_file,write_file,edit_file,delete_file,list_directory: the file-system surface. These tools operate over a virtual filesystem composed of every active connector's file resolvers. Internal-surface connectors (preferences, daily-notes, people, meetings, documents, todos, automations) register resolvers; integration connectors (Gmail, Calendar, Slack, Composio) typically do not, and instead expose their state through their own dedicated tools. Present on most runs; omitted for the research-agent run shape.remember: a read-only search over the long-term memory store. Present on chat-style runs where the user is in the loop (including Slack and Telegram messaging sessions). Omitted on fully autonomous runs (triggered automations, scheduled tasks, todo runners).web_search,web_fetch: open-web reads. Enabled only for research runs andNEW_PERSONtriggered runs (where the agent is gathering context on someone it has just met). When omitted they are not in the tool catalog at all, sotool_searchcannot recover them on other runs.
Everything else has to be discovered through tool_search.
Searching for a tool
When the model needs something beyond the always-on set, it calls tool_search with a glob pattern. The registry filters the full catalog for matches and returns names and descriptions. Matched tools are unlocked for the remainder of the session. Once discovered, they remain available without re-searching.
A few examples of patterns the agent might use:
email_*: every email-shaped tool across Gmail and Outlookcalendar_*: every calendar tool across providersslack_*: every Slack tool*_send: every "send" verb across connectors
The patterns are case-insensitive, support * as a wildcard, and otherwise treat the rest of the string as a literal.
Why search instead of catalog
Two reasons:
- Accuracy. Models choose worse from larger catalogs. Search narrows the candidate set to a small, semantically related batch, which improves selection.
- Token cost and latency. Tool definitions in the system prompt cost input tokens on every call. Dispatch keeps the always-on set tight and lets the model pull in the rest by name when relevant.
The trade-off is that the model occasionally has to take a turn to discover a tool before it can use it. In practice the model learns to search early when its job is unfamiliar, and the cost is one tool call rather than a fat prompt every run.
Skills
Skills are markdown documents that explain how to do specialized things: how to write a good calendar event, how to interpret an automation trigger, how to use the booking-links surface. Each connector can ship one or more skills.
Skills mount under /skills/{skillName}/ and are read on demand with read_file. They are never inlined into the system prompt. When the agent encounters a task it does not have a strong default for, it reads the relevant skill, then proceeds. The same just-in-time pattern as tool search, applied to prose instructions.
Users can author their own skills too. Custom skills are user-written markdown that mount under /custom-skills/ rather than /skills/. A custom skill runs when the user types its slash command, or, if it has auto-invoke enabled, when the agent matches the user's request to the skill's description (listed in the prompt) and reads the body on demand. Like built-in skills, they are prose instructions, not new tools.
The search connector
Distinct from tool_search (which finds tools by name), the search connector provides a search tool that queries across the agent's data: people, meetings, documents, todos, and past chat sessions. The entityType filter accepts chat, document, person, meeting, or todo; automations are not searchable through this tool. The agent uses it to answer "who is this person?" or "did I have a meeting with them last week?" without paginating through each entity type.
For agents
- The model sees a small always-on tool set on every call; the exact set depends on run shape.
tool_searchandsendare always present. The file-system tools (read_file/write_file/edit_file/delete_file/list_directory) are present on every run except the research-agent shape; they operate over the virtual filesystem composed of active connectors' file resolvers, which is why not every connector contributes file-backed state.rememberis present on non-autonomous (chat-style) runs only and is a read-only search over long-term memory; it does not write preferences.web_searchandweb_fetchare present on research runs andNEW_PERSONtriggered runs only; on other runs they are absent from the catalog and cannot be reached viatool_search. - All other tools are surfaced via
tool_search, which takes a glob pattern (case-insensitive,*wildcard) and returns matching tool names with descriptions. - Discovered tools stay unlocked for the remainder of the run.
- Skills are markdown documents under
/skills/{skillName}/, read on demand withread_file, never inlined into the prompt. - User-authored custom skills mount under
/custom-skills/; auto-invoke skills are listed by name and description in the prompt and read on demand, slash-command skills resolve from the user's message. They are prose, not tools. - The
searchtool (from thesearchconnector) is distinct fromtool_search: it queries the agent's data, not its tool catalog. - This design optimizes for accuracy on tool selection and for token cost across high-volume runs.