Syntax

Tool use

How tool calls work through Syntax — across providers, across engines, across model families.

Tool use — the model deciding to call a function and the harness executing it — is a core part of any modern coding workflow. Syntax normalizes tool use across model families so your harness sees a consistent interface.

What works through the Bridge

When your harness sends a request with tools defined, you get:

  • Auto tool choice. The model picks when to call tools and when to answer directly.
  • Streamed tool calls. Tool-call deltas stream as they're generated; your harness can render or execute them as they arrive.
  • Tool-call preservation across turns. Tool calls and their results are preserved in conversation history so the model can reason about them later.
  • Mixed content. A response can mix natural-language text and tool calls in one turn.

Across model families

Different model families expose tool calling differently. Some use OpenAI-style function calls, some use Anthropic-style tool blocks, some use a model-specific chat template. Syntax handles the translation:

  • Provider-hosted models (OpenAI, Anthropic, Google, etc.) get their native tool-call format.
  • Open-weight models with a native tool-call chat template get their template's expected format. Where applicable, the Bridge also enables the engine's auto-tool-choice path so the model reliably emits structured tool calls instead of free-form text.
  • Open-weight models without a native tool-call template fall back to a structured-output approach that produces parseable tool calls regardless.

The harness sees the same OpenAI- or Anthropic-shaped tool calls either way.

Specialists as tools

When you deploy a multi-model party, every specialist is registered as a tool the main agent can call.

Approvals on tool calls

Tool-call execution is gated by your active Runtime Mode. In Default, every meaningful tool call asks for confirmation before running; in AutoEdit, common edits and routine commands run unattended; in Bypass, everything runs without asking. See Concepts → Runtime Modes.

Where to go next