Responses API — Chat Actions extensions
By default, POST /v1/responses behaves like stock OpenAI Responses
— no hidden system prompt, no auto-injected tools, no server-side
state. Chat Actions are three orthogonal opt-ins layered on top:
- Curated system prompt — let Kindo prepend its operational
prompt to your
instructions. - Kindo-hosted tools — call
kindo_shell,kindo_web_search, and the rest of the Kindo tool catalog. - Stateful conversations — let Kindo persist responses server-side so subsequent turns chain off them.
Each is independent. Mix and match.
1. Curated system prompt
{ "model": "claude-sonnet-4-5-20250929", "input": "Investigate the crashloop on api-prod-2.", "kindo": { "system_prompt": "agent_default" }}kindo.system_prompt value | Behavior |
|---|---|
"agent_default" | Kindo prepends its curated operational prompt to whatever you send in instructions. |
"off" (default) | No prepend. Your instructions flow through verbatim. |
If you also pass instructions, Kindo prepends its prompt and your
instructions flow after it. Use this when you want Kindo’s curated
agent behavior on top of your own task guidance.
2. Kindo-hosted tools
You have two ways to opt in to Kindo’s hosted tools.
2a. The full bundle (kindo_tools sugar)
{ "model": "claude-sonnet-4-5-20250929", "input": "...", "tools": [{ "type": "kindo_tools" }]}{type: "kindo_tools"} is documented sugar. At request time Kindo
expands it into the current set of individual kindo_<name> entries
the model can call.
2b. Individual tools
Pick the ones you actually want:
{ "model": "claude-sonnet-4-5-20250929", "input": "...", "tools": [{ "type": "kindo_shell" }, { "type": "kindo_web_search" }]}The full hosted-tool catalog:
| Tool type | Purpose |
|---|---|
kindo_shell | Run a sandboxed shell command on a Kindo-managed agent workstation. |
kindo_web_search | Search the web. |
kindo_browser_control | Drive a headless browser session. |
kindo_browser_screenshot | Capture a screenshot of the current page. |
kindo_browser_list_network_requests | List network requests captured by the browser tool. |
kindo_browser_export_request_as_curl | Export a captured request as a runnable curl command. |
kindo_file_read | Read a file the agent has access to. |
kindo_file_write | Write to a file the agent has access to. |
kindo_file_list | List files in an accessible directory. |
kindo_web_download | Download a URL to the agent workspace. |
kindo_files_download_original | Fetch the original binary of a previously stored file. |
kindo_files_download_as_text | Fetch a previously stored file as decoded text. |
kindo_file_share_with_user | Share a file with a Kindo user. |
kindo_vpn_connect | Connect the agent’s network egress to an organization VPN. |
kindo_vpn_disconnect | Disconnect from the organization VPN. |
kindo_dashboard_generate | Generate a Kindo dashboard. |
kindo_dashboard_update | Update a Kindo dashboard. |
kindo_knowledge_store_search | Search a Kindo knowledge store. |
Tool types not in this list are forwarded verbatim to LiteLLM (passthrough) — useful when a new upstream tool type ships before our docs do.
You can mix Kindo-hosted tools with stock OpenAI types
(function, mcp, web_search, file_search, computer, …) in
the same tools array. tool_choice (including allowed_tools)
applies uniformly.
3. Stateful conversations
Stock OpenAI Responses on /v1/responses is stateless by default.
Kindo currently offers one form of stateful continuation (conversation); previous_response_id is reserved for future support and rejected today with 400 unsupported_parameter.
conversation
{ "model": "claude-sonnet-4-5-20250929", "input": "Continue the investigation.", "store": true, "conversation": "conv_xyz789"}conversation is the Kindo-managed equivalent and is what the
existing /v1/responses flow returns in
response.conversation.id.
Future:
previous_response_id
previous_response_idis not yet supported. It is accepted by the schema for forward-compatibility, but the handler rejects it with400 unsupported_parameter. Useconversationto continue an existing exchange.
conversation is the only supported continuation mechanism. It is a
request-grouping tag — you must still re-send prior turns in input
on each request. Use it when you have an existing Kindo-managed
conversation ID; otherwise, start a new request without it and use
the returned conversation.id for subsequent turns.
Putting it together
If you previously relied on tools: [{type: "kindo_tools"}] as a
mode switch that implicitly turned on the curated prompt and
statefulness, this is the equivalent explicit recipe:
{ "model": "claude-sonnet-4-5-20250929", "input": "...", "store": true, "kindo": { "system_prompt": "agent_default" }, "tools": [{ "type": "kindo_tools" }]}Three opt-ins, all visible in the request body. None are implicit.
See also
- Chat Actions overview — conceptual
overview of the three opt-ins.
/v1/chat/completionsand/v1/messagesare stock OpenAI / stock Anthropic and do not accept these extensions. - Quickstart — stock-OpenAI baseline, no extensions.
- Request shape — every standard field, plus
the
kindoblock. - Tool use — function-tool round trip; mixes with
hosted tools in the same
toolsarray.