1image_gen=(2app_tool("generate_image","infsh/flux@latest")3.describe("Generate an image from a text prompt")4.build()5)67agent=client.agent({8"core_app":{"ref":"infsh/claude-sonnet-4@latest"},9"tools":[image_gen]10})1112response=agent.send_message("Generate a picture of a sunset")13# Agent calls generate_image, waits for result, then responds
Text-to-Speech & Code Execution
PythonTypescript
1tts=(2app_tool("speak","infsh/tts@latest")3.describe("Convert text to speech audio")4.build()5)67code_runner=(8app_tool("run_code","infsh/code-interpreter@latest")9.describe("Execute Python code and return the result")10.build()11)
With Approval
PythonTypescript
1expensive_model=(2app_tool("analyze","expensive/model@latest")3.describe("Deep analysis using expensive model")4.require_approval()# User must approve before running5.build()6)
Setup & Default Inputs
Configure app tools with pre-set values that persist across calls.
PythonTypescript
1# Setup: One-time configuration (API keys, model selection)2# Input: Default values the agent can override34transcribe=(5app_tool("transcribe","infsh/whisper@latest")6.describe("Transcribe audio to text")7.setup({8"model":"large-v3",# Always use this model9"language":"auto"# Auto-detect language10})11.input({12"timestamps":True,# Default: include timestamps13"format":"srt"# Default output format14})15.build()16)
How values are merged:
Setup values are passed on every call — the agent never sees them
Input values are defaults — the agent's arguments override them
For multi-function apps, specify which function to expose as a tool using .function().
PythonTypescript
1# Same app, different functions as separate tools2generate=(3app_tool("generate_image","infsh/sdxl@latest")4.describe("Generate an image from a text prompt")5.function("generate")6.build()7)89upscale=(10app_tool("upscale_image","infsh/sdxl@latest")11.describe("Upscale an existing image to higher resolution")12.function("upscale")13.build()14)1516agent=client.agent({17"core_app":{"ref":"infsh/claude-sonnet-4@latest"},18"tools":[generate,upscale]19})
If not specified, the app's default function is used.
Session Support
Enable session support for stateful interactions where the agent controls session creation and continuation.
PythonTypescript
1browser=(2app_tool("browser","infsh/browser-use@latest")3.describe("Control a web browser to navigate and interact with pages")4.session_enabled()# Agent can manage sessions5.build()6)
How Sessions Work
When session support is enabled:
Tool schema includes a session parameter
Agent passes session: "new" to start a new session
Tool output includes session_id (e.g., sess_abc123)
Agent passes session: "sess_abc123" in subsequent calls to continue
Example Agent Behavior
codecopy
1User:"Go to example.com and click the login button"23Agent:[callsbrowser({action:"navigate",url:"https://example.com",session:"new"})]4>Output:{result:"Page loaded",session_id:"sess_abc123"}56Agent:[callsmemory_set(key:"browser_session",value:"sess_abc123")]7>StoredsessionIDforlateruse89Agent:[callsbrowser({action:"click",selector:"#login",session:"sess_abc123"})]10>Output:{result:"Clicked login button",session_id:"sess_abc123"}
The agent uses its memory tools to track session IDs across turns.