Skip to main content
Holo4 (holo4-35b-a3b, holo4-27b) and Holo3.1 (holo3-1-35b-a3b) use the standard OpenAI tool-calling API, so agent frameworks that speak it work as is. Read Core concepts first.

Declare tools

Pass schemas in tools and set tool_choice="required" so the model acts every step. Do not put tool-format examples in the system prompt: the model renders calls in its native format from tools, and a conflicting example degrades quality.

Chat layout

A complete loop

Each call in message.tool_calls has a unique id, a function.name, and a JSON string in function.arguments. There is no note field: anything the model must carry across turns goes in the assistant content. Plug in your own observation() (the <observation> message from Core concepts) and execute(name, args). For a full runnable file, see the browser agent.
The loop rebuilds the assistant message from content and tool_calls, so it never replays the reasoning trace.

Mix screen, code, and MCP tools

One toolbox can hold screen actions, a code runner, and an MCP server’s tools. Holo4 picks one per step. The loop does not change: route each call to where it runs (screen driver, sandbox, or session.call_tool). Screenshots stay under the same 3-image budget whichever tool ran. Worked examples: hybrid agent (browser plus code) and MCP agent (MCP schemas convert one to one).

Format-specific pitfalls