docs / tools & profiles
Tools & profiles
A tool is a schema in every request. Wombat keeps the default registry small, then lets the model ask for reach when the task needs it.
The registry
Deduplication cut the always-exposed registry from 34 tools to 18 (19 with
question). The default coding profile exposes nine of them:
read write edit bash glob grep apply_patch tool_search request_capability
Git actions run through bash git. Rename, refactor, multi-edit, the separate jobs
list and the git tools are gone from the registry; the implementations that remain are on a
one-release soft cut. TestRegistryDedup locks both the 18-tool registry and the
nine-tool profile, so the count does not drift back up by accident.
Profiles
A profile is a preset bundle of capabilities. Set it in the config, on
wombat run --profile, or with /profile in chat.
| profile | capabilities | tools |
|---|---|---|
minimal | core | read, write, edit, bash, glob, grep, todowrite, tool_search, request_capability |
coding (default) | core + edit | the nine above plus apply_patch |
web | core + edit + web | browser, websearch, webfetch, request_more_research |
semantic | core + edit + semantic | lsp |
verify | core + edit + verify | verify |
media | core + edit + media | imagesearch |
orchestrator | core + edit | planning and worker tools, when orchestration is enabled |
full | everything | the whole registry, including optional capabilities |
auto | coding, plus what the prompt implies | resolved at request time |
Capabilities
A capability is a named bundle of tools the model can request mid-run. Four are optional and can be forced on or off per session.
| capability | loads | default |
|---|---|---|
web | browser, websearch, webfetch, request_more_research | auto |
semantic | lsp — definitions, references, diagnostics, completions, symbols | off |
verify | verify — run the project's own tests, build, lint, typecheck | off |
media | imagesearch — find and download image references | off |
mcp | every tool from your attached MCP servers | auto |
How a capability gets loaded
tool_search takes a query and returns compact matches — name, one-line purpose
and the tool count — without loading anything. request_capability then loads
one named capability for the rest of the session.
tools: 8 → schema 1,219 tokens → first request 1,877 input tokens
model: request_capability("web", "need to inspect the page")
result: loaded browser, webfetch, websearch
next request: 11 tools, 2,690 schema tokens That is the whole trade: 1.9k tokens for a coding turn, 2.7k when the browser is genuinely needed, instead of ~10k of schemas on every request.
Research budgets
Research is a policy, not a tool description. Each mode has a soft budget that triggers "synthesize now", a hard ceiling that refuses the call, and a wall-clock cap.
| mode | soft search / fetch | hard ceiling | time cap | depth |
|---|---|---|---|---|
off | — | — | — | no web tools |
quick | 2 / 1 | 4 / 2 | 60s | fast |
standard | 5 / 3 | 8 / 4 | 120s | fast |
deep | 10 / 6 | 15 / 8 | 300s | deep |
auto | Quick unless the prompt asks for a deep dive, a comparison, or systematic verification. | |||
When the soft budget is spent, the tool returns:
research fetch soft budget reached (1/1); synthesize now or call
request_more_research with a specific reason request_more_research buys one more search and one more fetch, requires a
written reason, and is refused once the hard ceiling is hit. This is the difference between
the old 13-search loop and the 21s research turn measured in the
benchmarks.
Questions
A vague prompt ("fix it") gets one bounded round: at most two question calls per
run, each offering 2–3 concrete options, and never a second round. Headless runs —
wombat run — do not ask at all; they state their assumptions and proceed, then
exit 0.
Web search and fetch
websearch runs the configured backends in parallel — Brave, Serper, Exa and
Tavily when keys are set, plus keyless Bing RSS, DuckDuckGo HTML and Mojeek — then merges,
cross-checks and ranks. It accepts 2–4 query variants, freshness, language, region and
pagination; results are cached for ten minutes; trusted docs and GitHub are boosted and
SEO spam is filtered. By default it also fetches the top three pages and adds an excerpt
with date and author when it can find them.
webfetch extracts the main article text, pretty-prints JSON, returns XML as
text, and says so plainly for PDFs and binary payloads. Both share a 15-second HTTP client
with retries and a five-second grace window after the first backend answers.
export EXA_API_KEY=...
export TAVILY_API_KEY=...
export BRAVE_API_KEY=...
export SERPER_API_KEY=... Verification and semantics
verify reads the project, works out the test, build, lint and typecheck
commands, and runs them. With require_verification on, a run cannot report
success without a passing check. Writers always run their checks before a patch merges.
lsp asks a language server for definitions, references, diagnostics,
completions, workspace symbols and file outlines. Go uses gopls; TypeScript,
Python, Rust, C/C++, Java, Ruby, PHP, Lua, C#, Swift, Kotlin and shell use their standard
servers when installed. Set WOMBAT_LSP_<EXT> to point at a specific
binary.