/api/app-runtime, gated by the configured tool’s allowlist. Display name “App Tool”. Off by default.
When to use it (vs custom_interface vs python_code_tool vs generate_file)
generate_file with format: html produces a file, not a live feed widget. python_code_tool cannot “signal HTML” — its contract is markdown. For a task-feed scorecard the user can click, this is the tool.
Authentication and enablement
Configured tool: each instance has a bundle + data-source binding + action allowlist. The LLM does not pick the bundle. Off by default; add and configure per agent.Inputs
configured_tool_id— injected by the worker from context (x-exclude-from-llm). Never pass a display name here.params— bundle-specific payload forwarded asruntime.params. Shape comes from the configured tool’sinput_schemaoverride (e.g.{report_id: 59137}).
Output
An artifact descriptor (CDN bundle URL, scoped session token, initial data). The frontend mounts the iframe; edits persist via App Runtime and show up asagent_action feed events.
Limits and side effects
- Iframe is sandboxed; runtime calls must match the binding allowlist.
- Writes go through
/api/app-runtime(and the db/http gateways behind it), not the worker.
Expected errors
- Missing
configured_tool_id(not injected) — step cannot resolve the bundle. configured_tool_idthat is not a UUID — validation error.- Runtime action not on the allowlist — denied by the gateway.