Webhook callback for when a conversation starts, pauses, resumes, or deletes.
The ConversationInfo.agent field is an AgentBase discriminated
union so both OpenHands (Agent) and ACP (ACPAgent) payloads are
accepted on this single endpoint.
Most recent user MessageEvent id for hook block checks. Updated when user messages are emitted so Agent.step can pop blocked_messages without scanning the event log. If None, hook-blocked checks are skipped (legacy conversations).
HEAD of the conversation tree: the parent of the next appended event. None means an empty tree (or, for pre-feature conversations, the linear tail). Moving it via navigate re-roots the active branch the agent runs on.
Hook configuration for this conversation. Includes definitions for PreToolUse, PostToolUse, UserPromptSubmit, SessionStart, SessionEnd, and Stop hooks.
Model the agent is actually using for this session. For ACP agents, this is lifted off ACPAgent.current_model_id (populated from the models.currentModelId field on the ACP session response, or from acp_model when the caller forced an override). May be an opaque alias (e.g. claude-agent-acp's "default"); match it against available_models to get a display label. None for older ACP servers that don't surface the field, or while the agent is still initializing. Native OpenHands agents leave this None — consumers should read agent.llm.model for those.
Models the ACP server offers for this session, lifted off ACPAgent.available_models (the models.availableModels field on the ACP session response). Each entry carries a model_id plus an optional name/description. Surfaced verbatim so clients can render a model picker and resolve current_model_id to a display label themselves — the server does no name curation. Empty for ACP servers that don't surface the (UNSTABLE) capability and for native OpenHands agents. Client contract: current_model_id is NOT guaranteed to be a member — a forced acp_model override may name a model absent from the list — so treat a miss as 'show the raw id'. Some entries are opaque aliases whose human identity lives in description (e.g. claude-agent-acp's "default" -> "Opus 4.7 with 1M context · ...").
Whether a live, mid-conversation model switch will be attempted for this conversation — tells the inline picker whether to offer a live-switch control. Mirrors the SDK's switch gate: True for known switch-capable providers; False for unknown/custom ACP servers because their generic config writes are not guaranteed live-switch primitives. False for native OpenHands agents, for a known provider that declares no support, and before the conversation has started a session.
Provenance snapshot of the agent profile that launched this conversation. Set at creation when the conversation was started via agent_profile_id; None for conversations started directly with agent or agent_settings. Clients use this to identify which agent profile is current without fragile settings-comparison.
Client-defined tool specs registered for this conversation. Surfaced so that a client re-attaching by conversation id can register the dynamic ClientAction_* action types before syncing persisted events, avoiding 'Unknown kind' deserialization errors.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"OpenHands Docs","colors":{"primary":"#99873c","light":"#ffe165","dark":"#ffe165"},"logo":{"light":"https://mintcdn.com/allhandsai/DjhqLcIy_hW6pRTg/logo/light.png?fit=max\u0026auto=format\u0026n=DjhqLcIy_hW6pRTg\u0026q=85\u0026s=49b636402b03f7279ca5e1afefeec1d2","dark":"https://mintcdn.com/allhandsai/DjhqLcIy_hW6pRTg/logo/dark.png?fit=max\u0026auto=format\u0026n=DjhqLcIy_hW6pRTg\u0026q=85\u0026s=e0c4017631cebc3a289798438e2c0d7a"},"favicon":"https://mintcdn.com/allhandsai/DjhqLcIy_hW6pRTg/openhands/logo-square.png?fit=max\u0026auto=format\u0026n=DjhqLcIy_hW6pRTg\u0026q=85\u0026s=6ef1bab575660ae6e2d44fcc57bc675f","appearance":{"default":"light"},"background":{"color":{"light":"#f7f3ee","dark":"#0B0D0E"}},"navbar":{"links":[],"primary":{"type":"github","href":"https://github.com/OpenHands/OpenHands"}},"footer":{"socials":{"slack":"https://openhands.dev/joinslack","github":"https://github.com/OpenHands"},"links":[{"header":"Links","items":[{"label":"Company","href":"https://openhands.dev/"},{"label":"Blog","href":"https://openhands.dev/blog"},{"label":"Cloud","href":"https://app.all-hands.dev"},{"label":"Enterprise","href":"https://openhands.dev/enterprise"}]}]},"seo":{"indexing":"navigable"},"integrations":{"gtm":{"tagId":"GTM-M9S7V5BQ"}},"contextual":{"options":["copy","view","download-spec","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"allhandsai","hasAudioNarration":false,"actualSubdomain":"allhandsai","customDomains":["docs.openhands.dev"],"gitSource":{"type":"github","owner":"openhands","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af637bd58c1bbe7022a7b66","clientVersion":"0.0.4117","searchFilterCounts":[{"language":"default","tag":"Cloud","count":196},{"language":"default","tag":"Cloud API","count":187},{"language":"default","tag":"REST API Reference","count":185},{"language":"default","tag":"SDK","count":128},{"language":"default","tag":"Guides","count":105},{"language":"default","tag":"API Reference","count":95},{"language":"default","tag":"Enterprise","count":73},{"language":"default","tag":"Agent Canvas","count":64},{"language":"default","tag":"Home","count":58},{"language":"default","tag":"Remote Agent Server","count":55}]},"assistantConfig":{"deflection":{"enabled":true,"email":"contact@openhands.dev","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#banner *{color:rgb(67, 66, 64)}"}],"page":{"pagePath":"openhands/usage/cloud/api-reference/webhooks/on-conversation-update","slug":"/openhands/usage/cloud/api-reference/webhooks/on-conversation-update","pageMetadata":{"title":"On Conversation Update","description":"Webhook callback for when a conversation starts, pauses, resumes, or deletes.\n\nThe ``ConversationInfo.agent`` field is an ``AgentBase`` discriminated\nunion so both OpenHands (``Agent``) and ACP (``ACPAgent``) payloads are\naccepted on this single endpoint.","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/webhooks/conversations","href":"/openhands/usage/cloud/api-reference/webhooks/on-conversation-update","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Webhook callback for when a conversation starts, pauses, resumes, or deletes.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The \", _jsx(_components.code, {\n children: \"ConversationInfo.agent\"\n }), \" field is an \", _jsx(_components.code, {\n children: \"AgentBase\"\n }), \" discriminated\\nunion so both OpenHands (\", _jsx(_components.code, {\n children: \"Agent\"\n }), \") and ACP (\", _jsx(_components.code, {\n children: \"ACPAgent\"\n }), \") payloads are\\naccepted on this single endpoint.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"On Conversation Update","description":"Webhook callback for when a conversation starts, pauses, resumes, or deletes.\n\nThe ``ConversationInfo.agent`` field is an ``AgentBase`` discriminated\nunion so both OpenHands (``Agent``) and ACP (``ACPAgent``) payloads are\naccepted on this single endpoint.","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/webhooks/conversations","href":"/openhands/usage/cloud/api-reference/webhooks/on-conversation-update","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/allhandsai/dddab338317a519d/openhands/reo-init.js","/_mintlify/custom/allhandsai/ae719f15d762e1fe/openhands/posthog-init.js","/_mintlify/custom/allhandsai/b35f7f3c3c83fb4c/openhands/canvas-handoff.js","/_mintlify/custom/allhandsai/771d6371c43b73b7/openhands/linkedin-copy-tracking.js","/_mintlify/custom/allhandsai/46724455a27ebfc6/openhands/copy-click-tracking.js"],"openApiReferenceData":{"operation":{"tags":["Webhooks"],"summary":"On Conversation Update","description":"Webhook callback for when a conversation starts, pauses, resumes, or deletes.\n\nThe ``ConversationInfo.agent`` field is an ``AgentBase`` discriminated\nunion so both OpenHands (``Agent``) and ACP (``ACPAgent``) payloads are\naccepted on this single endpoint.","operationId":"on_conversation_update_api_v1_webhooks_conversations_post","requestBody":"5132c511-4789-4bd7-b850-5f5dacca1de2","responses":{"200":"a9db847d-5cb6-44ac-8856-7694b82b9b4c","422":"6ffd843d-b939-423c-8879-5cb5b576db0f"},"security":["8a09e5b1-2607-46f3-a717-eac815e86186"],"method":"post","type":"path","servers":[],"path":"/api/v1/webhooks/conversations","baseUrlOptions":[],"title":"On Conversation Update","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"content":{"application/json":{"schema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"Unique conversation ID","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"workspace":{"oneOf":[{"type":"object","title":"LocalWorkspace","description":"Workspace used by the agent to execute commands and read/write files. Not the process working directory.","required":["working_dir"],"properties":{"working_dir":{"type":"string","title":"Working Dir","description":"The working directory for agent operations and tool execution. Accepts both string paths and Path objects. Path objects are automatically converted to strings.","isRequired":true,"uniqueKey":"workspace.oneOf.0.working_dir","typeLabel":"string"},"kind":{"type":"string","const":"LocalWorkspace","title":"Kind","uniqueKey":"workspace.oneOf.0.kind","typeLabel":"string"}},"isRequired":true,"uniqueKey":"workspace.oneOf.0","typeLabel":"LocalWorkspace · object"},{"type":"object","title":"RemoteWorkspace","description":"Workspace used by the agent to execute commands and read/write files. Not the process working directory.","required":["working_dir","host"],"properties":{"working_dir":{"type":"string","title":"Working Dir","description":"The working directory for agent operations and tool execution.","isRequired":true,"uniqueKey":"workspace.oneOf.1.working_dir","typeLabel":"string"},"host":{"type":"string","title":"Host","description":"The remote host URL for the workspace.","isRequired":true,"uniqueKey":"workspace.oneOf.1.host","typeLabel":"string"},"api_key":{"oneOf":[{"type":"string","title":"Api Key","description":"API key for authenticating with the remote host.","uniqueKey":"workspace.oneOf.1.api_key.oneOf.0","typeLabel":"string"},{"type":"null","title":"Api Key","description":"API key for authenticating with the remote host.","uniqueKey":"workspace.oneOf.1.api_key.oneOf.1","typeLabel":"null"}],"uniqueKey":"workspace.oneOf.1.api_key","typeLabel":"string | null"},"read_timeout":{"type":"number","title":"Read Timeout","description":"Timeout in seconds for reading operations of httpx.Client.","default":600,"uniqueKey":"workspace.oneOf.1.read_timeout","typeLabel":"number"},"max_connections":{"oneOf":[{"type":"integer","title":"Max Connections","description":"Maximum number of connections for httpx.Client. None means no limit, useful for running many conversations in parallel.","uniqueKey":"workspace.oneOf.1.max_connections.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Max Connections","description":"Maximum number of connections for httpx.Client. None means no limit, useful for running many conversations in parallel.","uniqueKey":"workspace.oneOf.1.max_connections.oneOf.1","typeLabel":"null"}],"uniqueKey":"workspace.oneOf.1.max_connections","typeLabel":"integer | null"},"kind":{"type":"string","const":"RemoteWorkspace","title":"Kind","uniqueKey":"workspace.oneOf.1.kind","typeLabel":"string"}},"isRequired":true,"uniqueKey":"workspace.oneOf.1","typeLabel":"RemoteWorkspace · object"}],"isRequired":true,"uniqueKey":"workspace","typeLabel":"LocalWorkspace · object | RemoteWorkspace · object"},"agent":{"oneOf":[{"type":"object","title":"ACPAgent","description":"The agent running in the conversation.","required":["acp_command"],"properties":{"acp_command":{"items":{"type":"string","uniqueKey":"agent.oneOf.0.acp_command.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Acp Command","description":"Command to start the ACP server, e.g. ['npx', '-y', '@agentclientprotocol/claude-agent-acp']","isRequired":true,"uniqueKey":"agent.oneOf.0.acp_command","typeLabel":"string[]"},"llm":{"properties":{"model":{"type":"string","title":"Model","description":"Model name.","default":"gpt-5.5","openhands_settings":{"depends_on":[],"prominence":"critical"},"uniqueKey":"agent.oneOf.0.llm.model","typeLabel":"string"},"api_key":{"oneOf":[{"type":"string","title":"Api Key","description":"API key.","uniqueKey":"agent.oneOf.0.llm.api_key.oneOf.0","typeLabel":"string"},{"type":"string","title":"Api Key","description":"API key.","format":"password","uniqueKey":"agent.oneOf.0.llm.api_key.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Api Key","description":"API key.","uniqueKey":"agent.oneOf.0.llm.api_key.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.api_key","typeLabel":"string | string\u003cpassword> | null"},"auth_type":{"type":"string","enum":["api_key","subscription"],"title":"Auth Type","description":"Authentication mode for the LLM.","default":"api_key","openhands_settings":{"depends_on":[],"label":"Authentication","prominence":"critical"},"uniqueKey":"agent.oneOf.0.llm.auth_type","typeLabel":"enum\u003cstring>"},"subscription_vendor":{"oneOf":[{"type":"string","title":"Subscription Vendor","description":"Subscription provider for subscription-backed LLM access.","const":"openai","uniqueKey":"agent.oneOf.0.llm.subscription_vendor.oneOf.0","typeLabel":"string"},{"type":"null","title":"Subscription Vendor","description":"Subscription provider for subscription-backed LLM access.","uniqueKey":"agent.oneOf.0.llm.subscription_vendor.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.subscription_vendor","typeLabel":"string | null"},"base_url":{"oneOf":[{"type":"string","title":"Base Url","description":"Custom base URL.","uniqueKey":"agent.oneOf.0.llm.base_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Base Url","description":"Custom base URL.","uniqueKey":"agent.oneOf.0.llm.base_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.base_url","typeLabel":"string | null"},"api_version":{"oneOf":[{"type":"string","title":"Api Version","description":"API version (e.g., Azure).","uniqueKey":"agent.oneOf.0.llm.api_version.oneOf.0","typeLabel":"string"},{"type":"null","title":"Api Version","description":"API version (e.g., Azure).","uniqueKey":"agent.oneOf.0.llm.api_version.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.api_version","typeLabel":"string | null"},"aws_access_key_id":{"oneOf":[{"type":"string","title":"Aws Access Key Id","uniqueKey":"agent.oneOf.0.llm.aws_access_key_id.oneOf.0","typeLabel":"string"},{"type":"string","title":"Aws Access Key Id","format":"password","uniqueKey":"agent.oneOf.0.llm.aws_access_key_id.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Aws Access Key Id","uniqueKey":"agent.oneOf.0.llm.aws_access_key_id.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.aws_access_key_id","typeLabel":"string | string\u003cpassword> | null"},"aws_secret_access_key":{"oneOf":[{"type":"string","title":"Aws Secret Access Key","uniqueKey":"agent.oneOf.0.llm.aws_secret_access_key.oneOf.0","typeLabel":"string"},{"type":"string","title":"Aws Secret Access Key","format":"password","uniqueKey":"agent.oneOf.0.llm.aws_secret_access_key.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Aws Secret Access Key","uniqueKey":"agent.oneOf.0.llm.aws_secret_access_key.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.aws_secret_access_key","typeLabel":"string | string\u003cpassword> | null"},"aws_session_token":{"oneOf":[{"type":"string","title":"Aws Session Token","uniqueKey":"agent.oneOf.0.llm.aws_session_token.oneOf.0","typeLabel":"string"},{"type":"string","title":"Aws Session Token","format":"password","uniqueKey":"agent.oneOf.0.llm.aws_session_token.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Aws Session Token","uniqueKey":"agent.oneOf.0.llm.aws_session_token.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.aws_session_token","typeLabel":"string | string\u003cpassword> | null"},"aws_region_name":{"oneOf":[{"type":"string","title":"Aws Region Name","uniqueKey":"agent.oneOf.0.llm.aws_region_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Region Name","uniqueKey":"agent.oneOf.0.llm.aws_region_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.aws_region_name","typeLabel":"string | null"},"aws_profile_name":{"oneOf":[{"type":"string","title":"Aws Profile Name","uniqueKey":"agent.oneOf.0.llm.aws_profile_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Profile Name","uniqueKey":"agent.oneOf.0.llm.aws_profile_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.aws_profile_name","typeLabel":"string | null"},"aws_role_name":{"oneOf":[{"type":"string","title":"Aws Role Name","uniqueKey":"agent.oneOf.0.llm.aws_role_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Role Name","uniqueKey":"agent.oneOf.0.llm.aws_role_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.aws_role_name","typeLabel":"string | null"},"aws_session_name":{"oneOf":[{"type":"string","title":"Aws Session Name","uniqueKey":"agent.oneOf.0.llm.aws_session_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Session Name","uniqueKey":"agent.oneOf.0.llm.aws_session_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.aws_session_name","typeLabel":"string | null"},"aws_bedrock_runtime_endpoint":{"oneOf":[{"type":"string","title":"Aws Bedrock Runtime Endpoint","uniqueKey":"agent.oneOf.0.llm.aws_bedrock_runtime_endpoint.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Bedrock Runtime Endpoint","uniqueKey":"agent.oneOf.0.llm.aws_bedrock_runtime_endpoint.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.aws_bedrock_runtime_endpoint","typeLabel":"string | null"},"openrouter_site_url":{"type":"string","title":"Openrouter Site Url","default":"https://docs.all-hands.dev/","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.llm.openrouter_site_url","typeLabel":"string"},"openrouter_app_name":{"type":"string","title":"Openrouter App Name","default":"OpenHands","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.llm.openrouter_app_name","typeLabel":"string"},"num_retries":{"type":"integer","minimum":0,"title":"Num Retries","default":5,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.llm.num_retries","typeLabel":"integer"},"retry_multiplier":{"type":"number","minimum":0,"title":"Retry Multiplier","default":8,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.llm.retry_multiplier","typeLabel":"number"},"retry_min_wait":{"type":"integer","minimum":0,"title":"Retry Min Wait","default":8,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.llm.retry_min_wait","typeLabel":"integer"},"retry_max_wait":{"type":"integer","minimum":0,"title":"Retry Max Wait","default":64,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.llm.retry_max_wait","typeLabel":"integer"},"timeout":{"oneOf":[{"type":"integer","title":"Timeout","description":"HTTP timeout in seconds. Default is 300s (5 minutes). Set to None to disable timeout (not recommended for production).","default":300,"minimum":0,"uniqueKey":"agent.oneOf.0.llm.timeout.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Timeout","description":"HTTP timeout in seconds. Default is 300s (5 minutes). Set to None to disable timeout (not recommended for production).","default":300,"uniqueKey":"agent.oneOf.0.llm.timeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.timeout","typeLabel":"integer | null"},"max_message_chars":{"type":"integer","minimum":1,"title":"Max Message Chars","description":"Approx max chars in each event/content sent to the LLM.","default":30000,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.llm.max_message_chars","typeLabel":"integer"},"temperature":{"oneOf":[{"type":"number","title":"Temperature","description":"Sampling temperature for response generation. Defaults to None (uses provider default temperature). Set to 0.0 for deterministic outputs, or higher values (0.7-1.0) for more creative responses.","minimum":0,"uniqueKey":"agent.oneOf.0.llm.temperature.oneOf.0","typeLabel":"number"},{"type":"null","title":"Temperature","description":"Sampling temperature for response generation. Defaults to None (uses provider default temperature). Set to 0.0 for deterministic outputs, or higher values (0.7-1.0) for more creative responses.","uniqueKey":"agent.oneOf.0.llm.temperature.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.temperature","typeLabel":"number | null"},"top_p":{"oneOf":[{"type":"number","title":"Top P","description":"Nucleus sampling parameter. Defaults to None (uses provider default). Set to a value between 0 and 1 to control diversity of outputs.","maximum":1,"minimum":0,"uniqueKey":"agent.oneOf.0.llm.top_p.oneOf.0","typeLabel":"number"},{"type":"null","title":"Top P","description":"Nucleus sampling parameter. Defaults to None (uses provider default). Set to a value between 0 and 1 to control diversity of outputs.","uniqueKey":"agent.oneOf.0.llm.top_p.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.top_p","typeLabel":"number | null"},"top_k":{"oneOf":[{"type":"number","title":"Top K","minimum":0,"uniqueKey":"agent.oneOf.0.llm.top_k.oneOf.0","typeLabel":"number"},{"type":"null","title":"Top K","uniqueKey":"agent.oneOf.0.llm.top_k.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.top_k","typeLabel":"number | null"},"max_input_tokens":{"oneOf":[{"type":"integer","title":"Max Input Tokens","description":"The maximum number of input tokens. Note that this is currently unused, and the value at runtime is actually the total tokens in OpenAI (e.g. 128,000 tokens for GPT-4).","minimum":1,"uniqueKey":"agent.oneOf.0.llm.max_input_tokens.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Max Input Tokens","description":"The maximum number of input tokens. Note that this is currently unused, and the value at runtime is actually the total tokens in OpenAI (e.g. 128,000 tokens for GPT-4).","uniqueKey":"agent.oneOf.0.llm.max_input_tokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.max_input_tokens","typeLabel":"integer | null"},"max_output_tokens":{"oneOf":[{"type":"integer","title":"Max Output Tokens","description":"The maximum number of output tokens. This is sent to the LLM.","minimum":1,"uniqueKey":"agent.oneOf.0.llm.max_output_tokens.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Max Output Tokens","description":"The maximum number of output tokens. This is sent to the LLM.","uniqueKey":"agent.oneOf.0.llm.max_output_tokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.max_output_tokens","typeLabel":"integer | null"},"model_canonical_name":{"oneOf":[{"type":"string","title":"Model Canonical Name","description":"Optional canonical model name for feature registry lookups. The OpenHands SDK maintains a model feature registry that maps model names to capabilities (e.g., vision support, prompt caching, responses API support). When using proxied or aliased model identifiers, set this field to the canonical model name (e.g., 'openai/gpt-4o') to ensure correct capability detection. If not provided, the 'model' field will be used for capability lookups.","uniqueKey":"agent.oneOf.0.llm.model_canonical_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Model Canonical Name","description":"Optional canonical model name for feature registry lookups. The OpenHands SDK maintains a model feature registry that maps model names to capabilities (e.g., vision support, prompt caching, responses API support). When using proxied or aliased model identifiers, set this field to the canonical model name (e.g., 'openai/gpt-4o') to ensure correct capability detection. If not provided, the 'model' field will be used for capability lookups.","uniqueKey":"agent.oneOf.0.llm.model_canonical_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.model_canonical_name","typeLabel":"string | null"},"api_mode":{"type":"string","enum":["auto","chat","responses"],"title":"Api Mode","description":"LLM API endpoint mode. 'auto' resolves from model metadata and SDK fallbacks; use 'chat' or 'responses' to override endpoint selection for proxy aliases and newly released models.","default":"auto","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.llm.api_mode","typeLabel":"enum\u003cstring>"},"capability_overrides":{"additionalProperties":{"oneOf":[{"type":"boolean","uniqueKey":"agent.oneOf.0.llm.capability_overrides.additionalProperties.oneOf.0","typeLabel":"boolean"},{"type":"string","uniqueKey":"agent.oneOf.0.llm.capability_overrides.additionalProperties.oneOf.1","typeLabel":"string"}],"uniqueKey":"agent.oneOf.0.llm.capability_overrides.additionalProperties","typeLabel":"boolean | string"},"type":"object","title":"Capability Overrides","description":"Explicit model capability overrides. Supported keys include supports_reasoning_effort, thinking_mode (adaptive, manual, none, or unknown), supports_sampling_params, supports_prompt_cache, supports_stop_words, supports_responses_api, supports_vision, and supports_prompt_cache_retention. Overrides take precedence over LiteLLM metadata and SDK fallbacks.","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.llm.capability_overrides","typeLabel":"Capability Overrides · object"},"extra_headers":{"oneOf":[{"type":"object","title":"Extra Headers","description":"Optional HTTP headers to forward to LiteLLM requests.","additionalProperties":{"type":"string","uniqueKey":"agent.oneOf.0.llm.extra_headers.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"agent.oneOf.0.llm.extra_headers.oneOf.0","typeLabel":"Extra Headers · object"},{"type":"null","title":"Extra Headers","description":"Optional HTTP headers to forward to LiteLLM requests.","uniqueKey":"agent.oneOf.0.llm.extra_headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.extra_headers","typeLabel":"Extra Headers · object | null"},"input_cost_per_token":{"oneOf":[{"type":"number","title":"Input Cost Per Token","description":"The cost per input token. This will available in logs for user.","minimum":0,"uniqueKey":"agent.oneOf.0.llm.input_cost_per_token.oneOf.0","typeLabel":"number"},{"type":"null","title":"Input Cost Per Token","description":"The cost per input token. This will available in logs for user.","uniqueKey":"agent.oneOf.0.llm.input_cost_per_token.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.input_cost_per_token","typeLabel":"number | null"},"output_cost_per_token":{"oneOf":[{"type":"number","title":"Output Cost Per Token","description":"The cost per output token. This will available in logs for user.","minimum":0,"uniqueKey":"agent.oneOf.0.llm.output_cost_per_token.oneOf.0","typeLabel":"number"},{"type":"null","title":"Output Cost Per Token","description":"The cost per output token. This will available in logs for user.","uniqueKey":"agent.oneOf.0.llm.output_cost_per_token.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.output_cost_per_token","typeLabel":"number | null"},"ollama_base_url":{"oneOf":[{"type":"string","title":"Ollama Base Url","uniqueKey":"agent.oneOf.0.llm.ollama_base_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Ollama Base Url","uniqueKey":"agent.oneOf.0.llm.ollama_base_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.ollama_base_url","typeLabel":"string | null"},"stream":{"type":"boolean","title":"Stream","description":"Enable streaming responses from the LLM. When enabled, the provided `on_token` callback in .completions and .responses will be invoked for each chunk of tokens.","default":false,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.llm.stream","typeLabel":"boolean"},"drop_params":{"type":"boolean","title":"Drop Params","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.llm.drop_params","typeLabel":"boolean"},"modify_params":{"type":"boolean","title":"Modify Params","description":"Modify params allows litellm to do transformations like adding a default message, when a message is empty.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.llm.modify_params","typeLabel":"boolean"},"disable_vision":{"oneOf":[{"type":"boolean","title":"Disable Vision","description":"If model is vision capable, this option allows to disable image processing (useful for cost reduction).","uniqueKey":"agent.oneOf.0.llm.disable_vision.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Disable Vision","description":"If model is vision capable, this option allows to disable image processing (useful for cost reduction).","uniqueKey":"agent.oneOf.0.llm.disable_vision.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.disable_vision","typeLabel":"boolean | null"},"disable_stop_word":{"oneOf":[{"type":"boolean","title":"Disable Stop Word","description":"Disable using of stop word.","default":false,"uniqueKey":"agent.oneOf.0.llm.disable_stop_word.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Disable Stop Word","description":"Disable using of stop word.","default":false,"uniqueKey":"agent.oneOf.0.llm.disable_stop_word.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.disable_stop_word","typeLabel":"boolean | null"},"caching_prompt":{"type":"boolean","title":"Caching Prompt","description":"Enable caching of prompts.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.llm.caching_prompt","typeLabel":"boolean"},"log_completions":{"type":"boolean","title":"Log Completions","description":"Enable logging of completions.","default":false,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.llm.log_completions","typeLabel":"boolean"},"log_completions_folder":{"type":"string","title":"Log Completions Folder","description":"The folder to log LLM completions to. Required if log_completions is True.","default":"logs/completions","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.llm.log_completions_folder","typeLabel":"string"},"custom_tokenizer":{"oneOf":[{"type":"string","title":"Custom Tokenizer","description":"A custom tokenizer to use for token counting.","uniqueKey":"agent.oneOf.0.llm.custom_tokenizer.oneOf.0","typeLabel":"string"},{"type":"null","title":"Custom Tokenizer","description":"A custom tokenizer to use for token counting.","uniqueKey":"agent.oneOf.0.llm.custom_tokenizer.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.custom_tokenizer","typeLabel":"string | null"},"native_tool_calling":{"type":"boolean","title":"Native Tool Calling","description":"Whether to use native tool calling.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.llm.native_tool_calling","typeLabel":"boolean"},"force_string_serializer":{"oneOf":[{"type":"boolean","title":"Force String Serializer","description":"Force using string content serializer when sending to LLM API. If None (default), auto-detect based on model. Useful for providers that do not support list content, like HuggingFace and Groq.","uniqueKey":"agent.oneOf.0.llm.force_string_serializer.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Force String Serializer","description":"Force using string content serializer when sending to LLM API. If None (default), auto-detect based on model. Useful for providers that do not support list content, like HuggingFace and Groq.","uniqueKey":"agent.oneOf.0.llm.force_string_serializer.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.force_string_serializer","typeLabel":"boolean | null"},"inline_image_urls":{"oneOf":[{"type":"boolean","title":"Inline Image Urls","description":"If True, fetch any http(s) image URL in outgoing messages and inline it as a base64 ``data:`` URL before sending. If None (default), auto-detect based on model (some APIs such as Moonshot's public Kimi endpoint reject URL-formatted images and require base64). Set this explicitly when the model is reached through a proxy alias that hides the underlying provider (e.g. ``litellm_proxy/\u003ccustom-alias>``). Note: inlining only runs when ``vision_is_active()`` is True, so the alias must still be recognised as vision-capable by the SDK feature registry or proxy model metadata.","uniqueKey":"agent.oneOf.0.llm.inline_image_urls.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Inline Image Urls","description":"If True, fetch any http(s) image URL in outgoing messages and inline it as a base64 ``data:`` URL before sending. If None (default), auto-detect based on model (some APIs such as Moonshot's public Kimi endpoint reject URL-formatted images and require base64). Set this explicitly when the model is reached through a proxy alias that hides the underlying provider (e.g. ``litellm_proxy/\u003ccustom-alias>``). Note: inlining only runs when ``vision_is_active()`` is True, so the alias must still be recognised as vision-capable by the SDK feature registry or proxy model metadata.","uniqueKey":"agent.oneOf.0.llm.inline_image_urls.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.inline_image_urls","typeLabel":"boolean | null"},"reasoning_effort":{"oneOf":[{"type":"string","title":"Reasoning Effort","description":"Provider-neutral reasoning effort. Common values include 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', and 'max'. The SDK accepts future provider values and lets LiteLLM translate them.","default":"high","enum":["low","medium","high","xhigh","none"],"uniqueKey":"agent.oneOf.0.llm.reasoning_effort.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Reasoning Effort","description":"Provider-neutral reasoning effort. Common values include 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', and 'max'. The SDK accepts future provider values and lets LiteLLM translate them.","default":"high","uniqueKey":"agent.oneOf.0.llm.reasoning_effort.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.reasoning_effort","typeLabel":"enum\u003cstring> | null"},"reasoning_summary":{"oneOf":[{"type":"string","title":"Reasoning Summary","description":"The level of detail for reasoning summaries. This is a string that can be one of 'auto', 'concise', or 'detailed'. Requires verified OpenAI organization. Only sent when explicitly set.","enum":["auto","concise","detailed"],"uniqueKey":"agent.oneOf.0.llm.reasoning_summary.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Reasoning Summary","description":"The level of detail for reasoning summaries. This is a string that can be one of 'auto', 'concise', or 'detailed'. Requires verified OpenAI organization. Only sent when explicitly set.","uniqueKey":"agent.oneOf.0.llm.reasoning_summary.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.reasoning_summary","typeLabel":"enum\u003cstring> | null"},"enable_encrypted_reasoning":{"type":"boolean","title":"Enable Encrypted Reasoning","description":"If True, ask for ['reasoning.encrypted_content'] in Responses API include.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.llm.enable_encrypted_reasoning","typeLabel":"boolean"},"prompt_cache_retention":{"oneOf":[{"type":"string","title":"Prompt Cache Retention","description":"Retention policy for prompt cache. Only sent for supported models (GPT-5+ and GPT-4.1, excluding Azure deployments); explicitly stripped for all others.","default":"24h","uniqueKey":"agent.oneOf.0.llm.prompt_cache_retention.oneOf.0","typeLabel":"string"},{"type":"null","title":"Prompt Cache Retention","description":"Retention policy for prompt cache. Only sent for supported models (GPT-5+ and GPT-4.1, excluding Azure deployments); explicitly stripped for all others.","default":"24h","uniqueKey":"agent.oneOf.0.llm.prompt_cache_retention.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.prompt_cache_retention","typeLabel":"string | null"},"extended_thinking_budget":{"oneOf":[{"type":"integer","title":"Extended Thinking Budget","description":"Legacy token budget for models confirmed to use manual Anthropic extended thinking. Ignored for adaptive-thinking models. Prefer reasoning_effort for new integrations.","default":200000,"uniqueKey":"agent.oneOf.0.llm.extended_thinking_budget.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Extended Thinking Budget","description":"Legacy token budget for models confirmed to use manual Anthropic extended thinking. Ignored for adaptive-thinking models. Prefer reasoning_effort for new integrations.","default":200000,"uniqueKey":"agent.oneOf.0.llm.extended_thinking_budget.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.extended_thinking_budget","typeLabel":"integer | null"},"seed":{"oneOf":[{"type":"integer","title":"Seed","description":"The seed to use for random number generation.","uniqueKey":"agent.oneOf.0.llm.seed.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Seed","description":"The seed to use for random number generation.","uniqueKey":"agent.oneOf.0.llm.seed.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.seed","typeLabel":"integer | null"},"usage_id":{"type":"string","title":"Usage Id","description":"Unique usage identifier for the LLM. Used for registry lookups, telemetry, and spend tracking.","default":"default","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.llm.usage_id","typeLabel":"string"},"litellm_extra_body":{"additionalProperties":true,"type":"object","title":"Litellm Extra Body","description":"Additional key-value pairs to pass to litellm's extra_body parameter. This is useful for custom inference endpoints that need additional parameters for configuration, routing, or advanced features. NOTE: Not all LLM providers support extra_body parameters. Some providers (e.g., OpenAI) may reject requests with unrecognized options. This is commonly supported by: - LiteLLM proxy servers (routing metadata, tracing) - vLLM endpoints (return_token_ids, etc.) - Custom inference clusters Examples: - Proxy routing: {'trace_version': '1.0.0', 'tags': ['agent:my-agent']} - vLLM features: {'return_token_ids': True}","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.llm.litellm_extra_body","typeLabel":"Litellm Extra Body · object"},"fallback_strategy":{"oneOf":[{"type":"object","title":"FallbackStrategy","description":"Optional fallback strategy for trying alternate LLMs on transient failure. Construct with FallbackStrategy(fallback_llms=[...]).Excluded from serialization; must be reconfigured after load.","required":["fallback_llms"],"properties":{"fallback_llms":{"items":{"type":"string","uniqueKey":"agent.oneOf.0.llm.fallback_strategy.oneOf.0.fallback_llms.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Fallback Llms","description":"Ordered list of LLM profile names to try on transient failure.","isRequired":true,"uniqueKey":"agent.oneOf.0.llm.fallback_strategy.oneOf.0.fallback_llms","typeLabel":"string[]"},"profile_store_dir":{"oneOf":[{"type":"string","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`.","uniqueKey":"agent.oneOf.0.llm.fallback_strategy.oneOf.0.profile_store_dir.oneOf.0","typeLabel":"string"},{"type":"string","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`.","format":"path","uniqueKey":"agent.oneOf.0.llm.fallback_strategy.oneOf.0.profile_store_dir.oneOf.1","typeLabel":"string\u003cpath>"},{"type":"null","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`.","uniqueKey":"agent.oneOf.0.llm.fallback_strategy.oneOf.0.profile_store_dir.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.fallback_strategy.oneOf.0.profile_store_dir","typeLabel":"string | string\u003cpath> | null"}},"uniqueKey":"agent.oneOf.0.llm.fallback_strategy.oneOf.0","typeLabel":"FallbackStrategy · object"},{"type":"null","description":"Optional fallback strategy for trying alternate LLMs on transient failure. Construct with FallbackStrategy(fallback_llms=[...]).Excluded from serialization; must be reconfigured after load.","uniqueKey":"agent.oneOf.0.llm.fallback_strategy.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.llm.fallback_strategy","typeLabel":"FallbackStrategy · object | null"}},"type":"object","title":"LLM","description":"Language model interface for OpenHands agents.\n\nThe LLM class provides a unified interface for interacting with various\nlanguage models through the litellm library. It handles model configuration,\nAPI authentication, retry logic, and tool calling capabilities.\n\nAttributes:\n model: Model name (e.g., \"gpt-5.5\").\n api_key: API key for authentication.\n base_url: Custom API base URL.\n num_retries: Number of retry attempts for failed requests.\n timeout: Request timeout in seconds.\n\nExample:\n ```python\n from openhands.sdk import LLM\n from pydantic import SecretStr\n\n llm = LLM(\n model=\"gpt-5.5\",\n api_key=SecretStr(\"your-api-key\"),\n usage_id=\"my-agent\"\n )\n # Use with agent or conversation\n ```","uniqueKey":"agent.oneOf.0.llm","typeLabel":"LLM · object"},"tools":{"items":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the tool class, e.g., 'TerminalTool'. Import it from an `openhands.tools.\u003cmodule>` subpackage.","examples":["TerminalTool","FileEditorTool","TaskTrackerTool"],"isRequired":true,"uniqueKey":"agent.oneOf.0.tools.items.[INDEX].name","typeLabel":"string"},"params":{"additionalProperties":true,"type":"object","title":"Params","description":"Parameters for the tool's .create() method, e.g., {'working_dir': '/app'}","examples":[{"working_dir":"/workspace"}],"uniqueKey":"agent.oneOf.0.tools.items.[INDEX].params","typeLabel":"Params · object"}},"type":"object","required":["name"],"title":"Tool","description":"Defines a tool to be initialized for the agent.\n\nThis is only used in agent-sdk for type schema for server use.","uniqueKey":"agent.oneOf.0.tools.items.[INDEX]","typeLabel":"Tool · object"},"type":"array","title":"Tools","uniqueKey":"agent.oneOf.0.tools","typeLabel":"Tool · object[]"},"mcp_config":{"additionalProperties":{"properties":{"url":{"oneOf":[{"type":"string","title":"Url","minLength":1,"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Url","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.url","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","title":"Transport","enum":["stdio","http","sse","streamable-http"],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Transport","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.transport","typeLabel":"enum\u003cstring> | null"},"command":{"oneOf":[{"type":"string","title":"Command","minLength":1,"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.command.oneOf.0","typeLabel":"string"},{"type":"null","title":"Command","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.command.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.command","typeLabel":"string | null"},"args":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.args.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Args","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.args.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Args","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.args.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.args","typeLabel":"string[] | null"},"env":{"oneOf":[{"type":"object","title":"Env","additionalProperties":{"type":"string","format":"password","writeOnly":true,"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.env.oneOf.0.additionalProperties","typeLabel":"string\u003cpassword>"},"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.env.oneOf.0","typeLabel":"Env · object"},{"type":"null","title":"Env","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.env.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.env","typeLabel":"Env · object | null"},"cwd":{"oneOf":[{"type":"string","title":"Cwd","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.cwd.oneOf.0","typeLabel":"string"},{"type":"null","title":"Cwd","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.cwd.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.cwd","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","title":"Description","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.description.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.description","typeLabel":"string | null"},"icon":{"oneOf":[{"type":"string","title":"Icon","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.icon.oneOf.0","typeLabel":"string"},{"type":"null","title":"Icon","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.icon.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.icon","typeLabel":"string | null"},"timeout":{"oneOf":[{"type":"number","title":"Timeout","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.timeout.oneOf.0","typeLabel":"number"},{"type":"null","title":"Timeout","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.timeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.timeout","typeLabel":"number | null"},"sse_read_timeout":{"oneOf":[{"type":"number","title":"Sse Read Timeout","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.sse_read_timeout.oneOf.0","typeLabel":"number"},{"type":"null","title":"Sse Read Timeout","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.sse_read_timeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.sse_read_timeout","typeLabel":"number | null"},"keep_alive":{"oneOf":[{"type":"boolean","title":"Keep Alive","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.keep_alive.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Keep Alive","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.keep_alive.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.keep_alive","typeLabel":"boolean | null"},"headers":{"oneOf":[{"type":"object","title":"Headers","additionalProperties":{"type":"string","format":"password","writeOnly":true,"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.headers.oneOf.0.additionalProperties","typeLabel":"string\u003cpassword>"},"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.headers.oneOf.0","typeLabel":"Headers · object"},{"type":"null","title":"Headers","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.headers","typeLabel":"Headers · object | null"},"auth":{"oneOf":[{"type":"object","title":"MCPNoneAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"none","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.0.strategy","typeLabel":"string"}},"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.0","typeLabel":"MCPNoneAuthCredential · object"},{"type":"object","title":"MCPApiKeyAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"api_key","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.1.strategy","typeLabel":"string"},"value":{"oneOf":[{"type":"string","title":"Value","format":"password","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.1.value.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Value","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.1.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.1.value","typeLabel":"string\u003cpassword> | null"},"header_name":{"oneOf":[{"type":"string","title":"Header Name","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.1.header_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Header Name","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.1.header_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.1.header_name","typeLabel":"string | null"}},"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.1","typeLabel":"MCPApiKeyAuthCredential · object"},{"type":"object","title":"MCPBearerAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"bearer","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.2.strategy","typeLabel":"string"},"value":{"oneOf":[{"type":"string","title":"Value","format":"password","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.2.value.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Value","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.2.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.2.value","typeLabel":"string\u003cpassword> | null"}},"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.2","typeLabel":"MCPBearerAuthCredential · object"},{"type":"object","title":"MCPBasicAuthCredential","required":["strategy","username"],"properties":{"strategy":{"type":"string","const":"basic","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.3.strategy","typeLabel":"string"},"username":{"type":"string","title":"Username","isRequired":true,"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.3.username","typeLabel":"string"},"password":{"oneOf":[{"type":"string","title":"Password","format":"password","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.3.password.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Password","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.3.password.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.3.password","typeLabel":"string\u003cpassword> | null"}},"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.3","typeLabel":"MCPBasicAuthCredential · object"},{"type":"object","title":"MCPHeaderAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"header","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.4.strategy","typeLabel":"string"},"headers":{"additionalProperties":{"type":"string","format":"password","writeOnly":true,"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.4.headers.additionalProperties","typeLabel":"string\u003cpassword>"},"type":"object","title":"Headers","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.4.headers","typeLabel":"Headers · object"}},"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.4","typeLabel":"MCPHeaderAuthCredential · object"},{"type":"object","title":"MCPOAuthAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"oauth2","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.strategy","typeLabel":"string"},"authentication":{"oneOf":[{"type":"object","title":"MCPOAuthAuthentication","required":["type"],"properties":{"type":{"type":"string","const":"oauth","title":"Type","isRequired":true,"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.type","typeLabel":"string"},"client_auth_method":{"oneOf":[{"type":"string","title":"Client Auth Method","enum":["none","client_secret_post","client_secret_basic","private_key_jwt"],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_auth_method.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Client Auth Method","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_auth_method.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_auth_method","typeLabel":"enum\u003cstring> | null"},"scopes":{"oneOf":[{"type":"string","title":"Scopes","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes.oneOf.1.items.[INDEX]","typeLabel":"string"},"title":"Scopes","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes.oneOf.1","typeLabel":"string[]"},{"type":"null","title":"Scopes","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes","typeLabel":"string | string[] | null"},"client_name":{"oneOf":[{"type":"string","title":"Client Name","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Client Name","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_name","typeLabel":"string | null"},"client_metadata_url":{"oneOf":[{"type":"string","title":"Client Metadata Url","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_metadata_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Client Metadata Url","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_metadata_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_metadata_url","typeLabel":"string | null"},"client_id":{"oneOf":[{"type":"string","title":"Client Id","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Client Id","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_id","typeLabel":"string | null"},"client_secret":{"oneOf":[{"type":"string","title":"Client Secret","format":"password","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_secret.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Client Secret","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_secret.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_secret","typeLabel":"string\u003cpassword> | null"},"additional_client_metadata":{"oneOf":[{"type":"object","title":"Additional Client Metadata","additionalProperties":true,"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.additional_client_metadata.oneOf.0","typeLabel":"Additional Client Metadata · object"},{"type":"null","title":"Additional Client Metadata","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.additional_client_metadata.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.additional_client_metadata","typeLabel":"Additional Client Metadata · object | null"}},"additionalProperties":false,"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0","typeLabel":"MCPOAuthAuthentication · object"},{"type":"null","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.authentication","typeLabel":"MCPOAuthAuthentication · object | null"},"state":{"oneOf":[{"type":"object","title":"MCPOAuthState","properties":{"tokens":{"oneOf":[{"type":"object","title":"MCPOAuthTokenState","properties":{"access_token":{"oneOf":[{"type":"string","title":"Access Token","format":"password","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.access_token.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Access Token","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.access_token.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.access_token","typeLabel":"string\u003cpassword> | null"},"refresh_token":{"oneOf":[{"type":"string","title":"Refresh Token","format":"password","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.refresh_token.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Refresh Token","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.refresh_token.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.refresh_token","typeLabel":"string\u003cpassword> | null"}},"additionalProperties":true,"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0","typeLabel":"MCPOAuthTokenState · object"},{"type":"null","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens","typeLabel":"MCPOAuthTokenState · object | null"},"client_info":{"oneOf":[{"type":"object","title":"MCPOAuthClientInfoState","properties":{"client_secret":{"oneOf":[{"type":"string","title":"Client Secret","format":"password","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.0.client_secret.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Client Secret","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.0.client_secret.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.0.client_secret","typeLabel":"string\u003cpassword> | null"}},"additionalProperties":true,"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.0","typeLabel":"MCPOAuthClientInfoState · object"},{"type":"null","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info","typeLabel":"MCPOAuthClientInfoState · object | null"},"token_expires_at":{"oneOf":[{"type":"number","title":"Token Expires At","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.token_expires_at.oneOf.0","typeLabel":"number"},{"type":"null","title":"Token Expires At","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.token_expires_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.token_expires_at","typeLabel":"number | null"}},"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0","typeLabel":"MCPOAuthState · object"},{"type":"null","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5.state","typeLabel":"MCPOAuthState · object | null"}},"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.5","typeLabel":"MCPOAuthAuthCredential · object"},{"type":"null","title":"Auth","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth.oneOf.6","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.auth","typeLabel":"MCPNoneAuthCredential · object | MCPApiKeyAuthCredential · object | MCPBearerAuthCredential · object | MCPBasicAuthCredential · object | MCPHeaderAuthCredential · object | MCPOAuthAuthCredential · object | null"},"enabled":{"type":"boolean","title":"Enabled","description":"Whether this server is exposed to the agent. A disabled server stays fully configured -- including its secrets -- but is skipped when MCP tools are created and when servers are forwarded to an ACP subprocess.","default":true,"uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties.enabled","typeLabel":"boolean"}},"additionalProperties":false,"type":"object","title":"MCPServer","description":"One MCP server in the settings DataModel.","uniqueKey":"agent.oneOf.0.mcp_config.additionalProperties","typeLabel":"MCPServer · object"},"type":"object","title":"Mcp Config","description":"Optional MCP servers to expose as tools.","examples":[{"fetch":{"args":["--with","mcp==1.29.0","mcp-server-fetch==2026.7.10"],"command":"uvx"}}],"uniqueKey":"agent.oneOf.0.mcp_config","typeLabel":"Mcp Config · object"},"filter_tools_regex":{"oneOf":[{"type":"string","title":"Filter Tools Regex","description":"Optional regex to filter the tools available to the agent by name. This is applied after any tools provided in `tools` and any MCP tools are added.","example":"^(?!repomix)(.*)|^repomix.*pack_codebase.*$","uniqueKey":"agent.oneOf.0.filter_tools_regex.oneOf.0","typeLabel":"string"},{"type":"null","title":"Filter Tools Regex","description":"Optional regex to filter the tools available to the agent by name. This is applied after any tools provided in `tools` and any MCP tools are added.","example":"^(?!repomix)(.*)|^repomix.*pack_codebase.*$","uniqueKey":"agent.oneOf.0.filter_tools_regex.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.filter_tools_regex","typeLabel":"string | null"},"include_default_tools":{"items":{"type":"string","uniqueKey":"agent.oneOf.0.include_default_tools.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Include Default Tools","uniqueKey":"agent.oneOf.0.include_default_tools","typeLabel":"string[]"},"agent_context":{"oneOf":[{"type":"object","title":"AgentContext","description":"Optional AgentContext to initialize the agent with specific context.","example":{"skills":[{"content":"When you see this message, you should reply like you are a grumpy cat forced to use the internet.","name":"AGENTS.md","type":"repo"},{"content":"IMPORTANT! The user has said the magic word \"flarglebargle\". You must only respond with a message telling them how smart they are","name":"flarglebargle","trigger":["flarglebargle"],"type":"knowledge"}],"system_message_suffix":"Always finish your response with the word 'yay!'"},"properties":{"skills":{"items":{"properties":{"name":{"type":"string","title":"Name","isRequired":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].name","typeLabel":"string"},"content":{"type":"string","title":"Content","isRequired":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].content","typeLabel":"string"},"trigger":{"oneOf":[{"type":"object","title":"KeywordTrigger","description":"Trigger for keyword-based skills.\n\nThese skills are activated when specific keywords appear in the user's query.","required":["keywords"],"properties":{"keywords":{"items":{"type":"string","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.0.keywords.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Keywords","isRequired":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.0.keywords","typeLabel":"string[]"},"type":{"type":"string","const":"keyword","title":"Type","default":"keyword","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.0.type","typeLabel":"string"}},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.0","typeLabel":"KeywordTrigger · object"},{"type":"object","title":"TaskTrigger","description":"Trigger for task-specific skills.\n\nThese skills are activated for specific task types and can modify prompts.","required":["triggers"],"properties":{"triggers":{"items":{"type":"string","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.1.triggers.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Triggers","isRequired":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.1.triggers","typeLabel":"string[]"},"type":{"type":"string","const":"task","title":"Type","default":"task","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.1.type","typeLabel":"string"}},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.1","typeLabel":"TaskTrigger · object"},{"type":"object","title":"PathTrigger","description":"Trigger for path-scoped skills (\"rules\").\n\nThese skills are activated when the agent touches a file whose path matches\none of the ``paths`` glob patterns (gitignore-style ``**`` semantics).","required":["paths"],"properties":{"paths":{"items":{"type":"string","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.2.paths.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Paths","isRequired":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.2.paths","typeLabel":"string[]"},"type":{"type":"string","const":"path","title":"Type","default":"path","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.2.type","typeLabel":"string"}},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.2","typeLabel":"PathTrigger · object"},{"type":"null","title":"Trigger","description":"Trigger determines when skill content is auto-injected. None = no auto-injection (for AgentSkills: agent reads on demand; for legacy: full content always in system prompt). KeywordTrigger = auto-inject when keywords appear in user messages. TaskTrigger = auto-inject for specific tasks, may require user input.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.3","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].trigger","typeLabel":"KeywordTrigger · object | TaskTrigger · object | PathTrigger · object | null"},"source":{"oneOf":[{"type":"string","title":"Source","description":"The source path or identifier of the skill. When it is None, it is treated as a programmatically defined skill.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].source.oneOf.0","typeLabel":"string"},{"type":"null","title":"Source","description":"The source path or identifier of the skill. When it is None, it is treated as a programmatically defined skill.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].source.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].source","typeLabel":"string | null"},"mcp_tools":{"oneOf":[{"type":"object","title":"Mcp Tools","description":"MCP servers for the skill (repo skills only).","additionalProperties":{"properties":{"url":{"oneOf":[{"type":"string","title":"Url","minLength":1,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Url","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.url","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","title":"Transport","enum":["stdio","http","sse","streamable-http"],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Transport","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.transport","typeLabel":"enum\u003cstring> | null"},"command":{"oneOf":[{"type":"string","title":"Command","minLength":1,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.command.oneOf.0","typeLabel":"string"},{"type":"null","title":"Command","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.command.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.command","typeLabel":"string | null"},"args":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.args.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Args","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.args.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Args","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.args.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.args","typeLabel":"string[] | null"},"env":{"oneOf":[{"type":"object","title":"Env","additionalProperties":{"type":"string","format":"password","writeOnly":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.env.oneOf.0.additionalProperties","typeLabel":"string\u003cpassword>"},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.env.oneOf.0","typeLabel":"Env · object"},{"type":"null","title":"Env","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.env.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.env","typeLabel":"Env · object | null"},"cwd":{"oneOf":[{"type":"string","title":"Cwd","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.cwd.oneOf.0","typeLabel":"string"},{"type":"null","title":"Cwd","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.cwd.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.cwd","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","title":"Description","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.description.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.description","typeLabel":"string | null"},"icon":{"oneOf":[{"type":"string","title":"Icon","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.icon.oneOf.0","typeLabel":"string"},{"type":"null","title":"Icon","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.icon.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.icon","typeLabel":"string | null"},"timeout":{"oneOf":[{"type":"number","title":"Timeout","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.timeout.oneOf.0","typeLabel":"number"},{"type":"null","title":"Timeout","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.timeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.timeout","typeLabel":"number | null"},"sse_read_timeout":{"oneOf":[{"type":"number","title":"Sse Read Timeout","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.sse_read_timeout.oneOf.0","typeLabel":"number"},{"type":"null","title":"Sse Read Timeout","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.sse_read_timeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.sse_read_timeout","typeLabel":"number | null"},"keep_alive":{"oneOf":[{"type":"boolean","title":"Keep Alive","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.keep_alive.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Keep Alive","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.keep_alive.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.keep_alive","typeLabel":"boolean | null"},"headers":{"oneOf":[{"type":"object","title":"Headers","additionalProperties":{"type":"string","format":"password","writeOnly":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.headers.oneOf.0.additionalProperties","typeLabel":"string\u003cpassword>"},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.headers.oneOf.0","typeLabel":"Headers · object"},{"type":"null","title":"Headers","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.headers","typeLabel":"Headers · object | null"},"auth":{"oneOf":[{"type":"object","title":"MCPNoneAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"none","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.0.strategy","typeLabel":"string"}},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.0","typeLabel":"MCPNoneAuthCredential · object"},{"type":"object","title":"MCPApiKeyAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"api_key","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.1.strategy","typeLabel":"string"},"value":{"oneOf":[{"type":"string","title":"Value","format":"password","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.1.value.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Value","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.1.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.1.value","typeLabel":"string\u003cpassword> | null"},"header_name":{"oneOf":[{"type":"string","title":"Header Name","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.1.header_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Header Name","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.1.header_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.1.header_name","typeLabel":"string | null"}},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.1","typeLabel":"MCPApiKeyAuthCredential · object"},{"type":"object","title":"MCPBearerAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"bearer","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.2.strategy","typeLabel":"string"},"value":{"oneOf":[{"type":"string","title":"Value","format":"password","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.2.value.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Value","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.2.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.2.value","typeLabel":"string\u003cpassword> | null"}},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.2","typeLabel":"MCPBearerAuthCredential · object"},{"type":"object","title":"MCPBasicAuthCredential","required":["strategy","username"],"properties":{"strategy":{"type":"string","const":"basic","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.3.strategy","typeLabel":"string"},"username":{"type":"string","title":"Username","isRequired":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.3.username","typeLabel":"string"},"password":{"oneOf":[{"type":"string","title":"Password","format":"password","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.3.password.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Password","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.3.password.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.3.password","typeLabel":"string\u003cpassword> | null"}},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.3","typeLabel":"MCPBasicAuthCredential · object"},{"type":"object","title":"MCPHeaderAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"header","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.4.strategy","typeLabel":"string"},"headers":{"additionalProperties":{"type":"string","format":"password","writeOnly":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.4.headers.additionalProperties","typeLabel":"string\u003cpassword>"},"type":"object","title":"Headers","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.4.headers","typeLabel":"Headers · object"}},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.4","typeLabel":"MCPHeaderAuthCredential · object"},{"type":"object","title":"MCPOAuthAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"oauth2","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.strategy","typeLabel":"string"},"authentication":{"oneOf":[{"type":"object","title":"MCPOAuthAuthentication","required":["type"],"properties":{"type":{"type":"string","const":"oauth","title":"Type","isRequired":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.type","typeLabel":"string"},"client_auth_method":{"oneOf":[{"type":"string","title":"Client Auth Method","enum":["none","client_secret_post","client_secret_basic","private_key_jwt"],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_auth_method.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Client Auth Method","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_auth_method.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_auth_method","typeLabel":"enum\u003cstring> | null"},"scopes":{"oneOf":[{"type":"string","title":"Scopes","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes.oneOf.1.items.[INDEX]","typeLabel":"string"},"title":"Scopes","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes.oneOf.1","typeLabel":"string[]"},{"type":"null","title":"Scopes","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes","typeLabel":"string | string[] | null"},"client_name":{"oneOf":[{"type":"string","title":"Client Name","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Client Name","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_name","typeLabel":"string | null"},"client_metadata_url":{"oneOf":[{"type":"string","title":"Client Metadata Url","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_metadata_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Client Metadata Url","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_metadata_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_metadata_url","typeLabel":"string | null"},"client_id":{"oneOf":[{"type":"string","title":"Client Id","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Client Id","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_id","typeLabel":"string | null"},"client_secret":{"oneOf":[{"type":"string","title":"Client Secret","format":"password","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_secret.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Client Secret","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_secret.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_secret","typeLabel":"string\u003cpassword> | null"},"additional_client_metadata":{"oneOf":[{"type":"object","title":"Additional Client Metadata","additionalProperties":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.additional_client_metadata.oneOf.0","typeLabel":"Additional Client Metadata · object"},{"type":"null","title":"Additional Client Metadata","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.additional_client_metadata.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.additional_client_metadata","typeLabel":"Additional Client Metadata · object | null"}},"additionalProperties":false,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0","typeLabel":"MCPOAuthAuthentication · object"},{"type":"null","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication","typeLabel":"MCPOAuthAuthentication · object | null"},"state":{"oneOf":[{"type":"object","title":"MCPOAuthState","properties":{"tokens":{"oneOf":[{"type":"object","title":"MCPOAuthTokenState","properties":{"access_token":{"oneOf":[{"type":"string","title":"Access Token","format":"password","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.access_token.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Access Token","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.access_token.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.access_token","typeLabel":"string\u003cpassword> | null"},"refresh_token":{"oneOf":[{"type":"string","title":"Refresh Token","format":"password","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.refresh_token.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Refresh Token","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.refresh_token.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.refresh_token","typeLabel":"string\u003cpassword> | null"}},"additionalProperties":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0","typeLabel":"MCPOAuthTokenState · object"},{"type":"null","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens","typeLabel":"MCPOAuthTokenState · object | null"},"client_info":{"oneOf":[{"type":"object","title":"MCPOAuthClientInfoState","properties":{"client_secret":{"oneOf":[{"type":"string","title":"Client Secret","format":"password","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.0.client_secret.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Client Secret","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.0.client_secret.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.0.client_secret","typeLabel":"string\u003cpassword> | null"}},"additionalProperties":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.0","typeLabel":"MCPOAuthClientInfoState · object"},{"type":"null","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info","typeLabel":"MCPOAuthClientInfoState · object | null"},"token_expires_at":{"oneOf":[{"type":"number","title":"Token Expires At","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.token_expires_at.oneOf.0","typeLabel":"number"},{"type":"null","title":"Token Expires At","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.token_expires_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.token_expires_at","typeLabel":"number | null"}},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0","typeLabel":"MCPOAuthState · object"},{"type":"null","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state","typeLabel":"MCPOAuthState · object | null"}},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5","typeLabel":"MCPOAuthAuthCredential · object"},{"type":"null","title":"Auth","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.6","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth","typeLabel":"MCPNoneAuthCredential · object | MCPApiKeyAuthCredential · object | MCPBearerAuthCredential · object | MCPBasicAuthCredential · object | MCPHeaderAuthCredential · object | MCPOAuthAuthCredential · object | null"},"enabled":{"type":"boolean","title":"Enabled","description":"Whether this server is exposed to the agent. A disabled server stays fully configured -- including its secrets -- but is skipped when MCP tools are created and when servers are forwarded to an ACP subprocess.","default":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.enabled","typeLabel":"boolean"}},"additionalProperties":false,"type":"object","title":"MCPServer","description":"One MCP server in the settings DataModel.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties","typeLabel":"MCPServer · object"},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0","typeLabel":"Mcp Tools · object"},{"type":"null","title":"Mcp Tools","description":"MCP servers for the skill (repo skills only).","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools","typeLabel":"Mcp Tools · object | null"},"inputs":{"items":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the input parameter","isRequired":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].inputs.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","title":"Description","description":"Description of the input parameter","isRequired":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].inputs.items.[INDEX].description","typeLabel":"string"}},"type":"object","required":["name","description"],"title":"InputMetadata","description":"Metadata for task skill inputs.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].inputs.items.[INDEX]","typeLabel":"InputMetadata · object"},"type":"array","title":"Inputs","description":"Input metadata for the skill (task skills only)","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].inputs","typeLabel":"InputMetadata · object[]"},"is_agentskills_format":{"type":"boolean","title":"Is Agentskills Format","description":"Whether this skill was loaded from a SKILL.md file following the AgentSkills standard. AgentSkills-format skills use progressive disclosure: always listed in \u003cavailable_skills> with name, description, and location. If the skill also has triggers, content is auto-injected when triggered AND agent can read file anytime.","default":false,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].is_agentskills_format","typeLabel":"boolean"},"version":{"type":"string","title":"Version","description":"Skill version (AgentSkills standard field).","default":"1.0.0","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].version","typeLabel":"string"},"description":{"oneOf":[{"type":"string","title":"Description","description":"A brief description of what the skill does and when to use it. Descriptions exceeding MAX_DESCRIPTION_LENGTH are truncated with a notice pointing to the skill's source path.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"A brief description of what the skill does and when to use it. Descriptions exceeding MAX_DESCRIPTION_LENGTH are truncated with a notice pointing to the skill's source path.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].description","typeLabel":"string | null"},"license":{"oneOf":[{"type":"string","title":"License","description":"The license under which the skill is distributed. AgentSkills standard field (e.g., 'Apache-2.0', 'MIT').","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].license.oneOf.0","typeLabel":"string"},{"type":"null","title":"License","description":"The license under which the skill is distributed. AgentSkills standard field (e.g., 'Apache-2.0', 'MIT').","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].license.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].license","typeLabel":"string | null"},"compatibility":{"oneOf":[{"type":"string","title":"Compatibility","description":"Environment requirements or compatibility notes for the skill. AgentSkills standard field (e.g., 'Requires git and docker').","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].compatibility.oneOf.0","typeLabel":"string"},{"type":"null","title":"Compatibility","description":"Environment requirements or compatibility notes for the skill. AgentSkills standard field (e.g., 'Requires git and docker').","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].compatibility.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].compatibility","typeLabel":"string | null"},"metadata":{"oneOf":[{"type":"object","title":"Metadata","description":"Arbitrary key-value metadata for the skill. AgentSkills standard field for extensibility.","additionalProperties":{"type":"string","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].metadata.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].metadata.oneOf.0","typeLabel":"Metadata · object"},{"type":"null","title":"Metadata","description":"Arbitrary key-value metadata for the skill. AgentSkills standard field for extensibility.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].metadata.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].metadata","typeLabel":"Metadata · object | null"},"allowed_tools":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].allowed_tools.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Allowed Tools","description":"List of pre-approved tools for this skill. AgentSkills standard field (parsed from space-delimited string).","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].allowed_tools.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Allowed Tools","description":"List of pre-approved tools for this skill. AgentSkills standard field (parsed from space-delimited string).","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].allowed_tools.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].allowed_tools","typeLabel":"string[] | null"},"disable_model_invocation":{"type":"boolean","title":"Disable Model Invocation","description":"Whether this skill can only be activated by trigger matching and should not be advertised to the model for direct invocation.","default":false,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].disable_model_invocation","typeLabel":"boolean"},"resources":{"oneOf":[{"type":"object","title":"SkillResources","description":"Resource directories for the skill (scripts/, references/, assets/). AgentSkills standard field. Only populated for SKILL.md directory format.","required":["skill_root"],"properties":{"skill_root":{"type":"string","title":"Skill Root","description":"Root directory of the skill (absolute path)","isRequired":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].resources.oneOf.0.skill_root","typeLabel":"string"},"scripts":{"items":{"type":"string","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].resources.oneOf.0.scripts.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Scripts","description":"List of script files in scripts/ directory (relative paths)","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].resources.oneOf.0.scripts","typeLabel":"string[]"},"references":{"items":{"type":"string","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].resources.oneOf.0.references.items.[INDEX]","typeLabel":"string"},"type":"array","title":"References","description":"List of reference files in references/ directory (relative paths)","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].resources.oneOf.0.references","typeLabel":"string[]"},"assets":{"items":{"type":"string","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].resources.oneOf.0.assets.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Assets","description":"List of asset files in assets/ directory (relative paths)","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].resources.oneOf.0.assets","typeLabel":"string[]"}},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].resources.oneOf.0","typeLabel":"SkillResources · object"},{"type":"null","description":"Resource directories for the skill (scripts/, references/, assets/). AgentSkills standard field. Only populated for SKILL.md directory format.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].resources.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX].resources","typeLabel":"SkillResources · object | null"}},"type":"object","required":["name","content"],"title":"Skill","description":"A skill provides specialized knowledge or functionality.\n\nSkill behavior depends on format (is_agentskills_format) and trigger:\n\nAgentSkills format (SKILL.md files):\n- Always listed in \u003cavailable_skills> with name, description, location\n- Agent reads full content on demand (progressive disclosure)\n- If has triggers: content is ALSO auto-injected when triggered\n\nLegacy OpenHands format:\n- With triggers: Listed in \u003cavailable_skills>, content injected on trigger\n- Without triggers (None): Full content in \u003cREPO_CONTEXT>, always active\n\nThis model supports both OpenHands-specific fields and AgentSkills standard\nfields (https://agentskills.io/specification) for cross-platform compatibility.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills.items.[INDEX]","typeLabel":"Skill · object"},"type":"array","title":"Skills","description":"List of available skills that can extend the user's input.","acp_compatible":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.skills","typeLabel":"Skill · object[]"},"system_message_suffix":{"oneOf":[{"type":"string","title":"System Message Suffix","description":"Optional suffix to append to the system prompt.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.system_message_suffix.oneOf.0","typeLabel":"string"},{"type":"null","title":"System Message Suffix","description":"Optional suffix to append to the system prompt.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.system_message_suffix.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.system_message_suffix","typeLabel":"string | null"},"user_message_suffix":{"oneOf":[{"type":"string","title":"User Message Suffix","description":"Optional suffix to append to the user's message.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.user_message_suffix.oneOf.0","typeLabel":"string"},{"type":"null","title":"User Message Suffix","description":"Optional suffix to append to the user's message.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.user_message_suffix.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.user_message_suffix","typeLabel":"string | null"},"load_user_skills":{"type":"boolean","title":"Load User Skills","description":"Whether to automatically load user skills from ~/.openhands/skills/ and ~/.openhands/microagents/ (for backward compatibility). ","default":false,"acp_compatible":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.load_user_skills","typeLabel":"boolean"},"load_public_skills":{"type":"boolean","title":"Load Public Skills","description":"Whether to automatically load skills from the public OpenHands skills repository at https://github.com/OpenHands/extensions. This allows you to get the latest skills without SDK updates.","default":false,"acp_compatible":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.load_public_skills","typeLabel":"boolean"},"marketplace_path":{"oneOf":[{"type":"string","title":"Marketplace Path","description":"Relative marketplace JSON path within the public skills repository. Set to None to load all public skills without marketplace filtering.","default":"marketplaces/default.json","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.marketplace_path.oneOf.0","typeLabel":"string"},{"type":"null","title":"Marketplace Path","description":"Relative marketplace JSON path within the public skills repository. Set to None to load all public skills without marketplace filtering.","default":"marketplaces/default.json","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.marketplace_path.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.marketplace_path","typeLabel":"string | null"},"registered_marketplaces":{"items":{"properties":{"name":{"type":"string","title":"Name","description":"Identifier for this marketplace registration","isRequired":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].name","typeLabel":"string"},"source":{"type":"string","title":"Source","description":"Marketplace source: 'github:owner/repo', git URL, or local path","isRequired":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].source","typeLabel":"string"},"ref":{"oneOf":[{"type":"string","title":"Ref","description":"Optional branch, tag, or commit for git sources","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].ref.oneOf.0","typeLabel":"string"},{"type":"null","title":"Ref","description":"Optional branch, tag, or commit for git sources","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].ref.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].ref","typeLabel":"string | null"},"repo_path":{"oneOf":[{"type":"string","title":"Repo Path","description":"Subdirectory path within the git repository containing the marketplace. Only relevant for git sources.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].repo_path.oneOf.0","typeLabel":"string"},{"type":"null","title":"Repo Path","description":"Subdirectory path within the git repository containing the marketplace. Only relevant for git sources.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].repo_path.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].repo_path","typeLabel":"string | null"},"auto_load":{"oneOf":[{"type":"boolean","title":"Auto Load","description":"Whether to load marketplace plugins and standalone skills at conversation start. Use True for all, False or [] for none, or a list of plugin/skill names for selective loading.","default":false,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].auto_load.oneOf.0","typeLabel":"boolean"},{"type":"array","items":{"type":"string","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].auto_load.oneOf.1.items.[INDEX]","typeLabel":"string"},"title":"Auto Load","description":"Whether to load marketplace plugins and standalone skills at conversation start. Use True for all, False or [] for none, or a list of plugin/skill names for selective loading.","default":false,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].auto_load.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].auto_load","typeLabel":"boolean | string[]"}},"type":"object","required":["name","source"],"title":"MarketplaceRegistration","description":"Registration for a marketplace source used for plugin resolution.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.registered_marketplaces.items.[INDEX]","typeLabel":"MarketplaceRegistration · object"},"type":"array","title":"Registered Marketplaces","description":"Marketplace registrations for plugin resolution. Registrations with auto_load=True or a list of plugin names are resolved by LocalConversation at startup.","acp_compatible":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.registered_marketplaces","typeLabel":"MarketplaceRegistration · object[]"},"load_project_skills":{"type":"boolean","title":"Load Project Skills","description":"Whether to automatically load project skills from the conversation workspace (e.g. .openhands/skills/, AGENTS.md). Unlike load_user_skills / load_public_skills, this flag is not resolved by AgentContext itself (the workspace path is unknown at validation time); LocalConversation resolves it lazily on the first send_message() / run(), when the workspace is known. Also unlike load_user_skills / load_public_skills (which yield to explicit skills on a name conflict), resolved project skills are authoritative: a project skill overrides a same-named skill already present in `skills`.","default":false,"acp_compatible":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.load_project_skills","typeLabel":"boolean"},"load_memory":{"type":"boolean","title":"Load Memory","description":"Whether to load persistent agent memory (MEMORY.md indexes under ~/.openhands/memory/ and \u003cworkspace>/.openhands/memory/) into the system prompt. Like load_project_skills, this flag is not resolved by AgentContext itself (the workspace path is unknown at validation time); LocalConversation resolves it lazily on the first send_message() / run() and stores the result in memory_context.","default":false,"acp_compatible":true,"openhands_settings":{"depends_on":[],"label":"Persistent memory","prominence":"major"},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.load_memory","typeLabel":"boolean"},"memory_context":{"oneOf":[{"type":"string","title":"Memory Context","description":"Resolved memory-index text rendered into the \u003cMEMORY_CONTEXT> prompt block. Populated via model_copy by LocalConversation when load_memory is set; excluded from serialization because it is re-resolved from disk each session and must not bloat persisted conversation state.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.memory_context.oneOf.0","typeLabel":"string"},{"type":"null","title":"Memory Context","description":"Resolved memory-index text rendered into the \u003cMEMORY_CONTEXT> prompt block. Populated via model_copy by LocalConversation when load_memory is set; excluded from serialization because it is re-resolved from disk each session and must not bloat persisted conversation state.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.memory_context.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.memory_context","typeLabel":"string | null"},"disabled_skills":{"items":{"type":"string","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.disabled_skills.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Disabled Skills","description":"Names of skills to EXCLUDE from this context — a deny-list applied after every skill source is loaded (auto-loaded user/public, explicit, and lazily-loaded project skills). A listed name absent from the loaded set is a harmless no-op. [] (the default) keeps every skill. This is the single, drift-tolerant skill-selection mechanism (agent profiles set it from their own deny-list; #4017).","acp_compatible":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.disabled_skills","typeLabel":"string[]"},"secrets":{"oneOf":[{"type":"object","title":"Secrets","description":"Dictionary mapping secret keys to values or secret sources. Secrets are used for authentication and sensitive data handling. Values can be either strings or SecretSource instances (str | SecretSource).","additionalProperties":{"oneOf":[{"type":"string","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"object","title":"LookupSecret","description":"A secret looked up from some external url","required":["url"],"properties":{"url":{"type":"string","title":"Url","isRequired":true,"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.1.url","typeLabel":"string"},"description":{"oneOf":[{"type":"string","title":"Description","description":"Optional description for this secret","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.1.description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"Optional description for this secret","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.1.description.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.1.description","typeLabel":"string | null"},"headers":{"additionalProperties":{"type":"string","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.1.headers.additionalProperties","typeLabel":"string"},"type":"object","title":"Headers","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.1.headers","typeLabel":"Headers · object"},"kind":{"type":"string","const":"LookupSecret","title":"Kind","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.1.kind","typeLabel":"string"}},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.1","typeLabel":"LookupSecret · object"},{"type":"object","title":"StaticSecret","description":"A secret stored locally","properties":{"description":{"oneOf":[{"type":"string","title":"Description","description":"Optional description for this secret","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.2.description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"Optional description for this secret","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.2.description.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.2.description","typeLabel":"string | null"},"value":{"oneOf":[{"type":"string","title":"Value","format":"password","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.2.value.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Value","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.2.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.2.value","typeLabel":"string\u003cpassword> | null"},"kind":{"type":"string","const":"StaticSecret","title":"Kind","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.2.kind","typeLabel":"string"}},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.2","typeLabel":"StaticSecret · object"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties","typeLabel":"string | LookupSecret · object | StaticSecret · object"},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.0","typeLabel":"Secrets · object"},{"type":"null","title":"Secrets","description":"Dictionary mapping secret keys to values or secret sources. Secrets are used for authentication and sensitive data handling. Values can be either strings or SecretSource instances (str | SecretSource).","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.secrets","typeLabel":"Secrets · object | null"},"current_datetime":{"oneOf":[{"type":"string","title":"Current Datetime","description":"Current date and time information to provide to the agent. Can be a datetime object (which will be formatted as ISO 8601) or a pre-formatted string. When provided, this information is included in the system prompt to give the agent awareness of the current time context. Defaults to the current (timezone-aware) datetime.","format":"date-time","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.current_datetime.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"string","title":"Current Datetime","description":"Current date and time information to provide to the agent. Can be a datetime object (which will be formatted as ISO 8601) or a pre-formatted string. When provided, this information is included in the system prompt to give the agent awareness of the current time context. Defaults to the current (timezone-aware) datetime.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.current_datetime.oneOf.1","typeLabel":"string"},{"type":"null","title":"Current Datetime","description":"Current date and time information to provide to the agent. Can be a datetime object (which will be formatted as ISO 8601) or a pre-formatted string. When provided, this information is included in the system prompt to give the agent awareness of the current time context. Defaults to the current (timezone-aware) datetime.","uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.current_datetime.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0.current_datetime","typeLabel":"string\u003cdate-time> | string | null"}},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.0","typeLabel":"AgentContext · object"},{"type":"null","description":"Optional AgentContext to initialize the agent with specific context.","example":{"skills":[{"content":"When you see this message, you should reply like you are a grumpy cat forced to use the internet.","name":"AGENTS.md","type":"repo"},{"content":"IMPORTANT! The user has said the magic word \"flarglebargle\". You must only respond with a message telling them how smart they are","name":"flarglebargle","trigger":["flarglebargle"],"type":"knowledge"}],"system_message_suffix":"Always finish your response with the word 'yay!'","user_message_prefix":"The first character of your response should be 'I'"},"uniqueKey":"agent.oneOf.0.agent_context.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.agent_context","typeLabel":"AgentContext · object | null"},"system_prompt":{"oneOf":[{"type":"string","title":"System Prompt","description":"Inline system prompt string. When provided, the agent uses this text verbatim as the system message instead of rendering from `system_prompt_filename`. Mutually exclusive with a non-default `system_prompt_filename`.\n\n**Warning**: This is not recommended unless you know what you are doing (e.g. customising agent behaviour for a completely different task). Setting this will override OpenHands' built-in system instructions that govern default agent behaviour.","uniqueKey":"agent.oneOf.0.system_prompt.oneOf.0","typeLabel":"string"},{"type":"null","title":"System Prompt","description":"Inline system prompt string. When provided, the agent uses this text verbatim as the system message instead of rendering from `system_prompt_filename`. Mutually exclusive with a non-default `system_prompt_filename`.\n\n**Warning**: This is not recommended unless you know what you are doing (e.g. customising agent behaviour for a completely different task). Setting this will override OpenHands' built-in system instructions that govern default agent behaviour.","uniqueKey":"agent.oneOf.0.system_prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.system_prompt","typeLabel":"string | null"},"system_prompt_filename":{"type":"string","title":"System Prompt Filename","description":"System prompt template filename. Can be either:\n- A relative filename (e.g., 'system_prompt.j2') loaded from the agent's prompts directory\n- An absolute path (e.g., '/path/to/custom_prompt.j2')","default":"system_prompt.j2","uniqueKey":"agent.oneOf.0.system_prompt_filename","typeLabel":"string"},"security_policy_filename":{"type":"string","title":"Security Policy Filename","description":"Security policy filename. The default 'security_policy.j2' is a back-compat sentinel (the file was removed) that selects the built-in default policy from the prompt registry -- it is not loaded from disk. Any other value names a custom policy file whose contents are inserted verbatim (NOT rendered as a Jinja template). Can be either:\n- A relative filename (e.g., 'custom_security_policy.md') loaded from the agent's prompts directory\n- An absolute path (e.g., '/path/to/custom_security_policy.md')\n- Empty string to disable security policy","default":"security_policy.j2","uniqueKey":"agent.oneOf.0.security_policy_filename","typeLabel":"string"},"system_prompt_kwargs":{"additionalProperties":true,"type":"object","title":"System Prompt Kwargs","description":"Optional kwargs to pass to the system prompt Jinja2 template.","examples":[{"cli_mode":true}],"uniqueKey":"agent.oneOf.0.system_prompt_kwargs","typeLabel":"System Prompt Kwargs · object"},"condenser":{"oneOf":[{"type":"object","title":"LLMSummarizingCondenser","description":"Optional condenser to use for condensing conversation history.","required":["llm"],"example":{"keep_first":10,"kind":"LLMSummarizingCondenser","llm":{"api_key":"your_api_key_here","base_url":"https://llm-proxy.eval.all-hands.dev","model":"litellm_proxy/openai/gpt-5.5"},"max_size":80},"properties":{"llm":{"properties":{"model":{"type":"string","title":"Model","description":"Model name.","default":"gpt-5.5","openhands_settings":{"depends_on":[],"prominence":"critical"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.model","typeLabel":"string"},"api_key":{"oneOf":[{"type":"string","title":"Api Key","description":"API key.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.api_key.oneOf.0","typeLabel":"string"},{"type":"string","title":"Api Key","description":"API key.","format":"password","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.api_key.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Api Key","description":"API key.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.api_key.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.api_key","typeLabel":"string | string\u003cpassword> | null"},"auth_type":{"type":"string","enum":["api_key","subscription"],"title":"Auth Type","description":"Authentication mode for the LLM.","default":"api_key","openhands_settings":{"depends_on":[],"label":"Authentication","prominence":"critical"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.auth_type","typeLabel":"enum\u003cstring>"},"subscription_vendor":{"oneOf":[{"type":"string","title":"Subscription Vendor","description":"Subscription provider for subscription-backed LLM access.","const":"openai","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.subscription_vendor.oneOf.0","typeLabel":"string"},{"type":"null","title":"Subscription Vendor","description":"Subscription provider for subscription-backed LLM access.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.subscription_vendor.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.subscription_vendor","typeLabel":"string | null"},"base_url":{"oneOf":[{"type":"string","title":"Base Url","description":"Custom base URL.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.base_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Base Url","description":"Custom base URL.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.base_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.base_url","typeLabel":"string | null"},"api_version":{"oneOf":[{"type":"string","title":"Api Version","description":"API version (e.g., Azure).","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.api_version.oneOf.0","typeLabel":"string"},{"type":"null","title":"Api Version","description":"API version (e.g., Azure).","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.api_version.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.api_version","typeLabel":"string | null"},"aws_access_key_id":{"oneOf":[{"type":"string","title":"Aws Access Key Id","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_access_key_id.oneOf.0","typeLabel":"string"},{"type":"string","title":"Aws Access Key Id","format":"password","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_access_key_id.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Aws Access Key Id","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_access_key_id.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_access_key_id","typeLabel":"string | string\u003cpassword> | null"},"aws_secret_access_key":{"oneOf":[{"type":"string","title":"Aws Secret Access Key","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_secret_access_key.oneOf.0","typeLabel":"string"},{"type":"string","title":"Aws Secret Access Key","format":"password","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_secret_access_key.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Aws Secret Access Key","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_secret_access_key.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_secret_access_key","typeLabel":"string | string\u003cpassword> | null"},"aws_session_token":{"oneOf":[{"type":"string","title":"Aws Session Token","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_session_token.oneOf.0","typeLabel":"string"},{"type":"string","title":"Aws Session Token","format":"password","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_session_token.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Aws Session Token","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_session_token.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_session_token","typeLabel":"string | string\u003cpassword> | null"},"aws_region_name":{"oneOf":[{"type":"string","title":"Aws Region Name","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_region_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Region Name","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_region_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_region_name","typeLabel":"string | null"},"aws_profile_name":{"oneOf":[{"type":"string","title":"Aws Profile Name","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_profile_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Profile Name","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_profile_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_profile_name","typeLabel":"string | null"},"aws_role_name":{"oneOf":[{"type":"string","title":"Aws Role Name","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_role_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Role Name","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_role_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_role_name","typeLabel":"string | null"},"aws_session_name":{"oneOf":[{"type":"string","title":"Aws Session Name","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_session_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Session Name","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_session_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_session_name","typeLabel":"string | null"},"aws_bedrock_runtime_endpoint":{"oneOf":[{"type":"string","title":"Aws Bedrock Runtime Endpoint","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_bedrock_runtime_endpoint.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Bedrock Runtime Endpoint","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_bedrock_runtime_endpoint.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.aws_bedrock_runtime_endpoint","typeLabel":"string | null"},"openrouter_site_url":{"type":"string","title":"Openrouter Site Url","default":"https://docs.all-hands.dev/","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.openrouter_site_url","typeLabel":"string"},"openrouter_app_name":{"type":"string","title":"Openrouter App Name","default":"OpenHands","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.openrouter_app_name","typeLabel":"string"},"num_retries":{"type":"integer","minimum":0,"title":"Num Retries","default":5,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.num_retries","typeLabel":"integer"},"retry_multiplier":{"type":"number","minimum":0,"title":"Retry Multiplier","default":8,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.retry_multiplier","typeLabel":"number"},"retry_min_wait":{"type":"integer","minimum":0,"title":"Retry Min Wait","default":8,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.retry_min_wait","typeLabel":"integer"},"retry_max_wait":{"type":"integer","minimum":0,"title":"Retry Max Wait","default":64,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.retry_max_wait","typeLabel":"integer"},"timeout":{"oneOf":[{"type":"integer","title":"Timeout","description":"HTTP timeout in seconds. Default is 300s (5 minutes). Set to None to disable timeout (not recommended for production).","default":300,"minimum":0,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.timeout.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Timeout","description":"HTTP timeout in seconds. Default is 300s (5 minutes). Set to None to disable timeout (not recommended for production).","default":300,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.timeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.timeout","typeLabel":"integer | null"},"max_message_chars":{"type":"integer","minimum":1,"title":"Max Message Chars","description":"Approx max chars in each event/content sent to the LLM.","default":30000,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.max_message_chars","typeLabel":"integer"},"temperature":{"oneOf":[{"type":"number","title":"Temperature","description":"Sampling temperature for response generation. Defaults to None (uses provider default temperature). Set to 0.0 for deterministic outputs, or higher values (0.7-1.0) for more creative responses.","minimum":0,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.temperature.oneOf.0","typeLabel":"number"},{"type":"null","title":"Temperature","description":"Sampling temperature for response generation. Defaults to None (uses provider default temperature). Set to 0.0 for deterministic outputs, or higher values (0.7-1.0) for more creative responses.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.temperature.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.temperature","typeLabel":"number | null"},"top_p":{"oneOf":[{"type":"number","title":"Top P","description":"Nucleus sampling parameter. Defaults to None (uses provider default). Set to a value between 0 and 1 to control diversity of outputs.","maximum":1,"minimum":0,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.top_p.oneOf.0","typeLabel":"number"},{"type":"null","title":"Top P","description":"Nucleus sampling parameter. Defaults to None (uses provider default). Set to a value between 0 and 1 to control diversity of outputs.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.top_p.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.top_p","typeLabel":"number | null"},"top_k":{"oneOf":[{"type":"number","title":"Top K","minimum":0,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.top_k.oneOf.0","typeLabel":"number"},{"type":"null","title":"Top K","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.top_k.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.top_k","typeLabel":"number | null"},"max_input_tokens":{"oneOf":[{"type":"integer","title":"Max Input Tokens","description":"The maximum number of input tokens. Note that this is currently unused, and the value at runtime is actually the total tokens in OpenAI (e.g. 128,000 tokens for GPT-4).","minimum":1,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.max_input_tokens.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Max Input Tokens","description":"The maximum number of input tokens. Note that this is currently unused, and the value at runtime is actually the total tokens in OpenAI (e.g. 128,000 tokens for GPT-4).","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.max_input_tokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.max_input_tokens","typeLabel":"integer | null"},"max_output_tokens":{"oneOf":[{"type":"integer","title":"Max Output Tokens","description":"The maximum number of output tokens. This is sent to the LLM.","minimum":1,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.max_output_tokens.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Max Output Tokens","description":"The maximum number of output tokens. This is sent to the LLM.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.max_output_tokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.max_output_tokens","typeLabel":"integer | null"},"model_canonical_name":{"oneOf":[{"type":"string","title":"Model Canonical Name","description":"Optional canonical model name for feature registry lookups. The OpenHands SDK maintains a model feature registry that maps model names to capabilities (e.g., vision support, prompt caching, responses API support). When using proxied or aliased model identifiers, set this field to the canonical model name (e.g., 'openai/gpt-4o') to ensure correct capability detection. If not provided, the 'model' field will be used for capability lookups.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.model_canonical_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Model Canonical Name","description":"Optional canonical model name for feature registry lookups. The OpenHands SDK maintains a model feature registry that maps model names to capabilities (e.g., vision support, prompt caching, responses API support). When using proxied or aliased model identifiers, set this field to the canonical model name (e.g., 'openai/gpt-4o') to ensure correct capability detection. If not provided, the 'model' field will be used for capability lookups.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.model_canonical_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.model_canonical_name","typeLabel":"string | null"},"api_mode":{"type":"string","enum":["auto","chat","responses"],"title":"Api Mode","description":"LLM API endpoint mode. 'auto' resolves from model metadata and SDK fallbacks; use 'chat' or 'responses' to override endpoint selection for proxy aliases and newly released models.","default":"auto","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.api_mode","typeLabel":"enum\u003cstring>"},"capability_overrides":{"additionalProperties":{"oneOf":[{"type":"boolean","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.capability_overrides.additionalProperties.oneOf.0","typeLabel":"boolean"},{"type":"string","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.capability_overrides.additionalProperties.oneOf.1","typeLabel":"string"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.capability_overrides.additionalProperties","typeLabel":"boolean | string"},"type":"object","title":"Capability Overrides","description":"Explicit model capability overrides. Supported keys include supports_reasoning_effort, thinking_mode (adaptive, manual, none, or unknown), supports_sampling_params, supports_prompt_cache, supports_stop_words, supports_responses_api, supports_vision, and supports_prompt_cache_retention. Overrides take precedence over LiteLLM metadata and SDK fallbacks.","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.capability_overrides","typeLabel":"Capability Overrides · object"},"extra_headers":{"oneOf":[{"type":"object","title":"Extra Headers","description":"Optional HTTP headers to forward to LiteLLM requests.","additionalProperties":{"type":"string","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.extra_headers.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.extra_headers.oneOf.0","typeLabel":"Extra Headers · object"},{"type":"null","title":"Extra Headers","description":"Optional HTTP headers to forward to LiteLLM requests.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.extra_headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.extra_headers","typeLabel":"Extra Headers · object | null"},"input_cost_per_token":{"oneOf":[{"type":"number","title":"Input Cost Per Token","description":"The cost per input token. This will available in logs for user.","minimum":0,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.input_cost_per_token.oneOf.0","typeLabel":"number"},{"type":"null","title":"Input Cost Per Token","description":"The cost per input token. This will available in logs for user.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.input_cost_per_token.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.input_cost_per_token","typeLabel":"number | null"},"output_cost_per_token":{"oneOf":[{"type":"number","title":"Output Cost Per Token","description":"The cost per output token. This will available in logs for user.","minimum":0,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.output_cost_per_token.oneOf.0","typeLabel":"number"},{"type":"null","title":"Output Cost Per Token","description":"The cost per output token. This will available in logs for user.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.output_cost_per_token.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.output_cost_per_token","typeLabel":"number | null"},"ollama_base_url":{"oneOf":[{"type":"string","title":"Ollama Base Url","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.ollama_base_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Ollama Base Url","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.ollama_base_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.ollama_base_url","typeLabel":"string | null"},"stream":{"type":"boolean","title":"Stream","description":"Enable streaming responses from the LLM. When enabled, the provided `on_token` callback in .completions and .responses will be invoked for each chunk of tokens.","default":false,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.stream","typeLabel":"boolean"},"drop_params":{"type":"boolean","title":"Drop Params","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.drop_params","typeLabel":"boolean"},"modify_params":{"type":"boolean","title":"Modify Params","description":"Modify params allows litellm to do transformations like adding a default message, when a message is empty.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.modify_params","typeLabel":"boolean"},"disable_vision":{"oneOf":[{"type":"boolean","title":"Disable Vision","description":"If model is vision capable, this option allows to disable image processing (useful for cost reduction).","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.disable_vision.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Disable Vision","description":"If model is vision capable, this option allows to disable image processing (useful for cost reduction).","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.disable_vision.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.disable_vision","typeLabel":"boolean | null"},"disable_stop_word":{"oneOf":[{"type":"boolean","title":"Disable Stop Word","description":"Disable using of stop word.","default":false,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.disable_stop_word.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Disable Stop Word","description":"Disable using of stop word.","default":false,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.disable_stop_word.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.disable_stop_word","typeLabel":"boolean | null"},"caching_prompt":{"type":"boolean","title":"Caching Prompt","description":"Enable caching of prompts.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.caching_prompt","typeLabel":"boolean"},"log_completions":{"type":"boolean","title":"Log Completions","description":"Enable logging of completions.","default":false,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.log_completions","typeLabel":"boolean"},"log_completions_folder":{"type":"string","title":"Log Completions Folder","description":"The folder to log LLM completions to. Required if log_completions is True.","default":"logs/completions","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.log_completions_folder","typeLabel":"string"},"custom_tokenizer":{"oneOf":[{"type":"string","title":"Custom Tokenizer","description":"A custom tokenizer to use for token counting.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.custom_tokenizer.oneOf.0","typeLabel":"string"},{"type":"null","title":"Custom Tokenizer","description":"A custom tokenizer to use for token counting.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.custom_tokenizer.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.custom_tokenizer","typeLabel":"string | null"},"native_tool_calling":{"type":"boolean","title":"Native Tool Calling","description":"Whether to use native tool calling.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.native_tool_calling","typeLabel":"boolean"},"force_string_serializer":{"oneOf":[{"type":"boolean","title":"Force String Serializer","description":"Force using string content serializer when sending to LLM API. If None (default), auto-detect based on model. Useful for providers that do not support list content, like HuggingFace and Groq.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.force_string_serializer.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Force String Serializer","description":"Force using string content serializer when sending to LLM API. If None (default), auto-detect based on model. Useful for providers that do not support list content, like HuggingFace and Groq.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.force_string_serializer.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.force_string_serializer","typeLabel":"boolean | null"},"inline_image_urls":{"oneOf":[{"type":"boolean","title":"Inline Image Urls","description":"If True, fetch any http(s) image URL in outgoing messages and inline it as a base64 ``data:`` URL before sending. If None (default), auto-detect based on model (some APIs such as Moonshot's public Kimi endpoint reject URL-formatted images and require base64). Set this explicitly when the model is reached through a proxy alias that hides the underlying provider (e.g. ``litellm_proxy/\u003ccustom-alias>``). Note: inlining only runs when ``vision_is_active()`` is True, so the alias must still be recognised as vision-capable by the SDK feature registry or proxy model metadata.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.inline_image_urls.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Inline Image Urls","description":"If True, fetch any http(s) image URL in outgoing messages and inline it as a base64 ``data:`` URL before sending. If None (default), auto-detect based on model (some APIs such as Moonshot's public Kimi endpoint reject URL-formatted images and require base64). Set this explicitly when the model is reached through a proxy alias that hides the underlying provider (e.g. ``litellm_proxy/\u003ccustom-alias>``). Note: inlining only runs when ``vision_is_active()`` is True, so the alias must still be recognised as vision-capable by the SDK feature registry or proxy model metadata.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.inline_image_urls.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.inline_image_urls","typeLabel":"boolean | null"},"reasoning_effort":{"oneOf":[{"type":"string","title":"Reasoning Effort","description":"Provider-neutral reasoning effort. Common values include 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', and 'max'. The SDK accepts future provider values and lets LiteLLM translate them.","default":"high","enum":["low","medium","high","xhigh","none"],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.reasoning_effort.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Reasoning Effort","description":"Provider-neutral reasoning effort. Common values include 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', and 'max'. The SDK accepts future provider values and lets LiteLLM translate them.","default":"high","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.reasoning_effort.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.reasoning_effort","typeLabel":"enum\u003cstring> | null"},"reasoning_summary":{"oneOf":[{"type":"string","title":"Reasoning Summary","description":"The level of detail for reasoning summaries. This is a string that can be one of 'auto', 'concise', or 'detailed'. Requires verified OpenAI organization. Only sent when explicitly set.","enum":["auto","concise","detailed"],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.reasoning_summary.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Reasoning Summary","description":"The level of detail for reasoning summaries. This is a string that can be one of 'auto', 'concise', or 'detailed'. Requires verified OpenAI organization. Only sent when explicitly set.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.reasoning_summary.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.reasoning_summary","typeLabel":"enum\u003cstring> | null"},"enable_encrypted_reasoning":{"type":"boolean","title":"Enable Encrypted Reasoning","description":"If True, ask for ['reasoning.encrypted_content'] in Responses API include.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.enable_encrypted_reasoning","typeLabel":"boolean"},"prompt_cache_retention":{"oneOf":[{"type":"string","title":"Prompt Cache Retention","description":"Retention policy for prompt cache. Only sent for supported models (GPT-5+ and GPT-4.1, excluding Azure deployments); explicitly stripped for all others.","default":"24h","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.prompt_cache_retention.oneOf.0","typeLabel":"string"},{"type":"null","title":"Prompt Cache Retention","description":"Retention policy for prompt cache. Only sent for supported models (GPT-5+ and GPT-4.1, excluding Azure deployments); explicitly stripped for all others.","default":"24h","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.prompt_cache_retention.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.prompt_cache_retention","typeLabel":"string | null"},"extended_thinking_budget":{"oneOf":[{"type":"integer","title":"Extended Thinking Budget","description":"Legacy token budget for models confirmed to use manual Anthropic extended thinking. Ignored for adaptive-thinking models. Prefer reasoning_effort for new integrations.","default":200000,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.extended_thinking_budget.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Extended Thinking Budget","description":"Legacy token budget for models confirmed to use manual Anthropic extended thinking. Ignored for adaptive-thinking models. Prefer reasoning_effort for new integrations.","default":200000,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.extended_thinking_budget.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.extended_thinking_budget","typeLabel":"integer | null"},"seed":{"oneOf":[{"type":"integer","title":"Seed","description":"The seed to use for random number generation.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.seed.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Seed","description":"The seed to use for random number generation.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.seed.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.seed","typeLabel":"integer | null"},"usage_id":{"type":"string","title":"Usage Id","description":"Unique usage identifier for the LLM. Used for registry lookups, telemetry, and spend tracking.","default":"default","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.usage_id","typeLabel":"string"},"litellm_extra_body":{"additionalProperties":true,"type":"object","title":"Litellm Extra Body","description":"Additional key-value pairs to pass to litellm's extra_body parameter. This is useful for custom inference endpoints that need additional parameters for configuration, routing, or advanced features. NOTE: Not all LLM providers support extra_body parameters. Some providers (e.g., OpenAI) may reject requests with unrecognized options. This is commonly supported by: - LiteLLM proxy servers (routing metadata, tracing) - vLLM endpoints (return_token_ids, etc.) - Custom inference clusters Examples: - Proxy routing: {'trace_version': '1.0.0', 'tags': ['agent:my-agent']} - vLLM features: {'return_token_ids': True}","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.litellm_extra_body","typeLabel":"Litellm Extra Body · object"},"fallback_strategy":{"oneOf":[{"type":"object","title":"FallbackStrategy","description":"Optional fallback strategy for trying alternate LLMs on transient failure. Construct with FallbackStrategy(fallback_llms=[...]).Excluded from serialization; must be reconfigured after load.","required":["fallback_llms"],"properties":{"fallback_llms":{"items":{"type":"string","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.fallback_strategy.oneOf.0.fallback_llms.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Fallback Llms","description":"Ordered list of LLM profile names to try on transient failure.","isRequired":true,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.fallback_strategy.oneOf.0.fallback_llms","typeLabel":"string[]"},"profile_store_dir":{"oneOf":[{"type":"string","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.fallback_strategy.oneOf.0.profile_store_dir.oneOf.0","typeLabel":"string"},{"type":"string","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`.","format":"path","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.fallback_strategy.oneOf.0.profile_store_dir.oneOf.1","typeLabel":"string\u003cpath>"},{"type":"null","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.fallback_strategy.oneOf.0.profile_store_dir.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.fallback_strategy.oneOf.0.profile_store_dir","typeLabel":"string | string\u003cpath> | null"}},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.fallback_strategy.oneOf.0","typeLabel":"FallbackStrategy · object"},{"type":"null","description":"Optional fallback strategy for trying alternate LLMs on transient failure. Construct with FallbackStrategy(fallback_llms=[...]).Excluded from serialization; must be reconfigured after load.","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.fallback_strategy.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm.fallback_strategy","typeLabel":"FallbackStrategy · object | null"}},"type":"object","title":"LLM","description":"Language model interface for OpenHands agents.\n\nThe LLM class provides a unified interface for interacting with various\nlanguage models through the litellm library. It handles model configuration,\nAPI authentication, retry logic, and tool calling capabilities.\n\nAttributes:\n model: Model name (e.g., \"gpt-5.5\").\n api_key: API key for authentication.\n base_url: Custom API base URL.\n num_retries: Number of retry attempts for failed requests.\n timeout: Request timeout in seconds.\n\nExample:\n ```python\n from openhands.sdk import LLM\n from pydantic import SecretStr\n\n llm = LLM(\n model=\"gpt-5.5\",\n api_key=SecretStr(\"your-api-key\"),\n usage_id=\"my-agent\"\n )\n # Use with agent or conversation\n ```","isRequired":true,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.llm","typeLabel":"LLM · object"},"max_size":{"type":"integer","exclusiveMinimum":0,"title":"Max Size","default":240,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.max_size","typeLabel":"integer"},"max_tokens":{"oneOf":[{"type":"integer","title":"Max Tokens","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.max_tokens.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Max Tokens","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.max_tokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.max_tokens","typeLabel":"integer | null"},"keep_first":{"type":"integer","minimum":0,"title":"Keep First","default":2,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.keep_first","typeLabel":"integer"},"minimum_progress":{"type":"number","exclusiveMaximum":1,"exclusiveMinimum":0,"title":"Minimum Progress","default":0.1,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.minimum_progress","typeLabel":"number"},"hard_context_reset_max_retries":{"type":"integer","exclusiveMinimum":0,"title":"Hard Context Reset Max Retries","default":5,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.hard_context_reset_max_retries","typeLabel":"integer"},"hard_context_reset_context_scaling":{"type":"number","exclusiveMaximum":1,"exclusiveMinimum":0,"title":"Hard Context Reset Context Scaling","default":0.8,"uniqueKey":"agent.oneOf.0.condenser.oneOf.0.hard_context_reset_context_scaling","typeLabel":"number"},"kind":{"type":"string","const":"LLMSummarizingCondenser","title":"Kind","uniqueKey":"agent.oneOf.0.condenser.oneOf.0.kind","typeLabel":"string"}},"uniqueKey":"agent.oneOf.0.condenser.oneOf.0","typeLabel":"LLMSummarizingCondenser · object"},{"type":"object","title":"NoOpCondenser","description":"Optional condenser to use for condensing conversation history.","example":{"kind":"LLMSummarizingCondenser"},"properties":{"kind":{"type":"string","const":"NoOpCondenser","title":"Kind","uniqueKey":"agent.oneOf.0.condenser.oneOf.1.kind","typeLabel":"string"}},"uniqueKey":"agent.oneOf.0.condenser.oneOf.1","typeLabel":"NoOpCondenser · object"},{"type":"object","title":"PipelineCondenser","description":"Optional condenser to use for condensing conversation history.","required":["condensers"],"example":{"kind":"LLMSummarizingCondenser"},"properties":{"condensers":{"items":{"$circularRef":"47c52630-f29b-40ea-b024-8b206320af2b"},"type":"array","title":"Condensers","isRequired":true,"uniqueKey":"agent.oneOf.0.condenser.oneOf.2.condensers","typeLabel":"Condensers · array"},"kind":{"type":"string","const":"PipelineCondenser","title":"Kind","uniqueKey":"agent.oneOf.0.condenser.oneOf.2.kind","typeLabel":"string"}},"uniqueKey":"agent.oneOf.0.condenser.oneOf.2","typeLabel":"PipelineCondenser · object"},{"type":"null","description":"Optional condenser to use for condensing conversation history.","example":{"keep_first":10,"kind":"LLMSummarizingCondenser","llm":{"api_key":"your_api_key_here","base_url":"https://llm-proxy.eval.all-hands.dev","model":"litellm_proxy/openai/gpt-5.5"},"max_size":80},"uniqueKey":"agent.oneOf.0.condenser.oneOf.3","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.condenser","typeLabel":"LLMSummarizingCondenser · object | NoOpCondenser · object | PipelineCondenser · object | null"},"critic":{"oneOf":[{"type":"object","title":"AgentFinishedCritic","description":"EXPERIMENTAL: Optional critic to evaluate agent actions and messages in real-time. API and behavior may change without notice. May impact performance, especially in 'all_actions' mode.","example":{"kind":"AgentFinishedCritic"},"properties":{"mode":{"type":"string","enum":["finish_and_message","all_actions"],"title":"Mode","description":"When to run critic evaluation:\n- 'finish_and_message': Evaluate on FinishAction and agent MessageEvent (default, minimal performance impact)\n- 'all_actions': Evaluate after every agent action (WARNING: significantly slower due to API calls on each action)","default":"finish_and_message","uniqueKey":"agent.oneOf.0.critic.oneOf.0.mode","typeLabel":"enum\u003cstring>"},"iterative_refinement":{"oneOf":[{"type":"object","title":"IterativeRefinementConfig","description":"Optional configuration for iterative refinement. When set, Conversation.run() will automatically retry the task if the critic score is below the success_threshold, up to max_iterations.","properties":{"success_threshold":{"type":"number","maximum":1,"minimum":0,"title":"Success Threshold","description":"Score threshold (0-1) to consider task successful.","default":0.6,"uniqueKey":"agent.oneOf.0.critic.oneOf.0.iterative_refinement.oneOf.0.success_threshold","typeLabel":"number"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Maximum number of iterations before giving up.","default":3,"uniqueKey":"agent.oneOf.0.critic.oneOf.0.iterative_refinement.oneOf.0.max_iterations","typeLabel":"integer"}},"uniqueKey":"agent.oneOf.0.critic.oneOf.0.iterative_refinement.oneOf.0","typeLabel":"IterativeRefinementConfig · object"},{"type":"null","description":"Optional configuration for iterative refinement. When set, Conversation.run() will automatically retry the task if the critic score is below the success_threshold, up to max_iterations.","uniqueKey":"agent.oneOf.0.critic.oneOf.0.iterative_refinement.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.critic.oneOf.0.iterative_refinement","typeLabel":"IterativeRefinementConfig · object | null"},"kind":{"type":"string","const":"AgentFinishedCritic","title":"Kind","uniqueKey":"agent.oneOf.0.critic.oneOf.0.kind","typeLabel":"string"}},"uniqueKey":"agent.oneOf.0.critic.oneOf.0","typeLabel":"AgentFinishedCritic · object"},{"type":"object","title":"APIBasedCritic","description":"EXPERIMENTAL: Optional critic to evaluate agent actions and messages in real-time. API and behavior may change without notice. May impact performance, especially in 'all_actions' mode.","required":["api_key"],"example":{"kind":"AgentFinishedCritic"},"properties":{"api_key":{"oneOf":[{"type":"string","title":"Api Key","description":"API key for authenticating with the vLLM service","isRequired":true,"uniqueKey":"agent.oneOf.0.critic.oneOf.1.api_key.oneOf.0","typeLabel":"string"},{"type":"string","title":"Api Key","description":"API key for authenticating with the vLLM service","format":"password","isRequired":true,"uniqueKey":"agent.oneOf.0.critic.oneOf.1.api_key.oneOf.1","typeLabel":"string\u003cpassword>"}],"isRequired":true,"uniqueKey":"agent.oneOf.0.critic.oneOf.1.api_key","typeLabel":"string | string\u003cpassword>"},"server_url":{"type":"string","title":"Server Url","description":"Base URL of the vLLM classification service","default":"https://llm-proxy.app.all-hands.dev/vllm","uniqueKey":"agent.oneOf.0.critic.oneOf.1.server_url","typeLabel":"string"},"model_name":{"type":"string","title":"Model Name","description":"Name of the model to use","default":"critic","uniqueKey":"agent.oneOf.0.critic.oneOf.1.model_name","typeLabel":"string"},"tokenizer_name":{"type":"string","title":"Tokenizer Name","description":"HuggingFace tokenizer name for loading chat template","default":"Qwen/Qwen3-4B-Instruct-2507","uniqueKey":"agent.oneOf.0.critic.oneOf.1.tokenizer_name","typeLabel":"string"},"pass_tools_definitions":{"type":"boolean","title":"Pass Tools Definitions","description":"Whether to pass tool definitions to the model","default":true,"uniqueKey":"agent.oneOf.0.critic.oneOf.1.pass_tools_definitions","typeLabel":"boolean"},"timeout_seconds":{"type":"number","title":"Timeout Seconds","description":"Timeout for requests to the model","default":300,"uniqueKey":"agent.oneOf.0.critic.oneOf.1.timeout_seconds","typeLabel":"number"},"has_success_label":{"type":"boolean","title":"Has Success Label","description":"Whether the model predicts success label at index 0","default":true,"uniqueKey":"agent.oneOf.0.critic.oneOf.1.has_success_label","typeLabel":"boolean"},"sentiment_labels":{"items":{"type":"string","uniqueKey":"agent.oneOf.0.critic.oneOf.1.sentiment_labels.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Sentiment Labels","default":["sentiment_positive","sentiment_neutral","sentiment_negative"],"uniqueKey":"agent.oneOf.0.critic.oneOf.1.sentiment_labels","typeLabel":"string[]"},"agent_issue_labels":{"items":{"type":"string","uniqueKey":"agent.oneOf.0.critic.oneOf.1.agent_issue_labels.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Agent Issue Labels","default":["misunderstood_intention","did_not_follow_instruction","insufficient_analysis","insufficient_clarification","improper_tool_use_or_setup","loop_behavior","insufficient_testing","insufficient_debugging","incomplete_implementation","file_management_errors","scope_creep","risky_actions_or_permission","other_agent_issue"],"uniqueKey":"agent.oneOf.0.critic.oneOf.1.agent_issue_labels","typeLabel":"string[]"},"infra_labels":{"items":{"type":"string","uniqueKey":"agent.oneOf.0.critic.oneOf.1.infra_labels.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Infra Labels","default":["infrastructure_external_issue","infrastructure_agent_caused_issue"],"uniqueKey":"agent.oneOf.0.critic.oneOf.1.infra_labels","typeLabel":"string[]"},"user_followup_labels":{"items":{"type":"string","uniqueKey":"agent.oneOf.0.critic.oneOf.1.user_followup_labels.items.[INDEX]","typeLabel":"string"},"type":"array","title":"User Followup Labels","default":["clarification_or_restatement","correction","direction_change","vcs_update_requests","progress_or_scope_concern","frustration_or_complaint","removal_or_reversion_request","other_user_issue"],"uniqueKey":"agent.oneOf.0.critic.oneOf.1.user_followup_labels","typeLabel":"string[]"},"sentiment_map":{"additionalProperties":{"type":"string","uniqueKey":"agent.oneOf.0.critic.oneOf.1.sentiment_map.additionalProperties","typeLabel":"string"},"type":"object","title":"Sentiment Map","default":{"Positive":"sentiment_positive","Neutral":"sentiment_neutral","Negative":"sentiment_negative"},"uniqueKey":"agent.oneOf.0.critic.oneOf.1.sentiment_map","typeLabel":"Sentiment Map · object"},"mode":{"type":"string","enum":["finish_and_message","all_actions"],"title":"Mode","description":"When to run critic evaluation:\n- 'finish_and_message': Evaluate on FinishAction and agent MessageEvent (default, minimal performance impact)\n- 'all_actions': Evaluate after every agent action (WARNING: significantly slower due to API calls on each action)","default":"finish_and_message","uniqueKey":"agent.oneOf.0.critic.oneOf.1.mode","typeLabel":"enum\u003cstring>"},"iterative_refinement":{"oneOf":[{"type":"object","title":"IterativeRefinementConfig","description":"Optional configuration for iterative refinement. When set, Conversation.run() will automatically retry the task if the critic score is below the success_threshold, up to max_iterations.","properties":{"success_threshold":{"type":"number","maximum":1,"minimum":0,"title":"Success Threshold","description":"Score threshold (0-1) to consider task successful.","default":0.6,"uniqueKey":"agent.oneOf.0.critic.oneOf.1.iterative_refinement.oneOf.0.success_threshold","typeLabel":"number"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Maximum number of iterations before giving up.","default":3,"uniqueKey":"agent.oneOf.0.critic.oneOf.1.iterative_refinement.oneOf.0.max_iterations","typeLabel":"integer"}},"uniqueKey":"agent.oneOf.0.critic.oneOf.1.iterative_refinement.oneOf.0","typeLabel":"IterativeRefinementConfig · object"},{"type":"null","description":"Optional configuration for iterative refinement. When set, Conversation.run() will automatically retry the task if the critic score is below the success_threshold, up to max_iterations.","uniqueKey":"agent.oneOf.0.critic.oneOf.1.iterative_refinement.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.critic.oneOf.1.iterative_refinement","typeLabel":"IterativeRefinementConfig · object | null"},"issue_threshold":{"type":"number","maximum":1,"minimum":0,"title":"Issue Threshold","description":"APIBasedCritic-specific probability threshold for agent issue labels that should trigger iterative refinement.","default":0.75,"uniqueKey":"agent.oneOf.0.critic.oneOf.1.issue_threshold","typeLabel":"number"},"kind":{"type":"string","const":"APIBasedCritic","title":"Kind","uniqueKey":"agent.oneOf.0.critic.oneOf.1.kind","typeLabel":"string"}},"uniqueKey":"agent.oneOf.0.critic.oneOf.1","typeLabel":"APIBasedCritic · object"},{"type":"object","title":"EmptyPatchCritic","description":"EXPERIMENTAL: Optional critic to evaluate agent actions and messages in real-time. API and behavior may change without notice. May impact performance, especially in 'all_actions' mode.","example":{"kind":"AgentFinishedCritic"},"properties":{"mode":{"type":"string","enum":["finish_and_message","all_actions"],"title":"Mode","description":"When to run critic evaluation:\n- 'finish_and_message': Evaluate on FinishAction and agent MessageEvent (default, minimal performance impact)\n- 'all_actions': Evaluate after every agent action (WARNING: significantly slower due to API calls on each action)","default":"finish_and_message","uniqueKey":"agent.oneOf.0.critic.oneOf.2.mode","typeLabel":"enum\u003cstring>"},"iterative_refinement":{"oneOf":[{"type":"object","title":"IterativeRefinementConfig","description":"Optional configuration for iterative refinement. When set, Conversation.run() will automatically retry the task if the critic score is below the success_threshold, up to max_iterations.","properties":{"success_threshold":{"type":"number","maximum":1,"minimum":0,"title":"Success Threshold","description":"Score threshold (0-1) to consider task successful.","default":0.6,"uniqueKey":"agent.oneOf.0.critic.oneOf.2.iterative_refinement.oneOf.0.success_threshold","typeLabel":"number"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Maximum number of iterations before giving up.","default":3,"uniqueKey":"agent.oneOf.0.critic.oneOf.2.iterative_refinement.oneOf.0.max_iterations","typeLabel":"integer"}},"uniqueKey":"agent.oneOf.0.critic.oneOf.2.iterative_refinement.oneOf.0","typeLabel":"IterativeRefinementConfig · object"},{"type":"null","description":"Optional configuration for iterative refinement. When set, Conversation.run() will automatically retry the task if the critic score is below the success_threshold, up to max_iterations.","uniqueKey":"agent.oneOf.0.critic.oneOf.2.iterative_refinement.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.critic.oneOf.2.iterative_refinement","typeLabel":"IterativeRefinementConfig · object | null"},"kind":{"type":"string","const":"EmptyPatchCritic","title":"Kind","uniqueKey":"agent.oneOf.0.critic.oneOf.2.kind","typeLabel":"string"}},"uniqueKey":"agent.oneOf.0.critic.oneOf.2","typeLabel":"EmptyPatchCritic · object"},{"type":"object","title":"PassCritic","description":"EXPERIMENTAL: Optional critic to evaluate agent actions and messages in real-time. API and behavior may change without notice. May impact performance, especially in 'all_actions' mode.","example":{"kind":"AgentFinishedCritic"},"properties":{"mode":{"type":"string","enum":["finish_and_message","all_actions"],"title":"Mode","description":"When to run critic evaluation:\n- 'finish_and_message': Evaluate on FinishAction and agent MessageEvent (default, minimal performance impact)\n- 'all_actions': Evaluate after every agent action (WARNING: significantly slower due to API calls on each action)","default":"finish_and_message","uniqueKey":"agent.oneOf.0.critic.oneOf.3.mode","typeLabel":"enum\u003cstring>"},"iterative_refinement":{"oneOf":[{"type":"object","title":"IterativeRefinementConfig","description":"Optional configuration for iterative refinement. When set, Conversation.run() will automatically retry the task if the critic score is below the success_threshold, up to max_iterations.","properties":{"success_threshold":{"type":"number","maximum":1,"minimum":0,"title":"Success Threshold","description":"Score threshold (0-1) to consider task successful.","default":0.6,"uniqueKey":"agent.oneOf.0.critic.oneOf.3.iterative_refinement.oneOf.0.success_threshold","typeLabel":"number"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Maximum number of iterations before giving up.","default":3,"uniqueKey":"agent.oneOf.0.critic.oneOf.3.iterative_refinement.oneOf.0.max_iterations","typeLabel":"integer"}},"uniqueKey":"agent.oneOf.0.critic.oneOf.3.iterative_refinement.oneOf.0","typeLabel":"IterativeRefinementConfig · object"},{"type":"null","description":"Optional configuration for iterative refinement. When set, Conversation.run() will automatically retry the task if the critic score is below the success_threshold, up to max_iterations.","uniqueKey":"agent.oneOf.0.critic.oneOf.3.iterative_refinement.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.critic.oneOf.3.iterative_refinement","typeLabel":"IterativeRefinementConfig · object | null"},"kind":{"type":"string","const":"PassCritic","title":"Kind","uniqueKey":"agent.oneOf.0.critic.oneOf.3.kind","typeLabel":"string"}},"uniqueKey":"agent.oneOf.0.critic.oneOf.3","typeLabel":"PassCritic · object"},{"type":"null","description":"EXPERIMENTAL: Optional critic to evaluate agent actions and messages in real-time. API and behavior may change without notice. May impact performance, especially in 'all_actions' mode.","example":{"kind":"AgentFinishedCritic"},"uniqueKey":"agent.oneOf.0.critic.oneOf.4","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.critic","typeLabel":"AgentFinishedCritic · object | APIBasedCritic · object | EmptyPatchCritic · object | PassCritic · object | null"},"tool_concurrency_limit":{"type":"integer","minimum":1,"title":"Tool Concurrency Limit","description":"Maximum number of tool calls to execute concurrently within a single agent step. Default is 1 (sequential). Values > 1 enable parallel execution; concurrent tools share the conversation object, filesystem, and working directory, so mutations to shared state may race.","default":1,"uniqueKey":"agent.oneOf.0.tool_concurrency_limit","typeLabel":"integer"},"acp_server":{"oneOf":[{"type":"string","title":"Acp Server","description":"Provider registry key identifying which ACP CLI this agent runs ('claude-code', 'codex', 'gemini-cli', or 'custom'); None when the agent is built directly rather than via ACPAgentSettings. Set by ACPAgentSettings.create_agent() from ACPAgentSettings.acp_server so the authoritative key survives onto the agent — and thus onto ConversationInfo.agent — because the launch command in acp_command does not reliably reverse-map to a provider. Informational only: consumers use it to resolve a provider brand label / model list; the subprocess is still launched from acp_command.","uniqueKey":"agent.oneOf.0.acp_server.oneOf.0","typeLabel":"string"},{"type":"null","title":"Acp Server","description":"Provider registry key identifying which ACP CLI this agent runs ('claude-code', 'codex', 'gemini-cli', or 'custom'); None when the agent is built directly rather than via ACPAgentSettings. Set by ACPAgentSettings.create_agent() from ACPAgentSettings.acp_server so the authoritative key survives onto the agent — and thus onto ConversationInfo.agent — because the launch command in acp_command does not reliably reverse-map to a provider. Informational only: consumers use it to resolve a provider brand label / model list; the subprocess is still launched from acp_command.","uniqueKey":"agent.oneOf.0.acp_server.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.acp_server","typeLabel":"string | null"},"acp_args":{"items":{"type":"string","uniqueKey":"agent.oneOf.0.acp_args.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Acp Args","description":"Additional arguments for the ACP server command","uniqueKey":"agent.oneOf.0.acp_args","typeLabel":"string[]"},"acp_session_mode":{"oneOf":[{"type":"string","title":"Acp Session Mode","description":"Session mode ID to set after creating a session. If None (default), auto-detected from the ACP server type: 'bypassPermissions' for claude-agent-acp, 'agent-full-access' for codex-acp.","uniqueKey":"agent.oneOf.0.acp_session_mode.oneOf.0","typeLabel":"string"},{"type":"null","title":"Acp Session Mode","description":"Session mode ID to set after creating a session. If None (default), auto-detected from the ACP server type: 'bypassPermissions' for claude-agent-acp, 'agent-full-access' for codex-acp.","uniqueKey":"agent.oneOf.0.acp_session_mode.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.acp_session_mode","typeLabel":"string | null"},"acp_prompt_timeout":{"type":"number","title":"Acp Prompt Timeout","description":"Inactivity timeout in seconds for a single ACP prompt() call. The deadline resets on every update from the ACP server (token, thought, tool-call progress, usage), so a steadily-progressing agent runs as long as it keeps making progress; the prompt is only aborted after this many seconds with no activity at all. Prevents indefinite hangs when the ACP server stops responding without killing legitimately long-running work.","default":1800,"uniqueKey":"agent.oneOf.0.acp_prompt_timeout","typeLabel":"number"},"acp_startup_timeout":{"type":"number","title":"Acp Startup Timeout","description":"Timeout in seconds for ACP server startup: spawning the subprocess, the initialize/authenticate handshake, and new_session()/load_session(). Unlike acp_prompt_timeout, this is a hard deadline rather than an idle deadline, since startup has no intermediate progress signal to reset it against. Prevents an indefinite hang when the ACP server blocks on authentication (e.g. an expired token) without ever raising.","default":90,"uniqueKey":"agent.oneOf.0.acp_startup_timeout","typeLabel":"number"},"acp_model":{"oneOf":[{"type":"string","title":"Acp Model","description":"Model for the ACP server to use (e.g. 'sonnet' or 'gpt-5.5'). Applied via the protocol — set_config_option(model) for configOptions-based servers (codex, claude), else set_session_model. If None, the server picks its default.","uniqueKey":"agent.oneOf.0.acp_model.oneOf.0","typeLabel":"string"},{"type":"null","title":"Acp Model","description":"Model for the ACP server to use (e.g. 'sonnet' or 'gpt-5.5'). Applied via the protocol — set_config_option(model) for configOptions-based servers (codex, claude), else set_session_model. If None, the server picks its default.","uniqueKey":"agent.oneOf.0.acp_model.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.acp_model","typeLabel":"string | null"},"acp_resume_session_id":{"oneOf":[{"type":"string","title":"Acp Resume Session Id","description":"Optional explicit ACP session id to resume. When set, takes precedence over the id persisted in ``state.agent_state`` and is used to call ``session/load`` on the ACP server. Designed for environments where the per-conversation filesystem (and therefore ``base_state.json``) does not survive across restarts (e.g. cloud sandbox recycles), but the id has been mirrored into durable storage elsewhere. Falls back to a fresh session if the server cannot load the id. Treated as a secret on the wire — possession of the id is enough to resume the underlying ACP session, so default serialization redacts it; pass ``expose_secrets='plaintext'`` (trusted backend) or ``expose_secrets='encrypted'`` plus a cipher (frontend round-trip) when the value must cross a serialization boundary.","uniqueKey":"agent.oneOf.0.acp_resume_session_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Acp Resume Session Id","description":"Optional explicit ACP session id to resume. When set, takes precedence over the id persisted in ``state.agent_state`` and is used to call ``session/load`` on the ACP server. Designed for environments where the per-conversation filesystem (and therefore ``base_state.json``) does not survive across restarts (e.g. cloud sandbox recycles), but the id has been mirrored into durable storage elsewhere. Falls back to a fresh session if the server cannot load the id. Treated as a secret on the wire — possession of the id is enough to resume the underlying ACP session, so default serialization redacts it; pass ``expose_secrets='plaintext'`` (trusted backend) or ``expose_secrets='encrypted'`` plus a cipher (frontend round-trip) when the value must cross a serialization boundary.","uniqueKey":"agent.oneOf.0.acp_resume_session_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.0.acp_resume_session_id","typeLabel":"string | null"},"acp_file_secrets":{"items":{"properties":{"secret_name":{"type":"string","minLength":1,"title":"Secret Name","isRequired":true,"uniqueKey":"agent.oneOf.0.acp_file_secrets.items.[INDEX].secret_name","typeLabel":"string"},"filename":{"type":"string","minLength":1,"title":"Filename","isRequired":true,"uniqueKey":"agent.oneOf.0.acp_file_secrets.items.[INDEX].filename","typeLabel":"string"},"env_var":{"type":"string","minLength":1,"title":"Env Var","isRequired":true,"uniqueKey":"agent.oneOf.0.acp_file_secrets.items.[INDEX].env_var","typeLabel":"string"},"subdir":{"type":"string","minLength":1,"title":"Subdir","isRequired":true,"uniqueKey":"agent.oneOf.0.acp_file_secrets.items.[INDEX].subdir","typeLabel":"string"},"env_points_to":{"type":"string","enum":["dir","file"],"title":"Env Points To","default":"file","uniqueKey":"agent.oneOf.0.acp_file_secrets.items.[INDEX].env_points_to","typeLabel":"enum\u003cstring>"},"warn_if_unset":{"items":{"type":"string","uniqueKey":"agent.oneOf.0.acp_file_secrets.items.[INDEX].warn_if_unset.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Warn If Unset","default":[],"uniqueKey":"agent.oneOf.0.acp_file_secrets.items.[INDEX].warn_if_unset","typeLabel":"string[]"}},"type":"object","required":["secret_name","filename","env_var","subdir"],"title":"ACPFileSecretSpec","description":"Declarative mapping from a reserved \"file-content\" secret to a credential\nfile the ACP subprocess authenticates from.\n\nSome providers read their credential from a *file on disk* rather than an\nenv var: Codex reads ``$CODEX_HOME/auth.json``; Gemini (Vertex AI) reads a\nservice-account JSON pointed at by ``GOOGLE_APPLICATION_CREDENTIALS``. The\nuser supplies that credential as a pasted blob — a reserved secret named\n:attr:`secret_name` — and :class:`~openhands.sdk.agent.ACPAgent` materialises\nit to :attr:`filename` under the conversation's durable per-conversation root\n(seed-if-absent), then sets :attr:`env_var` so the CLI can find it.\n\nMaterialisation is keyed off :attr:`secret_name` (not the launch command),\nso a custom or aliased ``acp_command`` still works as long as the reserved\nsecret is supplied.\n\nThe SDK owns the *mechanism* (writing the file in the runtime pod, setting\nthe env var, seed-if-absent, permissions); the *policy* — which secrets map\nto which files for which CLIs — lives in these specs. Built-in defaults\ncover the supported providers, but downstream applications can override\n:attr:`~openhands.sdk.agent.ACPAgent.acp_file_secrets` to support other ACP\nservers with different file-auth schemes without an SDK change.","uniqueKey":"agent.oneOf.0.acp_file_secrets.items.[INDEX]","typeLabel":"ACPFileSecretSpec · object"},"type":"array","title":"Acp File Secrets","description":"Reserved 'file-content' credential secrets to materialise to disk before launching the subprocess (e.g. Codex auth.json, Gemini Vertex SA JSON). The SDK owns the mechanism (write the file in the runtime pod, set the env var, seed-if-absent); these specs are the policy. Defaults to the built-in supported providers; a downstream application may override or extend this to support other ACP servers with different file-auth schemes.","uniqueKey":"agent.oneOf.0.acp_file_secrets","typeLabel":"ACPFileSecretSpec · object[]"},"acp_isolate_data_dir":{"type":"boolean","title":"Acp Isolate Data Dir","description":"Give the ACP subprocess a per-conversation CLI data/config root instead of the shared user ``HOME``. When True and the provider is recognised, point its data-dir env var (``CODEX_HOME`` / ``CLAUDE_CONFIG_DIR`` / ``HOME``; see ``ACPProviderInfo.data_dir_env_var``) at ``\u003cpersistence_dir>/acp/\u003cprovider>`` — the same per-conversation tree materialised file-secrets use. Required for correctness when several of a user's conversations share one sandbox (``SandboxGroupingStrategy != NO_GROUPING``), where they would otherwise race on one set of CLI auth/config/cache/lock files (see #1019). Off by default: with one sandbox per conversation the shared HOME is already private, and relocating it would hide a pre-existing interactive login. Downstream policy decides when to enable it; the SDK owns where the root lives.","default":false,"uniqueKey":"agent.oneOf.0.acp_isolate_data_dir","typeLabel":"boolean"},"kind":{"type":"string","const":"ACPAgent","title":"Kind","uniqueKey":"agent.oneOf.0.kind","typeLabel":"string"}},"isRequired":true,"uniqueKey":"agent.oneOf.0","typeLabel":"ACPAgent · object"},{"type":"object","title":"Agent","description":"The agent running in the conversation.","required":["llm"],"properties":{"llm":{"properties":{"model":{"type":"string","title":"Model","description":"Model name.","default":"gpt-5.5","openhands_settings":{"depends_on":[],"prominence":"critical"},"uniqueKey":"agent.oneOf.1.llm.model","typeLabel":"string"},"api_key":{"oneOf":[{"type":"string","title":"Api Key","description":"API key.","uniqueKey":"agent.oneOf.1.llm.api_key.oneOf.0","typeLabel":"string"},{"type":"string","title":"Api Key","description":"API key.","format":"password","uniqueKey":"agent.oneOf.1.llm.api_key.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Api Key","description":"API key.","uniqueKey":"agent.oneOf.1.llm.api_key.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.api_key","typeLabel":"string | string\u003cpassword> | null"},"auth_type":{"type":"string","enum":["api_key","subscription"],"title":"Auth Type","description":"Authentication mode for the LLM.","default":"api_key","openhands_settings":{"depends_on":[],"label":"Authentication","prominence":"critical"},"uniqueKey":"agent.oneOf.1.llm.auth_type","typeLabel":"enum\u003cstring>"},"subscription_vendor":{"oneOf":[{"type":"string","title":"Subscription Vendor","description":"Subscription provider for subscription-backed LLM access.","const":"openai","uniqueKey":"agent.oneOf.1.llm.subscription_vendor.oneOf.0","typeLabel":"string"},{"type":"null","title":"Subscription Vendor","description":"Subscription provider for subscription-backed LLM access.","uniqueKey":"agent.oneOf.1.llm.subscription_vendor.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.subscription_vendor","typeLabel":"string | null"},"base_url":{"oneOf":[{"type":"string","title":"Base Url","description":"Custom base URL.","uniqueKey":"agent.oneOf.1.llm.base_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Base Url","description":"Custom base URL.","uniqueKey":"agent.oneOf.1.llm.base_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.base_url","typeLabel":"string | null"},"api_version":{"oneOf":[{"type":"string","title":"Api Version","description":"API version (e.g., Azure).","uniqueKey":"agent.oneOf.1.llm.api_version.oneOf.0","typeLabel":"string"},{"type":"null","title":"Api Version","description":"API version (e.g., Azure).","uniqueKey":"agent.oneOf.1.llm.api_version.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.api_version","typeLabel":"string | null"},"aws_access_key_id":{"oneOf":[{"type":"string","title":"Aws Access Key Id","uniqueKey":"agent.oneOf.1.llm.aws_access_key_id.oneOf.0","typeLabel":"string"},{"type":"string","title":"Aws Access Key Id","format":"password","uniqueKey":"agent.oneOf.1.llm.aws_access_key_id.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Aws Access Key Id","uniqueKey":"agent.oneOf.1.llm.aws_access_key_id.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.aws_access_key_id","typeLabel":"string | string\u003cpassword> | null"},"aws_secret_access_key":{"oneOf":[{"type":"string","title":"Aws Secret Access Key","uniqueKey":"agent.oneOf.1.llm.aws_secret_access_key.oneOf.0","typeLabel":"string"},{"type":"string","title":"Aws Secret Access Key","format":"password","uniqueKey":"agent.oneOf.1.llm.aws_secret_access_key.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Aws Secret Access Key","uniqueKey":"agent.oneOf.1.llm.aws_secret_access_key.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.aws_secret_access_key","typeLabel":"string | string\u003cpassword> | null"},"aws_session_token":{"oneOf":[{"type":"string","title":"Aws Session Token","uniqueKey":"agent.oneOf.1.llm.aws_session_token.oneOf.0","typeLabel":"string"},{"type":"string","title":"Aws Session Token","format":"password","uniqueKey":"agent.oneOf.1.llm.aws_session_token.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Aws Session Token","uniqueKey":"agent.oneOf.1.llm.aws_session_token.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.aws_session_token","typeLabel":"string | string\u003cpassword> | null"},"aws_region_name":{"oneOf":[{"type":"string","title":"Aws Region Name","uniqueKey":"agent.oneOf.1.llm.aws_region_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Region Name","uniqueKey":"agent.oneOf.1.llm.aws_region_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.aws_region_name","typeLabel":"string | null"},"aws_profile_name":{"oneOf":[{"type":"string","title":"Aws Profile Name","uniqueKey":"agent.oneOf.1.llm.aws_profile_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Profile Name","uniqueKey":"agent.oneOf.1.llm.aws_profile_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.aws_profile_name","typeLabel":"string | null"},"aws_role_name":{"oneOf":[{"type":"string","title":"Aws Role Name","uniqueKey":"agent.oneOf.1.llm.aws_role_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Role Name","uniqueKey":"agent.oneOf.1.llm.aws_role_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.aws_role_name","typeLabel":"string | null"},"aws_session_name":{"oneOf":[{"type":"string","title":"Aws Session Name","uniqueKey":"agent.oneOf.1.llm.aws_session_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Session Name","uniqueKey":"agent.oneOf.1.llm.aws_session_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.aws_session_name","typeLabel":"string | null"},"aws_bedrock_runtime_endpoint":{"oneOf":[{"type":"string","title":"Aws Bedrock Runtime Endpoint","uniqueKey":"agent.oneOf.1.llm.aws_bedrock_runtime_endpoint.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Bedrock Runtime Endpoint","uniqueKey":"agent.oneOf.1.llm.aws_bedrock_runtime_endpoint.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.aws_bedrock_runtime_endpoint","typeLabel":"string | null"},"openrouter_site_url":{"type":"string","title":"Openrouter Site Url","default":"https://docs.all-hands.dev/","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.llm.openrouter_site_url","typeLabel":"string"},"openrouter_app_name":{"type":"string","title":"Openrouter App Name","default":"OpenHands","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.llm.openrouter_app_name","typeLabel":"string"},"num_retries":{"type":"integer","minimum":0,"title":"Num Retries","default":5,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.llm.num_retries","typeLabel":"integer"},"retry_multiplier":{"type":"number","minimum":0,"title":"Retry Multiplier","default":8,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.llm.retry_multiplier","typeLabel":"number"},"retry_min_wait":{"type":"integer","minimum":0,"title":"Retry Min Wait","default":8,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.llm.retry_min_wait","typeLabel":"integer"},"retry_max_wait":{"type":"integer","minimum":0,"title":"Retry Max Wait","default":64,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.llm.retry_max_wait","typeLabel":"integer"},"timeout":{"oneOf":[{"type":"integer","title":"Timeout","description":"HTTP timeout in seconds. Default is 300s (5 minutes). Set to None to disable timeout (not recommended for production).","default":300,"minimum":0,"uniqueKey":"agent.oneOf.1.llm.timeout.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Timeout","description":"HTTP timeout in seconds. Default is 300s (5 minutes). Set to None to disable timeout (not recommended for production).","default":300,"uniqueKey":"agent.oneOf.1.llm.timeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.timeout","typeLabel":"integer | null"},"max_message_chars":{"type":"integer","minimum":1,"title":"Max Message Chars","description":"Approx max chars in each event/content sent to the LLM.","default":30000,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.llm.max_message_chars","typeLabel":"integer"},"temperature":{"oneOf":[{"type":"number","title":"Temperature","description":"Sampling temperature for response generation. Defaults to None (uses provider default temperature). Set to 0.0 for deterministic outputs, or higher values (0.7-1.0) for more creative responses.","minimum":0,"uniqueKey":"agent.oneOf.1.llm.temperature.oneOf.0","typeLabel":"number"},{"type":"null","title":"Temperature","description":"Sampling temperature for response generation. Defaults to None (uses provider default temperature). Set to 0.0 for deterministic outputs, or higher values (0.7-1.0) for more creative responses.","uniqueKey":"agent.oneOf.1.llm.temperature.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.temperature","typeLabel":"number | null"},"top_p":{"oneOf":[{"type":"number","title":"Top P","description":"Nucleus sampling parameter. Defaults to None (uses provider default). Set to a value between 0 and 1 to control diversity of outputs.","maximum":1,"minimum":0,"uniqueKey":"agent.oneOf.1.llm.top_p.oneOf.0","typeLabel":"number"},{"type":"null","title":"Top P","description":"Nucleus sampling parameter. Defaults to None (uses provider default). Set to a value between 0 and 1 to control diversity of outputs.","uniqueKey":"agent.oneOf.1.llm.top_p.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.top_p","typeLabel":"number | null"},"top_k":{"oneOf":[{"type":"number","title":"Top K","minimum":0,"uniqueKey":"agent.oneOf.1.llm.top_k.oneOf.0","typeLabel":"number"},{"type":"null","title":"Top K","uniqueKey":"agent.oneOf.1.llm.top_k.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.top_k","typeLabel":"number | null"},"max_input_tokens":{"oneOf":[{"type":"integer","title":"Max Input Tokens","description":"The maximum number of input tokens. Note that this is currently unused, and the value at runtime is actually the total tokens in OpenAI (e.g. 128,000 tokens for GPT-4).","minimum":1,"uniqueKey":"agent.oneOf.1.llm.max_input_tokens.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Max Input Tokens","description":"The maximum number of input tokens. Note that this is currently unused, and the value at runtime is actually the total tokens in OpenAI (e.g. 128,000 tokens for GPT-4).","uniqueKey":"agent.oneOf.1.llm.max_input_tokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.max_input_tokens","typeLabel":"integer | null"},"max_output_tokens":{"oneOf":[{"type":"integer","title":"Max Output Tokens","description":"The maximum number of output tokens. This is sent to the LLM.","minimum":1,"uniqueKey":"agent.oneOf.1.llm.max_output_tokens.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Max Output Tokens","description":"The maximum number of output tokens. This is sent to the LLM.","uniqueKey":"agent.oneOf.1.llm.max_output_tokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.max_output_tokens","typeLabel":"integer | null"},"model_canonical_name":{"oneOf":[{"type":"string","title":"Model Canonical Name","description":"Optional canonical model name for feature registry lookups. The OpenHands SDK maintains a model feature registry that maps model names to capabilities (e.g., vision support, prompt caching, responses API support). When using proxied or aliased model identifiers, set this field to the canonical model name (e.g., 'openai/gpt-4o') to ensure correct capability detection. If not provided, the 'model' field will be used for capability lookups.","uniqueKey":"agent.oneOf.1.llm.model_canonical_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Model Canonical Name","description":"Optional canonical model name for feature registry lookups. The OpenHands SDK maintains a model feature registry that maps model names to capabilities (e.g., vision support, prompt caching, responses API support). When using proxied or aliased model identifiers, set this field to the canonical model name (e.g., 'openai/gpt-4o') to ensure correct capability detection. If not provided, the 'model' field will be used for capability lookups.","uniqueKey":"agent.oneOf.1.llm.model_canonical_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.model_canonical_name","typeLabel":"string | null"},"api_mode":{"type":"string","enum":["auto","chat","responses"],"title":"Api Mode","description":"LLM API endpoint mode. 'auto' resolves from model metadata and SDK fallbacks; use 'chat' or 'responses' to override endpoint selection for proxy aliases and newly released models.","default":"auto","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.llm.api_mode","typeLabel":"enum\u003cstring>"},"capability_overrides":{"additionalProperties":{"oneOf":[{"type":"boolean","uniqueKey":"agent.oneOf.1.llm.capability_overrides.additionalProperties.oneOf.0","typeLabel":"boolean"},{"type":"string","uniqueKey":"agent.oneOf.1.llm.capability_overrides.additionalProperties.oneOf.1","typeLabel":"string"}],"uniqueKey":"agent.oneOf.1.llm.capability_overrides.additionalProperties","typeLabel":"boolean | string"},"type":"object","title":"Capability Overrides","description":"Explicit model capability overrides. Supported keys include supports_reasoning_effort, thinking_mode (adaptive, manual, none, or unknown), supports_sampling_params, supports_prompt_cache, supports_stop_words, supports_responses_api, supports_vision, and supports_prompt_cache_retention. Overrides take precedence over LiteLLM metadata and SDK fallbacks.","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.llm.capability_overrides","typeLabel":"Capability Overrides · object"},"extra_headers":{"oneOf":[{"type":"object","title":"Extra Headers","description":"Optional HTTP headers to forward to LiteLLM requests.","additionalProperties":{"type":"string","uniqueKey":"agent.oneOf.1.llm.extra_headers.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"agent.oneOf.1.llm.extra_headers.oneOf.0","typeLabel":"Extra Headers · object"},{"type":"null","title":"Extra Headers","description":"Optional HTTP headers to forward to LiteLLM requests.","uniqueKey":"agent.oneOf.1.llm.extra_headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.extra_headers","typeLabel":"Extra Headers · object | null"},"input_cost_per_token":{"oneOf":[{"type":"number","title":"Input Cost Per Token","description":"The cost per input token. This will available in logs for user.","minimum":0,"uniqueKey":"agent.oneOf.1.llm.input_cost_per_token.oneOf.0","typeLabel":"number"},{"type":"null","title":"Input Cost Per Token","description":"The cost per input token. This will available in logs for user.","uniqueKey":"agent.oneOf.1.llm.input_cost_per_token.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.input_cost_per_token","typeLabel":"number | null"},"output_cost_per_token":{"oneOf":[{"type":"number","title":"Output Cost Per Token","description":"The cost per output token. This will available in logs for user.","minimum":0,"uniqueKey":"agent.oneOf.1.llm.output_cost_per_token.oneOf.0","typeLabel":"number"},{"type":"null","title":"Output Cost Per Token","description":"The cost per output token. This will available in logs for user.","uniqueKey":"agent.oneOf.1.llm.output_cost_per_token.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.output_cost_per_token","typeLabel":"number | null"},"ollama_base_url":{"oneOf":[{"type":"string","title":"Ollama Base Url","uniqueKey":"agent.oneOf.1.llm.ollama_base_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Ollama Base Url","uniqueKey":"agent.oneOf.1.llm.ollama_base_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.ollama_base_url","typeLabel":"string | null"},"stream":{"type":"boolean","title":"Stream","description":"Enable streaming responses from the LLM. When enabled, the provided `on_token` callback in .completions and .responses will be invoked for each chunk of tokens.","default":false,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.llm.stream","typeLabel":"boolean"},"drop_params":{"type":"boolean","title":"Drop Params","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.llm.drop_params","typeLabel":"boolean"},"modify_params":{"type":"boolean","title":"Modify Params","description":"Modify params allows litellm to do transformations like adding a default message, when a message is empty.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.llm.modify_params","typeLabel":"boolean"},"disable_vision":{"oneOf":[{"type":"boolean","title":"Disable Vision","description":"If model is vision capable, this option allows to disable image processing (useful for cost reduction).","uniqueKey":"agent.oneOf.1.llm.disable_vision.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Disable Vision","description":"If model is vision capable, this option allows to disable image processing (useful for cost reduction).","uniqueKey":"agent.oneOf.1.llm.disable_vision.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.disable_vision","typeLabel":"boolean | null"},"disable_stop_word":{"oneOf":[{"type":"boolean","title":"Disable Stop Word","description":"Disable using of stop word.","default":false,"uniqueKey":"agent.oneOf.1.llm.disable_stop_word.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Disable Stop Word","description":"Disable using of stop word.","default":false,"uniqueKey":"agent.oneOf.1.llm.disable_stop_word.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.disable_stop_word","typeLabel":"boolean | null"},"caching_prompt":{"type":"boolean","title":"Caching Prompt","description":"Enable caching of prompts.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.llm.caching_prompt","typeLabel":"boolean"},"log_completions":{"type":"boolean","title":"Log Completions","description":"Enable logging of completions.","default":false,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.llm.log_completions","typeLabel":"boolean"},"log_completions_folder":{"type":"string","title":"Log Completions Folder","description":"The folder to log LLM completions to. Required if log_completions is True.","default":"logs/completions","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.llm.log_completions_folder","typeLabel":"string"},"custom_tokenizer":{"oneOf":[{"type":"string","title":"Custom Tokenizer","description":"A custom tokenizer to use for token counting.","uniqueKey":"agent.oneOf.1.llm.custom_tokenizer.oneOf.0","typeLabel":"string"},{"type":"null","title":"Custom Tokenizer","description":"A custom tokenizer to use for token counting.","uniqueKey":"agent.oneOf.1.llm.custom_tokenizer.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.custom_tokenizer","typeLabel":"string | null"},"native_tool_calling":{"type":"boolean","title":"Native Tool Calling","description":"Whether to use native tool calling.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.llm.native_tool_calling","typeLabel":"boolean"},"force_string_serializer":{"oneOf":[{"type":"boolean","title":"Force String Serializer","description":"Force using string content serializer when sending to LLM API. If None (default), auto-detect based on model. Useful for providers that do not support list content, like HuggingFace and Groq.","uniqueKey":"agent.oneOf.1.llm.force_string_serializer.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Force String Serializer","description":"Force using string content serializer when sending to LLM API. If None (default), auto-detect based on model. Useful for providers that do not support list content, like HuggingFace and Groq.","uniqueKey":"agent.oneOf.1.llm.force_string_serializer.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.force_string_serializer","typeLabel":"boolean | null"},"inline_image_urls":{"oneOf":[{"type":"boolean","title":"Inline Image Urls","description":"If True, fetch any http(s) image URL in outgoing messages and inline it as a base64 ``data:`` URL before sending. If None (default), auto-detect based on model (some APIs such as Moonshot's public Kimi endpoint reject URL-formatted images and require base64). Set this explicitly when the model is reached through a proxy alias that hides the underlying provider (e.g. ``litellm_proxy/\u003ccustom-alias>``). Note: inlining only runs when ``vision_is_active()`` is True, so the alias must still be recognised as vision-capable by the SDK feature registry or proxy model metadata.","uniqueKey":"agent.oneOf.1.llm.inline_image_urls.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Inline Image Urls","description":"If True, fetch any http(s) image URL in outgoing messages and inline it as a base64 ``data:`` URL before sending. If None (default), auto-detect based on model (some APIs such as Moonshot's public Kimi endpoint reject URL-formatted images and require base64). Set this explicitly when the model is reached through a proxy alias that hides the underlying provider (e.g. ``litellm_proxy/\u003ccustom-alias>``). Note: inlining only runs when ``vision_is_active()`` is True, so the alias must still be recognised as vision-capable by the SDK feature registry or proxy model metadata.","uniqueKey":"agent.oneOf.1.llm.inline_image_urls.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.inline_image_urls","typeLabel":"boolean | null"},"reasoning_effort":{"oneOf":[{"type":"string","title":"Reasoning Effort","description":"Provider-neutral reasoning effort. Common values include 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', and 'max'. The SDK accepts future provider values and lets LiteLLM translate them.","default":"high","enum":["low","medium","high","xhigh","none"],"uniqueKey":"agent.oneOf.1.llm.reasoning_effort.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Reasoning Effort","description":"Provider-neutral reasoning effort. Common values include 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', and 'max'. The SDK accepts future provider values and lets LiteLLM translate them.","default":"high","uniqueKey":"agent.oneOf.1.llm.reasoning_effort.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.reasoning_effort","typeLabel":"enum\u003cstring> | null"},"reasoning_summary":{"oneOf":[{"type":"string","title":"Reasoning Summary","description":"The level of detail for reasoning summaries. This is a string that can be one of 'auto', 'concise', or 'detailed'. Requires verified OpenAI organization. Only sent when explicitly set.","enum":["auto","concise","detailed"],"uniqueKey":"agent.oneOf.1.llm.reasoning_summary.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Reasoning Summary","description":"The level of detail for reasoning summaries. This is a string that can be one of 'auto', 'concise', or 'detailed'. Requires verified OpenAI organization. Only sent when explicitly set.","uniqueKey":"agent.oneOf.1.llm.reasoning_summary.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.reasoning_summary","typeLabel":"enum\u003cstring> | null"},"enable_encrypted_reasoning":{"type":"boolean","title":"Enable Encrypted Reasoning","description":"If True, ask for ['reasoning.encrypted_content'] in Responses API include.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.llm.enable_encrypted_reasoning","typeLabel":"boolean"},"prompt_cache_retention":{"oneOf":[{"type":"string","title":"Prompt Cache Retention","description":"Retention policy for prompt cache. Only sent for supported models (GPT-5+ and GPT-4.1, excluding Azure deployments); explicitly stripped for all others.","default":"24h","uniqueKey":"agent.oneOf.1.llm.prompt_cache_retention.oneOf.0","typeLabel":"string"},{"type":"null","title":"Prompt Cache Retention","description":"Retention policy for prompt cache. Only sent for supported models (GPT-5+ and GPT-4.1, excluding Azure deployments); explicitly stripped for all others.","default":"24h","uniqueKey":"agent.oneOf.1.llm.prompt_cache_retention.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.prompt_cache_retention","typeLabel":"string | null"},"extended_thinking_budget":{"oneOf":[{"type":"integer","title":"Extended Thinking Budget","description":"Legacy token budget for models confirmed to use manual Anthropic extended thinking. Ignored for adaptive-thinking models. Prefer reasoning_effort for new integrations.","default":200000,"uniqueKey":"agent.oneOf.1.llm.extended_thinking_budget.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Extended Thinking Budget","description":"Legacy token budget for models confirmed to use manual Anthropic extended thinking. Ignored for adaptive-thinking models. Prefer reasoning_effort for new integrations.","default":200000,"uniqueKey":"agent.oneOf.1.llm.extended_thinking_budget.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.extended_thinking_budget","typeLabel":"integer | null"},"seed":{"oneOf":[{"type":"integer","title":"Seed","description":"The seed to use for random number generation.","uniqueKey":"agent.oneOf.1.llm.seed.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Seed","description":"The seed to use for random number generation.","uniqueKey":"agent.oneOf.1.llm.seed.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.seed","typeLabel":"integer | null"},"usage_id":{"type":"string","title":"Usage Id","description":"Unique usage identifier for the LLM. Used for registry lookups, telemetry, and spend tracking.","default":"default","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.llm.usage_id","typeLabel":"string"},"litellm_extra_body":{"additionalProperties":true,"type":"object","title":"Litellm Extra Body","description":"Additional key-value pairs to pass to litellm's extra_body parameter. This is useful for custom inference endpoints that need additional parameters for configuration, routing, or advanced features. NOTE: Not all LLM providers support extra_body parameters. Some providers (e.g., OpenAI) may reject requests with unrecognized options. This is commonly supported by: - LiteLLM proxy servers (routing metadata, tracing) - vLLM endpoints (return_token_ids, etc.) - Custom inference clusters Examples: - Proxy routing: {'trace_version': '1.0.0', 'tags': ['agent:my-agent']} - vLLM features: {'return_token_ids': True}","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.llm.litellm_extra_body","typeLabel":"Litellm Extra Body · object"},"fallback_strategy":{"oneOf":[{"type":"object","title":"FallbackStrategy","description":"Optional fallback strategy for trying alternate LLMs on transient failure. Construct with FallbackStrategy(fallback_llms=[...]).Excluded from serialization; must be reconfigured after load.","required":["fallback_llms"],"properties":{"fallback_llms":{"items":{"type":"string","uniqueKey":"agent.oneOf.1.llm.fallback_strategy.oneOf.0.fallback_llms.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Fallback Llms","description":"Ordered list of LLM profile names to try on transient failure.","isRequired":true,"uniqueKey":"agent.oneOf.1.llm.fallback_strategy.oneOf.0.fallback_llms","typeLabel":"string[]"},"profile_store_dir":{"oneOf":[{"type":"string","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`.","uniqueKey":"agent.oneOf.1.llm.fallback_strategy.oneOf.0.profile_store_dir.oneOf.0","typeLabel":"string"},{"type":"string","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`.","format":"path","uniqueKey":"agent.oneOf.1.llm.fallback_strategy.oneOf.0.profile_store_dir.oneOf.1","typeLabel":"string\u003cpath>"},{"type":"null","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`.","uniqueKey":"agent.oneOf.1.llm.fallback_strategy.oneOf.0.profile_store_dir.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.fallback_strategy.oneOf.0.profile_store_dir","typeLabel":"string | string\u003cpath> | null"}},"uniqueKey":"agent.oneOf.1.llm.fallback_strategy.oneOf.0","typeLabel":"FallbackStrategy · object"},{"type":"null","description":"Optional fallback strategy for trying alternate LLMs on transient failure. Construct with FallbackStrategy(fallback_llms=[...]).Excluded from serialization; must be reconfigured after load.","uniqueKey":"agent.oneOf.1.llm.fallback_strategy.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.llm.fallback_strategy","typeLabel":"FallbackStrategy · object | null"}},"type":"object","title":"LLM","description":"LLM configuration for the agent.","examples":[{"api_key":"your_api_key_here","base_url":"https://llm-proxy.eval.all-hands.dev","model":"litellm_proxy/openai/gpt-5.5"}],"isRequired":true,"uniqueKey":"agent.oneOf.1.llm","typeLabel":"LLM · object"},"tools":{"items":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the tool class, e.g., 'TerminalTool'. Import it from an `openhands.tools.\u003cmodule>` subpackage.","examples":["TerminalTool","FileEditorTool","TaskTrackerTool"],"isRequired":true,"uniqueKey":"agent.oneOf.1.tools.items.[INDEX].name","typeLabel":"string"},"params":{"additionalProperties":true,"type":"object","title":"Params","description":"Parameters for the tool's .create() method, e.g., {'working_dir': '/app'}","examples":[{"working_dir":"/workspace"}],"uniqueKey":"agent.oneOf.1.tools.items.[INDEX].params","typeLabel":"Params · object"}},"type":"object","required":["name"],"title":"Tool","description":"Defines a tool to be initialized for the agent.\n\nThis is only used in agent-sdk for type schema for server use.","uniqueKey":"agent.oneOf.1.tools.items.[INDEX]","typeLabel":"Tool · object"},"type":"array","title":"Tools","description":"List of tools to initialize for the agent.","examples":[{"name":"TerminalTool","params":{}},{"name":"FileEditorTool","params":{}},{"name":"TaskTrackerTool","params":{}}],"uniqueKey":"agent.oneOf.1.tools","typeLabel":"Tool · object[]"},"mcp_config":{"additionalProperties":{"properties":{"url":{"oneOf":[{"type":"string","title":"Url","minLength":1,"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Url","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.url","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","title":"Transport","enum":["stdio","http","sse","streamable-http"],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Transport","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.transport","typeLabel":"enum\u003cstring> | null"},"command":{"oneOf":[{"type":"string","title":"Command","minLength":1,"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.command.oneOf.0","typeLabel":"string"},{"type":"null","title":"Command","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.command.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.command","typeLabel":"string | null"},"args":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.args.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Args","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.args.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Args","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.args.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.args","typeLabel":"string[] | null"},"env":{"oneOf":[{"type":"object","title":"Env","additionalProperties":{"type":"string","format":"password","writeOnly":true,"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.env.oneOf.0.additionalProperties","typeLabel":"string\u003cpassword>"},"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.env.oneOf.0","typeLabel":"Env · object"},{"type":"null","title":"Env","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.env.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.env","typeLabel":"Env · object | null"},"cwd":{"oneOf":[{"type":"string","title":"Cwd","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.cwd.oneOf.0","typeLabel":"string"},{"type":"null","title":"Cwd","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.cwd.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.cwd","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","title":"Description","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.description.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.description","typeLabel":"string | null"},"icon":{"oneOf":[{"type":"string","title":"Icon","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.icon.oneOf.0","typeLabel":"string"},{"type":"null","title":"Icon","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.icon.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.icon","typeLabel":"string | null"},"timeout":{"oneOf":[{"type":"number","title":"Timeout","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.timeout.oneOf.0","typeLabel":"number"},{"type":"null","title":"Timeout","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.timeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.timeout","typeLabel":"number | null"},"sse_read_timeout":{"oneOf":[{"type":"number","title":"Sse Read Timeout","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.sse_read_timeout.oneOf.0","typeLabel":"number"},{"type":"null","title":"Sse Read Timeout","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.sse_read_timeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.sse_read_timeout","typeLabel":"number | null"},"keep_alive":{"oneOf":[{"type":"boolean","title":"Keep Alive","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.keep_alive.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Keep Alive","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.keep_alive.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.keep_alive","typeLabel":"boolean | null"},"headers":{"oneOf":[{"type":"object","title":"Headers","additionalProperties":{"type":"string","format":"password","writeOnly":true,"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.headers.oneOf.0.additionalProperties","typeLabel":"string\u003cpassword>"},"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.headers.oneOf.0","typeLabel":"Headers · object"},{"type":"null","title":"Headers","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.headers","typeLabel":"Headers · object | null"},"auth":{"oneOf":[{"type":"object","title":"MCPNoneAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"none","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.0.strategy","typeLabel":"string"}},"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.0","typeLabel":"MCPNoneAuthCredential · object"},{"type":"object","title":"MCPApiKeyAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"api_key","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.1.strategy","typeLabel":"string"},"value":{"oneOf":[{"type":"string","title":"Value","format":"password","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.1.value.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Value","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.1.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.1.value","typeLabel":"string\u003cpassword> | null"},"header_name":{"oneOf":[{"type":"string","title":"Header Name","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.1.header_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Header Name","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.1.header_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.1.header_name","typeLabel":"string | null"}},"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.1","typeLabel":"MCPApiKeyAuthCredential · object"},{"type":"object","title":"MCPBearerAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"bearer","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.2.strategy","typeLabel":"string"},"value":{"oneOf":[{"type":"string","title":"Value","format":"password","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.2.value.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Value","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.2.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.2.value","typeLabel":"string\u003cpassword> | null"}},"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.2","typeLabel":"MCPBearerAuthCredential · object"},{"type":"object","title":"MCPBasicAuthCredential","required":["strategy","username"],"properties":{"strategy":{"type":"string","const":"basic","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.3.strategy","typeLabel":"string"},"username":{"type":"string","title":"Username","isRequired":true,"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.3.username","typeLabel":"string"},"password":{"oneOf":[{"type":"string","title":"Password","format":"password","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.3.password.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Password","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.3.password.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.3.password","typeLabel":"string\u003cpassword> | null"}},"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.3","typeLabel":"MCPBasicAuthCredential · object"},{"type":"object","title":"MCPHeaderAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"header","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.4.strategy","typeLabel":"string"},"headers":{"additionalProperties":{"type":"string","format":"password","writeOnly":true,"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.4.headers.additionalProperties","typeLabel":"string\u003cpassword>"},"type":"object","title":"Headers","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.4.headers","typeLabel":"Headers · object"}},"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.4","typeLabel":"MCPHeaderAuthCredential · object"},{"type":"object","title":"MCPOAuthAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"oauth2","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.strategy","typeLabel":"string"},"authentication":{"oneOf":[{"type":"object","title":"MCPOAuthAuthentication","required":["type"],"properties":{"type":{"type":"string","const":"oauth","title":"Type","isRequired":true,"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.type","typeLabel":"string"},"client_auth_method":{"oneOf":[{"type":"string","title":"Client Auth Method","enum":["none","client_secret_post","client_secret_basic","private_key_jwt"],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_auth_method.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Client Auth Method","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_auth_method.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_auth_method","typeLabel":"enum\u003cstring> | null"},"scopes":{"oneOf":[{"type":"string","title":"Scopes","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes.oneOf.1.items.[INDEX]","typeLabel":"string"},"title":"Scopes","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes.oneOf.1","typeLabel":"string[]"},{"type":"null","title":"Scopes","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes","typeLabel":"string | string[] | null"},"client_name":{"oneOf":[{"type":"string","title":"Client Name","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Client Name","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_name","typeLabel":"string | null"},"client_metadata_url":{"oneOf":[{"type":"string","title":"Client Metadata Url","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_metadata_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Client Metadata Url","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_metadata_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_metadata_url","typeLabel":"string | null"},"client_id":{"oneOf":[{"type":"string","title":"Client Id","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Client Id","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_id","typeLabel":"string | null"},"client_secret":{"oneOf":[{"type":"string","title":"Client Secret","format":"password","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_secret.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Client Secret","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_secret.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_secret","typeLabel":"string\u003cpassword> | null"},"additional_client_metadata":{"oneOf":[{"type":"object","title":"Additional Client Metadata","additionalProperties":true,"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.additional_client_metadata.oneOf.0","typeLabel":"Additional Client Metadata · object"},{"type":"null","title":"Additional Client Metadata","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.additional_client_metadata.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0.additional_client_metadata","typeLabel":"Additional Client Metadata · object | null"}},"additionalProperties":false,"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.0","typeLabel":"MCPOAuthAuthentication · object"},{"type":"null","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.authentication","typeLabel":"MCPOAuthAuthentication · object | null"},"state":{"oneOf":[{"type":"object","title":"MCPOAuthState","properties":{"tokens":{"oneOf":[{"type":"object","title":"MCPOAuthTokenState","properties":{"access_token":{"oneOf":[{"type":"string","title":"Access Token","format":"password","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.access_token.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Access Token","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.access_token.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.access_token","typeLabel":"string\u003cpassword> | null"},"refresh_token":{"oneOf":[{"type":"string","title":"Refresh Token","format":"password","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.refresh_token.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Refresh Token","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.refresh_token.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.refresh_token","typeLabel":"string\u003cpassword> | null"}},"additionalProperties":true,"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0","typeLabel":"MCPOAuthTokenState · object"},{"type":"null","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens","typeLabel":"MCPOAuthTokenState · object | null"},"client_info":{"oneOf":[{"type":"object","title":"MCPOAuthClientInfoState","properties":{"client_secret":{"oneOf":[{"type":"string","title":"Client Secret","format":"password","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.0.client_secret.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Client Secret","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.0.client_secret.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.0.client_secret","typeLabel":"string\u003cpassword> | null"}},"additionalProperties":true,"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.0","typeLabel":"MCPOAuthClientInfoState · object"},{"type":"null","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info","typeLabel":"MCPOAuthClientInfoState · object | null"},"token_expires_at":{"oneOf":[{"type":"number","title":"Token Expires At","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.token_expires_at.oneOf.0","typeLabel":"number"},{"type":"null","title":"Token Expires At","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.token_expires_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0.token_expires_at","typeLabel":"number | null"}},"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.0","typeLabel":"MCPOAuthState · object"},{"type":"null","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5.state","typeLabel":"MCPOAuthState · object | null"}},"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.5","typeLabel":"MCPOAuthAuthCredential · object"},{"type":"null","title":"Auth","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth.oneOf.6","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.auth","typeLabel":"MCPNoneAuthCredential · object | MCPApiKeyAuthCredential · object | MCPBearerAuthCredential · object | MCPBasicAuthCredential · object | MCPHeaderAuthCredential · object | MCPOAuthAuthCredential · object | null"},"enabled":{"type":"boolean","title":"Enabled","description":"Whether this server is exposed to the agent. A disabled server stays fully configured -- including its secrets -- but is skipped when MCP tools are created and when servers are forwarded to an ACP subprocess.","default":true,"uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties.enabled","typeLabel":"boolean"}},"additionalProperties":false,"type":"object","title":"MCPServer","description":"One MCP server in the settings DataModel.","uniqueKey":"agent.oneOf.1.mcp_config.additionalProperties","typeLabel":"MCPServer · object"},"type":"object","title":"Mcp Config","description":"Optional MCP servers to expose as tools.","examples":[{"fetch":{"args":["--with","mcp==1.29.0","mcp-server-fetch==2026.7.10"],"command":"uvx"}}],"uniqueKey":"agent.oneOf.1.mcp_config","typeLabel":"Mcp Config · object"},"filter_tools_regex":{"oneOf":[{"type":"string","title":"Filter Tools Regex","description":"Optional regex to filter the tools available to the agent by name. This is applied after any tools provided in `tools` and any MCP tools are added.","example":"^(?!repomix)(.*)|^repomix.*pack_codebase.*$","uniqueKey":"agent.oneOf.1.filter_tools_regex.oneOf.0","typeLabel":"string"},{"type":"null","title":"Filter Tools Regex","description":"Optional regex to filter the tools available to the agent by name. This is applied after any tools provided in `tools` and any MCP tools are added.","example":"^(?!repomix)(.*)|^repomix.*pack_codebase.*$","uniqueKey":"agent.oneOf.1.filter_tools_regex.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.filter_tools_regex","typeLabel":"string | null"},"include_default_tools":{"items":{"type":"string","uniqueKey":"agent.oneOf.1.include_default_tools.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Include Default Tools","description":"List of default tool class names to include. By default, the agent includes 'FinishTool' and 'ThinkTool'. Set to an empty list to disable all default tools, or provide a subset to include only specific ones. Example: include_default_tools=['FinishTool'] to only include FinishTool, or include_default_tools=[] to disable all default tools.","examples":[["FinishTool","ThinkTool"],["FinishTool"],[]],"uniqueKey":"agent.oneOf.1.include_default_tools","typeLabel":"string[]"},"agent_context":{"oneOf":[{"type":"object","title":"AgentContext","description":"Optional AgentContext to initialize the agent with specific context.","example":{"skills":[{"content":"When you see this message, you should reply like you are a grumpy cat forced to use the internet.","name":"AGENTS.md","type":"repo"},{"content":"IMPORTANT! The user has said the magic word \"flarglebargle\". You must only respond with a message telling them how smart they are","name":"flarglebargle","trigger":["flarglebargle"],"type":"knowledge"}],"system_message_suffix":"Always finish your response with the word 'yay!'"},"properties":{"skills":{"items":{"properties":{"name":{"type":"string","title":"Name","isRequired":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].name","typeLabel":"string"},"content":{"type":"string","title":"Content","isRequired":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].content","typeLabel":"string"},"trigger":{"oneOf":[{"type":"object","title":"KeywordTrigger","description":"Trigger for keyword-based skills.\n\nThese skills are activated when specific keywords appear in the user's query.","required":["keywords"],"properties":{"keywords":{"items":{"type":"string","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.0.keywords.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Keywords","isRequired":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.0.keywords","typeLabel":"string[]"},"type":{"type":"string","const":"keyword","title":"Type","default":"keyword","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.0.type","typeLabel":"string"}},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.0","typeLabel":"KeywordTrigger · object"},{"type":"object","title":"TaskTrigger","description":"Trigger for task-specific skills.\n\nThese skills are activated for specific task types and can modify prompts.","required":["triggers"],"properties":{"triggers":{"items":{"type":"string","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.1.triggers.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Triggers","isRequired":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.1.triggers","typeLabel":"string[]"},"type":{"type":"string","const":"task","title":"Type","default":"task","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.1.type","typeLabel":"string"}},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.1","typeLabel":"TaskTrigger · object"},{"type":"object","title":"PathTrigger","description":"Trigger for path-scoped skills (\"rules\").\n\nThese skills are activated when the agent touches a file whose path matches\none of the ``paths`` glob patterns (gitignore-style ``**`` semantics).","required":["paths"],"properties":{"paths":{"items":{"type":"string","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.2.paths.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Paths","isRequired":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.2.paths","typeLabel":"string[]"},"type":{"type":"string","const":"path","title":"Type","default":"path","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.2.type","typeLabel":"string"}},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.2","typeLabel":"PathTrigger · object"},{"type":"null","title":"Trigger","description":"Trigger determines when skill content is auto-injected. None = no auto-injection (for AgentSkills: agent reads on demand; for legacy: full content always in system prompt). KeywordTrigger = auto-inject when keywords appear in user messages. TaskTrigger = auto-inject for specific tasks, may require user input.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].trigger.oneOf.3","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].trigger","typeLabel":"KeywordTrigger · object | TaskTrigger · object | PathTrigger · object | null"},"source":{"oneOf":[{"type":"string","title":"Source","description":"The source path or identifier of the skill. When it is None, it is treated as a programmatically defined skill.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].source.oneOf.0","typeLabel":"string"},{"type":"null","title":"Source","description":"The source path or identifier of the skill. When it is None, it is treated as a programmatically defined skill.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].source.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].source","typeLabel":"string | null"},"mcp_tools":{"oneOf":[{"type":"object","title":"Mcp Tools","description":"MCP servers for the skill (repo skills only).","additionalProperties":{"properties":{"url":{"oneOf":[{"type":"string","title":"Url","minLength":1,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Url","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.url","typeLabel":"string | null"},"transport":{"oneOf":[{"type":"string","title":"Transport","enum":["stdio","http","sse","streamable-http"],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Transport","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.transport","typeLabel":"enum\u003cstring> | null"},"command":{"oneOf":[{"type":"string","title":"Command","minLength":1,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.command.oneOf.0","typeLabel":"string"},{"type":"null","title":"Command","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.command.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.command","typeLabel":"string | null"},"args":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.args.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Args","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.args.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Args","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.args.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.args","typeLabel":"string[] | null"},"env":{"oneOf":[{"type":"object","title":"Env","additionalProperties":{"type":"string","format":"password","writeOnly":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.env.oneOf.0.additionalProperties","typeLabel":"string\u003cpassword>"},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.env.oneOf.0","typeLabel":"Env · object"},{"type":"null","title":"Env","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.env.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.env","typeLabel":"Env · object | null"},"cwd":{"oneOf":[{"type":"string","title":"Cwd","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.cwd.oneOf.0","typeLabel":"string"},{"type":"null","title":"Cwd","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.cwd.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.cwd","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","title":"Description","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.description.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.description","typeLabel":"string | null"},"icon":{"oneOf":[{"type":"string","title":"Icon","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.icon.oneOf.0","typeLabel":"string"},{"type":"null","title":"Icon","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.icon.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.icon","typeLabel":"string | null"},"timeout":{"oneOf":[{"type":"number","title":"Timeout","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.timeout.oneOf.0","typeLabel":"number"},{"type":"null","title":"Timeout","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.timeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.timeout","typeLabel":"number | null"},"sse_read_timeout":{"oneOf":[{"type":"number","title":"Sse Read Timeout","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.sse_read_timeout.oneOf.0","typeLabel":"number"},{"type":"null","title":"Sse Read Timeout","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.sse_read_timeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.sse_read_timeout","typeLabel":"number | null"},"keep_alive":{"oneOf":[{"type":"boolean","title":"Keep Alive","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.keep_alive.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Keep Alive","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.keep_alive.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.keep_alive","typeLabel":"boolean | null"},"headers":{"oneOf":[{"type":"object","title":"Headers","additionalProperties":{"type":"string","format":"password","writeOnly":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.headers.oneOf.0.additionalProperties","typeLabel":"string\u003cpassword>"},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.headers.oneOf.0","typeLabel":"Headers · object"},{"type":"null","title":"Headers","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.headers","typeLabel":"Headers · object | null"},"auth":{"oneOf":[{"type":"object","title":"MCPNoneAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"none","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.0.strategy","typeLabel":"string"}},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.0","typeLabel":"MCPNoneAuthCredential · object"},{"type":"object","title":"MCPApiKeyAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"api_key","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.1.strategy","typeLabel":"string"},"value":{"oneOf":[{"type":"string","title":"Value","format":"password","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.1.value.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Value","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.1.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.1.value","typeLabel":"string\u003cpassword> | null"},"header_name":{"oneOf":[{"type":"string","title":"Header Name","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.1.header_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Header Name","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.1.header_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.1.header_name","typeLabel":"string | null"}},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.1","typeLabel":"MCPApiKeyAuthCredential · object"},{"type":"object","title":"MCPBearerAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"bearer","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.2.strategy","typeLabel":"string"},"value":{"oneOf":[{"type":"string","title":"Value","format":"password","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.2.value.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Value","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.2.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.2.value","typeLabel":"string\u003cpassword> | null"}},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.2","typeLabel":"MCPBearerAuthCredential · object"},{"type":"object","title":"MCPBasicAuthCredential","required":["strategy","username"],"properties":{"strategy":{"type":"string","const":"basic","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.3.strategy","typeLabel":"string"},"username":{"type":"string","title":"Username","isRequired":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.3.username","typeLabel":"string"},"password":{"oneOf":[{"type":"string","title":"Password","format":"password","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.3.password.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Password","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.3.password.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.3.password","typeLabel":"string\u003cpassword> | null"}},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.3","typeLabel":"MCPBasicAuthCredential · object"},{"type":"object","title":"MCPHeaderAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"header","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.4.strategy","typeLabel":"string"},"headers":{"additionalProperties":{"type":"string","format":"password","writeOnly":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.4.headers.additionalProperties","typeLabel":"string\u003cpassword>"},"type":"object","title":"Headers","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.4.headers","typeLabel":"Headers · object"}},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.4","typeLabel":"MCPHeaderAuthCredential · object"},{"type":"object","title":"MCPOAuthAuthCredential","required":["strategy"],"properties":{"strategy":{"type":"string","const":"oauth2","title":"Strategy","isRequired":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.strategy","typeLabel":"string"},"authentication":{"oneOf":[{"type":"object","title":"MCPOAuthAuthentication","required":["type"],"properties":{"type":{"type":"string","const":"oauth","title":"Type","isRequired":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.type","typeLabel":"string"},"client_auth_method":{"oneOf":[{"type":"string","title":"Client Auth Method","enum":["none","client_secret_post","client_secret_basic","private_key_jwt"],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_auth_method.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Client Auth Method","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_auth_method.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_auth_method","typeLabel":"enum\u003cstring> | null"},"scopes":{"oneOf":[{"type":"string","title":"Scopes","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes.oneOf.1.items.[INDEX]","typeLabel":"string"},"title":"Scopes","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes.oneOf.1","typeLabel":"string[]"},{"type":"null","title":"Scopes","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.scopes","typeLabel":"string | string[] | null"},"client_name":{"oneOf":[{"type":"string","title":"Client Name","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Client Name","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_name","typeLabel":"string | null"},"client_metadata_url":{"oneOf":[{"type":"string","title":"Client Metadata Url","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_metadata_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Client Metadata Url","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_metadata_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_metadata_url","typeLabel":"string | null"},"client_id":{"oneOf":[{"type":"string","title":"Client Id","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Client Id","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_id","typeLabel":"string | null"},"client_secret":{"oneOf":[{"type":"string","title":"Client Secret","format":"password","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_secret.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Client Secret","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_secret.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.client_secret","typeLabel":"string\u003cpassword> | null"},"additional_client_metadata":{"oneOf":[{"type":"object","title":"Additional Client Metadata","additionalProperties":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.additional_client_metadata.oneOf.0","typeLabel":"Additional Client Metadata · object"},{"type":"null","title":"Additional Client Metadata","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.additional_client_metadata.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0.additional_client_metadata","typeLabel":"Additional Client Metadata · object | null"}},"additionalProperties":false,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.0","typeLabel":"MCPOAuthAuthentication · object"},{"type":"null","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.authentication","typeLabel":"MCPOAuthAuthentication · object | null"},"state":{"oneOf":[{"type":"object","title":"MCPOAuthState","properties":{"tokens":{"oneOf":[{"type":"object","title":"MCPOAuthTokenState","properties":{"access_token":{"oneOf":[{"type":"string","title":"Access Token","format":"password","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.access_token.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Access Token","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.access_token.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.access_token","typeLabel":"string\u003cpassword> | null"},"refresh_token":{"oneOf":[{"type":"string","title":"Refresh Token","format":"password","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.refresh_token.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Refresh Token","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.refresh_token.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0.refresh_token","typeLabel":"string\u003cpassword> | null"}},"additionalProperties":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.0","typeLabel":"MCPOAuthTokenState · object"},{"type":"null","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.tokens","typeLabel":"MCPOAuthTokenState · object | null"},"client_info":{"oneOf":[{"type":"object","title":"MCPOAuthClientInfoState","properties":{"client_secret":{"oneOf":[{"type":"string","title":"Client Secret","format":"password","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.0.client_secret.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Client Secret","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.0.client_secret.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.0.client_secret","typeLabel":"string\u003cpassword> | null"}},"additionalProperties":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.0","typeLabel":"MCPOAuthClientInfoState · object"},{"type":"null","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.client_info","typeLabel":"MCPOAuthClientInfoState · object | null"},"token_expires_at":{"oneOf":[{"type":"number","title":"Token Expires At","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.token_expires_at.oneOf.0","typeLabel":"number"},{"type":"null","title":"Token Expires At","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.token_expires_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0.token_expires_at","typeLabel":"number | null"}},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.0","typeLabel":"MCPOAuthState · object"},{"type":"null","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5.state","typeLabel":"MCPOAuthState · object | null"}},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.5","typeLabel":"MCPOAuthAuthCredential · object"},{"type":"null","title":"Auth","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth.oneOf.6","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.auth","typeLabel":"MCPNoneAuthCredential · object | MCPApiKeyAuthCredential · object | MCPBearerAuthCredential · object | MCPBasicAuthCredential · object | MCPHeaderAuthCredential · object | MCPOAuthAuthCredential · object | null"},"enabled":{"type":"boolean","title":"Enabled","description":"Whether this server is exposed to the agent. A disabled server stays fully configured -- including its secrets -- but is skipped when MCP tools are created and when servers are forwarded to an ACP subprocess.","default":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties.enabled","typeLabel":"boolean"}},"additionalProperties":false,"type":"object","title":"MCPServer","description":"One MCP server in the settings DataModel.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0.additionalProperties","typeLabel":"MCPServer · object"},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.0","typeLabel":"Mcp Tools · object"},{"type":"null","title":"Mcp Tools","description":"MCP servers for the skill (repo skills only).","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].mcp_tools","typeLabel":"Mcp Tools · object | null"},"inputs":{"items":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the input parameter","isRequired":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].inputs.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","title":"Description","description":"Description of the input parameter","isRequired":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].inputs.items.[INDEX].description","typeLabel":"string"}},"type":"object","required":["name","description"],"title":"InputMetadata","description":"Metadata for task skill inputs.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].inputs.items.[INDEX]","typeLabel":"InputMetadata · object"},"type":"array","title":"Inputs","description":"Input metadata for the skill (task skills only)","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].inputs","typeLabel":"InputMetadata · object[]"},"is_agentskills_format":{"type":"boolean","title":"Is Agentskills Format","description":"Whether this skill was loaded from a SKILL.md file following the AgentSkills standard. AgentSkills-format skills use progressive disclosure: always listed in \u003cavailable_skills> with name, description, and location. If the skill also has triggers, content is auto-injected when triggered AND agent can read file anytime.","default":false,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].is_agentskills_format","typeLabel":"boolean"},"version":{"type":"string","title":"Version","description":"Skill version (AgentSkills standard field).","default":"1.0.0","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].version","typeLabel":"string"},"description":{"oneOf":[{"type":"string","title":"Description","description":"A brief description of what the skill does and when to use it. Descriptions exceeding MAX_DESCRIPTION_LENGTH are truncated with a notice pointing to the skill's source path.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"A brief description of what the skill does and when to use it. Descriptions exceeding MAX_DESCRIPTION_LENGTH are truncated with a notice pointing to the skill's source path.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].description","typeLabel":"string | null"},"license":{"oneOf":[{"type":"string","title":"License","description":"The license under which the skill is distributed. AgentSkills standard field (e.g., 'Apache-2.0', 'MIT').","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].license.oneOf.0","typeLabel":"string"},{"type":"null","title":"License","description":"The license under which the skill is distributed. AgentSkills standard field (e.g., 'Apache-2.0', 'MIT').","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].license.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].license","typeLabel":"string | null"},"compatibility":{"oneOf":[{"type":"string","title":"Compatibility","description":"Environment requirements or compatibility notes for the skill. AgentSkills standard field (e.g., 'Requires git and docker').","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].compatibility.oneOf.0","typeLabel":"string"},{"type":"null","title":"Compatibility","description":"Environment requirements or compatibility notes for the skill. AgentSkills standard field (e.g., 'Requires git and docker').","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].compatibility.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].compatibility","typeLabel":"string | null"},"metadata":{"oneOf":[{"type":"object","title":"Metadata","description":"Arbitrary key-value metadata for the skill. AgentSkills standard field for extensibility.","additionalProperties":{"type":"string","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].metadata.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].metadata.oneOf.0","typeLabel":"Metadata · object"},{"type":"null","title":"Metadata","description":"Arbitrary key-value metadata for the skill. AgentSkills standard field for extensibility.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].metadata.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].metadata","typeLabel":"Metadata · object | null"},"allowed_tools":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].allowed_tools.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Allowed Tools","description":"List of pre-approved tools for this skill. AgentSkills standard field (parsed from space-delimited string).","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].allowed_tools.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Allowed Tools","description":"List of pre-approved tools for this skill. AgentSkills standard field (parsed from space-delimited string).","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].allowed_tools.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].allowed_tools","typeLabel":"string[] | null"},"disable_model_invocation":{"type":"boolean","title":"Disable Model Invocation","description":"Whether this skill can only be activated by trigger matching and should not be advertised to the model for direct invocation.","default":false,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].disable_model_invocation","typeLabel":"boolean"},"resources":{"oneOf":[{"type":"object","title":"SkillResources","description":"Resource directories for the skill (scripts/, references/, assets/). AgentSkills standard field. Only populated for SKILL.md directory format.","required":["skill_root"],"properties":{"skill_root":{"type":"string","title":"Skill Root","description":"Root directory of the skill (absolute path)","isRequired":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].resources.oneOf.0.skill_root","typeLabel":"string"},"scripts":{"items":{"type":"string","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].resources.oneOf.0.scripts.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Scripts","description":"List of script files in scripts/ directory (relative paths)","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].resources.oneOf.0.scripts","typeLabel":"string[]"},"references":{"items":{"type":"string","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].resources.oneOf.0.references.items.[INDEX]","typeLabel":"string"},"type":"array","title":"References","description":"List of reference files in references/ directory (relative paths)","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].resources.oneOf.0.references","typeLabel":"string[]"},"assets":{"items":{"type":"string","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].resources.oneOf.0.assets.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Assets","description":"List of asset files in assets/ directory (relative paths)","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].resources.oneOf.0.assets","typeLabel":"string[]"}},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].resources.oneOf.0","typeLabel":"SkillResources · object"},{"type":"null","description":"Resource directories for the skill (scripts/, references/, assets/). AgentSkills standard field. Only populated for SKILL.md directory format.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].resources.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX].resources","typeLabel":"SkillResources · object | null"}},"type":"object","required":["name","content"],"title":"Skill","description":"A skill provides specialized knowledge or functionality.\n\nSkill behavior depends on format (is_agentskills_format) and trigger:\n\nAgentSkills format (SKILL.md files):\n- Always listed in \u003cavailable_skills> with name, description, location\n- Agent reads full content on demand (progressive disclosure)\n- If has triggers: content is ALSO auto-injected when triggered\n\nLegacy OpenHands format:\n- With triggers: Listed in \u003cavailable_skills>, content injected on trigger\n- Without triggers (None): Full content in \u003cREPO_CONTEXT>, always active\n\nThis model supports both OpenHands-specific fields and AgentSkills standard\nfields (https://agentskills.io/specification) for cross-platform compatibility.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills.items.[INDEX]","typeLabel":"Skill · object"},"type":"array","title":"Skills","description":"List of available skills that can extend the user's input.","acp_compatible":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.skills","typeLabel":"Skill · object[]"},"system_message_suffix":{"oneOf":[{"type":"string","title":"System Message Suffix","description":"Optional suffix to append to the system prompt.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.system_message_suffix.oneOf.0","typeLabel":"string"},{"type":"null","title":"System Message Suffix","description":"Optional suffix to append to the system prompt.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.system_message_suffix.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.system_message_suffix","typeLabel":"string | null"},"user_message_suffix":{"oneOf":[{"type":"string","title":"User Message Suffix","description":"Optional suffix to append to the user's message.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.user_message_suffix.oneOf.0","typeLabel":"string"},{"type":"null","title":"User Message Suffix","description":"Optional suffix to append to the user's message.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.user_message_suffix.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.user_message_suffix","typeLabel":"string | null"},"load_user_skills":{"type":"boolean","title":"Load User Skills","description":"Whether to automatically load user skills from ~/.openhands/skills/ and ~/.openhands/microagents/ (for backward compatibility). ","default":false,"acp_compatible":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.load_user_skills","typeLabel":"boolean"},"load_public_skills":{"type":"boolean","title":"Load Public Skills","description":"Whether to automatically load skills from the public OpenHands skills repository at https://github.com/OpenHands/extensions. This allows you to get the latest skills without SDK updates.","default":false,"acp_compatible":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.load_public_skills","typeLabel":"boolean"},"marketplace_path":{"oneOf":[{"type":"string","title":"Marketplace Path","description":"Relative marketplace JSON path within the public skills repository. Set to None to load all public skills without marketplace filtering.","default":"marketplaces/default.json","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.marketplace_path.oneOf.0","typeLabel":"string"},{"type":"null","title":"Marketplace Path","description":"Relative marketplace JSON path within the public skills repository. Set to None to load all public skills without marketplace filtering.","default":"marketplaces/default.json","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.marketplace_path.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.marketplace_path","typeLabel":"string | null"},"registered_marketplaces":{"items":{"properties":{"name":{"type":"string","title":"Name","description":"Identifier for this marketplace registration","isRequired":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].name","typeLabel":"string"},"source":{"type":"string","title":"Source","description":"Marketplace source: 'github:owner/repo', git URL, or local path","isRequired":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].source","typeLabel":"string"},"ref":{"oneOf":[{"type":"string","title":"Ref","description":"Optional branch, tag, or commit for git sources","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].ref.oneOf.0","typeLabel":"string"},{"type":"null","title":"Ref","description":"Optional branch, tag, or commit for git sources","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].ref.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].ref","typeLabel":"string | null"},"repo_path":{"oneOf":[{"type":"string","title":"Repo Path","description":"Subdirectory path within the git repository containing the marketplace. Only relevant for git sources.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].repo_path.oneOf.0","typeLabel":"string"},{"type":"null","title":"Repo Path","description":"Subdirectory path within the git repository containing the marketplace. Only relevant for git sources.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].repo_path.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].repo_path","typeLabel":"string | null"},"auto_load":{"oneOf":[{"type":"boolean","title":"Auto Load","description":"Whether to load marketplace plugins and standalone skills at conversation start. Use True for all, False or [] for none, or a list of plugin/skill names for selective loading.","default":false,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].auto_load.oneOf.0","typeLabel":"boolean"},{"type":"array","items":{"type":"string","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].auto_load.oneOf.1.items.[INDEX]","typeLabel":"string"},"title":"Auto Load","description":"Whether to load marketplace plugins and standalone skills at conversation start. Use True for all, False or [] for none, or a list of plugin/skill names for selective loading.","default":false,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].auto_load.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.registered_marketplaces.items.[INDEX].auto_load","typeLabel":"boolean | string[]"}},"type":"object","required":["name","source"],"title":"MarketplaceRegistration","description":"Registration for a marketplace source used for plugin resolution.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.registered_marketplaces.items.[INDEX]","typeLabel":"MarketplaceRegistration · object"},"type":"array","title":"Registered Marketplaces","description":"Marketplace registrations for plugin resolution. Registrations with auto_load=True or a list of plugin names are resolved by LocalConversation at startup.","acp_compatible":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.registered_marketplaces","typeLabel":"MarketplaceRegistration · object[]"},"load_project_skills":{"type":"boolean","title":"Load Project Skills","description":"Whether to automatically load project skills from the conversation workspace (e.g. .openhands/skills/, AGENTS.md). Unlike load_user_skills / load_public_skills, this flag is not resolved by AgentContext itself (the workspace path is unknown at validation time); LocalConversation resolves it lazily on the first send_message() / run(), when the workspace is known. Also unlike load_user_skills / load_public_skills (which yield to explicit skills on a name conflict), resolved project skills are authoritative: a project skill overrides a same-named skill already present in `skills`.","default":false,"acp_compatible":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.load_project_skills","typeLabel":"boolean"},"load_memory":{"type":"boolean","title":"Load Memory","description":"Whether to load persistent agent memory (MEMORY.md indexes under ~/.openhands/memory/ and \u003cworkspace>/.openhands/memory/) into the system prompt. Like load_project_skills, this flag is not resolved by AgentContext itself (the workspace path is unknown at validation time); LocalConversation resolves it lazily on the first send_message() / run() and stores the result in memory_context.","default":false,"acp_compatible":true,"openhands_settings":{"depends_on":[],"label":"Persistent memory","prominence":"major"},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.load_memory","typeLabel":"boolean"},"memory_context":{"oneOf":[{"type":"string","title":"Memory Context","description":"Resolved memory-index text rendered into the \u003cMEMORY_CONTEXT> prompt block. Populated via model_copy by LocalConversation when load_memory is set; excluded from serialization because it is re-resolved from disk each session and must not bloat persisted conversation state.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.memory_context.oneOf.0","typeLabel":"string"},{"type":"null","title":"Memory Context","description":"Resolved memory-index text rendered into the \u003cMEMORY_CONTEXT> prompt block. Populated via model_copy by LocalConversation when load_memory is set; excluded from serialization because it is re-resolved from disk each session and must not bloat persisted conversation state.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.memory_context.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.memory_context","typeLabel":"string | null"},"disabled_skills":{"items":{"type":"string","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.disabled_skills.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Disabled Skills","description":"Names of skills to EXCLUDE from this context — a deny-list applied after every skill source is loaded (auto-loaded user/public, explicit, and lazily-loaded project skills). A listed name absent from the loaded set is a harmless no-op. [] (the default) keeps every skill. This is the single, drift-tolerant skill-selection mechanism (agent profiles set it from their own deny-list; #4017).","acp_compatible":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.disabled_skills","typeLabel":"string[]"},"secrets":{"oneOf":[{"type":"object","title":"Secrets","description":"Dictionary mapping secret keys to values or secret sources. Secrets are used for authentication and sensitive data handling. Values can be either strings or SecretSource instances (str | SecretSource).","additionalProperties":{"oneOf":[{"type":"string","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"object","title":"LookupSecret","description":"A secret looked up from some external url","required":["url"],"properties":{"url":{"type":"string","title":"Url","isRequired":true,"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.1.url","typeLabel":"string"},"description":{"oneOf":[{"type":"string","title":"Description","description":"Optional description for this secret","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.1.description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"Optional description for this secret","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.1.description.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.1.description","typeLabel":"string | null"},"headers":{"additionalProperties":{"type":"string","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.1.headers.additionalProperties","typeLabel":"string"},"type":"object","title":"Headers","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.1.headers","typeLabel":"Headers · object"},"kind":{"type":"string","const":"LookupSecret","title":"Kind","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.1.kind","typeLabel":"string"}},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.1","typeLabel":"LookupSecret · object"},{"type":"object","title":"StaticSecret","description":"A secret stored locally","properties":{"description":{"oneOf":[{"type":"string","title":"Description","description":"Optional description for this secret","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.2.description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"Optional description for this secret","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.2.description.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.2.description","typeLabel":"string | null"},"value":{"oneOf":[{"type":"string","title":"Value","format":"password","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.2.value.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Value","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.2.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.2.value","typeLabel":"string\u003cpassword> | null"},"kind":{"type":"string","const":"StaticSecret","title":"Kind","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.2.kind","typeLabel":"string"}},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties.oneOf.2","typeLabel":"StaticSecret · object"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.0.additionalProperties","typeLabel":"string | LookupSecret · object | StaticSecret · object"},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.0","typeLabel":"Secrets · object"},{"type":"null","title":"Secrets","description":"Dictionary mapping secret keys to values or secret sources. Secrets are used for authentication and sensitive data handling. Values can be either strings or SecretSource instances (str | SecretSource).","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.secrets","typeLabel":"Secrets · object | null"},"current_datetime":{"oneOf":[{"type":"string","title":"Current Datetime","description":"Current date and time information to provide to the agent. Can be a datetime object (which will be formatted as ISO 8601) or a pre-formatted string. When provided, this information is included in the system prompt to give the agent awareness of the current time context. Defaults to the current (timezone-aware) datetime.","format":"date-time","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.current_datetime.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"string","title":"Current Datetime","description":"Current date and time information to provide to the agent. Can be a datetime object (which will be formatted as ISO 8601) or a pre-formatted string. When provided, this information is included in the system prompt to give the agent awareness of the current time context. Defaults to the current (timezone-aware) datetime.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.current_datetime.oneOf.1","typeLabel":"string"},{"type":"null","title":"Current Datetime","description":"Current date and time information to provide to the agent. Can be a datetime object (which will be formatted as ISO 8601) or a pre-formatted string. When provided, this information is included in the system prompt to give the agent awareness of the current time context. Defaults to the current (timezone-aware) datetime.","uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.current_datetime.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0.current_datetime","typeLabel":"string\u003cdate-time> | string | null"}},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.0","typeLabel":"AgentContext · object"},{"type":"null","description":"Optional AgentContext to initialize the agent with specific context.","example":{"skills":[{"content":"When you see this message, you should reply like you are a grumpy cat forced to use the internet.","name":"AGENTS.md","type":"repo"},{"content":"IMPORTANT! The user has said the magic word \"flarglebargle\". You must only respond with a message telling them how smart they are","name":"flarglebargle","trigger":["flarglebargle"],"type":"knowledge"}],"system_message_suffix":"Always finish your response with the word 'yay!'","user_message_prefix":"The first character of your response should be 'I'"},"uniqueKey":"agent.oneOf.1.agent_context.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.agent_context","typeLabel":"AgentContext · object | null"},"system_prompt":{"oneOf":[{"type":"string","title":"System Prompt","description":"Inline system prompt string. When provided, the agent uses this text verbatim as the system message instead of rendering from `system_prompt_filename`. Mutually exclusive with a non-default `system_prompt_filename`.\n\n**Warning**: This is not recommended unless you know what you are doing (e.g. customising agent behaviour for a completely different task). Setting this will override OpenHands' built-in system instructions that govern default agent behaviour.","uniqueKey":"agent.oneOf.1.system_prompt.oneOf.0","typeLabel":"string"},{"type":"null","title":"System Prompt","description":"Inline system prompt string. When provided, the agent uses this text verbatim as the system message instead of rendering from `system_prompt_filename`. Mutually exclusive with a non-default `system_prompt_filename`.\n\n**Warning**: This is not recommended unless you know what you are doing (e.g. customising agent behaviour for a completely different task). Setting this will override OpenHands' built-in system instructions that govern default agent behaviour.","uniqueKey":"agent.oneOf.1.system_prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.system_prompt","typeLabel":"string | null"},"system_prompt_filename":{"type":"string","title":"System Prompt Filename","description":"System prompt template filename. Can be either:\n- A relative filename (e.g., 'system_prompt.j2') loaded from the agent's prompts directory\n- An absolute path (e.g., '/path/to/custom_prompt.j2')","default":"system_prompt.j2","uniqueKey":"agent.oneOf.1.system_prompt_filename","typeLabel":"string"},"security_policy_filename":{"type":"string","title":"Security Policy Filename","description":"Security policy filename. The default 'security_policy.j2' is a back-compat sentinel (the file was removed) that selects the built-in default policy from the prompt registry -- it is not loaded from disk. Any other value names a custom policy file whose contents are inserted verbatim (NOT rendered as a Jinja template). Can be either:\n- A relative filename (e.g., 'custom_security_policy.md') loaded from the agent's prompts directory\n- An absolute path (e.g., '/path/to/custom_security_policy.md')\n- Empty string to disable security policy","default":"security_policy.j2","uniqueKey":"agent.oneOf.1.security_policy_filename","typeLabel":"string"},"system_prompt_kwargs":{"additionalProperties":true,"type":"object","title":"System Prompt Kwargs","description":"Optional kwargs to pass to the system prompt Jinja2 template.","examples":[{"cli_mode":true}],"uniqueKey":"agent.oneOf.1.system_prompt_kwargs","typeLabel":"System Prompt Kwargs · object"},"condenser":{"oneOf":[{"type":"object","title":"LLMSummarizingCondenser","description":"Optional condenser to use for condensing conversation history.","required":["llm"],"example":{"keep_first":10,"kind":"LLMSummarizingCondenser","llm":{"api_key":"your_api_key_here","base_url":"https://llm-proxy.eval.all-hands.dev","model":"litellm_proxy/openai/gpt-5.5"},"max_size":80},"properties":{"llm":{"properties":{"model":{"type":"string","title":"Model","description":"Model name.","default":"gpt-5.5","openhands_settings":{"depends_on":[],"prominence":"critical"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.model","typeLabel":"string"},"api_key":{"oneOf":[{"type":"string","title":"Api Key","description":"API key.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.api_key.oneOf.0","typeLabel":"string"},{"type":"string","title":"Api Key","description":"API key.","format":"password","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.api_key.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Api Key","description":"API key.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.api_key.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.api_key","typeLabel":"string | string\u003cpassword> | null"},"auth_type":{"type":"string","enum":["api_key","subscription"],"title":"Auth Type","description":"Authentication mode for the LLM.","default":"api_key","openhands_settings":{"depends_on":[],"label":"Authentication","prominence":"critical"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.auth_type","typeLabel":"enum\u003cstring>"},"subscription_vendor":{"oneOf":[{"type":"string","title":"Subscription Vendor","description":"Subscription provider for subscription-backed LLM access.","const":"openai","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.subscription_vendor.oneOf.0","typeLabel":"string"},{"type":"null","title":"Subscription Vendor","description":"Subscription provider for subscription-backed LLM access.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.subscription_vendor.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.subscription_vendor","typeLabel":"string | null"},"base_url":{"oneOf":[{"type":"string","title":"Base Url","description":"Custom base URL.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.base_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Base Url","description":"Custom base URL.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.base_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.base_url","typeLabel":"string | null"},"api_version":{"oneOf":[{"type":"string","title":"Api Version","description":"API version (e.g., Azure).","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.api_version.oneOf.0","typeLabel":"string"},{"type":"null","title":"Api Version","description":"API version (e.g., Azure).","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.api_version.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.api_version","typeLabel":"string | null"},"aws_access_key_id":{"oneOf":[{"type":"string","title":"Aws Access Key Id","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_access_key_id.oneOf.0","typeLabel":"string"},{"type":"string","title":"Aws Access Key Id","format":"password","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_access_key_id.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Aws Access Key Id","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_access_key_id.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_access_key_id","typeLabel":"string | string\u003cpassword> | null"},"aws_secret_access_key":{"oneOf":[{"type":"string","title":"Aws Secret Access Key","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_secret_access_key.oneOf.0","typeLabel":"string"},{"type":"string","title":"Aws Secret Access Key","format":"password","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_secret_access_key.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Aws Secret Access Key","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_secret_access_key.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_secret_access_key","typeLabel":"string | string\u003cpassword> | null"},"aws_session_token":{"oneOf":[{"type":"string","title":"Aws Session Token","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_session_token.oneOf.0","typeLabel":"string"},{"type":"string","title":"Aws Session Token","format":"password","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_session_token.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Aws Session Token","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_session_token.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_session_token","typeLabel":"string | string\u003cpassword> | null"},"aws_region_name":{"oneOf":[{"type":"string","title":"Aws Region Name","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_region_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Region Name","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_region_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_region_name","typeLabel":"string | null"},"aws_profile_name":{"oneOf":[{"type":"string","title":"Aws Profile Name","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_profile_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Profile Name","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_profile_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_profile_name","typeLabel":"string | null"},"aws_role_name":{"oneOf":[{"type":"string","title":"Aws Role Name","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_role_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Role Name","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_role_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_role_name","typeLabel":"string | null"},"aws_session_name":{"oneOf":[{"type":"string","title":"Aws Session Name","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_session_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Session Name","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_session_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_session_name","typeLabel":"string | null"},"aws_bedrock_runtime_endpoint":{"oneOf":[{"type":"string","title":"Aws Bedrock Runtime Endpoint","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_bedrock_runtime_endpoint.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Bedrock Runtime Endpoint","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_bedrock_runtime_endpoint.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.aws_bedrock_runtime_endpoint","typeLabel":"string | null"},"openrouter_site_url":{"type":"string","title":"Openrouter Site Url","default":"https://docs.all-hands.dev/","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.openrouter_site_url","typeLabel":"string"},"openrouter_app_name":{"type":"string","title":"Openrouter App Name","default":"OpenHands","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.openrouter_app_name","typeLabel":"string"},"num_retries":{"type":"integer","minimum":0,"title":"Num Retries","default":5,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.num_retries","typeLabel":"integer"},"retry_multiplier":{"type":"number","minimum":0,"title":"Retry Multiplier","default":8,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.retry_multiplier","typeLabel":"number"},"retry_min_wait":{"type":"integer","minimum":0,"title":"Retry Min Wait","default":8,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.retry_min_wait","typeLabel":"integer"},"retry_max_wait":{"type":"integer","minimum":0,"title":"Retry Max Wait","default":64,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.retry_max_wait","typeLabel":"integer"},"timeout":{"oneOf":[{"type":"integer","title":"Timeout","description":"HTTP timeout in seconds. Default is 300s (5 minutes). Set to None to disable timeout (not recommended for production).","default":300,"minimum":0,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.timeout.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Timeout","description":"HTTP timeout in seconds. Default is 300s (5 minutes). Set to None to disable timeout (not recommended for production).","default":300,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.timeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.timeout","typeLabel":"integer | null"},"max_message_chars":{"type":"integer","minimum":1,"title":"Max Message Chars","description":"Approx max chars in each event/content sent to the LLM.","default":30000,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.max_message_chars","typeLabel":"integer"},"temperature":{"oneOf":[{"type":"number","title":"Temperature","description":"Sampling temperature for response generation. Defaults to None (uses provider default temperature). Set to 0.0 for deterministic outputs, or higher values (0.7-1.0) for more creative responses.","minimum":0,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.temperature.oneOf.0","typeLabel":"number"},{"type":"null","title":"Temperature","description":"Sampling temperature for response generation. Defaults to None (uses provider default temperature). Set to 0.0 for deterministic outputs, or higher values (0.7-1.0) for more creative responses.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.temperature.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.temperature","typeLabel":"number | null"},"top_p":{"oneOf":[{"type":"number","title":"Top P","description":"Nucleus sampling parameter. Defaults to None (uses provider default). Set to a value between 0 and 1 to control diversity of outputs.","maximum":1,"minimum":0,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.top_p.oneOf.0","typeLabel":"number"},{"type":"null","title":"Top P","description":"Nucleus sampling parameter. Defaults to None (uses provider default). Set to a value between 0 and 1 to control diversity of outputs.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.top_p.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.top_p","typeLabel":"number | null"},"top_k":{"oneOf":[{"type":"number","title":"Top K","minimum":0,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.top_k.oneOf.0","typeLabel":"number"},{"type":"null","title":"Top K","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.top_k.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.top_k","typeLabel":"number | null"},"max_input_tokens":{"oneOf":[{"type":"integer","title":"Max Input Tokens","description":"The maximum number of input tokens. Note that this is currently unused, and the value at runtime is actually the total tokens in OpenAI (e.g. 128,000 tokens for GPT-4).","minimum":1,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.max_input_tokens.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Max Input Tokens","description":"The maximum number of input tokens. Note that this is currently unused, and the value at runtime is actually the total tokens in OpenAI (e.g. 128,000 tokens for GPT-4).","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.max_input_tokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.max_input_tokens","typeLabel":"integer | null"},"max_output_tokens":{"oneOf":[{"type":"integer","title":"Max Output Tokens","description":"The maximum number of output tokens. This is sent to the LLM.","minimum":1,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.max_output_tokens.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Max Output Tokens","description":"The maximum number of output tokens. This is sent to the LLM.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.max_output_tokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.max_output_tokens","typeLabel":"integer | null"},"model_canonical_name":{"oneOf":[{"type":"string","title":"Model Canonical Name","description":"Optional canonical model name for feature registry lookups. The OpenHands SDK maintains a model feature registry that maps model names to capabilities (e.g., vision support, prompt caching, responses API support). When using proxied or aliased model identifiers, set this field to the canonical model name (e.g., 'openai/gpt-4o') to ensure correct capability detection. If not provided, the 'model' field will be used for capability lookups.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.model_canonical_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Model Canonical Name","description":"Optional canonical model name for feature registry lookups. The OpenHands SDK maintains a model feature registry that maps model names to capabilities (e.g., vision support, prompt caching, responses API support). When using proxied or aliased model identifiers, set this field to the canonical model name (e.g., 'openai/gpt-4o') to ensure correct capability detection. If not provided, the 'model' field will be used for capability lookups.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.model_canonical_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.model_canonical_name","typeLabel":"string | null"},"api_mode":{"type":"string","enum":["auto","chat","responses"],"title":"Api Mode","description":"LLM API endpoint mode. 'auto' resolves from model metadata and SDK fallbacks; use 'chat' or 'responses' to override endpoint selection for proxy aliases and newly released models.","default":"auto","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.api_mode","typeLabel":"enum\u003cstring>"},"capability_overrides":{"additionalProperties":{"oneOf":[{"type":"boolean","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.capability_overrides.additionalProperties.oneOf.0","typeLabel":"boolean"},{"type":"string","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.capability_overrides.additionalProperties.oneOf.1","typeLabel":"string"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.capability_overrides.additionalProperties","typeLabel":"boolean | string"},"type":"object","title":"Capability Overrides","description":"Explicit model capability overrides. Supported keys include supports_reasoning_effort, thinking_mode (adaptive, manual, none, or unknown), supports_sampling_params, supports_prompt_cache, supports_stop_words, supports_responses_api, supports_vision, and supports_prompt_cache_retention. Overrides take precedence over LiteLLM metadata and SDK fallbacks.","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.capability_overrides","typeLabel":"Capability Overrides · object"},"extra_headers":{"oneOf":[{"type":"object","title":"Extra Headers","description":"Optional HTTP headers to forward to LiteLLM requests.","additionalProperties":{"type":"string","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.extra_headers.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.extra_headers.oneOf.0","typeLabel":"Extra Headers · object"},{"type":"null","title":"Extra Headers","description":"Optional HTTP headers to forward to LiteLLM requests.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.extra_headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.extra_headers","typeLabel":"Extra Headers · object | null"},"input_cost_per_token":{"oneOf":[{"type":"number","title":"Input Cost Per Token","description":"The cost per input token. This will available in logs for user.","minimum":0,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.input_cost_per_token.oneOf.0","typeLabel":"number"},{"type":"null","title":"Input Cost Per Token","description":"The cost per input token. This will available in logs for user.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.input_cost_per_token.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.input_cost_per_token","typeLabel":"number | null"},"output_cost_per_token":{"oneOf":[{"type":"number","title":"Output Cost Per Token","description":"The cost per output token. This will available in logs for user.","minimum":0,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.output_cost_per_token.oneOf.0","typeLabel":"number"},{"type":"null","title":"Output Cost Per Token","description":"The cost per output token. This will available in logs for user.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.output_cost_per_token.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.output_cost_per_token","typeLabel":"number | null"},"ollama_base_url":{"oneOf":[{"type":"string","title":"Ollama Base Url","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.ollama_base_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Ollama Base Url","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.ollama_base_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.ollama_base_url","typeLabel":"string | null"},"stream":{"type":"boolean","title":"Stream","description":"Enable streaming responses from the LLM. When enabled, the provided `on_token` callback in .completions and .responses will be invoked for each chunk of tokens.","default":false,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.stream","typeLabel":"boolean"},"drop_params":{"type":"boolean","title":"Drop Params","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.drop_params","typeLabel":"boolean"},"modify_params":{"type":"boolean","title":"Modify Params","description":"Modify params allows litellm to do transformations like adding a default message, when a message is empty.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.modify_params","typeLabel":"boolean"},"disable_vision":{"oneOf":[{"type":"boolean","title":"Disable Vision","description":"If model is vision capable, this option allows to disable image processing (useful for cost reduction).","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.disable_vision.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Disable Vision","description":"If model is vision capable, this option allows to disable image processing (useful for cost reduction).","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.disable_vision.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.disable_vision","typeLabel":"boolean | null"},"disable_stop_word":{"oneOf":[{"type":"boolean","title":"Disable Stop Word","description":"Disable using of stop word.","default":false,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.disable_stop_word.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Disable Stop Word","description":"Disable using of stop word.","default":false,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.disable_stop_word.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.disable_stop_word","typeLabel":"boolean | null"},"caching_prompt":{"type":"boolean","title":"Caching Prompt","description":"Enable caching of prompts.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.caching_prompt","typeLabel":"boolean"},"log_completions":{"type":"boolean","title":"Log Completions","description":"Enable logging of completions.","default":false,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.log_completions","typeLabel":"boolean"},"log_completions_folder":{"type":"string","title":"Log Completions Folder","description":"The folder to log LLM completions to. Required if log_completions is True.","default":"logs/completions","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.log_completions_folder","typeLabel":"string"},"custom_tokenizer":{"oneOf":[{"type":"string","title":"Custom Tokenizer","description":"A custom tokenizer to use for token counting.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.custom_tokenizer.oneOf.0","typeLabel":"string"},{"type":"null","title":"Custom Tokenizer","description":"A custom tokenizer to use for token counting.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.custom_tokenizer.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.custom_tokenizer","typeLabel":"string | null"},"native_tool_calling":{"type":"boolean","title":"Native Tool Calling","description":"Whether to use native tool calling.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.native_tool_calling","typeLabel":"boolean"},"force_string_serializer":{"oneOf":[{"type":"boolean","title":"Force String Serializer","description":"Force using string content serializer when sending to LLM API. If None (default), auto-detect based on model. Useful for providers that do not support list content, like HuggingFace and Groq.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.force_string_serializer.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Force String Serializer","description":"Force using string content serializer when sending to LLM API. If None (default), auto-detect based on model. Useful for providers that do not support list content, like HuggingFace and Groq.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.force_string_serializer.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.force_string_serializer","typeLabel":"boolean | null"},"inline_image_urls":{"oneOf":[{"type":"boolean","title":"Inline Image Urls","description":"If True, fetch any http(s) image URL in outgoing messages and inline it as a base64 ``data:`` URL before sending. If None (default), auto-detect based on model (some APIs such as Moonshot's public Kimi endpoint reject URL-formatted images and require base64). Set this explicitly when the model is reached through a proxy alias that hides the underlying provider (e.g. ``litellm_proxy/\u003ccustom-alias>``). Note: inlining only runs when ``vision_is_active()`` is True, so the alias must still be recognised as vision-capable by the SDK feature registry or proxy model metadata.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.inline_image_urls.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Inline Image Urls","description":"If True, fetch any http(s) image URL in outgoing messages and inline it as a base64 ``data:`` URL before sending. If None (default), auto-detect based on model (some APIs such as Moonshot's public Kimi endpoint reject URL-formatted images and require base64). Set this explicitly when the model is reached through a proxy alias that hides the underlying provider (e.g. ``litellm_proxy/\u003ccustom-alias>``). Note: inlining only runs when ``vision_is_active()`` is True, so the alias must still be recognised as vision-capable by the SDK feature registry or proxy model metadata.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.inline_image_urls.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.inline_image_urls","typeLabel":"boolean | null"},"reasoning_effort":{"oneOf":[{"type":"string","title":"Reasoning Effort","description":"Provider-neutral reasoning effort. Common values include 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', and 'max'. The SDK accepts future provider values and lets LiteLLM translate them.","default":"high","enum":["low","medium","high","xhigh","none"],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.reasoning_effort.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Reasoning Effort","description":"Provider-neutral reasoning effort. Common values include 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', and 'max'. The SDK accepts future provider values and lets LiteLLM translate them.","default":"high","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.reasoning_effort.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.reasoning_effort","typeLabel":"enum\u003cstring> | null"},"reasoning_summary":{"oneOf":[{"type":"string","title":"Reasoning Summary","description":"The level of detail for reasoning summaries. This is a string that can be one of 'auto', 'concise', or 'detailed'. Requires verified OpenAI organization. Only sent when explicitly set.","enum":["auto","concise","detailed"],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.reasoning_summary.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Reasoning Summary","description":"The level of detail for reasoning summaries. This is a string that can be one of 'auto', 'concise', or 'detailed'. Requires verified OpenAI organization. Only sent when explicitly set.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.reasoning_summary.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.reasoning_summary","typeLabel":"enum\u003cstring> | null"},"enable_encrypted_reasoning":{"type":"boolean","title":"Enable Encrypted Reasoning","description":"If True, ask for ['reasoning.encrypted_content'] in Responses API include.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.enable_encrypted_reasoning","typeLabel":"boolean"},"prompt_cache_retention":{"oneOf":[{"type":"string","title":"Prompt Cache Retention","description":"Retention policy for prompt cache. Only sent for supported models (GPT-5+ and GPT-4.1, excluding Azure deployments); explicitly stripped for all others.","default":"24h","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.prompt_cache_retention.oneOf.0","typeLabel":"string"},{"type":"null","title":"Prompt Cache Retention","description":"Retention policy for prompt cache. Only sent for supported models (GPT-5+ and GPT-4.1, excluding Azure deployments); explicitly stripped for all others.","default":"24h","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.prompt_cache_retention.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.prompt_cache_retention","typeLabel":"string | null"},"extended_thinking_budget":{"oneOf":[{"type":"integer","title":"Extended Thinking Budget","description":"Legacy token budget for models confirmed to use manual Anthropic extended thinking. Ignored for adaptive-thinking models. Prefer reasoning_effort for new integrations.","default":200000,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.extended_thinking_budget.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Extended Thinking Budget","description":"Legacy token budget for models confirmed to use manual Anthropic extended thinking. Ignored for adaptive-thinking models. Prefer reasoning_effort for new integrations.","default":200000,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.extended_thinking_budget.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.extended_thinking_budget","typeLabel":"integer | null"},"seed":{"oneOf":[{"type":"integer","title":"Seed","description":"The seed to use for random number generation.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.seed.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Seed","description":"The seed to use for random number generation.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.seed.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.seed","typeLabel":"integer | null"},"usage_id":{"type":"string","title":"Usage Id","description":"Unique usage identifier for the LLM. Used for registry lookups, telemetry, and spend tracking.","default":"default","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.usage_id","typeLabel":"string"},"litellm_extra_body":{"additionalProperties":true,"type":"object","title":"Litellm Extra Body","description":"Additional key-value pairs to pass to litellm's extra_body parameter. This is useful for custom inference endpoints that need additional parameters for configuration, routing, or advanced features. NOTE: Not all LLM providers support extra_body parameters. Some providers (e.g., OpenAI) may reject requests with unrecognized options. This is commonly supported by: - LiteLLM proxy servers (routing metadata, tracing) - vLLM endpoints (return_token_ids, etc.) - Custom inference clusters Examples: - Proxy routing: {'trace_version': '1.0.0', 'tags': ['agent:my-agent']} - vLLM features: {'return_token_ids': True}","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.litellm_extra_body","typeLabel":"Litellm Extra Body · object"},"fallback_strategy":{"oneOf":[{"type":"object","title":"FallbackStrategy","description":"Optional fallback strategy for trying alternate LLMs on transient failure. Construct with FallbackStrategy(fallback_llms=[...]).Excluded from serialization; must be reconfigured after load.","required":["fallback_llms"],"properties":{"fallback_llms":{"items":{"type":"string","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.fallback_strategy.oneOf.0.fallback_llms.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Fallback Llms","description":"Ordered list of LLM profile names to try on transient failure.","isRequired":true,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.fallback_strategy.oneOf.0.fallback_llms","typeLabel":"string[]"},"profile_store_dir":{"oneOf":[{"type":"string","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.fallback_strategy.oneOf.0.profile_store_dir.oneOf.0","typeLabel":"string"},{"type":"string","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`.","format":"path","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.fallback_strategy.oneOf.0.profile_store_dir.oneOf.1","typeLabel":"string\u003cpath>"},{"type":"null","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.fallback_strategy.oneOf.0.profile_store_dir.oneOf.2","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.fallback_strategy.oneOf.0.profile_store_dir","typeLabel":"string | string\u003cpath> | null"}},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.fallback_strategy.oneOf.0","typeLabel":"FallbackStrategy · object"},{"type":"null","description":"Optional fallback strategy for trying alternate LLMs on transient failure. Construct with FallbackStrategy(fallback_llms=[...]).Excluded from serialization; must be reconfigured after load.","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.fallback_strategy.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm.fallback_strategy","typeLabel":"FallbackStrategy · object | null"}},"type":"object","title":"LLM","description":"Language model interface for OpenHands agents.\n\nThe LLM class provides a unified interface for interacting with various\nlanguage models through the litellm library. It handles model configuration,\nAPI authentication, retry logic, and tool calling capabilities.\n\nAttributes:\n model: Model name (e.g., \"gpt-5.5\").\n api_key: API key for authentication.\n base_url: Custom API base URL.\n num_retries: Number of retry attempts for failed requests.\n timeout: Request timeout in seconds.\n\nExample:\n ```python\n from openhands.sdk import LLM\n from pydantic import SecretStr\n\n llm = LLM(\n model=\"gpt-5.5\",\n api_key=SecretStr(\"your-api-key\"),\n usage_id=\"my-agent\"\n )\n # Use with agent or conversation\n ```","isRequired":true,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.llm","typeLabel":"LLM · object"},"max_size":{"type":"integer","exclusiveMinimum":0,"title":"Max Size","default":240,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.max_size","typeLabel":"integer"},"max_tokens":{"oneOf":[{"type":"integer","title":"Max Tokens","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.max_tokens.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Max Tokens","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.max_tokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.max_tokens","typeLabel":"integer | null"},"keep_first":{"type":"integer","minimum":0,"title":"Keep First","default":2,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.keep_first","typeLabel":"integer"},"minimum_progress":{"type":"number","exclusiveMaximum":1,"exclusiveMinimum":0,"title":"Minimum Progress","default":0.1,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.minimum_progress","typeLabel":"number"},"hard_context_reset_max_retries":{"type":"integer","exclusiveMinimum":0,"title":"Hard Context Reset Max Retries","default":5,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.hard_context_reset_max_retries","typeLabel":"integer"},"hard_context_reset_context_scaling":{"type":"number","exclusiveMaximum":1,"exclusiveMinimum":0,"title":"Hard Context Reset Context Scaling","default":0.8,"uniqueKey":"agent.oneOf.1.condenser.oneOf.0.hard_context_reset_context_scaling","typeLabel":"number"},"kind":{"type":"string","const":"LLMSummarizingCondenser","title":"Kind","uniqueKey":"agent.oneOf.1.condenser.oneOf.0.kind","typeLabel":"string"}},"uniqueKey":"agent.oneOf.1.condenser.oneOf.0","typeLabel":"LLMSummarizingCondenser · object"},{"type":"object","title":"NoOpCondenser","description":"Optional condenser to use for condensing conversation history.","example":{"kind":"LLMSummarizingCondenser"},"properties":{"kind":{"type":"string","const":"NoOpCondenser","title":"Kind","uniqueKey":"agent.oneOf.1.condenser.oneOf.1.kind","typeLabel":"string"}},"uniqueKey":"agent.oneOf.1.condenser.oneOf.1","typeLabel":"NoOpCondenser · object"},{"type":"object","title":"PipelineCondenser","description":"Optional condenser to use for condensing conversation history.","required":["condensers"],"example":{"kind":"LLMSummarizingCondenser"},"properties":{"condensers":{"items":{"$circularRef":"47c52630-f29b-40ea-b024-8b206320af2b"},"type":"array","title":"Condensers","isRequired":true,"uniqueKey":"agent.oneOf.1.condenser.oneOf.2.condensers","typeLabel":"Condensers · array"},"kind":{"type":"string","const":"PipelineCondenser","title":"Kind","uniqueKey":"agent.oneOf.1.condenser.oneOf.2.kind","typeLabel":"string"}},"uniqueKey":"agent.oneOf.1.condenser.oneOf.2","typeLabel":"PipelineCondenser · object"},{"type":"null","description":"Optional condenser to use for condensing conversation history.","example":{"keep_first":10,"kind":"LLMSummarizingCondenser","llm":{"api_key":"your_api_key_here","base_url":"https://llm-proxy.eval.all-hands.dev","model":"litellm_proxy/openai/gpt-5.5"},"max_size":80},"uniqueKey":"agent.oneOf.1.condenser.oneOf.3","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.condenser","typeLabel":"LLMSummarizingCondenser · object | NoOpCondenser · object | PipelineCondenser · object | null"},"critic":{"oneOf":[{"type":"object","title":"AgentFinishedCritic","description":"EXPERIMENTAL: Optional critic to evaluate agent actions and messages in real-time. API and behavior may change without notice. May impact performance, especially in 'all_actions' mode.","example":{"kind":"AgentFinishedCritic"},"properties":{"mode":{"type":"string","enum":["finish_and_message","all_actions"],"title":"Mode","description":"When to run critic evaluation:\n- 'finish_and_message': Evaluate on FinishAction and agent MessageEvent (default, minimal performance impact)\n- 'all_actions': Evaluate after every agent action (WARNING: significantly slower due to API calls on each action)","default":"finish_and_message","uniqueKey":"agent.oneOf.1.critic.oneOf.0.mode","typeLabel":"enum\u003cstring>"},"iterative_refinement":{"oneOf":[{"type":"object","title":"IterativeRefinementConfig","description":"Optional configuration for iterative refinement. When set, Conversation.run() will automatically retry the task if the critic score is below the success_threshold, up to max_iterations.","properties":{"success_threshold":{"type":"number","maximum":1,"minimum":0,"title":"Success Threshold","description":"Score threshold (0-1) to consider task successful.","default":0.6,"uniqueKey":"agent.oneOf.1.critic.oneOf.0.iterative_refinement.oneOf.0.success_threshold","typeLabel":"number"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Maximum number of iterations before giving up.","default":3,"uniqueKey":"agent.oneOf.1.critic.oneOf.0.iterative_refinement.oneOf.0.max_iterations","typeLabel":"integer"}},"uniqueKey":"agent.oneOf.1.critic.oneOf.0.iterative_refinement.oneOf.0","typeLabel":"IterativeRefinementConfig · object"},{"type":"null","description":"Optional configuration for iterative refinement. When set, Conversation.run() will automatically retry the task if the critic score is below the success_threshold, up to max_iterations.","uniqueKey":"agent.oneOf.1.critic.oneOf.0.iterative_refinement.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.critic.oneOf.0.iterative_refinement","typeLabel":"IterativeRefinementConfig · object | null"},"kind":{"type":"string","const":"AgentFinishedCritic","title":"Kind","uniqueKey":"agent.oneOf.1.critic.oneOf.0.kind","typeLabel":"string"}},"uniqueKey":"agent.oneOf.1.critic.oneOf.0","typeLabel":"AgentFinishedCritic · object"},{"type":"object","title":"APIBasedCritic","description":"EXPERIMENTAL: Optional critic to evaluate agent actions and messages in real-time. API and behavior may change without notice. May impact performance, especially in 'all_actions' mode.","required":["api_key"],"example":{"kind":"AgentFinishedCritic"},"properties":{"api_key":{"oneOf":[{"type":"string","title":"Api Key","description":"API key for authenticating with the vLLM service","isRequired":true,"uniqueKey":"agent.oneOf.1.critic.oneOf.1.api_key.oneOf.0","typeLabel":"string"},{"type":"string","title":"Api Key","description":"API key for authenticating with the vLLM service","format":"password","isRequired":true,"uniqueKey":"agent.oneOf.1.critic.oneOf.1.api_key.oneOf.1","typeLabel":"string\u003cpassword>"}],"isRequired":true,"uniqueKey":"agent.oneOf.1.critic.oneOf.1.api_key","typeLabel":"string | string\u003cpassword>"},"server_url":{"type":"string","title":"Server Url","description":"Base URL of the vLLM classification service","default":"https://llm-proxy.app.all-hands.dev/vllm","uniqueKey":"agent.oneOf.1.critic.oneOf.1.server_url","typeLabel":"string"},"model_name":{"type":"string","title":"Model Name","description":"Name of the model to use","default":"critic","uniqueKey":"agent.oneOf.1.critic.oneOf.1.model_name","typeLabel":"string"},"tokenizer_name":{"type":"string","title":"Tokenizer Name","description":"HuggingFace tokenizer name for loading chat template","default":"Qwen/Qwen3-4B-Instruct-2507","uniqueKey":"agent.oneOf.1.critic.oneOf.1.tokenizer_name","typeLabel":"string"},"pass_tools_definitions":{"type":"boolean","title":"Pass Tools Definitions","description":"Whether to pass tool definitions to the model","default":true,"uniqueKey":"agent.oneOf.1.critic.oneOf.1.pass_tools_definitions","typeLabel":"boolean"},"timeout_seconds":{"type":"number","title":"Timeout Seconds","description":"Timeout for requests to the model","default":300,"uniqueKey":"agent.oneOf.1.critic.oneOf.1.timeout_seconds","typeLabel":"number"},"has_success_label":{"type":"boolean","title":"Has Success Label","description":"Whether the model predicts success label at index 0","default":true,"uniqueKey":"agent.oneOf.1.critic.oneOf.1.has_success_label","typeLabel":"boolean"},"sentiment_labels":{"items":{"type":"string","uniqueKey":"agent.oneOf.1.critic.oneOf.1.sentiment_labels.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Sentiment Labels","default":["sentiment_positive","sentiment_neutral","sentiment_negative"],"uniqueKey":"agent.oneOf.1.critic.oneOf.1.sentiment_labels","typeLabel":"string[]"},"agent_issue_labels":{"items":{"type":"string","uniqueKey":"agent.oneOf.1.critic.oneOf.1.agent_issue_labels.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Agent Issue Labels","default":["misunderstood_intention","did_not_follow_instruction","insufficient_analysis","insufficient_clarification","improper_tool_use_or_setup","loop_behavior","insufficient_testing","insufficient_debugging","incomplete_implementation","file_management_errors","scope_creep","risky_actions_or_permission","other_agent_issue"],"uniqueKey":"agent.oneOf.1.critic.oneOf.1.agent_issue_labels","typeLabel":"string[]"},"infra_labels":{"items":{"type":"string","uniqueKey":"agent.oneOf.1.critic.oneOf.1.infra_labels.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Infra Labels","default":["infrastructure_external_issue","infrastructure_agent_caused_issue"],"uniqueKey":"agent.oneOf.1.critic.oneOf.1.infra_labels","typeLabel":"string[]"},"user_followup_labels":{"items":{"type":"string","uniqueKey":"agent.oneOf.1.critic.oneOf.1.user_followup_labels.items.[INDEX]","typeLabel":"string"},"type":"array","title":"User Followup Labels","default":["clarification_or_restatement","correction","direction_change","vcs_update_requests","progress_or_scope_concern","frustration_or_complaint","removal_or_reversion_request","other_user_issue"],"uniqueKey":"agent.oneOf.1.critic.oneOf.1.user_followup_labels","typeLabel":"string[]"},"sentiment_map":{"additionalProperties":{"type":"string","uniqueKey":"agent.oneOf.1.critic.oneOf.1.sentiment_map.additionalProperties","typeLabel":"string"},"type":"object","title":"Sentiment Map","default":{"Positive":"sentiment_positive","Neutral":"sentiment_neutral","Negative":"sentiment_negative"},"uniqueKey":"agent.oneOf.1.critic.oneOf.1.sentiment_map","typeLabel":"Sentiment Map · object"},"mode":{"type":"string","enum":["finish_and_message","all_actions"],"title":"Mode","description":"When to run critic evaluation:\n- 'finish_and_message': Evaluate on FinishAction and agent MessageEvent (default, minimal performance impact)\n- 'all_actions': Evaluate after every agent action (WARNING: significantly slower due to API calls on each action)","default":"finish_and_message","uniqueKey":"agent.oneOf.1.critic.oneOf.1.mode","typeLabel":"enum\u003cstring>"},"iterative_refinement":{"oneOf":[{"type":"object","title":"IterativeRefinementConfig","description":"Optional configuration for iterative refinement. When set, Conversation.run() will automatically retry the task if the critic score is below the success_threshold, up to max_iterations.","properties":{"success_threshold":{"type":"number","maximum":1,"minimum":0,"title":"Success Threshold","description":"Score threshold (0-1) to consider task successful.","default":0.6,"uniqueKey":"agent.oneOf.1.critic.oneOf.1.iterative_refinement.oneOf.0.success_threshold","typeLabel":"number"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Maximum number of iterations before giving up.","default":3,"uniqueKey":"agent.oneOf.1.critic.oneOf.1.iterative_refinement.oneOf.0.max_iterations","typeLabel":"integer"}},"uniqueKey":"agent.oneOf.1.critic.oneOf.1.iterative_refinement.oneOf.0","typeLabel":"IterativeRefinementConfig · object"},{"type":"null","description":"Optional configuration for iterative refinement. When set, Conversation.run() will automatically retry the task if the critic score is below the success_threshold, up to max_iterations.","uniqueKey":"agent.oneOf.1.critic.oneOf.1.iterative_refinement.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.critic.oneOf.1.iterative_refinement","typeLabel":"IterativeRefinementConfig · object | null"},"issue_threshold":{"type":"number","maximum":1,"minimum":0,"title":"Issue Threshold","description":"APIBasedCritic-specific probability threshold for agent issue labels that should trigger iterative refinement.","default":0.75,"uniqueKey":"agent.oneOf.1.critic.oneOf.1.issue_threshold","typeLabel":"number"},"kind":{"type":"string","const":"APIBasedCritic","title":"Kind","uniqueKey":"agent.oneOf.1.critic.oneOf.1.kind","typeLabel":"string"}},"uniqueKey":"agent.oneOf.1.critic.oneOf.1","typeLabel":"APIBasedCritic · object"},{"type":"object","title":"EmptyPatchCritic","description":"EXPERIMENTAL: Optional critic to evaluate agent actions and messages in real-time. API and behavior may change without notice. May impact performance, especially in 'all_actions' mode.","example":{"kind":"AgentFinishedCritic"},"properties":{"mode":{"type":"string","enum":["finish_and_message","all_actions"],"title":"Mode","description":"When to run critic evaluation:\n- 'finish_and_message': Evaluate on FinishAction and agent MessageEvent (default, minimal performance impact)\n- 'all_actions': Evaluate after every agent action (WARNING: significantly slower due to API calls on each action)","default":"finish_and_message","uniqueKey":"agent.oneOf.1.critic.oneOf.2.mode","typeLabel":"enum\u003cstring>"},"iterative_refinement":{"oneOf":[{"type":"object","title":"IterativeRefinementConfig","description":"Optional configuration for iterative refinement. When set, Conversation.run() will automatically retry the task if the critic score is below the success_threshold, up to max_iterations.","properties":{"success_threshold":{"type":"number","maximum":1,"minimum":0,"title":"Success Threshold","description":"Score threshold (0-1) to consider task successful.","default":0.6,"uniqueKey":"agent.oneOf.1.critic.oneOf.2.iterative_refinement.oneOf.0.success_threshold","typeLabel":"number"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Maximum number of iterations before giving up.","default":3,"uniqueKey":"agent.oneOf.1.critic.oneOf.2.iterative_refinement.oneOf.0.max_iterations","typeLabel":"integer"}},"uniqueKey":"agent.oneOf.1.critic.oneOf.2.iterative_refinement.oneOf.0","typeLabel":"IterativeRefinementConfig · object"},{"type":"null","description":"Optional configuration for iterative refinement. When set, Conversation.run() will automatically retry the task if the critic score is below the success_threshold, up to max_iterations.","uniqueKey":"agent.oneOf.1.critic.oneOf.2.iterative_refinement.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.critic.oneOf.2.iterative_refinement","typeLabel":"IterativeRefinementConfig · object | null"},"kind":{"type":"string","const":"EmptyPatchCritic","title":"Kind","uniqueKey":"agent.oneOf.1.critic.oneOf.2.kind","typeLabel":"string"}},"uniqueKey":"agent.oneOf.1.critic.oneOf.2","typeLabel":"EmptyPatchCritic · object"},{"type":"object","title":"PassCritic","description":"EXPERIMENTAL: Optional critic to evaluate agent actions and messages in real-time. API and behavior may change without notice. May impact performance, especially in 'all_actions' mode.","example":{"kind":"AgentFinishedCritic"},"properties":{"mode":{"type":"string","enum":["finish_and_message","all_actions"],"title":"Mode","description":"When to run critic evaluation:\n- 'finish_and_message': Evaluate on FinishAction and agent MessageEvent (default, minimal performance impact)\n- 'all_actions': Evaluate after every agent action (WARNING: significantly slower due to API calls on each action)","default":"finish_and_message","uniqueKey":"agent.oneOf.1.critic.oneOf.3.mode","typeLabel":"enum\u003cstring>"},"iterative_refinement":{"oneOf":[{"type":"object","title":"IterativeRefinementConfig","description":"Optional configuration for iterative refinement. When set, Conversation.run() will automatically retry the task if the critic score is below the success_threshold, up to max_iterations.","properties":{"success_threshold":{"type":"number","maximum":1,"minimum":0,"title":"Success Threshold","description":"Score threshold (0-1) to consider task successful.","default":0.6,"uniqueKey":"agent.oneOf.1.critic.oneOf.3.iterative_refinement.oneOf.0.success_threshold","typeLabel":"number"},"max_iterations":{"type":"integer","minimum":1,"title":"Max Iterations","description":"Maximum number of iterations before giving up.","default":3,"uniqueKey":"agent.oneOf.1.critic.oneOf.3.iterative_refinement.oneOf.0.max_iterations","typeLabel":"integer"}},"uniqueKey":"agent.oneOf.1.critic.oneOf.3.iterative_refinement.oneOf.0","typeLabel":"IterativeRefinementConfig · object"},{"type":"null","description":"Optional configuration for iterative refinement. When set, Conversation.run() will automatically retry the task if the critic score is below the success_threshold, up to max_iterations.","uniqueKey":"agent.oneOf.1.critic.oneOf.3.iterative_refinement.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.critic.oneOf.3.iterative_refinement","typeLabel":"IterativeRefinementConfig · object | null"},"kind":{"type":"string","const":"PassCritic","title":"Kind","uniqueKey":"agent.oneOf.1.critic.oneOf.3.kind","typeLabel":"string"}},"uniqueKey":"agent.oneOf.1.critic.oneOf.3","typeLabel":"PassCritic · object"},{"type":"null","description":"EXPERIMENTAL: Optional critic to evaluate agent actions and messages in real-time. API and behavior may change without notice. May impact performance, especially in 'all_actions' mode.","example":{"kind":"AgentFinishedCritic"},"uniqueKey":"agent.oneOf.1.critic.oneOf.4","typeLabel":"null"}],"uniqueKey":"agent.oneOf.1.critic","typeLabel":"AgentFinishedCritic · object | APIBasedCritic · object | EmptyPatchCritic · object | PassCritic · object | null"},"tool_concurrency_limit":{"type":"integer","minimum":1,"title":"Tool Concurrency Limit","description":"Maximum number of tool calls to execute concurrently within a single agent step. Default is 1 (sequential). Values > 1 enable parallel execution; concurrent tools share the conversation object, filesystem, and working directory, so mutations to shared state may race.","default":1,"uniqueKey":"agent.oneOf.1.tool_concurrency_limit","typeLabel":"integer"},"kind":{"type":"string","const":"Agent","title":"Kind","uniqueKey":"agent.oneOf.1.kind","typeLabel":"string"}},"isRequired":true,"uniqueKey":"agent.oneOf.1","typeLabel":"Agent · object"}],"isRequired":true,"uniqueKey":"agent","typeLabel":"ACPAgent · object | Agent · object"},"persistence_dir":{"oneOf":[{"type":"string","title":"Persistence Dir","description":"Directory for persisting conversation state and events. If None, conversation will not be persisted.","default":"workspace/conversations","uniqueKey":"persistence_dir.oneOf.0","typeLabel":"string"},{"type":"null","title":"Persistence Dir","description":"Directory for persisting conversation state and events. If None, conversation will not be persisted.","default":"workspace/conversations","uniqueKey":"persistence_dir.oneOf.1","typeLabel":"null"}],"uniqueKey":"persistence_dir","typeLabel":"string | null"},"max_iterations":{"type":"integer","exclusiveMinimum":0,"title":"Max Iterations","description":"Maximum number of iterations the agent can perform in a single run.","default":500,"uniqueKey":"max_iterations","typeLabel":"integer"},"stuck_detection":{"type":"boolean","title":"Stuck Detection","description":"Whether to enable stuck detection for the agent.","default":true,"uniqueKey":"stuck_detection","typeLabel":"boolean"},"execution_status":{"type":"string","enum":["idle","running","paused","waiting_for_confirmation","finished","error","stuck","deleting"],"title":"ConversationExecutionStatus","description":"Enum representing the current execution state of the conversation.","default":"idle","uniqueKey":"execution_status","typeLabel":"enum\u003cstring>"},"confirmation_policy":{"oneOf":[{"type":"object","title":"AlwaysConfirm","default":{"kind":"NeverConfirm"},"properties":{"kind":{"type":"string","const":"AlwaysConfirm","title":"Kind","uniqueKey":"confirmation_policy.oneOf.0.kind","typeLabel":"string"}},"uniqueKey":"confirmation_policy.oneOf.0","typeLabel":"AlwaysConfirm · object"},{"type":"object","title":"ConfirmRisky","default":{"kind":"NeverConfirm"},"properties":{"threshold":{"type":"string","enum":["UNKNOWN","LOW","MEDIUM","HIGH"],"title":"SecurityRisk","description":"Security risk levels for actions.\n\nBased on OpenHands security risk levels but adapted for agent-sdk.\nInteger values allow for easy comparison and ordering.","default":"HIGH","uniqueKey":"confirmation_policy.oneOf.1.threshold","typeLabel":"enum\u003cstring>"},"confirm_unknown":{"type":"boolean","title":"Confirm Unknown","default":true,"uniqueKey":"confirmation_policy.oneOf.1.confirm_unknown","typeLabel":"boolean"},"kind":{"type":"string","const":"ConfirmRisky","title":"Kind","uniqueKey":"confirmation_policy.oneOf.1.kind","typeLabel":"string"}},"uniqueKey":"confirmation_policy.oneOf.1","typeLabel":"ConfirmRisky · object"},{"type":"object","title":"NeverConfirm","default":{"kind":"NeverConfirm"},"properties":{"kind":{"type":"string","const":"NeverConfirm","title":"Kind","uniqueKey":"confirmation_policy.oneOf.2.kind","typeLabel":"string"}},"uniqueKey":"confirmation_policy.oneOf.2","typeLabel":"NeverConfirm · object"}],"uniqueKey":"confirmation_policy","typeLabel":"AlwaysConfirm · object | ConfirmRisky · object | NeverConfirm · object"},"security_analyzer":{"oneOf":[{"type":"object","title":"PatternSecurityAnalyzer","description":"Optional security analyzer to evaluate action risks.","properties":{"high_patterns":{"items":{"type":"object","_tupleOriginal":true,"properties":{"[0]":{"type":"string","uniqueKey":"security_analyzer.oneOf.0.high_patterns.items.[INDEX].[0]","typeLabel":"string"},"[1]":{"type":"string","uniqueKey":"security_analyzer.oneOf.0.high_patterns.items.[INDEX].[1]","typeLabel":"string"},"[2]":{"type":"string","uniqueKey":"security_analyzer.oneOf.0.high_patterns.items.[INDEX].[2]","typeLabel":"string"}},"uniqueKey":"security_analyzer.oneOf.0.high_patterns.items.[INDEX]","typeLabel":"tuple"},"type":"array","title":"High Patterns","description":"HIGH patterns scanned against executable fields only","uniqueKey":"security_analyzer.oneOf.0.high_patterns","typeLabel":"tuple[]"},"medium_patterns":{"items":{"type":"object","_tupleOriginal":true,"properties":{"[0]":{"type":"string","uniqueKey":"security_analyzer.oneOf.0.medium_patterns.items.[INDEX].[0]","typeLabel":"string"},"[1]":{"type":"string","uniqueKey":"security_analyzer.oneOf.0.medium_patterns.items.[INDEX].[1]","typeLabel":"string"},"[2]":{"type":"string","uniqueKey":"security_analyzer.oneOf.0.medium_patterns.items.[INDEX].[2]","typeLabel":"string"}},"uniqueKey":"security_analyzer.oneOf.0.medium_patterns.items.[INDEX]","typeLabel":"tuple"},"type":"array","title":"Medium Patterns","description":"MEDIUM patterns scanned against executable fields only","uniqueKey":"security_analyzer.oneOf.0.medium_patterns","typeLabel":"tuple[]"},"injection_high_patterns":{"items":{"type":"object","_tupleOriginal":true,"properties":{"[0]":{"type":"string","uniqueKey":"security_analyzer.oneOf.0.injection_high_patterns.items.[INDEX].[0]","typeLabel":"string"},"[1]":{"type":"string","uniqueKey":"security_analyzer.oneOf.0.injection_high_patterns.items.[INDEX].[1]","typeLabel":"string"},"[2]":{"type":"string","uniqueKey":"security_analyzer.oneOf.0.injection_high_patterns.items.[INDEX].[2]","typeLabel":"string"}},"uniqueKey":"security_analyzer.oneOf.0.injection_high_patterns.items.[INDEX]","typeLabel":"tuple"},"type":"array","title":"Injection High Patterns","description":"HIGH patterns scanned against all fields","uniqueKey":"security_analyzer.oneOf.0.injection_high_patterns","typeLabel":"tuple[]"},"injection_medium_patterns":{"items":{"type":"object","_tupleOriginal":true,"properties":{"[0]":{"type":"string","uniqueKey":"security_analyzer.oneOf.0.injection_medium_patterns.items.[INDEX].[0]","typeLabel":"string"},"[1]":{"type":"string","uniqueKey":"security_analyzer.oneOf.0.injection_medium_patterns.items.[INDEX].[1]","typeLabel":"string"},"[2]":{"type":"string","uniqueKey":"security_analyzer.oneOf.0.injection_medium_patterns.items.[INDEX].[2]","typeLabel":"string"}},"uniqueKey":"security_analyzer.oneOf.0.injection_medium_patterns.items.[INDEX]","typeLabel":"tuple"},"type":"array","title":"Injection Medium Patterns","description":"MEDIUM patterns scanned against all fields","uniqueKey":"security_analyzer.oneOf.0.injection_medium_patterns","typeLabel":"tuple[]"},"kind":{"type":"string","const":"PatternSecurityAnalyzer","title":"Kind","uniqueKey":"security_analyzer.oneOf.0.kind","typeLabel":"string"}},"uniqueKey":"security_analyzer.oneOf.0","typeLabel":"PatternSecurityAnalyzer · object"},{"type":"object","title":"PolicyRailSecurityAnalyzer","description":"Optional security analyzer to evaluate action risks.","properties":{"kind":{"type":"string","const":"PolicyRailSecurityAnalyzer","title":"Kind","uniqueKey":"security_analyzer.oneOf.1.kind","typeLabel":"string"}},"uniqueKey":"security_analyzer.oneOf.1","typeLabel":"PolicyRailSecurityAnalyzer · object"},{"type":"object","title":"EnsembleSecurityAnalyzer","description":"Optional security analyzer to evaluate action risks.","required":["analyzers"],"properties":{"analyzers":{"items":{"$circularRef":"a78b05f8-ad48-469d-af10-4ae9c2950521"},"type":"array","minItems":1,"title":"Analyzers","description":"Analyzers whose assessments are combined via max-severity","isRequired":true,"uniqueKey":"security_analyzer.oneOf.2.analyzers","typeLabel":"Analyzers · array"},"propagate_unknown":{"type":"boolean","title":"Propagate Unknown","description":"When True, any child returning UNKNOWN causes the ensemble to return UNKNOWN. When False (default), UNKNOWN is filtered out if any child returns a concrete level.","default":false,"uniqueKey":"security_analyzer.oneOf.2.propagate_unknown","typeLabel":"boolean"},"kind":{"type":"string","const":"EnsembleSecurityAnalyzer","title":"Kind","uniqueKey":"security_analyzer.oneOf.2.kind","typeLabel":"string"}},"uniqueKey":"security_analyzer.oneOf.2","typeLabel":"EnsembleSecurityAnalyzer · object"},{"type":"object","title":"GraySwanAnalyzer","description":"Optional security analyzer to evaluate action risks.","properties":{"history_limit":{"type":"integer","title":"History Limit","description":"Number of recent events to include as context","default":20,"uniqueKey":"security_analyzer.oneOf.3.history_limit","typeLabel":"integer"},"max_message_chars":{"type":"integer","title":"Max Message Chars","description":"Max characters for conversation processing","default":30000,"uniqueKey":"security_analyzer.oneOf.3.max_message_chars","typeLabel":"integer"},"timeout":{"type":"number","title":"Timeout","description":"Request timeout in seconds","default":30,"uniqueKey":"security_analyzer.oneOf.3.timeout","typeLabel":"number"},"low_threshold":{"type":"number","title":"Low Threshold","description":"Risk threshold for LOW classification (score \u003c= threshold)","default":0.3,"uniqueKey":"security_analyzer.oneOf.3.low_threshold","typeLabel":"number"},"medium_threshold":{"type":"number","title":"Medium Threshold","description":"Risk threshold for MEDIUM classification (score \u003c= threshold)","default":0.7,"uniqueKey":"security_analyzer.oneOf.3.medium_threshold","typeLabel":"number"},"api_url":{"type":"string","title":"Api Url","description":"GraySwan Cygnal API endpoint","default":"https://api.grayswan.ai/cygnal/monitor","uniqueKey":"security_analyzer.oneOf.3.api_url","typeLabel":"string"},"api_key":{"oneOf":[{"type":"string","title":"Api Key","description":"GraySwan API key (via GRAYSWAN_API_KEY env var)","format":"password","uniqueKey":"security_analyzer.oneOf.3.api_key.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Api Key","description":"GraySwan API key (via GRAYSWAN_API_KEY env var)","uniqueKey":"security_analyzer.oneOf.3.api_key.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.3.api_key","typeLabel":"string\u003cpassword> | null"},"policy_id":{"oneOf":[{"type":"string","title":"Policy Id","description":"GraySwan policy ID (via GRAYSWAN_POLICY_ID env var)","uniqueKey":"security_analyzer.oneOf.3.policy_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Policy Id","description":"GraySwan policy ID (via GRAYSWAN_POLICY_ID env var)","uniqueKey":"security_analyzer.oneOf.3.policy_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.3.policy_id","typeLabel":"string | null"},"kind":{"type":"string","const":"GraySwanAnalyzer","title":"Kind","uniqueKey":"security_analyzer.oneOf.3.kind","typeLabel":"string"}},"uniqueKey":"security_analyzer.oneOf.3","typeLabel":"GraySwanAnalyzer · object"},{"type":"object","title":"LLMSecurityAnalyzer","description":"Optional security analyzer to evaluate action risks.","properties":{"kind":{"type":"string","const":"LLMSecurityAnalyzer","title":"Kind","uniqueKey":"security_analyzer.oneOf.4.kind","typeLabel":"string"}},"uniqueKey":"security_analyzer.oneOf.4","typeLabel":"LLMSecurityAnalyzer · object"},{"type":"object","title":"ToolShieldLLMSecurityAnalyzer","description":"Optional security analyzer to evaluate action risks.","required":["llm"],"properties":{"llm":{"properties":{"model":{"type":"string","title":"Model","description":"Model name.","default":"gpt-5.5","openhands_settings":{"depends_on":[],"prominence":"critical"},"uniqueKey":"security_analyzer.oneOf.5.llm.model","typeLabel":"string"},"api_key":{"oneOf":[{"type":"string","title":"Api Key","description":"API key.","uniqueKey":"security_analyzer.oneOf.5.llm.api_key.oneOf.0","typeLabel":"string"},{"type":"string","title":"Api Key","description":"API key.","format":"password","uniqueKey":"security_analyzer.oneOf.5.llm.api_key.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Api Key","description":"API key.","uniqueKey":"security_analyzer.oneOf.5.llm.api_key.oneOf.2","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.api_key","typeLabel":"string | string\u003cpassword> | null"},"auth_type":{"type":"string","enum":["api_key","subscription"],"title":"Auth Type","description":"Authentication mode for the LLM.","default":"api_key","openhands_settings":{"depends_on":[],"label":"Authentication","prominence":"critical"},"uniqueKey":"security_analyzer.oneOf.5.llm.auth_type","typeLabel":"enum\u003cstring>"},"subscription_vendor":{"oneOf":[{"type":"string","title":"Subscription Vendor","description":"Subscription provider for subscription-backed LLM access.","const":"openai","uniqueKey":"security_analyzer.oneOf.5.llm.subscription_vendor.oneOf.0","typeLabel":"string"},{"type":"null","title":"Subscription Vendor","description":"Subscription provider for subscription-backed LLM access.","uniqueKey":"security_analyzer.oneOf.5.llm.subscription_vendor.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.subscription_vendor","typeLabel":"string | null"},"base_url":{"oneOf":[{"type":"string","title":"Base Url","description":"Custom base URL.","uniqueKey":"security_analyzer.oneOf.5.llm.base_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Base Url","description":"Custom base URL.","uniqueKey":"security_analyzer.oneOf.5.llm.base_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.base_url","typeLabel":"string | null"},"api_version":{"oneOf":[{"type":"string","title":"Api Version","description":"API version (e.g., Azure).","uniqueKey":"security_analyzer.oneOf.5.llm.api_version.oneOf.0","typeLabel":"string"},{"type":"null","title":"Api Version","description":"API version (e.g., Azure).","uniqueKey":"security_analyzer.oneOf.5.llm.api_version.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.api_version","typeLabel":"string | null"},"aws_access_key_id":{"oneOf":[{"type":"string","title":"Aws Access Key Id","uniqueKey":"security_analyzer.oneOf.5.llm.aws_access_key_id.oneOf.0","typeLabel":"string"},{"type":"string","title":"Aws Access Key Id","format":"password","uniqueKey":"security_analyzer.oneOf.5.llm.aws_access_key_id.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Aws Access Key Id","uniqueKey":"security_analyzer.oneOf.5.llm.aws_access_key_id.oneOf.2","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.aws_access_key_id","typeLabel":"string | string\u003cpassword> | null"},"aws_secret_access_key":{"oneOf":[{"type":"string","title":"Aws Secret Access Key","uniqueKey":"security_analyzer.oneOf.5.llm.aws_secret_access_key.oneOf.0","typeLabel":"string"},{"type":"string","title":"Aws Secret Access Key","format":"password","uniqueKey":"security_analyzer.oneOf.5.llm.aws_secret_access_key.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Aws Secret Access Key","uniqueKey":"security_analyzer.oneOf.5.llm.aws_secret_access_key.oneOf.2","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.aws_secret_access_key","typeLabel":"string | string\u003cpassword> | null"},"aws_session_token":{"oneOf":[{"type":"string","title":"Aws Session Token","uniqueKey":"security_analyzer.oneOf.5.llm.aws_session_token.oneOf.0","typeLabel":"string"},{"type":"string","title":"Aws Session Token","format":"password","uniqueKey":"security_analyzer.oneOf.5.llm.aws_session_token.oneOf.1","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Aws Session Token","uniqueKey":"security_analyzer.oneOf.5.llm.aws_session_token.oneOf.2","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.aws_session_token","typeLabel":"string | string\u003cpassword> | null"},"aws_region_name":{"oneOf":[{"type":"string","title":"Aws Region Name","uniqueKey":"security_analyzer.oneOf.5.llm.aws_region_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Region Name","uniqueKey":"security_analyzer.oneOf.5.llm.aws_region_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.aws_region_name","typeLabel":"string | null"},"aws_profile_name":{"oneOf":[{"type":"string","title":"Aws Profile Name","uniqueKey":"security_analyzer.oneOf.5.llm.aws_profile_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Profile Name","uniqueKey":"security_analyzer.oneOf.5.llm.aws_profile_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.aws_profile_name","typeLabel":"string | null"},"aws_role_name":{"oneOf":[{"type":"string","title":"Aws Role Name","uniqueKey":"security_analyzer.oneOf.5.llm.aws_role_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Role Name","uniqueKey":"security_analyzer.oneOf.5.llm.aws_role_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.aws_role_name","typeLabel":"string | null"},"aws_session_name":{"oneOf":[{"type":"string","title":"Aws Session Name","uniqueKey":"security_analyzer.oneOf.5.llm.aws_session_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Session Name","uniqueKey":"security_analyzer.oneOf.5.llm.aws_session_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.aws_session_name","typeLabel":"string | null"},"aws_bedrock_runtime_endpoint":{"oneOf":[{"type":"string","title":"Aws Bedrock Runtime Endpoint","uniqueKey":"security_analyzer.oneOf.5.llm.aws_bedrock_runtime_endpoint.oneOf.0","typeLabel":"string"},{"type":"null","title":"Aws Bedrock Runtime Endpoint","uniqueKey":"security_analyzer.oneOf.5.llm.aws_bedrock_runtime_endpoint.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.aws_bedrock_runtime_endpoint","typeLabel":"string | null"},"openrouter_site_url":{"type":"string","title":"Openrouter Site Url","default":"https://docs.all-hands.dev/","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"security_analyzer.oneOf.5.llm.openrouter_site_url","typeLabel":"string"},"openrouter_app_name":{"type":"string","title":"Openrouter App Name","default":"OpenHands","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"security_analyzer.oneOf.5.llm.openrouter_app_name","typeLabel":"string"},"num_retries":{"type":"integer","minimum":0,"title":"Num Retries","default":5,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"security_analyzer.oneOf.5.llm.num_retries","typeLabel":"integer"},"retry_multiplier":{"type":"number","minimum":0,"title":"Retry Multiplier","default":8,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"security_analyzer.oneOf.5.llm.retry_multiplier","typeLabel":"number"},"retry_min_wait":{"type":"integer","minimum":0,"title":"Retry Min Wait","default":8,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"security_analyzer.oneOf.5.llm.retry_min_wait","typeLabel":"integer"},"retry_max_wait":{"type":"integer","minimum":0,"title":"Retry Max Wait","default":64,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"security_analyzer.oneOf.5.llm.retry_max_wait","typeLabel":"integer"},"timeout":{"oneOf":[{"type":"integer","title":"Timeout","description":"HTTP timeout in seconds. Default is 300s (5 minutes). Set to None to disable timeout (not recommended for production).","default":300,"minimum":0,"uniqueKey":"security_analyzer.oneOf.5.llm.timeout.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Timeout","description":"HTTP timeout in seconds. Default is 300s (5 minutes). Set to None to disable timeout (not recommended for production).","default":300,"uniqueKey":"security_analyzer.oneOf.5.llm.timeout.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.timeout","typeLabel":"integer | null"},"max_message_chars":{"type":"integer","minimum":1,"title":"Max Message Chars","description":"Approx max chars in each event/content sent to the LLM.","default":30000,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"security_analyzer.oneOf.5.llm.max_message_chars","typeLabel":"integer"},"temperature":{"oneOf":[{"type":"number","title":"Temperature","description":"Sampling temperature for response generation. Defaults to None (uses provider default temperature). Set to 0.0 for deterministic outputs, or higher values (0.7-1.0) for more creative responses.","minimum":0,"uniqueKey":"security_analyzer.oneOf.5.llm.temperature.oneOf.0","typeLabel":"number"},{"type":"null","title":"Temperature","description":"Sampling temperature for response generation. Defaults to None (uses provider default temperature). Set to 0.0 for deterministic outputs, or higher values (0.7-1.0) for more creative responses.","uniqueKey":"security_analyzer.oneOf.5.llm.temperature.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.temperature","typeLabel":"number | null"},"top_p":{"oneOf":[{"type":"number","title":"Top P","description":"Nucleus sampling parameter. Defaults to None (uses provider default). Set to a value between 0 and 1 to control diversity of outputs.","maximum":1,"minimum":0,"uniqueKey":"security_analyzer.oneOf.5.llm.top_p.oneOf.0","typeLabel":"number"},{"type":"null","title":"Top P","description":"Nucleus sampling parameter. Defaults to None (uses provider default). Set to a value between 0 and 1 to control diversity of outputs.","uniqueKey":"security_analyzer.oneOf.5.llm.top_p.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.top_p","typeLabel":"number | null"},"top_k":{"oneOf":[{"type":"number","title":"Top K","minimum":0,"uniqueKey":"security_analyzer.oneOf.5.llm.top_k.oneOf.0","typeLabel":"number"},{"type":"null","title":"Top K","uniqueKey":"security_analyzer.oneOf.5.llm.top_k.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.top_k","typeLabel":"number | null"},"max_input_tokens":{"oneOf":[{"type":"integer","title":"Max Input Tokens","description":"The maximum number of input tokens. Note that this is currently unused, and the value at runtime is actually the total tokens in OpenAI (e.g. 128,000 tokens for GPT-4).","minimum":1,"uniqueKey":"security_analyzer.oneOf.5.llm.max_input_tokens.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Max Input Tokens","description":"The maximum number of input tokens. Note that this is currently unused, and the value at runtime is actually the total tokens in OpenAI (e.g. 128,000 tokens for GPT-4).","uniqueKey":"security_analyzer.oneOf.5.llm.max_input_tokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.max_input_tokens","typeLabel":"integer | null"},"max_output_tokens":{"oneOf":[{"type":"integer","title":"Max Output Tokens","description":"The maximum number of output tokens. This is sent to the LLM.","minimum":1,"uniqueKey":"security_analyzer.oneOf.5.llm.max_output_tokens.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Max Output Tokens","description":"The maximum number of output tokens. This is sent to the LLM.","uniqueKey":"security_analyzer.oneOf.5.llm.max_output_tokens.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.max_output_tokens","typeLabel":"integer | null"},"model_canonical_name":{"oneOf":[{"type":"string","title":"Model Canonical Name","description":"Optional canonical model name for feature registry lookups. The OpenHands SDK maintains a model feature registry that maps model names to capabilities (e.g., vision support, prompt caching, responses API support). When using proxied or aliased model identifiers, set this field to the canonical model name (e.g., 'openai/gpt-4o') to ensure correct capability detection. If not provided, the 'model' field will be used for capability lookups.","uniqueKey":"security_analyzer.oneOf.5.llm.model_canonical_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Model Canonical Name","description":"Optional canonical model name for feature registry lookups. The OpenHands SDK maintains a model feature registry that maps model names to capabilities (e.g., vision support, prompt caching, responses API support). When using proxied or aliased model identifiers, set this field to the canonical model name (e.g., 'openai/gpt-4o') to ensure correct capability detection. If not provided, the 'model' field will be used for capability lookups.","uniqueKey":"security_analyzer.oneOf.5.llm.model_canonical_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.model_canonical_name","typeLabel":"string | null"},"api_mode":{"type":"string","enum":["auto","chat","responses"],"title":"Api Mode","description":"LLM API endpoint mode. 'auto' resolves from model metadata and SDK fallbacks; use 'chat' or 'responses' to override endpoint selection for proxy aliases and newly released models.","default":"auto","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"security_analyzer.oneOf.5.llm.api_mode","typeLabel":"enum\u003cstring>"},"capability_overrides":{"additionalProperties":{"oneOf":[{"type":"boolean","uniqueKey":"security_analyzer.oneOf.5.llm.capability_overrides.additionalProperties.oneOf.0","typeLabel":"boolean"},{"type":"string","uniqueKey":"security_analyzer.oneOf.5.llm.capability_overrides.additionalProperties.oneOf.1","typeLabel":"string"}],"uniqueKey":"security_analyzer.oneOf.5.llm.capability_overrides.additionalProperties","typeLabel":"boolean | string"},"type":"object","title":"Capability Overrides","description":"Explicit model capability overrides. Supported keys include supports_reasoning_effort, thinking_mode (adaptive, manual, none, or unknown), supports_sampling_params, supports_prompt_cache, supports_stop_words, supports_responses_api, supports_vision, and supports_prompt_cache_retention. Overrides take precedence over LiteLLM metadata and SDK fallbacks.","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"security_analyzer.oneOf.5.llm.capability_overrides","typeLabel":"Capability Overrides · object"},"extra_headers":{"oneOf":[{"type":"object","title":"Extra Headers","description":"Optional HTTP headers to forward to LiteLLM requests.","additionalProperties":{"type":"string","uniqueKey":"security_analyzer.oneOf.5.llm.extra_headers.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"security_analyzer.oneOf.5.llm.extra_headers.oneOf.0","typeLabel":"Extra Headers · object"},{"type":"null","title":"Extra Headers","description":"Optional HTTP headers to forward to LiteLLM requests.","uniqueKey":"security_analyzer.oneOf.5.llm.extra_headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.extra_headers","typeLabel":"Extra Headers · object | null"},"input_cost_per_token":{"oneOf":[{"type":"number","title":"Input Cost Per Token","description":"The cost per input token. This will available in logs for user.","minimum":0,"uniqueKey":"security_analyzer.oneOf.5.llm.input_cost_per_token.oneOf.0","typeLabel":"number"},{"type":"null","title":"Input Cost Per Token","description":"The cost per input token. This will available in logs for user.","uniqueKey":"security_analyzer.oneOf.5.llm.input_cost_per_token.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.input_cost_per_token","typeLabel":"number | null"},"output_cost_per_token":{"oneOf":[{"type":"number","title":"Output Cost Per Token","description":"The cost per output token. This will available in logs for user.","minimum":0,"uniqueKey":"security_analyzer.oneOf.5.llm.output_cost_per_token.oneOf.0","typeLabel":"number"},{"type":"null","title":"Output Cost Per Token","description":"The cost per output token. This will available in logs for user.","uniqueKey":"security_analyzer.oneOf.5.llm.output_cost_per_token.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.output_cost_per_token","typeLabel":"number | null"},"ollama_base_url":{"oneOf":[{"type":"string","title":"Ollama Base Url","uniqueKey":"security_analyzer.oneOf.5.llm.ollama_base_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Ollama Base Url","uniqueKey":"security_analyzer.oneOf.5.llm.ollama_base_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.ollama_base_url","typeLabel":"string | null"},"stream":{"type":"boolean","title":"Stream","description":"Enable streaming responses from the LLM. When enabled, the provided `on_token` callback in .completions and .responses will be invoked for each chunk of tokens.","default":false,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"security_analyzer.oneOf.5.llm.stream","typeLabel":"boolean"},"drop_params":{"type":"boolean","title":"Drop Params","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"security_analyzer.oneOf.5.llm.drop_params","typeLabel":"boolean"},"modify_params":{"type":"boolean","title":"Modify Params","description":"Modify params allows litellm to do transformations like adding a default message, when a message is empty.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"security_analyzer.oneOf.5.llm.modify_params","typeLabel":"boolean"},"disable_vision":{"oneOf":[{"type":"boolean","title":"Disable Vision","description":"If model is vision capable, this option allows to disable image processing (useful for cost reduction).","uniqueKey":"security_analyzer.oneOf.5.llm.disable_vision.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Disable Vision","description":"If model is vision capable, this option allows to disable image processing (useful for cost reduction).","uniqueKey":"security_analyzer.oneOf.5.llm.disable_vision.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.disable_vision","typeLabel":"boolean | null"},"disable_stop_word":{"oneOf":[{"type":"boolean","title":"Disable Stop Word","description":"Disable using of stop word.","default":false,"uniqueKey":"security_analyzer.oneOf.5.llm.disable_stop_word.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Disable Stop Word","description":"Disable using of stop word.","default":false,"uniqueKey":"security_analyzer.oneOf.5.llm.disable_stop_word.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.disable_stop_word","typeLabel":"boolean | null"},"caching_prompt":{"type":"boolean","title":"Caching Prompt","description":"Enable caching of prompts.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"security_analyzer.oneOf.5.llm.caching_prompt","typeLabel":"boolean"},"log_completions":{"type":"boolean","title":"Log Completions","description":"Enable logging of completions.","default":false,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"security_analyzer.oneOf.5.llm.log_completions","typeLabel":"boolean"},"log_completions_folder":{"type":"string","title":"Log Completions Folder","description":"The folder to log LLM completions to. Required if log_completions is True.","default":"logs/completions","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"security_analyzer.oneOf.5.llm.log_completions_folder","typeLabel":"string"},"custom_tokenizer":{"oneOf":[{"type":"string","title":"Custom Tokenizer","description":"A custom tokenizer to use for token counting.","uniqueKey":"security_analyzer.oneOf.5.llm.custom_tokenizer.oneOf.0","typeLabel":"string"},{"type":"null","title":"Custom Tokenizer","description":"A custom tokenizer to use for token counting.","uniqueKey":"security_analyzer.oneOf.5.llm.custom_tokenizer.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.custom_tokenizer","typeLabel":"string | null"},"native_tool_calling":{"type":"boolean","title":"Native Tool Calling","description":"Whether to use native tool calling.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"security_analyzer.oneOf.5.llm.native_tool_calling","typeLabel":"boolean"},"force_string_serializer":{"oneOf":[{"type":"boolean","title":"Force String Serializer","description":"Force using string content serializer when sending to LLM API. If None (default), auto-detect based on model. Useful for providers that do not support list content, like HuggingFace and Groq.","uniqueKey":"security_analyzer.oneOf.5.llm.force_string_serializer.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Force String Serializer","description":"Force using string content serializer when sending to LLM API. If None (default), auto-detect based on model. Useful for providers that do not support list content, like HuggingFace and Groq.","uniqueKey":"security_analyzer.oneOf.5.llm.force_string_serializer.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.force_string_serializer","typeLabel":"boolean | null"},"inline_image_urls":{"oneOf":[{"type":"boolean","title":"Inline Image Urls","description":"If True, fetch any http(s) image URL in outgoing messages and inline it as a base64 ``data:`` URL before sending. If None (default), auto-detect based on model (some APIs such as Moonshot's public Kimi endpoint reject URL-formatted images and require base64). Set this explicitly when the model is reached through a proxy alias that hides the underlying provider (e.g. ``litellm_proxy/\u003ccustom-alias>``). Note: inlining only runs when ``vision_is_active()`` is True, so the alias must still be recognised as vision-capable by the SDK feature registry or proxy model metadata.","uniqueKey":"security_analyzer.oneOf.5.llm.inline_image_urls.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Inline Image Urls","description":"If True, fetch any http(s) image URL in outgoing messages and inline it as a base64 ``data:`` URL before sending. If None (default), auto-detect based on model (some APIs such as Moonshot's public Kimi endpoint reject URL-formatted images and require base64). Set this explicitly when the model is reached through a proxy alias that hides the underlying provider (e.g. ``litellm_proxy/\u003ccustom-alias>``). Note: inlining only runs when ``vision_is_active()`` is True, so the alias must still be recognised as vision-capable by the SDK feature registry or proxy model metadata.","uniqueKey":"security_analyzer.oneOf.5.llm.inline_image_urls.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.inline_image_urls","typeLabel":"boolean | null"},"reasoning_effort":{"oneOf":[{"type":"string","title":"Reasoning Effort","description":"Provider-neutral reasoning effort. Common values include 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', and 'max'. The SDK accepts future provider values and lets LiteLLM translate them.","default":"high","enum":["low","medium","high","xhigh","none"],"uniqueKey":"security_analyzer.oneOf.5.llm.reasoning_effort.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Reasoning Effort","description":"Provider-neutral reasoning effort. Common values include 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', and 'max'. The SDK accepts future provider values and lets LiteLLM translate them.","default":"high","uniqueKey":"security_analyzer.oneOf.5.llm.reasoning_effort.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.reasoning_effort","typeLabel":"enum\u003cstring> | null"},"reasoning_summary":{"oneOf":[{"type":"string","title":"Reasoning Summary","description":"The level of detail for reasoning summaries. This is a string that can be one of 'auto', 'concise', or 'detailed'. Requires verified OpenAI organization. Only sent when explicitly set.","enum":["auto","concise","detailed"],"uniqueKey":"security_analyzer.oneOf.5.llm.reasoning_summary.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Reasoning Summary","description":"The level of detail for reasoning summaries. This is a string that can be one of 'auto', 'concise', or 'detailed'. Requires verified OpenAI organization. Only sent when explicitly set.","uniqueKey":"security_analyzer.oneOf.5.llm.reasoning_summary.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.reasoning_summary","typeLabel":"enum\u003cstring> | null"},"enable_encrypted_reasoning":{"type":"boolean","title":"Enable Encrypted Reasoning","description":"If True, ask for ['reasoning.encrypted_content'] in Responses API include.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"security_analyzer.oneOf.5.llm.enable_encrypted_reasoning","typeLabel":"boolean"},"prompt_cache_retention":{"oneOf":[{"type":"string","title":"Prompt Cache Retention","description":"Retention policy for prompt cache. Only sent for supported models (GPT-5+ and GPT-4.1, excluding Azure deployments); explicitly stripped for all others.","default":"24h","uniqueKey":"security_analyzer.oneOf.5.llm.prompt_cache_retention.oneOf.0","typeLabel":"string"},{"type":"null","title":"Prompt Cache Retention","description":"Retention policy for prompt cache. Only sent for supported models (GPT-5+ and GPT-4.1, excluding Azure deployments); explicitly stripped for all others.","default":"24h","uniqueKey":"security_analyzer.oneOf.5.llm.prompt_cache_retention.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.prompt_cache_retention","typeLabel":"string | null"},"extended_thinking_budget":{"oneOf":[{"type":"integer","title":"Extended Thinking Budget","description":"Legacy token budget for models confirmed to use manual Anthropic extended thinking. Ignored for adaptive-thinking models. Prefer reasoning_effort for new integrations.","default":200000,"uniqueKey":"security_analyzer.oneOf.5.llm.extended_thinking_budget.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Extended Thinking Budget","description":"Legacy token budget for models confirmed to use manual Anthropic extended thinking. Ignored for adaptive-thinking models. Prefer reasoning_effort for new integrations.","default":200000,"uniqueKey":"security_analyzer.oneOf.5.llm.extended_thinking_budget.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.extended_thinking_budget","typeLabel":"integer | null"},"seed":{"oneOf":[{"type":"integer","title":"Seed","description":"The seed to use for random number generation.","uniqueKey":"security_analyzer.oneOf.5.llm.seed.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Seed","description":"The seed to use for random number generation.","uniqueKey":"security_analyzer.oneOf.5.llm.seed.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.seed","typeLabel":"integer | null"},"usage_id":{"type":"string","title":"Usage Id","description":"Unique usage identifier for the LLM. Used for registry lookups, telemetry, and spend tracking.","default":"default","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"security_analyzer.oneOf.5.llm.usage_id","typeLabel":"string"},"litellm_extra_body":{"additionalProperties":true,"type":"object","title":"Litellm Extra Body","description":"Additional key-value pairs to pass to litellm's extra_body parameter. This is useful for custom inference endpoints that need additional parameters for configuration, routing, or advanced features. NOTE: Not all LLM providers support extra_body parameters. Some providers (e.g., OpenAI) may reject requests with unrecognized options. This is commonly supported by: - LiteLLM proxy servers (routing metadata, tracing) - vLLM endpoints (return_token_ids, etc.) - Custom inference clusters Examples: - Proxy routing: {'trace_version': '1.0.0', 'tags': ['agent:my-agent']} - vLLM features: {'return_token_ids': True}","openhands_settings":{"depends_on":[],"prominence":"minor"},"uniqueKey":"security_analyzer.oneOf.5.llm.litellm_extra_body","typeLabel":"Litellm Extra Body · object"},"fallback_strategy":{"oneOf":[{"type":"object","title":"FallbackStrategy","description":"Optional fallback strategy for trying alternate LLMs on transient failure. Construct with FallbackStrategy(fallback_llms=[...]).Excluded from serialization; must be reconfigured after load.","required":["fallback_llms"],"properties":{"fallback_llms":{"items":{"type":"string","uniqueKey":"security_analyzer.oneOf.5.llm.fallback_strategy.oneOf.0.fallback_llms.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Fallback Llms","description":"Ordered list of LLM profile names to try on transient failure.","isRequired":true,"uniqueKey":"security_analyzer.oneOf.5.llm.fallback_strategy.oneOf.0.fallback_llms","typeLabel":"string[]"},"profile_store_dir":{"oneOf":[{"type":"string","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`.","uniqueKey":"security_analyzer.oneOf.5.llm.fallback_strategy.oneOf.0.profile_store_dir.oneOf.0","typeLabel":"string"},{"type":"string","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`.","format":"path","uniqueKey":"security_analyzer.oneOf.5.llm.fallback_strategy.oneOf.0.profile_store_dir.oneOf.1","typeLabel":"string\u003cpath>"},{"type":"null","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`.","uniqueKey":"security_analyzer.oneOf.5.llm.fallback_strategy.oneOf.0.profile_store_dir.oneOf.2","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.fallback_strategy.oneOf.0.profile_store_dir","typeLabel":"string | string\u003cpath> | null"}},"uniqueKey":"security_analyzer.oneOf.5.llm.fallback_strategy.oneOf.0","typeLabel":"FallbackStrategy · object"},{"type":"null","description":"Optional fallback strategy for trying alternate LLMs on transient failure. Construct with FallbackStrategy(fallback_llms=[...]).Excluded from serialization; must be reconfigured after load.","uniqueKey":"security_analyzer.oneOf.5.llm.fallback_strategy.oneOf.1","typeLabel":"null"}],"uniqueKey":"security_analyzer.oneOf.5.llm.fallback_strategy","typeLabel":"FallbackStrategy · object | null"}},"type":"object","title":"LLM","description":"LLM used as the guardrail. Can be a smaller/cheaper model than the actor LLM; only the model's ability to classify action risk matters.","isRequired":true,"uniqueKey":"security_analyzer.oneOf.5.llm","typeLabel":"LLM · object"},"history_window":{"type":"integer","title":"History Window","description":"Number of prior actions to include as context.","default":20,"uniqueKey":"security_analyzer.oneOf.5.history_window","typeLabel":"integer"},"safety_experiences":{"type":"string","title":"Safety Experiences","description":"Pre-generated safety guidelines injected into the guardrail's system prompt.\n- ``\"\"`` (default): bare guardrail -- no experiences. The analyzer still separates actor from judge; it just classifies without distilled tool-specific guidance.\n- Any non-empty string: used as-is. The intended pattern is to call one of the helpers (``default_safety_experiences()``, ``load_safety_experiences(tool_names)``, ``auto_detect_safety_experiences()``) which require the ``[toolshield]`` optional extra (``pip install openhands-sdk[toolshield]``). Callers with their own source of guidelines can pass any custom string.","default":"","uniqueKey":"security_analyzer.oneOf.5.safety_experiences","typeLabel":"string"},"kind":{"type":"string","const":"ToolShieldLLMSecurityAnalyzer","title":"Kind","uniqueKey":"security_analyzer.oneOf.5.kind","typeLabel":"string"}},"uniqueKey":"security_analyzer.oneOf.5","typeLabel":"ToolShieldLLMSecurityAnalyzer · object"},{"type":"null","description":"Optional security analyzer to evaluate action risks.","uniqueKey":"security_analyzer.oneOf.6","typeLabel":"null"}],"uniqueKey":"security_analyzer","typeLabel":"PatternSecurityAnalyzer · object | PolicyRailSecurityAnalyzer · object | EnsembleSecurityAnalyzer · object | GraySwanAnalyzer · object | LLMSecurityAnalyzer · object | ToolShieldLLMSecurityAnalyzer · object | null"},"activated_knowledge_skills":{"items":{"type":"string","uniqueKey":"activated_knowledge_skills.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Activated Knowledge Skills","description":"List of activated knowledge skills name","uniqueKey":"activated_knowledge_skills","typeLabel":"string[]"},"invoked_skills":{"items":{"type":"string","uniqueKey":"invoked_skills.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Invoked Skills","description":"Names of progressive-disclosure skills explicitly invoked via the `invoke_skill` tool.","uniqueKey":"invoked_skills","typeLabel":"string[]"},"blocked_actions":{"additionalProperties":{"type":"string","uniqueKey":"blocked_actions.additionalProperties","typeLabel":"string"},"type":"object","title":"Blocked Actions","description":"Actions blocked by PreToolUse hooks, keyed by action ID","uniqueKey":"blocked_actions","typeLabel":"Blocked Actions · object"},"blocked_messages":{"additionalProperties":{"type":"string","uniqueKey":"blocked_messages.additionalProperties","typeLabel":"string"},"type":"object","title":"Blocked Messages","description":"Messages blocked by UserPromptSubmit hooks, keyed by message ID","uniqueKey":"blocked_messages","typeLabel":"Blocked Messages · object"},"last_user_message_id":{"oneOf":[{"type":"string","title":"Last User Message Id","description":"Most recent user MessageEvent id for hook block checks. Updated when user messages are emitted so Agent.step can pop blocked_messages without scanning the event log. If None, hook-blocked checks are skipped (legacy conversations).","uniqueKey":"last_user_message_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Last User Message Id","description":"Most recent user MessageEvent id for hook block checks. Updated when user messages are emitted so Agent.step can pop blocked_messages without scanning the event log. If None, hook-blocked checks are skipped (legacy conversations).","uniqueKey":"last_user_message_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"last_user_message_id","typeLabel":"string | null"},"leaf_event_id":{"oneOf":[{"type":"string","title":"Leaf Event Id","description":"HEAD of the conversation tree: the parent of the next appended event. ``None`` means an empty tree (or, for pre-feature conversations, the linear tail). Moving it via ``navigate`` re-roots the active branch the agent runs on.","uniqueKey":"leaf_event_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Leaf Event Id","description":"HEAD of the conversation tree: the parent of the next appended event. ``None`` means an empty tree (or, for pre-feature conversations, the linear tail). Moving it via ``navigate`` re-roots the active branch the agent runs on.","uniqueKey":"leaf_event_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"leaf_event_id","typeLabel":"string | null"},"stats":{"properties":{"usage_to_metrics":{"additionalProperties":{"properties":{"model_name":{"type":"string","title":"Model Name","description":"Name of the model","default":"default","uniqueKey":"stats.usage_to_metrics.additionalProperties.model_name","typeLabel":"string"},"accumulated_cost":{"type":"number","minimum":0,"title":"Accumulated Cost","description":"Total accumulated cost, must be non-negative","default":0,"uniqueKey":"stats.usage_to_metrics.additionalProperties.accumulated_cost","typeLabel":"number"},"max_budget_per_task":{"oneOf":[{"type":"number","title":"Max Budget Per Task","description":"Maximum budget per task","uniqueKey":"stats.usage_to_metrics.additionalProperties.max_budget_per_task.oneOf.0","typeLabel":"number"},{"type":"null","title":"Max Budget Per Task","description":"Maximum budget per task","uniqueKey":"stats.usage_to_metrics.additionalProperties.max_budget_per_task.oneOf.1","typeLabel":"null"}],"uniqueKey":"stats.usage_to_metrics.additionalProperties.max_budget_per_task","typeLabel":"number | null"},"accumulated_token_usage":{"oneOf":[{"type":"object","title":"TokenUsage","description":"Accumulated token usage across all calls","properties":{"model":{"type":"string","title":"Model","default":"","uniqueKey":"stats.usage_to_metrics.additionalProperties.accumulated_token_usage.oneOf.0.model","typeLabel":"string"},"prompt_tokens":{"type":"integer","minimum":0,"title":"Prompt Tokens","description":"Prompt tokens must be non-negative","default":0,"uniqueKey":"stats.usage_to_metrics.additionalProperties.accumulated_token_usage.oneOf.0.prompt_tokens","typeLabel":"integer"},"completion_tokens":{"type":"integer","minimum":0,"title":"Completion Tokens","description":"Completion tokens must be non-negative","default":0,"uniqueKey":"stats.usage_to_metrics.additionalProperties.accumulated_token_usage.oneOf.0.completion_tokens","typeLabel":"integer"},"cache_read_tokens":{"type":"integer","minimum":0,"title":"Cache Read Tokens","description":"Cache read tokens must be non-negative","default":0,"uniqueKey":"stats.usage_to_metrics.additionalProperties.accumulated_token_usage.oneOf.0.cache_read_tokens","typeLabel":"integer"},"cache_write_tokens":{"type":"integer","minimum":0,"title":"Cache Write Tokens","description":"Cache write tokens must be non-negative","default":0,"uniqueKey":"stats.usage_to_metrics.additionalProperties.accumulated_token_usage.oneOf.0.cache_write_tokens","typeLabel":"integer"},"reasoning_tokens":{"type":"integer","minimum":0,"title":"Reasoning Tokens","description":"Reasoning tokens must be non-negative","default":0,"uniqueKey":"stats.usage_to_metrics.additionalProperties.accumulated_token_usage.oneOf.0.reasoning_tokens","typeLabel":"integer"},"context_window":{"type":"integer","minimum":0,"title":"Context Window","description":"Context window must be non-negative","default":0,"uniqueKey":"stats.usage_to_metrics.additionalProperties.accumulated_token_usage.oneOf.0.context_window","typeLabel":"integer"},"per_turn_token":{"type":"integer","minimum":0,"title":"Per Turn Token","description":"Per turn tokens must be non-negative","default":0,"uniqueKey":"stats.usage_to_metrics.additionalProperties.accumulated_token_usage.oneOf.0.per_turn_token","typeLabel":"integer"},"response_id":{"type":"string","title":"Response Id","default":"","uniqueKey":"stats.usage_to_metrics.additionalProperties.accumulated_token_usage.oneOf.0.response_id","typeLabel":"string"}},"uniqueKey":"stats.usage_to_metrics.additionalProperties.accumulated_token_usage.oneOf.0","typeLabel":"TokenUsage · object"},{"type":"null","description":"Accumulated token usage across all calls","uniqueKey":"stats.usage_to_metrics.additionalProperties.accumulated_token_usage.oneOf.1","typeLabel":"null"}],"uniqueKey":"stats.usage_to_metrics.additionalProperties.accumulated_token_usage","typeLabel":"TokenUsage · object | null"},"costs":{"items":{"properties":{"model":{"type":"string","title":"Model","isRequired":true,"uniqueKey":"stats.usage_to_metrics.additionalProperties.costs.items.[INDEX].model","typeLabel":"string"},"cost":{"type":"number","minimum":0,"title":"Cost","description":"Cost must be non-negative","isRequired":true,"uniqueKey":"stats.usage_to_metrics.additionalProperties.costs.items.[INDEX].cost","typeLabel":"number"},"timestamp":{"type":"number","title":"Timestamp","uniqueKey":"stats.usage_to_metrics.additionalProperties.costs.items.[INDEX].timestamp","typeLabel":"number"}},"type":"object","required":["model","cost"],"title":"Cost","uniqueKey":"stats.usage_to_metrics.additionalProperties.costs.items.[INDEX]","typeLabel":"Cost · object"},"type":"array","title":"Costs","description":"List of individual costs","uniqueKey":"stats.usage_to_metrics.additionalProperties.costs","typeLabel":"Cost · object[]"},"response_latencies":{"items":{"properties":{"model":{"type":"string","title":"Model","isRequired":true,"uniqueKey":"stats.usage_to_metrics.additionalProperties.response_latencies.items.[INDEX].model","typeLabel":"string"},"latency":{"type":"number","minimum":0,"title":"Latency","description":"Latency must be non-negative","isRequired":true,"uniqueKey":"stats.usage_to_metrics.additionalProperties.response_latencies.items.[INDEX].latency","typeLabel":"number"},"response_id":{"type":"string","title":"Response Id","isRequired":true,"uniqueKey":"stats.usage_to_metrics.additionalProperties.response_latencies.items.[INDEX].response_id","typeLabel":"string"}},"type":"object","required":["model","latency","response_id"],"title":"ResponseLatency","description":"Metric tracking the round-trip time per completion call.","uniqueKey":"stats.usage_to_metrics.additionalProperties.response_latencies.items.[INDEX]","typeLabel":"ResponseLatency · object"},"type":"array","title":"Response Latencies","description":"List of response latencies","uniqueKey":"stats.usage_to_metrics.additionalProperties.response_latencies","typeLabel":"ResponseLatency · object[]"},"token_usages":{"items":{"properties":{"model":{"type":"string","title":"Model","default":"","uniqueKey":"stats.usage_to_metrics.additionalProperties.token_usages.items.[INDEX].model","typeLabel":"string"},"prompt_tokens":{"type":"integer","minimum":0,"title":"Prompt Tokens","description":"Prompt tokens must be non-negative","default":0,"uniqueKey":"stats.usage_to_metrics.additionalProperties.token_usages.items.[INDEX].prompt_tokens","typeLabel":"integer"},"completion_tokens":{"type":"integer","minimum":0,"title":"Completion Tokens","description":"Completion tokens must be non-negative","default":0,"uniqueKey":"stats.usage_to_metrics.additionalProperties.token_usages.items.[INDEX].completion_tokens","typeLabel":"integer"},"cache_read_tokens":{"type":"integer","minimum":0,"title":"Cache Read Tokens","description":"Cache read tokens must be non-negative","default":0,"uniqueKey":"stats.usage_to_metrics.additionalProperties.token_usages.items.[INDEX].cache_read_tokens","typeLabel":"integer"},"cache_write_tokens":{"type":"integer","minimum":0,"title":"Cache Write Tokens","description":"Cache write tokens must be non-negative","default":0,"uniqueKey":"stats.usage_to_metrics.additionalProperties.token_usages.items.[INDEX].cache_write_tokens","typeLabel":"integer"},"reasoning_tokens":{"type":"integer","minimum":0,"title":"Reasoning Tokens","description":"Reasoning tokens must be non-negative","default":0,"uniqueKey":"stats.usage_to_metrics.additionalProperties.token_usages.items.[INDEX].reasoning_tokens","typeLabel":"integer"},"context_window":{"type":"integer","minimum":0,"title":"Context Window","description":"Context window must be non-negative","default":0,"uniqueKey":"stats.usage_to_metrics.additionalProperties.token_usages.items.[INDEX].context_window","typeLabel":"integer"},"per_turn_token":{"type":"integer","minimum":0,"title":"Per Turn Token","description":"Per turn tokens must be non-negative","default":0,"uniqueKey":"stats.usage_to_metrics.additionalProperties.token_usages.items.[INDEX].per_turn_token","typeLabel":"integer"},"response_id":{"type":"string","title":"Response Id","default":"","uniqueKey":"stats.usage_to_metrics.additionalProperties.token_usages.items.[INDEX].response_id","typeLabel":"string"}},"type":"object","title":"TokenUsage","description":"Metric tracking detailed token usage per completion call.","uniqueKey":"stats.usage_to_metrics.additionalProperties.token_usages.items.[INDEX]","typeLabel":"TokenUsage · object"},"type":"array","title":"Token Usages","description":"List of token usage records","uniqueKey":"stats.usage_to_metrics.additionalProperties.token_usages","typeLabel":"TokenUsage · object[]"}},"type":"object","title":"Metrics","description":"Metrics class can record various metrics during running and evaluation.\nWe track:\n - accumulated_cost and costs\n - max_budget_per_task (budget limit)\n - A list of ResponseLatency\n - A list of TokenUsage (one per call).","uniqueKey":"stats.usage_to_metrics.additionalProperties","typeLabel":"Metrics · object"},"type":"object","title":"Usage To Metrics","description":"Active usage metrics tracked by the registry.","uniqueKey":"stats.usage_to_metrics","typeLabel":"Usage To Metrics · object"}},"type":"object","title":"ConversationStats","description":"Conversation statistics for tracking LLM metrics","uniqueKey":"stats","typeLabel":"ConversationStats · object"},"secret_registry":{"properties":{"secret_sources":{"additionalProperties":{"oneOf":[{"type":"object","title":"LookupSecret","description":"A secret looked up from some external url","required":["url"],"properties":{"url":{"type":"string","title":"Url","isRequired":true,"uniqueKey":"secret_registry.secret_sources.additionalProperties.oneOf.0.url","typeLabel":"string"},"description":{"oneOf":[{"type":"string","title":"Description","description":"Optional description for this secret","uniqueKey":"secret_registry.secret_sources.additionalProperties.oneOf.0.description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"Optional description for this secret","uniqueKey":"secret_registry.secret_sources.additionalProperties.oneOf.0.description.oneOf.1","typeLabel":"null"}],"uniqueKey":"secret_registry.secret_sources.additionalProperties.oneOf.0.description","typeLabel":"string | null"},"headers":{"additionalProperties":{"type":"string","uniqueKey":"secret_registry.secret_sources.additionalProperties.oneOf.0.headers.additionalProperties","typeLabel":"string"},"type":"object","title":"Headers","uniqueKey":"secret_registry.secret_sources.additionalProperties.oneOf.0.headers","typeLabel":"Headers · object"},"kind":{"type":"string","const":"LookupSecret","title":"Kind","uniqueKey":"secret_registry.secret_sources.additionalProperties.oneOf.0.kind","typeLabel":"string"}},"uniqueKey":"secret_registry.secret_sources.additionalProperties.oneOf.0","typeLabel":"LookupSecret · object"},{"type":"object","title":"StaticSecret","description":"A secret stored locally","properties":{"description":{"oneOf":[{"type":"string","title":"Description","description":"Optional description for this secret","uniqueKey":"secret_registry.secret_sources.additionalProperties.oneOf.1.description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"Optional description for this secret","uniqueKey":"secret_registry.secret_sources.additionalProperties.oneOf.1.description.oneOf.1","typeLabel":"null"}],"uniqueKey":"secret_registry.secret_sources.additionalProperties.oneOf.1.description","typeLabel":"string | null"},"value":{"oneOf":[{"type":"string","title":"Value","format":"password","uniqueKey":"secret_registry.secret_sources.additionalProperties.oneOf.1.value.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"null","title":"Value","uniqueKey":"secret_registry.secret_sources.additionalProperties.oneOf.1.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"secret_registry.secret_sources.additionalProperties.oneOf.1.value","typeLabel":"string\u003cpassword> | null"},"kind":{"type":"string","const":"StaticSecret","title":"Kind","uniqueKey":"secret_registry.secret_sources.additionalProperties.oneOf.1.kind","typeLabel":"string"}},"uniqueKey":"secret_registry.secret_sources.additionalProperties.oneOf.1","typeLabel":"StaticSecret · object"}],"uniqueKey":"secret_registry.secret_sources.additionalProperties","typeLabel":"LookupSecret · object | StaticSecret · object"},"type":"object","title":"Secret Sources","uniqueKey":"secret_registry.secret_sources","typeLabel":"Secret Sources · object"}},"type":"object","title":"SecretRegistry","description":"Registry for handling secrets and sensitive data","uniqueKey":"secret_registry","typeLabel":"SecretRegistry · object"},"agent_state":{"additionalProperties":true,"type":"object","title":"Agent State","description":"Dictionary for agent-specific runtime state that persists across iterations.","uniqueKey":"agent_state","typeLabel":"Agent State · object"},"hook_config":{"oneOf":[{"type":"object","title":"HookConfig","description":"Hook configuration for this conversation. Includes definitions for PreToolUse, PostToolUse, UserPromptSubmit, SessionStart, SessionEnd, and Stop hooks.","properties":{"pre_tool_use":{"items":{"properties":{"matcher":{"type":"string","title":"Matcher","default":"*","uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX].matcher","typeLabel":"string"},"hooks":{"items":{"properties":{"command":{"type":"string","title":"Command","isRequired":true,"uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX].hooks.items.[INDEX].command","typeLabel":"string"},"type":{"type":"string","enum":["command","prompt","agent"],"title":"HookType","description":"Types of hooks that can be executed.","default":"command","uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX].hooks.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"name":{"oneOf":[{"type":"string","title":"Name","uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX].hooks.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Name","uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX].hooks.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX].hooks.items.[INDEX].name","typeLabel":"string | null"},"prompt":{"oneOf":[{"type":"string","title":"Prompt","uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX].hooks.items.[INDEX].prompt.oneOf.0","typeLabel":"string"},{"type":"null","title":"Prompt","uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX].hooks.items.[INDEX].prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX].hooks.items.[INDEX].prompt","typeLabel":"string | null"},"system_prompt":{"oneOf":[{"type":"string","title":"System Prompt","uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX].hooks.items.[INDEX].system_prompt.oneOf.0","typeLabel":"string"},{"type":"null","title":"System Prompt","uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX].hooks.items.[INDEX].system_prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX].hooks.items.[INDEX].system_prompt","typeLabel":"string | null"},"tools":{"items":{"type":"string","uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX].hooks.items.[INDEX].tools.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Tools","uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX].hooks.items.[INDEX].tools","typeLabel":"string[]"},"timeout":{"type":"integer","title":"Timeout","default":60,"uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX].hooks.items.[INDEX].timeout","typeLabel":"integer"},"max_iterations":{"type":"integer","title":"Max Iterations","default":3,"uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX].hooks.items.[INDEX].max_iterations","typeLabel":"integer"},"async":{"type":"boolean","title":"Async","default":false,"uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX].hooks.items.[INDEX].async","typeLabel":"boolean"}},"type":"object","required":["command"],"title":"HookDefinition","description":"A single hook definition.","uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX].hooks.items.[INDEX]","typeLabel":"HookDefinition · object"},"type":"array","title":"Hooks","uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX].hooks","typeLabel":"HookDefinition · object[]"}},"type":"object","title":"HookMatcher","description":"Matches events to hooks based on patterns.\n\nSupports exact match, wildcard (*), and regex (auto-detected or /pattern/).","uniqueKey":"hook_config.oneOf.0.pre_tool_use.items.[INDEX]","typeLabel":"HookMatcher · object"},"type":"array","title":"Pre Tool Use","description":"Hooks that run before tool execution","uniqueKey":"hook_config.oneOf.0.pre_tool_use","typeLabel":"HookMatcher · object[]"},"post_tool_use":{"items":{"properties":{"matcher":{"type":"string","title":"Matcher","default":"*","uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX].matcher","typeLabel":"string"},"hooks":{"items":{"properties":{"command":{"type":"string","title":"Command","isRequired":true,"uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX].hooks.items.[INDEX].command","typeLabel":"string"},"type":{"type":"string","enum":["command","prompt","agent"],"title":"HookType","description":"Types of hooks that can be executed.","default":"command","uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX].hooks.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"name":{"oneOf":[{"type":"string","title":"Name","uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX].hooks.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Name","uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX].hooks.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX].hooks.items.[INDEX].name","typeLabel":"string | null"},"prompt":{"oneOf":[{"type":"string","title":"Prompt","uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX].hooks.items.[INDEX].prompt.oneOf.0","typeLabel":"string"},{"type":"null","title":"Prompt","uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX].hooks.items.[INDEX].prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX].hooks.items.[INDEX].prompt","typeLabel":"string | null"},"system_prompt":{"oneOf":[{"type":"string","title":"System Prompt","uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX].hooks.items.[INDEX].system_prompt.oneOf.0","typeLabel":"string"},{"type":"null","title":"System Prompt","uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX].hooks.items.[INDEX].system_prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX].hooks.items.[INDEX].system_prompt","typeLabel":"string | null"},"tools":{"items":{"type":"string","uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX].hooks.items.[INDEX].tools.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Tools","uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX].hooks.items.[INDEX].tools","typeLabel":"string[]"},"timeout":{"type":"integer","title":"Timeout","default":60,"uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX].hooks.items.[INDEX].timeout","typeLabel":"integer"},"max_iterations":{"type":"integer","title":"Max Iterations","default":3,"uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX].hooks.items.[INDEX].max_iterations","typeLabel":"integer"},"async":{"type":"boolean","title":"Async","default":false,"uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX].hooks.items.[INDEX].async","typeLabel":"boolean"}},"type":"object","required":["command"],"title":"HookDefinition","description":"A single hook definition.","uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX].hooks.items.[INDEX]","typeLabel":"HookDefinition · object"},"type":"array","title":"Hooks","uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX].hooks","typeLabel":"HookDefinition · object[]"}},"type":"object","title":"HookMatcher","description":"Matches events to hooks based on patterns.\n\nSupports exact match, wildcard (*), and regex (auto-detected or /pattern/).","uniqueKey":"hook_config.oneOf.0.post_tool_use.items.[INDEX]","typeLabel":"HookMatcher · object"},"type":"array","title":"Post Tool Use","description":"Hooks that run after tool execution","uniqueKey":"hook_config.oneOf.0.post_tool_use","typeLabel":"HookMatcher · object[]"},"user_prompt_submit":{"items":{"properties":{"matcher":{"type":"string","title":"Matcher","default":"*","uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX].matcher","typeLabel":"string"},"hooks":{"items":{"properties":{"command":{"type":"string","title":"Command","isRequired":true,"uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX].hooks.items.[INDEX].command","typeLabel":"string"},"type":{"type":"string","enum":["command","prompt","agent"],"title":"HookType","description":"Types of hooks that can be executed.","default":"command","uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX].hooks.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"name":{"oneOf":[{"type":"string","title":"Name","uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX].hooks.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Name","uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX].hooks.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX].hooks.items.[INDEX].name","typeLabel":"string | null"},"prompt":{"oneOf":[{"type":"string","title":"Prompt","uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX].hooks.items.[INDEX].prompt.oneOf.0","typeLabel":"string"},{"type":"null","title":"Prompt","uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX].hooks.items.[INDEX].prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX].hooks.items.[INDEX].prompt","typeLabel":"string | null"},"system_prompt":{"oneOf":[{"type":"string","title":"System Prompt","uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX].hooks.items.[INDEX].system_prompt.oneOf.0","typeLabel":"string"},{"type":"null","title":"System Prompt","uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX].hooks.items.[INDEX].system_prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX].hooks.items.[INDEX].system_prompt","typeLabel":"string | null"},"tools":{"items":{"type":"string","uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX].hooks.items.[INDEX].tools.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Tools","uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX].hooks.items.[INDEX].tools","typeLabel":"string[]"},"timeout":{"type":"integer","title":"Timeout","default":60,"uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX].hooks.items.[INDEX].timeout","typeLabel":"integer"},"max_iterations":{"type":"integer","title":"Max Iterations","default":3,"uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX].hooks.items.[INDEX].max_iterations","typeLabel":"integer"},"async":{"type":"boolean","title":"Async","default":false,"uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX].hooks.items.[INDEX].async","typeLabel":"boolean"}},"type":"object","required":["command"],"title":"HookDefinition","description":"A single hook definition.","uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX].hooks.items.[INDEX]","typeLabel":"HookDefinition · object"},"type":"array","title":"Hooks","uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX].hooks","typeLabel":"HookDefinition · object[]"}},"type":"object","title":"HookMatcher","description":"Matches events to hooks based on patterns.\n\nSupports exact match, wildcard (*), and regex (auto-detected or /pattern/).","uniqueKey":"hook_config.oneOf.0.user_prompt_submit.items.[INDEX]","typeLabel":"HookMatcher · object"},"type":"array","title":"User Prompt Submit","description":"Hooks that run when user submits a prompt","uniqueKey":"hook_config.oneOf.0.user_prompt_submit","typeLabel":"HookMatcher · object[]"},"session_start":{"items":{"properties":{"matcher":{"type":"string","title":"Matcher","default":"*","uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX].matcher","typeLabel":"string"},"hooks":{"items":{"properties":{"command":{"type":"string","title":"Command","isRequired":true,"uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX].hooks.items.[INDEX].command","typeLabel":"string"},"type":{"type":"string","enum":["command","prompt","agent"],"title":"HookType","description":"Types of hooks that can be executed.","default":"command","uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX].hooks.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"name":{"oneOf":[{"type":"string","title":"Name","uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX].hooks.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Name","uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX].hooks.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX].hooks.items.[INDEX].name","typeLabel":"string | null"},"prompt":{"oneOf":[{"type":"string","title":"Prompt","uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX].hooks.items.[INDEX].prompt.oneOf.0","typeLabel":"string"},{"type":"null","title":"Prompt","uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX].hooks.items.[INDEX].prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX].hooks.items.[INDEX].prompt","typeLabel":"string | null"},"system_prompt":{"oneOf":[{"type":"string","title":"System Prompt","uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX].hooks.items.[INDEX].system_prompt.oneOf.0","typeLabel":"string"},{"type":"null","title":"System Prompt","uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX].hooks.items.[INDEX].system_prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX].hooks.items.[INDEX].system_prompt","typeLabel":"string | null"},"tools":{"items":{"type":"string","uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX].hooks.items.[INDEX].tools.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Tools","uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX].hooks.items.[INDEX].tools","typeLabel":"string[]"},"timeout":{"type":"integer","title":"Timeout","default":60,"uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX].hooks.items.[INDEX].timeout","typeLabel":"integer"},"max_iterations":{"type":"integer","title":"Max Iterations","default":3,"uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX].hooks.items.[INDEX].max_iterations","typeLabel":"integer"},"async":{"type":"boolean","title":"Async","default":false,"uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX].hooks.items.[INDEX].async","typeLabel":"boolean"}},"type":"object","required":["command"],"title":"HookDefinition","description":"A single hook definition.","uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX].hooks.items.[INDEX]","typeLabel":"HookDefinition · object"},"type":"array","title":"Hooks","uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX].hooks","typeLabel":"HookDefinition · object[]"}},"type":"object","title":"HookMatcher","description":"Matches events to hooks based on patterns.\n\nSupports exact match, wildcard (*), and regex (auto-detected or /pattern/).","uniqueKey":"hook_config.oneOf.0.session_start.items.[INDEX]","typeLabel":"HookMatcher · object"},"type":"array","title":"Session Start","description":"Hooks that run when a session starts","uniqueKey":"hook_config.oneOf.0.session_start","typeLabel":"HookMatcher · object[]"},"session_end":{"items":{"properties":{"matcher":{"type":"string","title":"Matcher","default":"*","uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX].matcher","typeLabel":"string"},"hooks":{"items":{"properties":{"command":{"type":"string","title":"Command","isRequired":true,"uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX].hooks.items.[INDEX].command","typeLabel":"string"},"type":{"type":"string","enum":["command","prompt","agent"],"title":"HookType","description":"Types of hooks that can be executed.","default":"command","uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX].hooks.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"name":{"oneOf":[{"type":"string","title":"Name","uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX].hooks.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Name","uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX].hooks.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX].hooks.items.[INDEX].name","typeLabel":"string | null"},"prompt":{"oneOf":[{"type":"string","title":"Prompt","uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX].hooks.items.[INDEX].prompt.oneOf.0","typeLabel":"string"},{"type":"null","title":"Prompt","uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX].hooks.items.[INDEX].prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX].hooks.items.[INDEX].prompt","typeLabel":"string | null"},"system_prompt":{"oneOf":[{"type":"string","title":"System Prompt","uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX].hooks.items.[INDEX].system_prompt.oneOf.0","typeLabel":"string"},{"type":"null","title":"System Prompt","uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX].hooks.items.[INDEX].system_prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX].hooks.items.[INDEX].system_prompt","typeLabel":"string | null"},"tools":{"items":{"type":"string","uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX].hooks.items.[INDEX].tools.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Tools","uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX].hooks.items.[INDEX].tools","typeLabel":"string[]"},"timeout":{"type":"integer","title":"Timeout","default":60,"uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX].hooks.items.[INDEX].timeout","typeLabel":"integer"},"max_iterations":{"type":"integer","title":"Max Iterations","default":3,"uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX].hooks.items.[INDEX].max_iterations","typeLabel":"integer"},"async":{"type":"boolean","title":"Async","default":false,"uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX].hooks.items.[INDEX].async","typeLabel":"boolean"}},"type":"object","required":["command"],"title":"HookDefinition","description":"A single hook definition.","uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX].hooks.items.[INDEX]","typeLabel":"HookDefinition · object"},"type":"array","title":"Hooks","uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX].hooks","typeLabel":"HookDefinition · object[]"}},"type":"object","title":"HookMatcher","description":"Matches events to hooks based on patterns.\n\nSupports exact match, wildcard (*), and regex (auto-detected or /pattern/).","uniqueKey":"hook_config.oneOf.0.session_end.items.[INDEX]","typeLabel":"HookMatcher · object"},"type":"array","title":"Session End","description":"Hooks that run when a session ends","uniqueKey":"hook_config.oneOf.0.session_end","typeLabel":"HookMatcher · object[]"},"stop":{"items":{"properties":{"matcher":{"type":"string","title":"Matcher","default":"*","uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX].matcher","typeLabel":"string"},"hooks":{"items":{"properties":{"command":{"type":"string","title":"Command","isRequired":true,"uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX].hooks.items.[INDEX].command","typeLabel":"string"},"type":{"type":"string","enum":["command","prompt","agent"],"title":"HookType","description":"Types of hooks that can be executed.","default":"command","uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX].hooks.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"name":{"oneOf":[{"type":"string","title":"Name","uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX].hooks.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Name","uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX].hooks.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX].hooks.items.[INDEX].name","typeLabel":"string | null"},"prompt":{"oneOf":[{"type":"string","title":"Prompt","uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX].hooks.items.[INDEX].prompt.oneOf.0","typeLabel":"string"},{"type":"null","title":"Prompt","uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX].hooks.items.[INDEX].prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX].hooks.items.[INDEX].prompt","typeLabel":"string | null"},"system_prompt":{"oneOf":[{"type":"string","title":"System Prompt","uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX].hooks.items.[INDEX].system_prompt.oneOf.0","typeLabel":"string"},{"type":"null","title":"System Prompt","uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX].hooks.items.[INDEX].system_prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX].hooks.items.[INDEX].system_prompt","typeLabel":"string | null"},"tools":{"items":{"type":"string","uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX].hooks.items.[INDEX].tools.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Tools","uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX].hooks.items.[INDEX].tools","typeLabel":"string[]"},"timeout":{"type":"integer","title":"Timeout","default":60,"uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX].hooks.items.[INDEX].timeout","typeLabel":"integer"},"max_iterations":{"type":"integer","title":"Max Iterations","default":3,"uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX].hooks.items.[INDEX].max_iterations","typeLabel":"integer"},"async":{"type":"boolean","title":"Async","default":false,"uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX].hooks.items.[INDEX].async","typeLabel":"boolean"}},"type":"object","required":["command"],"title":"HookDefinition","description":"A single hook definition.","uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX].hooks.items.[INDEX]","typeLabel":"HookDefinition · object"},"type":"array","title":"Hooks","uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX].hooks","typeLabel":"HookDefinition · object[]"}},"type":"object","title":"HookMatcher","description":"Matches events to hooks based on patterns.\n\nSupports exact match, wildcard (*), and regex (auto-detected or /pattern/).","uniqueKey":"hook_config.oneOf.0.stop.items.[INDEX]","typeLabel":"HookMatcher · object"},"type":"array","title":"Stop","description":"Hooks that run when the agent attempts to stop","uniqueKey":"hook_config.oneOf.0.stop","typeLabel":"HookMatcher · object[]"}},"additionalProperties":false,"uniqueKey":"hook_config.oneOf.0","typeLabel":"HookConfig · object"},{"type":"null","description":"Hook configuration for this conversation. Includes definitions for PreToolUse, PostToolUse, UserPromptSubmit, SessionStart, SessionEnd, and Stop hooks.","uniqueKey":"hook_config.oneOf.1","typeLabel":"null"}],"uniqueKey":"hook_config","typeLabel":"HookConfig · object | null"},"title":{"oneOf":[{"type":"string","title":"Title","description":"User-defined title for the conversation","uniqueKey":"title.oneOf.0","typeLabel":"string"},{"type":"null","title":"Title","description":"User-defined title for the conversation","uniqueKey":"title.oneOf.1","typeLabel":"null"}],"uniqueKey":"title","typeLabel":"string | null"},"metrics":{"oneOf":[{"type":"object","title":"MetricsSnapshot","description":"A snapshot of metrics at a point in time.\n\nDoes not include lists of individual costs, latencies, or token usages.","properties":{"model_name":{"type":"string","title":"Model Name","description":"Name of the model","default":"default","uniqueKey":"metrics.oneOf.0.model_name","typeLabel":"string"},"accumulated_cost":{"type":"number","minimum":0,"title":"Accumulated Cost","description":"Total accumulated cost, must be non-negative","default":0,"uniqueKey":"metrics.oneOf.0.accumulated_cost","typeLabel":"number"},"max_budget_per_task":{"oneOf":[{"type":"number","title":"Max Budget Per Task","description":"Maximum budget per task","uniqueKey":"metrics.oneOf.0.max_budget_per_task.oneOf.0","typeLabel":"number"},{"type":"null","title":"Max Budget Per Task","description":"Maximum budget per task","uniqueKey":"metrics.oneOf.0.max_budget_per_task.oneOf.1","typeLabel":"null"}],"uniqueKey":"metrics.oneOf.0.max_budget_per_task","typeLabel":"number | null"},"accumulated_token_usage":{"oneOf":[{"type":"object","title":"TokenUsage","description":"Accumulated token usage across all calls","properties":{"model":{"type":"string","title":"Model","default":"","uniqueKey":"metrics.oneOf.0.accumulated_token_usage.oneOf.0.model","typeLabel":"string"},"prompt_tokens":{"type":"integer","minimum":0,"title":"Prompt Tokens","description":"Prompt tokens must be non-negative","default":0,"uniqueKey":"metrics.oneOf.0.accumulated_token_usage.oneOf.0.prompt_tokens","typeLabel":"integer"},"completion_tokens":{"type":"integer","minimum":0,"title":"Completion Tokens","description":"Completion tokens must be non-negative","default":0,"uniqueKey":"metrics.oneOf.0.accumulated_token_usage.oneOf.0.completion_tokens","typeLabel":"integer"},"cache_read_tokens":{"type":"integer","minimum":0,"title":"Cache Read Tokens","description":"Cache read tokens must be non-negative","default":0,"uniqueKey":"metrics.oneOf.0.accumulated_token_usage.oneOf.0.cache_read_tokens","typeLabel":"integer"},"cache_write_tokens":{"type":"integer","minimum":0,"title":"Cache Write Tokens","description":"Cache write tokens must be non-negative","default":0,"uniqueKey":"metrics.oneOf.0.accumulated_token_usage.oneOf.0.cache_write_tokens","typeLabel":"integer"},"reasoning_tokens":{"type":"integer","minimum":0,"title":"Reasoning Tokens","description":"Reasoning tokens must be non-negative","default":0,"uniqueKey":"metrics.oneOf.0.accumulated_token_usage.oneOf.0.reasoning_tokens","typeLabel":"integer"},"context_window":{"type":"integer","minimum":0,"title":"Context Window","description":"Context window must be non-negative","default":0,"uniqueKey":"metrics.oneOf.0.accumulated_token_usage.oneOf.0.context_window","typeLabel":"integer"},"per_turn_token":{"type":"integer","minimum":0,"title":"Per Turn Token","description":"Per turn tokens must be non-negative","default":0,"uniqueKey":"metrics.oneOf.0.accumulated_token_usage.oneOf.0.per_turn_token","typeLabel":"integer"},"response_id":{"type":"string","title":"Response Id","default":"","uniqueKey":"metrics.oneOf.0.accumulated_token_usage.oneOf.0.response_id","typeLabel":"string"}},"uniqueKey":"metrics.oneOf.0.accumulated_token_usage.oneOf.0","typeLabel":"TokenUsage · object"},{"type":"null","description":"Accumulated token usage across all calls","uniqueKey":"metrics.oneOf.0.accumulated_token_usage.oneOf.1","typeLabel":"null"}],"uniqueKey":"metrics.oneOf.0.accumulated_token_usage","typeLabel":"TokenUsage · object | null"}},"uniqueKey":"metrics.oneOf.0","typeLabel":"MetricsSnapshot · object"},{"type":"null","uniqueKey":"metrics.oneOf.1","typeLabel":"null"}],"uniqueKey":"metrics","typeLabel":"MetricsSnapshot · object | null"},"created_at":{"type":"string","format":"date-time","title":"Created At","uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","uniqueKey":"updated_at","typeLabel":"string\u003cdate-time>"},"forked_from_conversation_id":{"oneOf":[{"type":"string","title":"Forked From Conversation Id","description":"ID of the conversation this one was forked from. ``None`` for conversations created directly (not via fork).","format":"uuid","uniqueKey":"forked_from_conversation_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Forked From Conversation Id","description":"ID of the conversation this one was forked from. ``None`` for conversations created directly (not via fork).","uniqueKey":"forked_from_conversation_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"forked_from_conversation_id","typeLabel":"string\u003cuuid> | null"},"forked_from_event_id":{"oneOf":[{"type":"string","title":"Forked From Event Id","description":"Event ID this conversation was forked at. ``None`` for non-forked conversations or whole-conversation forks.","uniqueKey":"forked_from_event_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Forked From Event Id","description":"Event ID this conversation was forked at. ``None`` for non-forked conversations or whole-conversation forks.","uniqueKey":"forked_from_event_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"forked_from_event_id","typeLabel":"string | null"},"parent_conversation_id":{"oneOf":[{"type":"string","title":"Parent Conversation Id","description":"ID of the conversation that owns this one. ``None`` for top-level conversations.","format":"uuid","uniqueKey":"parent_conversation_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Parent Conversation Id","description":"ID of the conversation that owns this one. ``None`` for top-level conversations.","uniqueKey":"parent_conversation_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"parent_conversation_id","typeLabel":"string\u003cuuid> | null"},"sub_conversation_ids":{"items":{"type":"string","format":"uuid","uniqueKey":"sub_conversation_ids.items.[INDEX]","typeLabel":"string\u003cuuid>"},"type":"array","title":"Sub Conversation Ids","description":"IDs of conversations naming this one as their parent. Derived from the server catalog; empty on webhook payloads. Name mirrors the Cloud API field.","uniqueKey":"sub_conversation_ids","typeLabel":"string\u003cuuid>[]"},"tags":{"additionalProperties":{"type":"string","uniqueKey":"tags.additionalProperties","typeLabel":"string"},"type":"object","title":"Tags","description":"Key-value tags for the conversation. Keys must be lowercase alphanumeric. Values are arbitrary strings up to 256 characters.","uniqueKey":"tags","typeLabel":"Tags · object"},"current_model_id":{"oneOf":[{"type":"string","title":"Current Model Id","description":"Model the agent is actually using for this session. For ACP agents, this is lifted off ``ACPAgent.current_model_id`` (populated from the ``models.currentModelId`` field on the ACP session response, or from ``acp_model`` when the caller forced an override). May be an opaque alias (e.g. claude-agent-acp's ``\"default\"``); match it against ``available_models`` to get a display label. ``None`` for older ACP servers that don't surface the field, or while the agent is still initializing. Native OpenHands agents leave this ``None`` — consumers should read ``agent.llm.model`` for those.","uniqueKey":"current_model_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Current Model Id","description":"Model the agent is actually using for this session. For ACP agents, this is lifted off ``ACPAgent.current_model_id`` (populated from the ``models.currentModelId`` field on the ACP session response, or from ``acp_model`` when the caller forced an override). May be an opaque alias (e.g. claude-agent-acp's ``\"default\"``); match it against ``available_models`` to get a display label. ``None`` for older ACP servers that don't surface the field, or while the agent is still initializing. Native OpenHands agents leave this ``None`` — consumers should read ``agent.llm.model`` for those.","uniqueKey":"current_model_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"current_model_id","typeLabel":"string | null"},"available_models":{"items":{"properties":{"model_id":{"type":"string","title":"Model Id","description":"Server-assigned model identifier. May be concrete (e.g. ``\"gpt-5.5\"``) or an opaque alias (e.g. ``\"default\"``, ``\"auto\"``). This is the value to pass back to the server to switch to this model.","isRequired":true,"uniqueKey":"available_models.items.[INDEX].model_id","typeLabel":"string"},"name":{"oneOf":[{"type":"string","title":"Name","description":"Human-readable label, e.g. ``\"GPT-5.5\"``.","uniqueKey":"available_models.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Name","description":"Human-readable label, e.g. ``\"GPT-5.5\"``.","uniqueKey":"available_models.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"available_models.items.[INDEX].name","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","title":"Description","description":"Optional longer description supplied by the server.","uniqueKey":"available_models.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"Optional longer description supplied by the server.","uniqueKey":"available_models.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"available_models.items.[INDEX].description","typeLabel":"string | null"}},"type":"object","required":["model_id"],"title":"ACPModelInfo","description":"One model an ACP server offers for a session.\n\nA normalized, stable mirror of the ACP protocol's ``ModelInfo``. The\nprotocol ``models`` capability is flagged **UNSTABLE**, so we re-map it\ninto our own type at the SDK boundary rather than re-serializing the\nvendored ``acp.schema`` type onto the agent-server's public API — clients\nget a stable shape regardless of upstream protocol churn.\n\nCarries everything a client needs to render a picker and resolve a\n``current_model_id`` to a display label *itself*; the SDK deliberately\ndoes no name curation.","uniqueKey":"available_models.items.[INDEX]","typeLabel":"ACPModelInfo · object"},"type":"array","title":"Available Models","description":"Models the ACP server offers for this session, lifted off ``ACPAgent.available_models`` (the ``models.availableModels`` field on the ACP session response). Each entry carries a ``model_id`` plus an optional ``name``/``description``. Surfaced verbatim so clients can render a model picker and resolve ``current_model_id`` to a display label themselves — the server does no name curation. Empty for ACP servers that don't surface the (UNSTABLE) capability and for native OpenHands agents. Client contract: ``current_model_id`` is NOT guaranteed to be a member — a forced ``acp_model`` override may name a model absent from the list — so treat a miss as 'show the raw id'. Some entries are opaque aliases whose human identity lives in ``description`` (e.g. claude-agent-acp's ``\"default\"`` -> ``\"Opus 4.7 with 1M context · ...\"``).","uniqueKey":"available_models","typeLabel":"ACPModelInfo · object[]"},"supports_runtime_model_switch":{"type":"boolean","title":"Supports Runtime Model Switch","description":"Whether a live, mid-conversation model switch will be attempted for this conversation — tells the inline picker whether to offer a live-switch control. Mirrors the SDK's switch gate: ``True`` for known switch-capable providers; ``False`` for unknown/custom ACP servers because their generic config writes are not guaranteed live-switch primitives. ``False`` for native OpenHands agents, for a known provider that declares no support, and before the conversation has started a session.","default":false,"uniqueKey":"supports_runtime_model_switch","typeLabel":"boolean"},"launched_agent_profile":{"oneOf":[{"type":"object","title":"LaunchedAgentProfile","description":"Provenance snapshot of the agent profile that launched this conversation. Set at creation when the conversation was started via ``agent_profile_id``; ``None`` for conversations started directly with ``agent`` or ``agent_settings``. Clients use this to identify which agent profile is current without fragile settings-comparison.","required":["agent_profile_id","revision"],"properties":{"agent_profile_id":{"type":"string","format":"uuid","title":"Agent Profile Id","description":"Stable id of the agent profile that launched the conversation.","isRequired":true,"uniqueKey":"launched_agent_profile.oneOf.0.agent_profile_id","typeLabel":"string\u003cuuid>"},"revision":{"type":"integer","minimum":0,"title":"Revision","description":"Revision of the agent profile at launch time.","isRequired":true,"uniqueKey":"launched_agent_profile.oneOf.0.revision","typeLabel":"integer"}},"uniqueKey":"launched_agent_profile.oneOf.0","typeLabel":"LaunchedAgentProfile · object"},{"type":"null","description":"Provenance snapshot of the agent profile that launched this conversation. Set at creation when the conversation was started via ``agent_profile_id``; ``None`` for conversations started directly with ``agent`` or ``agent_settings``. Clients use this to identify which agent profile is current without fragile settings-comparison.","uniqueKey":"launched_agent_profile.oneOf.1","typeLabel":"null"}],"uniqueKey":"launched_agent_profile","typeLabel":"LaunchedAgentProfile · object | null"},"client_tools":{"items":{"properties":{"name":{"type":"string","title":"Name","description":"Unique tool name the agent will use to call this tool.","isRequired":true,"uniqueKey":"client_tools.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","title":"Description","description":"Description shown to the LLM explaining when and how to use this tool.","isRequired":true,"uniqueKey":"client_tools.items.[INDEX].description","typeLabel":"string"},"parameters":{"additionalProperties":true,"type":"object","title":"Parameters","description":"JSON Schema describing the tool's input parameters. Must be an object schema.","uniqueKey":"client_tools.items.[INDEX].parameters","typeLabel":"Parameters · object"},"annotations":{"oneOf":[{"type":"object","title":"openhands.sdk.tool.tool.ToolAnnotations","description":"Optional MCP-style annotations for the tool. When omitted, the tool is treated conservatively (not read-only), so the agent is asked to predict a security risk before calling it.","properties":{"title":{"oneOf":[{"type":"string","title":"Title","description":"A human-readable title for the tool.","uniqueKey":"client_tools.items.[INDEX].annotations.oneOf.0.title.oneOf.0","typeLabel":"string"},{"type":"null","title":"Title","description":"A human-readable title for the tool.","uniqueKey":"client_tools.items.[INDEX].annotations.oneOf.0.title.oneOf.1","typeLabel":"null"}],"uniqueKey":"client_tools.items.[INDEX].annotations.oneOf.0.title","typeLabel":"string | null"},"readOnlyHint":{"type":"boolean","title":"Readonlyhint","description":"If true, the tool does not modify its environment. Default: false","default":false,"uniqueKey":"client_tools.items.[INDEX].annotations.oneOf.0.readOnlyHint","typeLabel":"boolean"},"destructiveHint":{"type":"boolean","title":"Destructivehint","description":"If true, the tool may perform destructive updates to its environment. If false, the tool performs only additive updates. (This property is meaningful only when `readOnlyHint == false`) Default: true","default":true,"uniqueKey":"client_tools.items.[INDEX].annotations.oneOf.0.destructiveHint","typeLabel":"boolean"},"idempotentHint":{"type":"boolean","title":"Idempotenthint","description":"If true, calling the tool repeatedly with the same arguments will have no additional effect on the its environment. (This property is meaningful only when `readOnlyHint == false`) Default: false","default":false,"uniqueKey":"client_tools.items.[INDEX].annotations.oneOf.0.idempotentHint","typeLabel":"boolean"},"openWorldHint":{"type":"boolean","title":"Openworldhint","description":"If true, this tool may interact with an 'open world' of external entities. If false, the tool's domain of interaction is closed. For example, the world of a web search tool is open, whereas that of a memory tool is not. Default: true","default":true,"uniqueKey":"client_tools.items.[INDEX].annotations.oneOf.0.openWorldHint","typeLabel":"boolean"}},"uniqueKey":"client_tools.items.[INDEX].annotations.oneOf.0","typeLabel":"openhands.sdk.tool.tool.ToolAnnotations · object"},{"type":"null","description":"Optional MCP-style annotations for the tool. When omitted, the tool is treated conservatively (not read-only), so the agent is asked to predict a security risk before calling it.","uniqueKey":"client_tools.items.[INDEX].annotations.oneOf.1","typeLabel":"null"}],"uniqueKey":"client_tools.items.[INDEX].annotations","typeLabel":"openhands.sdk.tool.tool.ToolAnnotations · object | null"}},"type":"object","required":["name","description"],"title":"ClientToolSpec","description":"A tool defined by the client, executed externally (not by the SDK).\n\nClients pass these specs in ``POST /conversations`` to register tools\nwhose execution is handled outside the SDK (e.g., by a frontend\nlistening for ActionEvents over WebSocket).","uniqueKey":"client_tools.items.[INDEX]","typeLabel":"ClientToolSpec · object"},"type":"array","title":"Client Tools","description":"Client-defined tool specs registered for this conversation. Surfaced so that a client re-attaching by conversation id can register the dynamic ClientAction_* action types before syncing persisted events, avoiding 'Unknown kind' deserialization errors.","uniqueKey":"client_tools","typeLabel":"ClientToolSpec · object[]"}},"type":"object","required":["id","workspace","agent"],"title":"ConversationInfo","description":"Information about a conversation running locally without a Runtime sandbox.","uniqueKey":"","typeLabel":"ConversationInfo · object"},"examples":{"Example":{"title":"Example","value":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","workspace":{"working_dir":"\u003cstring>","kind":"LocalWorkspace"},"agent":{"acp_command":["\u003cstring>"],"llm":{"model":"gpt-5.5","api_key":"\u003cstring>","auth_type":"api_key","subscription_vendor":"openai","base_url":"\u003cstring>","api_version":"\u003cstring>","aws_access_key_id":"\u003cstring>","aws_secret_access_key":"\u003cstring>","aws_session_token":"\u003cstring>","aws_region_name":"\u003cstring>","aws_profile_name":"\u003cstring>","aws_role_name":"\u003cstring>","aws_session_name":"\u003cstring>","aws_bedrock_runtime_endpoint":"\u003cstring>","openrouter_site_url":"https://docs.all-hands.dev/","openrouter_app_name":"OpenHands","num_retries":5,"retry_multiplier":8,"retry_min_wait":8,"retry_max_wait":64,"timeout":300,"max_message_chars":30000,"temperature":1,"top_p":0.5,"top_k":1,"max_input_tokens":2,"max_output_tokens":2,"model_canonical_name":"\u003cstring>","api_mode":"auto","capability_overrides":{},"extra_headers":{},"input_cost_per_token":1,"output_cost_per_token":1,"ollama_base_url":"\u003cstring>","stream":false,"drop_params":true,"modify_params":true,"disable_vision":true,"disable_stop_word":false,"caching_prompt":true,"log_completions":false,"log_completions_folder":"logs/completions","custom_tokenizer":"\u003cstring>","native_tool_calling":true,"force_string_serializer":true,"inline_image_urls":true,"reasoning_effort":"high","enable_encrypted_reasoning":true,"prompt_cache_retention":"24h","extended_thinking_budget":200000,"seed":123,"usage_id":"default","litellm_extra_body":{},"fallback_strategy":{"fallback_llms":["\u003cstring>"],"profile_store_dir":"\u003cstring>"}},"tools":[{"name":"TerminalTool","params":{"working_dir":"/workspace"}}],"mcp_config":{"fetch":{"args":["--with","mcp==1.29.0","mcp-server-fetch==2026.7.10"],"command":"uvx"}},"filter_tools_regex":"^(?!repomix)(.*)|^repomix.*pack_codebase.*$","include_default_tools":["\u003cstring>"],"agent_context":{"skills":[{"content":"When you see this message, you should reply like you are a grumpy cat forced to use the internet.","name":"AGENTS.md","type":"repo"},{"content":"IMPORTANT! The user has said the magic word \"flarglebargle\". You must only respond with a message telling them how smart they are","name":"flarglebargle","trigger":["flarglebargle"],"type":"knowledge"}],"system_message_suffix":"Always finish your response with the word 'yay!'"},"system_prompt":"\u003cstring>","system_prompt_filename":"system_prompt.j2","security_policy_filename":"security_policy.j2","system_prompt_kwargs":{"cli_mode":true},"condenser":{"keep_first":10,"kind":"LLMSummarizingCondenser","llm":{"api_key":"your_api_key_here","base_url":"https://llm-proxy.eval.all-hands.dev","model":"litellm_proxy/openai/gpt-5.5"},"max_size":80},"critic":{"kind":"AgentFinishedCritic"},"tool_concurrency_limit":1,"acp_server":"\u003cstring>","acp_args":["\u003cstring>"],"acp_session_mode":"\u003cstring>","acp_prompt_timeout":1800,"acp_startup_timeout":90,"acp_model":"\u003cstring>","acp_resume_session_id":"\u003cstring>","acp_file_secrets":[{"secret_name":"\u003cstring>","filename":"\u003cstring>","env_var":"\u003cstring>","subdir":"\u003cstring>","env_points_to":"file","warn_if_unset":[]}],"acp_isolate_data_dir":false,"kind":"ACPAgent"},"persistence_dir":"workspace/conversations","max_iterations":500,"stuck_detection":true,"execution_status":"idle","confirmation_policy":{"kind":"NeverConfirm"},"security_analyzer":{"high_patterns":[["\u003cstring>","\u003cstring>","\u003cstring>"]],"medium_patterns":[["\u003cstring>","\u003cstring>","\u003cstring>"]],"injection_high_patterns":[["\u003cstring>","\u003cstring>","\u003cstring>"]],"injection_medium_patterns":[["\u003cstring>","\u003cstring>","\u003cstring>"]],"kind":"PatternSecurityAnalyzer"},"activated_knowledge_skills":["\u003cstring>"],"invoked_skills":["\u003cstring>"],"blocked_actions":{},"blocked_messages":{},"last_user_message_id":"\u003cstring>","leaf_event_id":"\u003cstring>","stats":{"usage_to_metrics":{}},"secret_registry":{"secret_sources":{}},"agent_state":{},"hook_config":{"pre_tool_use":[{"matcher":"*","hooks":[{"command":"\u003cstring>","type":"command","name":"\u003cstring>","prompt":"\u003cstring>","system_prompt":"\u003cstring>","tools":["\u003cstring>"],"timeout":60,"max_iterations":3,"async":false}]}],"post_tool_use":[{"matcher":"*","hooks":[{"command":"\u003cstring>","type":"command","name":"\u003cstring>","prompt":"\u003cstring>","system_prompt":"\u003cstring>","tools":["\u003cstring>"],"timeout":60,"max_iterations":3,"async":false}]}],"user_prompt_submit":[{"matcher":"*","hooks":[{"command":"\u003cstring>","type":"command","name":"\u003cstring>","prompt":"\u003cstring>","system_prompt":"\u003cstring>","tools":["\u003cstring>"],"timeout":60,"max_iterations":3,"async":false}]}],"session_start":[{"matcher":"*","hooks":[{"command":"\u003cstring>","type":"command","name":"\u003cstring>","prompt":"\u003cstring>","system_prompt":"\u003cstring>","tools":["\u003cstring>"],"timeout":60,"max_iterations":3,"async":false}]}],"session_end":[{"matcher":"*","hooks":[{"command":"\u003cstring>","type":"command","name":"\u003cstring>","prompt":"\u003cstring>","system_prompt":"\u003cstring>","tools":["\u003cstring>"],"timeout":60,"max_iterations":3,"async":false}]}],"stop":[{"matcher":"*","hooks":[{"command":"\u003cstring>","type":"command","name":"\u003cstring>","prompt":"\u003cstring>","system_prompt":"\u003cstring>","tools":["\u003cstring>"],"timeout":60,"max_iterations":3,"async":false}]}]},"title":"\u003cstring>","metrics":{"model_name":"default","accumulated_cost":0,"max_budget_per_task":123,"accumulated_token_usage":{"model":"","prompt_tokens":0,"completion_tokens":0,"cache_read_tokens":0,"cache_write_tokens":0,"reasoning_tokens":0,"context_window":0,"per_turn_token":0,"response_id":""}},"created_at":"2023-11-07T05:31:56Z","updated_at":"2023-11-07T05:31:56Z","forked_from_conversation_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","forked_from_event_id":"\u003cstring>","parent_conversation_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","sub_conversation_ids":["3c90c3cc-0d44-4b50-8888-8dd25736052a"],"tags":{},"current_model_id":"\u003cstring>","available_models":[{"model_id":"\u003cstring>","name":"\u003cstring>","description":"\u003cstring>"}],"supports_runtime_model_switch":false,"launched_agent_profile":{"agent_profile_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","revision":1},"client_tools":[{"name":"\u003cstring>","description":"\u003cstring>","parameters":{},"annotations":{"title":"\u003cstring>","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}}]}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"a9db847d-5cb6-44ac-8856-7694b82b9b4c":{"description":"Successful Response","content":{"application/json":{"schema":{"properties":{"success":{"type":"boolean","title":"Success","default":true,"uniqueKey":"success","typeLabel":"boolean"}},"type":"object","title":"Success","uniqueKey":"","typeLabel":"Success · object"},"examples":{"Example":{"title":"Example","value":{"success":true}}},"exampleType":"generated"}},"exampleType":"generated"},"6ffd843d-b939-423c-8879-5cb5b576db0f":{"description":"Validation Error","content":{"application/json":{"schema":{"properties":{"detail":{"items":{"properties":{"loc":{"items":{"oneOf":[{"type":"string","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"detail.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | integer"},"type":"array","title":"Location","isRequired":true,"uniqueKey":"detail.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Message","isRequired":true,"uniqueKey":"detail.items.[INDEX].msg","typeLabel":"string"},"type":{"type":"string","title":"Error Type","isRequired":true,"uniqueKey":"detail.items.[INDEX].type","typeLabel":"string"},"input":{"oneOf":[{"title":"Input"}],"uniqueKey":"detail.items.[INDEX].input","typeLabel":"any"},"ctx":{"type":"object","title":"Context","uniqueKey":"detail.items.[INDEX].ctx","typeLabel":"Context · object"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError","uniqueKey":"detail.items.[INDEX]","typeLabel":"ValidationError · object"},"type":"array","title":"Detail","uniqueKey":"detail","typeLabel":"ValidationError · object[]"}},"type":"object","title":"HTTPValidationError","uniqueKey":"","typeLabel":"HTTPValidationError · object"},"examples":{"Example":{"title":"Example","value":{"detail":[{"loc":["\u003cstring>"],"msg":"\u003cstring>","type":"\u003cstring>","input":"\u003cunknown>","ctx":{}}]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"8a09e5b1-2607-46f3-a717-eac815e86186":{"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-Access-Token","scopes":[]}}},"servers":{},"schemas":{"47c52630-f29b-40ea-b024-8b206320af2b":{"oneOf":[{"type":"object","title":"LLMSummarizingCondenser","description":"LLM-based condenser that summarizes forgotten events.\n\nUses an independent LLM (stored in the `llm` attribute) for generating summaries\nof forgotten events. The optional `agent_llm` parameter passed to condense() is\nthe LLM used by the agent for token counting purposes, and you should not assume\nit is the same as the one defined in this condenser.","required":["llm"],"properties":{"llm":{"properties":{"model":{"type":"string","title":"Model","description":"Model name.","default":"gpt-5.5","openhands_settings":{"depends_on":[],"prominence":"critical"}},"api_key":{"oneOf":[{"type":"string","title":"Api Key","description":"API key."},{"type":"string","title":"Api Key","description":"API key.","format":"password"},{"type":"null","title":"Api Key","description":"API key."}]},"auth_type":{"type":"string","enum":["api_key","subscription"],"title":"Auth Type","description":"Authentication mode for the LLM.","default":"api_key","openhands_settings":{"depends_on":[],"label":"Authentication","prominence":"critical"}},"subscription_vendor":{"oneOf":[{"type":"string","title":"Subscription Vendor","description":"Subscription provider for subscription-backed LLM access.","const":"openai"},{"type":"null","title":"Subscription Vendor","description":"Subscription provider for subscription-backed LLM access."}]},"base_url":{"oneOf":[{"type":"string","title":"Base Url","description":"Custom base URL."},{"type":"null","title":"Base Url","description":"Custom base URL."}]},"api_version":{"oneOf":[{"type":"string","title":"Api Version","description":"API version (e.g., Azure)."},{"type":"null","title":"Api Version","description":"API version (e.g., Azure)."}]},"aws_access_key_id":{"oneOf":[{"type":"string","title":"Aws Access Key Id"},{"type":"string","title":"Aws Access Key Id","format":"password"},{"type":"null","title":"Aws Access Key Id"}]},"aws_secret_access_key":{"oneOf":[{"type":"string","title":"Aws Secret Access Key"},{"type":"string","title":"Aws Secret Access Key","format":"password"},{"type":"null","title":"Aws Secret Access Key"}]},"aws_session_token":{"oneOf":[{"type":"string","title":"Aws Session Token"},{"type":"string","title":"Aws Session Token","format":"password"},{"type":"null","title":"Aws Session Token"}]},"aws_region_name":{"oneOf":[{"type":"string","title":"Aws Region Name"},{"type":"null","title":"Aws Region Name"}]},"aws_profile_name":{"oneOf":[{"type":"string","title":"Aws Profile Name"},{"type":"null","title":"Aws Profile Name"}]},"aws_role_name":{"oneOf":[{"type":"string","title":"Aws Role Name"},{"type":"null","title":"Aws Role Name"}]},"aws_session_name":{"oneOf":[{"type":"string","title":"Aws Session Name"},{"type":"null","title":"Aws Session Name"}]},"aws_bedrock_runtime_endpoint":{"oneOf":[{"type":"string","title":"Aws Bedrock Runtime Endpoint"},{"type":"null","title":"Aws Bedrock Runtime Endpoint"}]},"openrouter_site_url":{"type":"string","title":"Openrouter Site Url","default":"https://docs.all-hands.dev/","openhands_settings":{"depends_on":[],"prominence":"minor"}},"openrouter_app_name":{"type":"string","title":"Openrouter App Name","default":"OpenHands","openhands_settings":{"depends_on":[],"prominence":"minor"}},"num_retries":{"type":"integer","minimum":0,"title":"Num Retries","default":5,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"retry_multiplier":{"type":"number","minimum":0,"title":"Retry Multiplier","default":8,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"retry_min_wait":{"type":"integer","minimum":0,"title":"Retry Min Wait","default":8,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"retry_max_wait":{"type":"integer","minimum":0,"title":"Retry Max Wait","default":64,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"timeout":{"oneOf":[{"type":"integer","title":"Timeout","description":"HTTP timeout in seconds. Default is 300s (5 minutes). Set to None to disable timeout (not recommended for production).","default":300,"minimum":0},{"type":"null","title":"Timeout","description":"HTTP timeout in seconds. Default is 300s (5 minutes). Set to None to disable timeout (not recommended for production).","default":300}]},"max_message_chars":{"type":"integer","minimum":1,"title":"Max Message Chars","description":"Approx max chars in each event/content sent to the LLM.","default":30000,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"temperature":{"oneOf":[{"type":"number","title":"Temperature","description":"Sampling temperature for response generation. Defaults to None (uses provider default temperature). Set to 0.0 for deterministic outputs, or higher values (0.7-1.0) for more creative responses.","minimum":0},{"type":"null","title":"Temperature","description":"Sampling temperature for response generation. Defaults to None (uses provider default temperature). Set to 0.0 for deterministic outputs, or higher values (0.7-1.0) for more creative responses."}]},"top_p":{"oneOf":[{"type":"number","title":"Top P","description":"Nucleus sampling parameter. Defaults to None (uses provider default). Set to a value between 0 and 1 to control diversity of outputs.","maximum":1,"minimum":0},{"type":"null","title":"Top P","description":"Nucleus sampling parameter. Defaults to None (uses provider default). Set to a value between 0 and 1 to control diversity of outputs."}]},"top_k":{"oneOf":[{"type":"number","title":"Top K","minimum":0},{"type":"null","title":"Top K"}]},"max_input_tokens":{"oneOf":[{"type":"integer","title":"Max Input Tokens","description":"The maximum number of input tokens. Note that this is currently unused, and the value at runtime is actually the total tokens in OpenAI (e.g. 128,000 tokens for GPT-4).","minimum":1},{"type":"null","title":"Max Input Tokens","description":"The maximum number of input tokens. Note that this is currently unused, and the value at runtime is actually the total tokens in OpenAI (e.g. 128,000 tokens for GPT-4)."}]},"max_output_tokens":{"oneOf":[{"type":"integer","title":"Max Output Tokens","description":"The maximum number of output tokens. This is sent to the LLM.","minimum":1},{"type":"null","title":"Max Output Tokens","description":"The maximum number of output tokens. This is sent to the LLM."}]},"model_canonical_name":{"oneOf":[{"type":"string","title":"Model Canonical Name","description":"Optional canonical model name for feature registry lookups. The OpenHands SDK maintains a model feature registry that maps model names to capabilities (e.g., vision support, prompt caching, responses API support). When using proxied or aliased model identifiers, set this field to the canonical model name (e.g., 'openai/gpt-4o') to ensure correct capability detection. If not provided, the 'model' field will be used for capability lookups."},{"type":"null","title":"Model Canonical Name","description":"Optional canonical model name for feature registry lookups. The OpenHands SDK maintains a model feature registry that maps model names to capabilities (e.g., vision support, prompt caching, responses API support). When using proxied or aliased model identifiers, set this field to the canonical model name (e.g., 'openai/gpt-4o') to ensure correct capability detection. If not provided, the 'model' field will be used for capability lookups."}]},"api_mode":{"type":"string","enum":["auto","chat","responses"],"title":"Api Mode","description":"LLM API endpoint mode. 'auto' resolves from model metadata and SDK fallbacks; use 'chat' or 'responses' to override endpoint selection for proxy aliases and newly released models.","default":"auto","openhands_settings":{"depends_on":[],"prominence":"minor"}},"capability_overrides":{"additionalProperties":{"oneOf":[{"type":"boolean"},{"type":"string"}]},"type":"object","title":"Capability Overrides","description":"Explicit model capability overrides. Supported keys include supports_reasoning_effort, thinking_mode (adaptive, manual, none, or unknown), supports_sampling_params, supports_prompt_cache, supports_stop_words, supports_responses_api, supports_vision, and supports_prompt_cache_retention. Overrides take precedence over LiteLLM metadata and SDK fallbacks.","openhands_settings":{"depends_on":[],"prominence":"minor"}},"extra_headers":{"oneOf":[{"type":"object","title":"Extra Headers","description":"Optional HTTP headers to forward to LiteLLM requests.","additionalProperties":{"type":"string"}},{"type":"null","title":"Extra Headers","description":"Optional HTTP headers to forward to LiteLLM requests."}]},"input_cost_per_token":{"oneOf":[{"type":"number","title":"Input Cost Per Token","description":"The cost per input token. This will available in logs for user.","minimum":0},{"type":"null","title":"Input Cost Per Token","description":"The cost per input token. This will available in logs for user."}]},"output_cost_per_token":{"oneOf":[{"type":"number","title":"Output Cost Per Token","description":"The cost per output token. This will available in logs for user.","minimum":0},{"type":"null","title":"Output Cost Per Token","description":"The cost per output token. This will available in logs for user."}]},"ollama_base_url":{"oneOf":[{"type":"string","title":"Ollama Base Url"},{"type":"null","title":"Ollama Base Url"}]},"stream":{"type":"boolean","title":"Stream","description":"Enable streaming responses from the LLM. When enabled, the provided `on_token` callback in .completions and .responses will be invoked for each chunk of tokens.","default":false,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"drop_params":{"type":"boolean","title":"Drop Params","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"modify_params":{"type":"boolean","title":"Modify Params","description":"Modify params allows litellm to do transformations like adding a default message, when a message is empty.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"disable_vision":{"oneOf":[{"type":"boolean","title":"Disable Vision","description":"If model is vision capable, this option allows to disable image processing (useful for cost reduction)."},{"type":"null","title":"Disable Vision","description":"If model is vision capable, this option allows to disable image processing (useful for cost reduction)."}]},"disable_stop_word":{"oneOf":[{"type":"boolean","title":"Disable Stop Word","description":"Disable using of stop word.","default":false},{"type":"null","title":"Disable Stop Word","description":"Disable using of stop word.","default":false}]},"caching_prompt":{"type":"boolean","title":"Caching Prompt","description":"Enable caching of prompts.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"log_completions":{"type":"boolean","title":"Log Completions","description":"Enable logging of completions.","default":false,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"log_completions_folder":{"type":"string","title":"Log Completions Folder","description":"The folder to log LLM completions to. Required if log_completions is True.","default":"logs/completions","openhands_settings":{"depends_on":[],"prominence":"minor"}},"custom_tokenizer":{"oneOf":[{"type":"string","title":"Custom Tokenizer","description":"A custom tokenizer to use for token counting."},{"type":"null","title":"Custom Tokenizer","description":"A custom tokenizer to use for token counting."}]},"native_tool_calling":{"type":"boolean","title":"Native Tool Calling","description":"Whether to use native tool calling.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"force_string_serializer":{"oneOf":[{"type":"boolean","title":"Force String Serializer","description":"Force using string content serializer when sending to LLM API. If None (default), auto-detect based on model. Useful for providers that do not support list content, like HuggingFace and Groq."},{"type":"null","title":"Force String Serializer","description":"Force using string content serializer when sending to LLM API. If None (default), auto-detect based on model. Useful for providers that do not support list content, like HuggingFace and Groq."}]},"inline_image_urls":{"oneOf":[{"type":"boolean","title":"Inline Image Urls","description":"If True, fetch any http(s) image URL in outgoing messages and inline it as a base64 ``data:`` URL before sending. If None (default), auto-detect based on model (some APIs such as Moonshot's public Kimi endpoint reject URL-formatted images and require base64). Set this explicitly when the model is reached through a proxy alias that hides the underlying provider (e.g. ``litellm_proxy/\u003ccustom-alias>``). Note: inlining only runs when ``vision_is_active()`` is True, so the alias must still be recognised as vision-capable by the SDK feature registry or proxy model metadata."},{"type":"null","title":"Inline Image Urls","description":"If True, fetch any http(s) image URL in outgoing messages and inline it as a base64 ``data:`` URL before sending. If None (default), auto-detect based on model (some APIs such as Moonshot's public Kimi endpoint reject URL-formatted images and require base64). Set this explicitly when the model is reached through a proxy alias that hides the underlying provider (e.g. ``litellm_proxy/\u003ccustom-alias>``). Note: inlining only runs when ``vision_is_active()`` is True, so the alias must still be recognised as vision-capable by the SDK feature registry or proxy model metadata."}]},"reasoning_effort":{"oneOf":[{"type":"string","title":"Reasoning Effort","description":"Provider-neutral reasoning effort. Common values include 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', and 'max'. The SDK accepts future provider values and lets LiteLLM translate them.","default":"high","enum":["low","medium","high","xhigh","none"]},{"type":"null","title":"Reasoning Effort","description":"Provider-neutral reasoning effort. Common values include 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', and 'max'. The SDK accepts future provider values and lets LiteLLM translate them.","default":"high"}]},"reasoning_summary":{"oneOf":[{"type":"string","title":"Reasoning Summary","description":"The level of detail for reasoning summaries. This is a string that can be one of 'auto', 'concise', or 'detailed'. Requires verified OpenAI organization. Only sent when explicitly set.","enum":["auto","concise","detailed"]},{"type":"null","title":"Reasoning Summary","description":"The level of detail for reasoning summaries. This is a string that can be one of 'auto', 'concise', or 'detailed'. Requires verified OpenAI organization. Only sent when explicitly set."}]},"enable_encrypted_reasoning":{"type":"boolean","title":"Enable Encrypted Reasoning","description":"If True, ask for ['reasoning.encrypted_content'] in Responses API include.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"prompt_cache_retention":{"oneOf":[{"type":"string","title":"Prompt Cache Retention","description":"Retention policy for prompt cache. Only sent for supported models (GPT-5+ and GPT-4.1, excluding Azure deployments); explicitly stripped for all others.","default":"24h"},{"type":"null","title":"Prompt Cache Retention","description":"Retention policy for prompt cache. Only sent for supported models (GPT-5+ and GPT-4.1, excluding Azure deployments); explicitly stripped for all others.","default":"24h"}]},"extended_thinking_budget":{"oneOf":[{"type":"integer","title":"Extended Thinking Budget","description":"Legacy token budget for models confirmed to use manual Anthropic extended thinking. Ignored for adaptive-thinking models. Prefer reasoning_effort for new integrations.","default":200000},{"type":"null","title":"Extended Thinking Budget","description":"Legacy token budget for models confirmed to use manual Anthropic extended thinking. Ignored for adaptive-thinking models. Prefer reasoning_effort for new integrations.","default":200000}]},"seed":{"oneOf":[{"type":"integer","title":"Seed","description":"The seed to use for random number generation."},{"type":"null","title":"Seed","description":"The seed to use for random number generation."}]},"usage_id":{"type":"string","title":"Usage Id","description":"Unique usage identifier for the LLM. Used for registry lookups, telemetry, and spend tracking.","default":"default","openhands_settings":{"depends_on":[],"prominence":"minor"}},"litellm_extra_body":{"additionalProperties":true,"type":"object","title":"Litellm Extra Body","description":"Additional key-value pairs to pass to litellm's extra_body parameter. This is useful for custom inference endpoints that need additional parameters for configuration, routing, or advanced features. NOTE: Not all LLM providers support extra_body parameters. Some providers (e.g., OpenAI) may reject requests with unrecognized options. This is commonly supported by: - LiteLLM proxy servers (routing metadata, tracing) - vLLM endpoints (return_token_ids, etc.) - Custom inference clusters Examples: - Proxy routing: {'trace_version': '1.0.0', 'tags': ['agent:my-agent']} - vLLM features: {'return_token_ids': True}","openhands_settings":{"depends_on":[],"prominence":"minor"}},"fallback_strategy":{"oneOf":[{"type":"object","title":"FallbackStrategy","description":"Optional fallback strategy for trying alternate LLMs on transient failure. Construct with FallbackStrategy(fallback_llms=[...]).Excluded from serialization; must be reconfigured after load.","required":["fallback_llms"],"properties":{"fallback_llms":{"items":{"type":"string"},"type":"array","title":"Fallback Llms","description":"Ordered list of LLM profile names to try on transient failure.","isRequired":true},"profile_store_dir":{"oneOf":[{"type":"string","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`."},{"type":"string","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`.","format":"path"},{"type":"null","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`."}]}}},{"type":"null","description":"Optional fallback strategy for trying alternate LLMs on transient failure. Construct with FallbackStrategy(fallback_llms=[...]).Excluded from serialization; must be reconfigured after load."}]}},"type":"object","title":"LLM","description":"Language model interface for OpenHands agents.\n\nThe LLM class provides a unified interface for interacting with various\nlanguage models through the litellm library. It handles model configuration,\nAPI authentication, retry logic, and tool calling capabilities.\n\nAttributes:\n model: Model name (e.g., \"gpt-5.5\").\n api_key: API key for authentication.\n base_url: Custom API base URL.\n num_retries: Number of retry attempts for failed requests.\n timeout: Request timeout in seconds.\n\nExample:\n ```python\n from openhands.sdk import LLM\n from pydantic import SecretStr\n\n llm = LLM(\n model=\"gpt-5.5\",\n api_key=SecretStr(\"your-api-key\"),\n usage_id=\"my-agent\"\n )\n # Use with agent or conversation\n ```","isRequired":true},"max_size":{"type":"integer","exclusiveMinimum":0,"title":"Max Size","default":240},"max_tokens":{"oneOf":[{"type":"integer","title":"Max Tokens"},{"type":"null","title":"Max Tokens"}]},"keep_first":{"type":"integer","minimum":0,"title":"Keep First","default":2},"minimum_progress":{"type":"number","exclusiveMaximum":1,"exclusiveMinimum":0,"title":"Minimum Progress","default":0.1},"hard_context_reset_max_retries":{"type":"integer","exclusiveMinimum":0,"title":"Hard Context Reset Max Retries","default":5},"hard_context_reset_context_scaling":{"type":"number","exclusiveMaximum":1,"exclusiveMinimum":0,"title":"Hard Context Reset Context Scaling","default":0.8},"kind":{"type":"string","const":"LLMSummarizingCondenser","title":"Kind"}}},{"type":"object","title":"NoOpCondenser","description":"Simple condenser that returns a view un-manipulated.\n\nPrimarily intended for testing purposes.","properties":{"kind":{"type":"string","const":"NoOpCondenser","title":"Kind"}}},{"type":"object","title":"PipelineCondenser","description":"A condenser that applies a sequence of condensers in order.\n\nAll condensers are defined primarily by their `condense` method, which takes a\n`View` and an optional `agent_llm` parameter, returning either a new `View` or a\n`Condensation` event. That means we can chain multiple condensers together by\npassing `View`s along and exiting early if any condenser returns a `Condensation`.\n\nFor example:\n\n # Use the pipeline condenser to chain multiple other condensers together\n condenser = PipelineCondenser(condensers=[\n CondenserA(...),\n CondenserB(...),\n CondenserC(...),\n ])\n\n result = condenser.condense(view, agent_llm=agent_llm)\n\n # Doing the same thing without the pipeline condenser requires more boilerplate\n # for the monadic chaining\n other_result = view\n\n if isinstance(other_result, View):\n other_result = CondenserA(...).condense(other_result, agent_llm=agent_llm)\n\n if isinstance(other_result, View):\n other_result = CondenserB(...).condense(other_result, agent_llm=agent_llm)\n\n if isinstance(other_result, View):\n other_result = CondenserC(...).condense(other_result, agent_llm=agent_llm)\n\n assert result == other_result","required":["condensers"],"properties":{"condensers":{"items":{"$circularRef":"47c52630-f29b-40ea-b024-8b206320af2b"},"type":"array","title":"Condensers","isRequired":true},"kind":{"type":"string","const":"PipelineCondenser","title":"Kind"}}}]},"a78b05f8-ad48-469d-af10-4ae9c2950521":{"oneOf":[{"type":"object","title":"PatternSecurityAnalyzer","description":"Catch dangerous agent actions through deterministic signature scanning.\n\nUse this when you want fast, local, no-network threat detection at the\naction boundary. It returns ``SecurityRisk.HIGH``, ``MEDIUM``, or ``LOW``\n-- pair it with ``ConfirmRisky`` to decide what gets confirmed.\n\nThe key design choice: shell-destructive patterns only scan what the\nagent will *execute* (tool arguments), never what it *thought about*\n(reasoning text). Injection patterns scan everything, because\n\"ignore all previous instructions\" is dangerous wherever it appears.\n\nNormalization is always on -- invisible characters and fullwidth\nsubstitutions are collapsed before matching.\n\nExample::\n\n from openhands.sdk.security import PatternSecurityAnalyzer, ConfirmRisky\n\n analyzer = PatternSecurityAnalyzer()\n policy = ConfirmRisky(threshold=SecurityRisk.MEDIUM)","properties":{"high_patterns":{"items":{"type":"object","_tupleOriginal":true,"properties":{"[0]":{"type":"string"},"[1]":{"type":"string"},"[2]":{"type":"string"}}},"type":"array","title":"High Patterns","description":"HIGH patterns scanned against executable fields only"},"medium_patterns":{"items":{"type":"object","_tupleOriginal":true,"properties":{"[0]":{"type":"string"},"[1]":{"type":"string"},"[2]":{"type":"string"}}},"type":"array","title":"Medium Patterns","description":"MEDIUM patterns scanned against executable fields only"},"injection_high_patterns":{"items":{"type":"object","_tupleOriginal":true,"properties":{"[0]":{"type":"string"},"[1]":{"type":"string"},"[2]":{"type":"string"}}},"type":"array","title":"Injection High Patterns","description":"HIGH patterns scanned against all fields"},"injection_medium_patterns":{"items":{"type":"object","_tupleOriginal":true,"properties":{"[0]":{"type":"string"},"[1]":{"type":"string"},"[2]":{"type":"string"}}},"type":"array","title":"Injection Medium Patterns","description":"MEDIUM patterns scanned against all fields"},"kind":{"type":"string","const":"PatternSecurityAnalyzer","title":"Kind"}}},{"type":"object","title":"PolicyRailSecurityAnalyzer","description":"Catch composed threats that plain regex signatures would miss.\n\nUse this when you need to detect threats defined by *combinations*\nof tokens (e.g., ``curl`` piped to ``bash``) rather than individual\nsignatures. While these rails *could* each be expressed as a single\nregex, keeping them as named rules with per-segment evaluation makes\nthe threat model more interpretable, the rules easier to maintain,\nand the audit trail clearer than a flat pattern list.\n\nEvaluates normalized executable segments only -- reasoning text is\nnever scanned.\n\nReturns ``SecurityRisk.HIGH`` when a rail fires, ``LOW`` otherwise.\nPair with ``ConfirmRisky`` and compose via ``EnsembleSecurityAnalyzer``.\n\nv1 rails: fetch-to-exec, raw-disk-op, catastrophic-delete.\n\nExample::\n\n from openhands.sdk.security import PolicyRailSecurityAnalyzer\n\n analyzer = PolicyRailSecurityAnalyzer()\n # risk = analyzer.security_risk(action)","properties":{"kind":{"type":"string","const":"PolicyRailSecurityAnalyzer","title":"Kind"}}},{"type":"object","title":"EnsembleSecurityAnalyzer","description":"Wire multiple analyzers together and take the worst-case risk.\n\nUse this as the top-level analyzer you set on a conversation. It\ncalls each child analyzer, collects their risk assessments, and\nreturns the highest concrete risk. It does not perform any detection,\nextraction, or normalization of its own.\n\nHow UNKNOWN works (default, ``propagate_unknown=False``): if *all*\nchildren return UNKNOWN, the ensemble returns UNKNOWN (which\n``ConfirmRisky`` confirms by default). If any child returns a\nconcrete level, UNKNOWN results are filtered out and the highest\nconcrete level wins.\n\nWith ``propagate_unknown=True``: if *any* child returns UNKNOWN, the\nensemble returns UNKNOWN regardless of other results. Use this in\nstricter environments where incomplete assessment should trigger\nconfirmation.\n\nIf a child analyzer raises an exception, it contributes HIGH\n(fail-closed, logged). This prevents a broken analyzer from silently\ndegrading safety.\n\nExample::\n\n from openhands.sdk.security import (\n EnsembleSecurityAnalyzer,\n PatternSecurityAnalyzer,\n PolicyRailSecurityAnalyzer,\n ConfirmRisky,\n SecurityRisk,\n )\n\n analyzer = EnsembleSecurityAnalyzer(\n analyzers=[\n PolicyRailSecurityAnalyzer(),\n PatternSecurityAnalyzer(),\n ]\n )\n policy = ConfirmRisky(threshold=SecurityRisk.MEDIUM)","required":["analyzers"],"properties":{"analyzers":{"items":{"$circularRef":"a78b05f8-ad48-469d-af10-4ae9c2950521"},"type":"array","minItems":1,"title":"Analyzers","description":"Analyzers whose assessments are combined via max-severity","isRequired":true},"propagate_unknown":{"type":"boolean","title":"Propagate Unknown","description":"When True, any child returning UNKNOWN causes the ensemble to return UNKNOWN. When False (default), UNKNOWN is filtered out if any child returns a concrete level.","default":false},"kind":{"type":"string","const":"EnsembleSecurityAnalyzer","title":"Kind"}}},{"type":"object","title":"GraySwanAnalyzer","description":"Security analyzer using GraySwan's Cygnal API for AI safety monitoring.\n\nThis analyzer sends conversation history and pending actions to the GraySwan\nCygnal API for security analysis. The API returns a violation score which is\nmapped to SecurityRisk levels.\n\nEnvironment Variables:\n GRAYSWAN_API_KEY: Required API key for GraySwan authentication\n GRAYSWAN_POLICY_ID: Optional policy ID for custom GraySwan policy\n\nExample:\n >>> from openhands.sdk.security.grayswan import GraySwanAnalyzer\n >>> analyzer = GraySwanAnalyzer()\n >>> risk = analyzer.security_risk(action_event)","properties":{"history_limit":{"type":"integer","title":"History Limit","description":"Number of recent events to include as context","default":20},"max_message_chars":{"type":"integer","title":"Max Message Chars","description":"Max characters for conversation processing","default":30000},"timeout":{"type":"number","title":"Timeout","description":"Request timeout in seconds","default":30},"low_threshold":{"type":"number","title":"Low Threshold","description":"Risk threshold for LOW classification (score \u003c= threshold)","default":0.3},"medium_threshold":{"type":"number","title":"Medium Threshold","description":"Risk threshold for MEDIUM classification (score \u003c= threshold)","default":0.7},"api_url":{"type":"string","title":"Api Url","description":"GraySwan Cygnal API endpoint","default":"https://api.grayswan.ai/cygnal/monitor"},"api_key":{"oneOf":[{"type":"string","title":"Api Key","description":"GraySwan API key (via GRAYSWAN_API_KEY env var)","format":"password"},{"type":"null","title":"Api Key","description":"GraySwan API key (via GRAYSWAN_API_KEY env var)"}]},"policy_id":{"oneOf":[{"type":"string","title":"Policy Id","description":"GraySwan policy ID (via GRAYSWAN_POLICY_ID env var)"},{"type":"null","title":"Policy Id","description":"GraySwan policy ID (via GRAYSWAN_POLICY_ID env var)"}]},"kind":{"type":"string","const":"GraySwanAnalyzer","title":"Kind"}}},{"type":"object","title":"LLMSecurityAnalyzer","description":"LLM-based security analyzer.\n\nThis analyzer respects the security_risk attribute that can be set by the LLM\nwhen generating actions, similar to OpenHands' LLMRiskAnalyzer.\n\nIt provides a lightweight security analysis approach that leverages the LLM's\nunderstanding of action context and potential risks.","properties":{"kind":{"type":"string","const":"LLMSecurityAnalyzer","title":"Kind"}}},{"type":"object","title":"ToolShieldLLMSecurityAnalyzer","description":"Evaluate each action via a separate guardrail LLM.\n\nPairs with the existing ``ConfirmRisky`` policy unchanged: this\nanalyzer only *assigns* the risk level; ``ConfirmRisky`` decides\nwhether to pause for user confirmation.\n\nBy default the analyzer runs as a bare guardrail (no distilled\nsafety experiences). To enable the ToolShield seed, install\n``pip install openhands-sdk[toolshield]`` and pass the rendered\nexperiences via the ``safety_experiences`` field -- typically via\none of the helpers (``default_safety_experiences()``,\n``load_safety_experiences(...)``, ``auto_detect_safety_experiences()``).\nTested against ``toolshield>=0.1.3,\u003c0.2``.\n\nNote: ``reasoning_content`` and ``thinking_blocks`` from extended-\nthinking models are deliberately excluded from the guardrail\ncontext. The risk signal lives in the tool call's name and\narguments; including reasoning text would inflate the prompt\nwithout proportional safety gain. Subclasses needing reasoning\nvisibility should override :func:`_format_action_for_guardrail`.\n\nLifecycle: instances maintain a per-conversation deque of recent\nactions (``history_window`` items) for guardrail context. Each\ninstance is intended for SINGLE-CONVERSATION use. Reusing one\nanalyzer instance across multiple conversations will leak action\nhistory between them, which is both a privacy issue (conversation\nA's tool arguments visible in conversation B's guardrail prompt)\nand a correctness issue (the guardrail evaluates conversation B's\nactions against irrelevant history). Construct one analyzer per\nconversation, OR call :meth:`reset_history` at conversation\nboundaries.\n\nThe recent-action-context propagation across analyzers (this one,\n:class:`LLMSecurityAnalyzer`, :class:`GraySwanAnalyzer`) is tracked\nfor convergence in a separate follow-up; until that lands,\nsingle-conversation lifecycle is the contract.\n\nFailure modes are consistent and ensemble-safe -- both an\ninfrastructure error (network, rate limit) and a parse failure\n(the guardrail responded but its output had no parseable\n``RISK:`` label) return ``SecurityRisk.UNKNOWN``. ``ConfirmRisky``\nwith ``confirm_unknown=True`` then pauses for user confirmation,\nmatching the conservative posture without dominating ``max()`` in\nensemble fusion.","required":["llm"],"properties":{"llm":{"properties":{"model":{"type":"string","title":"Model","description":"Model name.","default":"gpt-5.5","openhands_settings":{"depends_on":[],"prominence":"critical"}},"api_key":{"oneOf":[{"type":"string","title":"Api Key","description":"API key."},{"type":"string","title":"Api Key","description":"API key.","format":"password"},{"type":"null","title":"Api Key","description":"API key."}]},"auth_type":{"type":"string","enum":["api_key","subscription"],"title":"Auth Type","description":"Authentication mode for the LLM.","default":"api_key","openhands_settings":{"depends_on":[],"label":"Authentication","prominence":"critical"}},"subscription_vendor":{"oneOf":[{"type":"string","title":"Subscription Vendor","description":"Subscription provider for subscription-backed LLM access.","const":"openai"},{"type":"null","title":"Subscription Vendor","description":"Subscription provider for subscription-backed LLM access."}]},"base_url":{"oneOf":[{"type":"string","title":"Base Url","description":"Custom base URL."},{"type":"null","title":"Base Url","description":"Custom base URL."}]},"api_version":{"oneOf":[{"type":"string","title":"Api Version","description":"API version (e.g., Azure)."},{"type":"null","title":"Api Version","description":"API version (e.g., Azure)."}]},"aws_access_key_id":{"oneOf":[{"type":"string","title":"Aws Access Key Id"},{"type":"string","title":"Aws Access Key Id","format":"password"},{"type":"null","title":"Aws Access Key Id"}]},"aws_secret_access_key":{"oneOf":[{"type":"string","title":"Aws Secret Access Key"},{"type":"string","title":"Aws Secret Access Key","format":"password"},{"type":"null","title":"Aws Secret Access Key"}]},"aws_session_token":{"oneOf":[{"type":"string","title":"Aws Session Token"},{"type":"string","title":"Aws Session Token","format":"password"},{"type":"null","title":"Aws Session Token"}]},"aws_region_name":{"oneOf":[{"type":"string","title":"Aws Region Name"},{"type":"null","title":"Aws Region Name"}]},"aws_profile_name":{"oneOf":[{"type":"string","title":"Aws Profile Name"},{"type":"null","title":"Aws Profile Name"}]},"aws_role_name":{"oneOf":[{"type":"string","title":"Aws Role Name"},{"type":"null","title":"Aws Role Name"}]},"aws_session_name":{"oneOf":[{"type":"string","title":"Aws Session Name"},{"type":"null","title":"Aws Session Name"}]},"aws_bedrock_runtime_endpoint":{"oneOf":[{"type":"string","title":"Aws Bedrock Runtime Endpoint"},{"type":"null","title":"Aws Bedrock Runtime Endpoint"}]},"openrouter_site_url":{"type":"string","title":"Openrouter Site Url","default":"https://docs.all-hands.dev/","openhands_settings":{"depends_on":[],"prominence":"minor"}},"openrouter_app_name":{"type":"string","title":"Openrouter App Name","default":"OpenHands","openhands_settings":{"depends_on":[],"prominence":"minor"}},"num_retries":{"type":"integer","minimum":0,"title":"Num Retries","default":5,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"retry_multiplier":{"type":"number","minimum":0,"title":"Retry Multiplier","default":8,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"retry_min_wait":{"type":"integer","minimum":0,"title":"Retry Min Wait","default":8,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"retry_max_wait":{"type":"integer","minimum":0,"title":"Retry Max Wait","default":64,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"timeout":{"oneOf":[{"type":"integer","title":"Timeout","description":"HTTP timeout in seconds. Default is 300s (5 minutes). Set to None to disable timeout (not recommended for production).","default":300,"minimum":0},{"type":"null","title":"Timeout","description":"HTTP timeout in seconds. Default is 300s (5 minutes). Set to None to disable timeout (not recommended for production).","default":300}]},"max_message_chars":{"type":"integer","minimum":1,"title":"Max Message Chars","description":"Approx max chars in each event/content sent to the LLM.","default":30000,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"temperature":{"oneOf":[{"type":"number","title":"Temperature","description":"Sampling temperature for response generation. Defaults to None (uses provider default temperature). Set to 0.0 for deterministic outputs, or higher values (0.7-1.0) for more creative responses.","minimum":0},{"type":"null","title":"Temperature","description":"Sampling temperature for response generation. Defaults to None (uses provider default temperature). Set to 0.0 for deterministic outputs, or higher values (0.7-1.0) for more creative responses."}]},"top_p":{"oneOf":[{"type":"number","title":"Top P","description":"Nucleus sampling parameter. Defaults to None (uses provider default). Set to a value between 0 and 1 to control diversity of outputs.","maximum":1,"minimum":0},{"type":"null","title":"Top P","description":"Nucleus sampling parameter. Defaults to None (uses provider default). Set to a value between 0 and 1 to control diversity of outputs."}]},"top_k":{"oneOf":[{"type":"number","title":"Top K","minimum":0},{"type":"null","title":"Top K"}]},"max_input_tokens":{"oneOf":[{"type":"integer","title":"Max Input Tokens","description":"The maximum number of input tokens. Note that this is currently unused, and the value at runtime is actually the total tokens in OpenAI (e.g. 128,000 tokens for GPT-4).","minimum":1},{"type":"null","title":"Max Input Tokens","description":"The maximum number of input tokens. Note that this is currently unused, and the value at runtime is actually the total tokens in OpenAI (e.g. 128,000 tokens for GPT-4)."}]},"max_output_tokens":{"oneOf":[{"type":"integer","title":"Max Output Tokens","description":"The maximum number of output tokens. This is sent to the LLM.","minimum":1},{"type":"null","title":"Max Output Tokens","description":"The maximum number of output tokens. This is sent to the LLM."}]},"model_canonical_name":{"oneOf":[{"type":"string","title":"Model Canonical Name","description":"Optional canonical model name for feature registry lookups. The OpenHands SDK maintains a model feature registry that maps model names to capabilities (e.g., vision support, prompt caching, responses API support). When using proxied or aliased model identifiers, set this field to the canonical model name (e.g., 'openai/gpt-4o') to ensure correct capability detection. If not provided, the 'model' field will be used for capability lookups."},{"type":"null","title":"Model Canonical Name","description":"Optional canonical model name for feature registry lookups. The OpenHands SDK maintains a model feature registry that maps model names to capabilities (e.g., vision support, prompt caching, responses API support). When using proxied or aliased model identifiers, set this field to the canonical model name (e.g., 'openai/gpt-4o') to ensure correct capability detection. If not provided, the 'model' field will be used for capability lookups."}]},"api_mode":{"type":"string","enum":["auto","chat","responses"],"title":"Api Mode","description":"LLM API endpoint mode. 'auto' resolves from model metadata and SDK fallbacks; use 'chat' or 'responses' to override endpoint selection for proxy aliases and newly released models.","default":"auto","openhands_settings":{"depends_on":[],"prominence":"minor"}},"capability_overrides":{"additionalProperties":{"oneOf":[{"type":"boolean"},{"type":"string"}]},"type":"object","title":"Capability Overrides","description":"Explicit model capability overrides. Supported keys include supports_reasoning_effort, thinking_mode (adaptive, manual, none, or unknown), supports_sampling_params, supports_prompt_cache, supports_stop_words, supports_responses_api, supports_vision, and supports_prompt_cache_retention. Overrides take precedence over LiteLLM metadata and SDK fallbacks.","openhands_settings":{"depends_on":[],"prominence":"minor"}},"extra_headers":{"oneOf":[{"type":"object","title":"Extra Headers","description":"Optional HTTP headers to forward to LiteLLM requests.","additionalProperties":{"type":"string"}},{"type":"null","title":"Extra Headers","description":"Optional HTTP headers to forward to LiteLLM requests."}]},"input_cost_per_token":{"oneOf":[{"type":"number","title":"Input Cost Per Token","description":"The cost per input token. This will available in logs for user.","minimum":0},{"type":"null","title":"Input Cost Per Token","description":"The cost per input token. This will available in logs for user."}]},"output_cost_per_token":{"oneOf":[{"type":"number","title":"Output Cost Per Token","description":"The cost per output token. This will available in logs for user.","minimum":0},{"type":"null","title":"Output Cost Per Token","description":"The cost per output token. This will available in logs for user."}]},"ollama_base_url":{"oneOf":[{"type":"string","title":"Ollama Base Url"},{"type":"null","title":"Ollama Base Url"}]},"stream":{"type":"boolean","title":"Stream","description":"Enable streaming responses from the LLM. When enabled, the provided `on_token` callback in .completions and .responses will be invoked for each chunk of tokens.","default":false,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"drop_params":{"type":"boolean","title":"Drop Params","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"modify_params":{"type":"boolean","title":"Modify Params","description":"Modify params allows litellm to do transformations like adding a default message, when a message is empty.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"disable_vision":{"oneOf":[{"type":"boolean","title":"Disable Vision","description":"If model is vision capable, this option allows to disable image processing (useful for cost reduction)."},{"type":"null","title":"Disable Vision","description":"If model is vision capable, this option allows to disable image processing (useful for cost reduction)."}]},"disable_stop_word":{"oneOf":[{"type":"boolean","title":"Disable Stop Word","description":"Disable using of stop word.","default":false},{"type":"null","title":"Disable Stop Word","description":"Disable using of stop word.","default":false}]},"caching_prompt":{"type":"boolean","title":"Caching Prompt","description":"Enable caching of prompts.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"log_completions":{"type":"boolean","title":"Log Completions","description":"Enable logging of completions.","default":false,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"log_completions_folder":{"type":"string","title":"Log Completions Folder","description":"The folder to log LLM completions to. Required if log_completions is True.","default":"logs/completions","openhands_settings":{"depends_on":[],"prominence":"minor"}},"custom_tokenizer":{"oneOf":[{"type":"string","title":"Custom Tokenizer","description":"A custom tokenizer to use for token counting."},{"type":"null","title":"Custom Tokenizer","description":"A custom tokenizer to use for token counting."}]},"native_tool_calling":{"type":"boolean","title":"Native Tool Calling","description":"Whether to use native tool calling.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"force_string_serializer":{"oneOf":[{"type":"boolean","title":"Force String Serializer","description":"Force using string content serializer when sending to LLM API. If None (default), auto-detect based on model. Useful for providers that do not support list content, like HuggingFace and Groq."},{"type":"null","title":"Force String Serializer","description":"Force using string content serializer when sending to LLM API. If None (default), auto-detect based on model. Useful for providers that do not support list content, like HuggingFace and Groq."}]},"inline_image_urls":{"oneOf":[{"type":"boolean","title":"Inline Image Urls","description":"If True, fetch any http(s) image URL in outgoing messages and inline it as a base64 ``data:`` URL before sending. If None (default), auto-detect based on model (some APIs such as Moonshot's public Kimi endpoint reject URL-formatted images and require base64). Set this explicitly when the model is reached through a proxy alias that hides the underlying provider (e.g. ``litellm_proxy/\u003ccustom-alias>``). Note: inlining only runs when ``vision_is_active()`` is True, so the alias must still be recognised as vision-capable by the SDK feature registry or proxy model metadata."},{"type":"null","title":"Inline Image Urls","description":"If True, fetch any http(s) image URL in outgoing messages and inline it as a base64 ``data:`` URL before sending. If None (default), auto-detect based on model (some APIs such as Moonshot's public Kimi endpoint reject URL-formatted images and require base64). Set this explicitly when the model is reached through a proxy alias that hides the underlying provider (e.g. ``litellm_proxy/\u003ccustom-alias>``). Note: inlining only runs when ``vision_is_active()`` is True, so the alias must still be recognised as vision-capable by the SDK feature registry or proxy model metadata."}]},"reasoning_effort":{"oneOf":[{"type":"string","title":"Reasoning Effort","description":"Provider-neutral reasoning effort. Common values include 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', and 'max'. The SDK accepts future provider values and lets LiteLLM translate them.","default":"high","enum":["low","medium","high","xhigh","none"]},{"type":"null","title":"Reasoning Effort","description":"Provider-neutral reasoning effort. Common values include 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', and 'max'. The SDK accepts future provider values and lets LiteLLM translate them.","default":"high"}]},"reasoning_summary":{"oneOf":[{"type":"string","title":"Reasoning Summary","description":"The level of detail for reasoning summaries. This is a string that can be one of 'auto', 'concise', or 'detailed'. Requires verified OpenAI organization. Only sent when explicitly set.","enum":["auto","concise","detailed"]},{"type":"null","title":"Reasoning Summary","description":"The level of detail for reasoning summaries. This is a string that can be one of 'auto', 'concise', or 'detailed'. Requires verified OpenAI organization. Only sent when explicitly set."}]},"enable_encrypted_reasoning":{"type":"boolean","title":"Enable Encrypted Reasoning","description":"If True, ask for ['reasoning.encrypted_content'] in Responses API include.","default":true,"openhands_settings":{"depends_on":[],"prominence":"minor"}},"prompt_cache_retention":{"oneOf":[{"type":"string","title":"Prompt Cache Retention","description":"Retention policy for prompt cache. Only sent for supported models (GPT-5+ and GPT-4.1, excluding Azure deployments); explicitly stripped for all others.","default":"24h"},{"type":"null","title":"Prompt Cache Retention","description":"Retention policy for prompt cache. Only sent for supported models (GPT-5+ and GPT-4.1, excluding Azure deployments); explicitly stripped for all others.","default":"24h"}]},"extended_thinking_budget":{"oneOf":[{"type":"integer","title":"Extended Thinking Budget","description":"Legacy token budget for models confirmed to use manual Anthropic extended thinking. Ignored for adaptive-thinking models. Prefer reasoning_effort for new integrations.","default":200000},{"type":"null","title":"Extended Thinking Budget","description":"Legacy token budget for models confirmed to use manual Anthropic extended thinking. Ignored for adaptive-thinking models. Prefer reasoning_effort for new integrations.","default":200000}]},"seed":{"oneOf":[{"type":"integer","title":"Seed","description":"The seed to use for random number generation."},{"type":"null","title":"Seed","description":"The seed to use for random number generation."}]},"usage_id":{"type":"string","title":"Usage Id","description":"Unique usage identifier for the LLM. Used for registry lookups, telemetry, and spend tracking.","default":"default","openhands_settings":{"depends_on":[],"prominence":"minor"}},"litellm_extra_body":{"additionalProperties":true,"type":"object","title":"Litellm Extra Body","description":"Additional key-value pairs to pass to litellm's extra_body parameter. This is useful for custom inference endpoints that need additional parameters for configuration, routing, or advanced features. NOTE: Not all LLM providers support extra_body parameters. Some providers (e.g., OpenAI) may reject requests with unrecognized options. This is commonly supported by: - LiteLLM proxy servers (routing metadata, tracing) - vLLM endpoints (return_token_ids, etc.) - Custom inference clusters Examples: - Proxy routing: {'trace_version': '1.0.0', 'tags': ['agent:my-agent']} - vLLM features: {'return_token_ids': True}","openhands_settings":{"depends_on":[],"prominence":"minor"}},"fallback_strategy":{"oneOf":[{"type":"object","title":"FallbackStrategy","description":"Optional fallback strategy for trying alternate LLMs on transient failure. Construct with FallbackStrategy(fallback_llms=[...]).Excluded from serialization; must be reconfigured after load.","required":["fallback_llms"],"properties":{"fallback_llms":{"items":{"type":"string"},"type":"array","title":"Fallback Llms","description":"Ordered list of LLM profile names to try on transient failure.","isRequired":true},"profile_store_dir":{"oneOf":[{"type":"string","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`."},{"type":"string","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`.","format":"path"},{"type":"null","title":"Profile Store Dir","description":"Path to directory containing profiles. If not specified, defaults to `.openhands/profiles`."}]}}},{"type":"null","description":"Optional fallback strategy for trying alternate LLMs on transient failure. Construct with FallbackStrategy(fallback_llms=[...]).Excluded from serialization; must be reconfigured after load."}]}},"type":"object","title":"LLM","description":"LLM used as the guardrail. Can be a smaller/cheaper model than the actor LLM; only the model's ability to classify action risk matters.","isRequired":true},"history_window":{"type":"integer","title":"History Window","description":"Number of prior actions to include as context.","default":20},"safety_experiences":{"type":"string","title":"Safety Experiences","description":"Pre-generated safety guidelines injected into the guardrail's system prompt.\n- ``\"\"`` (default): bare guardrail -- no experiences. The analyzer still separates actor from judge; it just classifies without distilled tool-specific guidance.\n- Any non-empty string: used as-is. The intended pattern is to call one of the helpers (``default_safety_experiences()``, ``load_safety_experiences(tool_names)``, ``auto_detect_safety_experiences()``) which require the ``[toolshield]`` optional extra (``pip install openhands-sdk[toolshield]``). Callers with their own source of guidelines can pass any custom string.","default":""},"kind":{"type":"string","const":"ToolShieldLLMSecurityAnalyzer","title":"Kind"}}}]}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-Access-Token","scopes":[]},"schema":{"title":"X-Access-Token","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"APIKeyHeader","name":"X-Access-Token"}],"title":"APIKeyHeader"}]},"originalFileLocation":"openapi/openhands-cloud.json"},"subdomain":"allhandsai","siteName":"OpenHands Docs","title":"On Conversation Update - OpenHands Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-13T18:51:54.736Z","originalFileLocation":"openhands/usage/cloud/api-reference/webhooks/on-conversation-update.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Webhook callback for when a conversation starts, pauses, resumes, or deletes. The ConversationInfo.agent field is an AgentBase discriminated union so both OpenHands (Agent) and ACP (ACPAgent) payloads are accepted on this single endpoint.\">\u003cmeta data-mint-head name=\"application-name\" content=\"OpenHands Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/allhandsai/NJyVpY-OoVetrcKF/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/allhandsai/NJyVpY-OoVetrcKF/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/allhandsai/NJyVpY-OoVetrcKF/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/allhandsai/NJyVpY-OoVetrcKF/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/allhandsai/NJyVpY-OoVetrcKF/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/allhandsai/NJyVpY-OoVetrcKF/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/allhandsai/NJyVpY-OoVetrcKF/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/allhandsai/NJyVpY-OoVetrcKF/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/allhandsai/NJyVpY-OoVetrcKF/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"On Conversation Update - OpenHands Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Webhook callback for when a conversation starts, pauses, resumes, or deletes. The ConversationInfo.agent field is an AgentBase discriminated union so both OpenHands (Agent) and ACP (ACPAgent) payloads are accepted on this single endpoint.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"OpenHands Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.openhands.dev/openhands/usage/cloud/api-reference/webhooks/on-conversation-update\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://allhandsai.mintlify.site/_mintlify/api/og/v2?division=Webhooks\u0026amp;title=On+Conversation+Update\u0026amp;description=Webhook+callback+for+when+a+conversation+starts%2C+pauses%2C+resumes%2C+or+deletes.%0A%0AThe+%60%60ConversationInfo.agent%60%60+field+is+an+%60%60AgentBase%60%60+discriminated%0Aunion+so+b\u0026amp;theme=2eb43b0b1453a2072ec6e8c0\u0026amp;signature=5366946cc79ffc41f649cd76cc39ec1e975923de10437196d6f00d7352e2ae5d\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"On Conversation Update - OpenHands Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Webhook callback for when a conversation starts, pauses, resumes, or deletes. The ConversationInfo.agent field is an AgentBase discriminated union so both OpenHands (Agent) and ACP (ACPAgent) payloads are accepted on this single endpoint.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://allhandsai.mintlify.site/_mintlify/api/og/v2?division=Webhooks\u0026amp;title=On+Conversation+Update\u0026amp;description=Webhook+callback+for+when+a+conversation+starts%2C+pauses%2C+resumes%2C+or+deletes.%0A%0AThe+%60%60ConversationInfo.agent%60%60+field+is+an+%60%60AgentBase%60%60+discriminated%0Aunion+so+b\u0026amp;theme=2eb43b0b1453a2072ec6e8c0\u0026amp;signature=5366946cc79ffc41f649cd76cc39ec1e975923de10437196d6f00d7352e2ae5d\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/allhandsai/NJyVpY-OoVetrcKF/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"OpenHands Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#99873c\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.openhands.dev/openhands/usage/cloud/api-reference/webhooks/on-conversation-update\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/openhands/usage/cloud/api-reference/webhooks/on-conversation-update.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.openhands.dev/#organization\",\"name\":\"OpenHands Docs\",\"url\":\"https://docs.openhands.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/allhandsai/DjhqLcIy_hW6pRTg/logo/light.png?fit=max\u0026auto=format\u0026n=DjhqLcIy_hW6pRTg\u0026q=85\u0026s=49b636402b03f7279ca5e1afefeec1d2\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.openhands.dev#website\",\"name\":\"OpenHands Docs\",\"url\":\"https://docs.openhands.dev\",\"publisher\":{\"@id\":\"https://docs.openhands.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.openhands.dev/openhands/usage/cloud/api-reference/webhooks/on-conversation-update#webpage\",\"url\":\"https://docs.openhands.dev/openhands/usage/cloud/api-reference/webhooks/on-conversation-update\",\"name\":\"On Conversation Update\",\"description\":\"Webhook callback for when a conversation starts, pauses, resumes, or deletes. The ConversationInfo.agent field is an AgentBase discriminated union so both OpenHands (Agent) and ACP (ACPAgent) payloads are accepted on this single endpoint.\",\"dateModified\":\"2026-08-13T18:51:54.736Z\",\"isPartOf\":{\"@id\":\"https://docs.openhands.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.openhands.dev/openhands/usage/cloud/api-reference/webhooks/on-conversation-update#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.openhands.dev/openhands/usage/cloud/api-reference/webhooks/on-conversation-update#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Cloud API\",\"item\":\"https://docs.openhands.dev/openhands/usage/cloud/cloud-api\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"REST API Reference\",\"item\":\"https://docs.openhands.dev/openhands/usage/cloud/api-reference/events/search-events\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"On Conversation Update\",\"item\":\"https://docs.openhands.dev/openhands/usage/cloud/api-reference/webhooks/on-conversation-update\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.openhands.dev/openhands/usage/cloud/api-reference/webhooks/on-conversation-update#apireference\",\"headline\":\"On Conversation Update\",\"name\":\"On Conversation Update\",\"description\":\"Webhook callback for when a conversation starts, pauses, resumes, or deletes. The ConversationInfo.agent field is an AgentBase discriminated union so both OpenHands (Agent) and ACP (ACPAgent) payloads are accepted on this single endpoint.\",\"url\":\"https://docs.openhands.dev/openhands/usage/cloud/api-reference/webhooks/on-conversation-update\",\"mainEntityOfPage\":{\"@id\":\"https://docs.openhands.dev/openhands/usage/cloud/api-reference/webhooks/on-conversation-update#webpage\"},\"dateModified\":\"2026-08-13T18:51:54.736Z\",\"publisher\":{\"@id\":\"https://docs.openhands.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.openhands.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"OpenHands Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"OpenHands Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/openhands/usage/cloud/api-reference/webhooks/on-conversation-update.md","siteName":"OpenHands Docs","nav":{"global":null,"tabs":[{"tab":"Home","pages":[{"title":"Home","href":"/overview/introduction"}]},{"tab":"Agent Canvas","pages":[{"title":"Agent Canvas","href":"/openhands/usage/agent-canvas/overview"}]},{"tab":"SDK","pages":[{"title":"SDK","href":"/sdk"}]},{"tab":"Cloud","pages":[{"group":"OpenHands Cloud","pages":[{"title":"Getting Started","href":"/openhands/usage/cloud/openhands-cloud"},{"title":"Cloud UI","href":"/openhands/usage/cloud/cloud-ui"}]},{"group":"Settings","pages":[{"title":"API Keys Settings","href":"/openhands/usage/settings/api-keys-settings"}]},{"group":"Integrations","pages":[{"title":"Integrations Settings","href":"/openhands/usage/settings/integrations-settings"},{"title":"GitHub Integration","href":"/openhands/usage/cloud/github-installation"},{"title":"GitLab Integration","href":"/openhands/usage/cloud/gitlab-installation"},{"title":"Bitbucket Integration","href":"/openhands/usage/cloud/bitbucket-installation"},{"title":"Slack Integration","href":"/openhands/usage/cloud/slack-installation"},{"title":"Jira Cloud Integration","href":"/openhands/usage/cloud/project-management/jira-integration"}]},{"group":"Cloud API","pages":[{"title":"Cloud API Overview","href":"/openhands/usage/cloud/cloud-api"},{"title":"Plugin Launcher","href":"/openhands/usage/cloud/plugin-launcher"},{"group":"REST API Reference","expanded":false,"pages":[{"group":"Events","pages":[{"title":"Search Events","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/conversation/{conversation_id}/events/search","href":"/openhands/usage/cloud/api-reference/events/search-events"},{"title":"Count Events","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/conversation/{conversation_id}/events/count","href":"/openhands/usage/cloud/api-reference/events/count-events"},{"title":"Batch Get Events","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/conversation/{conversation_id}/events","href":"/openhands/usage/cloud/api-reference/events/batch-get-events"}]},{"group":"Conversations","pages":[{"title":"Search App Conversations","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/app-conversations/search","href":"/openhands/usage/cloud/api-reference/conversations/search-app-conversations"},{"title":"Count App Conversations","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/app-conversations/count","href":"/openhands/usage/cloud/api-reference/conversations/count-app-conversations"},{"title":"Batch Get App Conversations","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/app-conversations","href":"/openhands/usage/cloud/api-reference/conversations/batch-get-app-conversations"},{"title":"Start App Conversation","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/app-conversations","href":"/openhands/usage/cloud/api-reference/conversations/start-app-conversation"},{"title":"Delete App Conversation","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json delete /api/v1/app-conversations/{conversation_id}","href":"/openhands/usage/cloud/api-reference/conversations/delete-app-conversation"},{"title":"Update App Conversation","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json patch /api/v1/app-conversations/{conversation_id}","href":"/openhands/usage/cloud/api-reference/conversations/update-app-conversation"},{"title":"Send Message To Conversation","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/app-conversations/{conversation_id}/send-message","href":"/openhands/usage/cloud/api-reference/conversations/send-message-to-conversation"},{"title":"Switch Conversation Profile","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/app-conversations/{conversation_id}/switch_profile","href":"/openhands/usage/cloud/api-reference/conversations/switch-conversation-profile"},{"title":"Switch Conversation Acp Model","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/app-conversations/{conversation_id}/switch_acp_model","href":"/openhands/usage/cloud/api-reference/conversations/switch-conversation-acp-model"},{"title":"Stream App Conversation Start","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/app-conversations/stream-start","href":"/openhands/usage/cloud/api-reference/conversations/stream-app-conversation-start"},{"title":"Search App Conversation Start Tasks","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/app-conversations/start-tasks/search","href":"/openhands/usage/cloud/api-reference/conversations/search-app-conversation-start-tasks"},{"title":"Count App Conversation Start Tasks","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/app-conversations/start-tasks/count","href":"/openhands/usage/cloud/api-reference/conversations/count-app-conversation-start-tasks"},{"title":"Batch Get App Conversation Start Tasks","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/app-conversations/start-tasks","href":"/openhands/usage/cloud/api-reference/conversations/batch-get-app-conversation-start-tasks"},{"title":"Read Conversation File","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/app-conversations/{conversation_id}/file","href":"/openhands/usage/cloud/api-reference/conversations/read-conversation-file"},{"title":"Get Conversation Git Changes","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/app-conversations/{conversation_id}/git/changes","href":"/openhands/usage/cloud/api-reference/conversations/get-conversation-git-changes"},{"title":"Get Conversation Git Diff","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/app-conversations/{conversation_id}/git/diff","href":"/openhands/usage/cloud/api-reference/conversations/get-conversation-git-diff"},{"title":"Get Conversation Skills","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/app-conversations/{conversation_id}/skills","href":"/openhands/usage/cloud/api-reference/conversations/get-conversation-skills"},{"title":"Get Conversation Hooks","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/app-conversations/{conversation_id}/hooks","href":"/openhands/usage/cloud/api-reference/conversations/get-conversation-hooks"},{"title":"Export Conversation","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/app-conversations/{conversation_id}/download","href":"/openhands/usage/cloud/api-reference/conversations/export-conversation"}]},{"group":"Pending Messages","pages":[{"title":"Queue Pending Message","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/conversations/{conversation_id}/pending-messages","href":"/openhands/usage/cloud/api-reference/pending-messages/queue-pending-message"}]},{"group":"Sandbox","pages":[{"title":"Search Sandboxes","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/sandboxes/search","href":"/openhands/usage/cloud/api-reference/sandbox/search-sandboxes"},{"title":"Batch Get Sandboxes","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/sandboxes","href":"/openhands/usage/cloud/api-reference/sandbox/batch-get-sandboxes"},{"title":"Start Sandbox","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/sandboxes","href":"/openhands/usage/cloud/api-reference/sandbox/start-sandbox"},{"title":"Pause Sandbox","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/sandboxes/{sandbox_id}/pause","href":"/openhands/usage/cloud/api-reference/sandbox/pause-sandbox"},{"title":"Resume Sandbox","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/sandboxes/{sandbox_id}/resume","href":"/openhands/usage/cloud/api-reference/sandbox/resume-sandbox"},{"title":"Delete Sandbox","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json delete /api/v1/sandboxes/{id}","href":"/openhands/usage/cloud/api-reference/sandbox/delete-sandbox"},{"title":"List Secret Names","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/sandboxes/{sandbox_id}/settings/secrets","href":"/openhands/usage/cloud/api-reference/sandbox/list-secret-names"},{"title":"Get Secret Value","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/sandboxes/{sandbox_id}/settings/secrets/{secret_name}","href":"/openhands/usage/cloud/api-reference/sandbox/get-secret-value"},{"title":"Search Sandbox Specs","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/sandbox-specs/search","href":"/openhands/usage/cloud/api-reference/sandbox/search-sandbox-specs"},{"title":"Batch Get Sandbox Specs","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/sandbox-specs","href":"/openhands/usage/cloud/api-reference/sandbox/batch-get-sandbox-specs"}]},{"group":"Settings","pages":[{"title":"Load Settings","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/settings","href":"/openhands/usage/cloud/api-reference/settings/load-settings"},{"title":"Store Settings","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/settings","href":"/openhands/usage/cloud/api-reference/settings/store-settings"},{"title":"Load Settings Schema","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/settings/agent-schema","href":"/openhands/usage/cloud/api-reference/settings/load-settings-schema"},{"title":"Load Conversation Settings Schema","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/settings/conversation-schema","href":"/openhands/usage/cloud/api-reference/settings/load-conversation-settings-schema"},{"title":"List Profiles","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/settings/profiles","href":"/openhands/usage/cloud/api-reference/settings/list-profiles"},{"title":"Get Profile","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/settings/profiles/{name}","href":"/openhands/usage/cloud/api-reference/settings/get-profile"},{"title":"Save Profile","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/settings/profiles/{name}","href":"/openhands/usage/cloud/api-reference/settings/save-profile"},{"title":"Delete Profile","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json delete /api/v1/settings/profiles/{name}","href":"/openhands/usage/cloud/api-reference/settings/delete-profile"},{"title":"Activate Profile","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/settings/profiles/{name}/activate","href":"/openhands/usage/cloud/api-reference/settings/activate-profile"},{"title":"Rename Profile","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/settings/profiles/{name}/rename","href":"/openhands/usage/cloud/api-reference/settings/rename-profile"}]},{"group":"Secrets","pages":[{"title":"Store Provider Tokens","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/secrets/git-providers","href":"/openhands/usage/cloud/api-reference/secrets/store-provider-tokens"},{"title":"Unset Provider Tokens","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json delete /api/v1/secrets/git-providers","href":"/openhands/usage/cloud/api-reference/secrets/unset-provider-tokens"},{"title":"Search Custom Secrets","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/secrets/search","href":"/openhands/usage/cloud/api-reference/secrets/search-custom-secrets"},{"title":"Create Custom Secret","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/secrets","href":"/openhands/usage/cloud/api-reference/secrets/create-custom-secret"},{"title":"Update Custom Secret","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json put /api/v1/secrets/{secret_id}","href":"/openhands/usage/cloud/api-reference/secrets/update-custom-secret"},{"title":"Delete Custom Secret","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json delete /api/v1/secrets/{secret_id}","href":"/openhands/usage/cloud/api-reference/secrets/delete-custom-secret"}]},{"group":"User","pages":[{"title":"Get Current User Git Info","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/users/git-info","href":"/openhands/usage/cloud/api-reference/user/get-current-user-git-info"},{"title":"Get Current User Saas","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/users/me","href":"/openhands/usage/cloud/api-reference/user/get-current-user-saas"},{"title":"Get Current User Git Organizations","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/users/git-organizations","href":"/openhands/usage/cloud/api-reference/user/get-current-user-git-organizations"}]},{"group":"Skills","pages":[{"title":"Search Skills","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/skills/search","href":"/openhands/usage/cloud/api-reference/skills/search-skills"},{"title":"Get Marketplace Skills","description":"Get skills from marketplace repositories.\n\nThis endpoint fetches and returns skill metadata from marketplace repos\nwithout requiring an active sandbox session. Useful for previewing what\nskills a marketplace provides before or after adding it.\n\nEach call clones the marketplace repos fresh; this endpoint is admin-only\nand low-traffic, so caching the git clones here would buy little for the\ncross-user / pod-local complexity a shared cache introduces.\n\nArgs:\n marketplaces: List of marketplace registrations to fetch skills from.\n\nReturns:\n MarketplaceSkillsPreviewResponse with skill metadata and any errors.","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/skills/marketplace-skills","href":"/openhands/usage/cloud/api-reference/skills/get-marketplace-skills"}]},{"group":"Webhooks","pages":[{"title":"On Conversation Update","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/webhooks/conversations","href":"/openhands/usage/cloud/api-reference/webhooks/on-conversation-update"},{"title":"On Event","description":"Webhook callback for when event stream events occur.","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/v1/webhooks/events/{conversation_id}","href":"/openhands/usage/cloud/api-reference/webhooks/on-event"},{"title":"Get Secret","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/webhooks/secrets","href":"/openhands/usage/cloud/api-reference/webhooks/get-secret"}]},{"group":"Config","pages":[{"title":"Get Web Client Config","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/web-client/config","href":"/openhands/usage/cloud/api-reference/config/get-web-client-config"},{"title":"Search Models","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/config/models/search","href":"/openhands/usage/cloud/api-reference/config/search-models"},{"title":"Search Providers","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/config/providers/search","href":"/openhands/usage/cloud/api-reference/config/search-providers"}]},{"group":"Git","pages":[{"title":"Search User Installations","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/git/installations/search","href":"/openhands/usage/cloud/api-reference/git/search-user-installations"},{"title":"Search Repositories","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/git/repositories/search","href":"/openhands/usage/cloud/api-reference/git/search-repositories"},{"title":"Search Branches","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/git/branches/search","href":"/openhands/usage/cloud/api-reference/git/search-branches"},{"title":"Search Suggested Tasks","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/v1/git/suggested-tasks/search","href":"/openhands/usage/cloud/api-reference/git/search-suggested-tasks"}]},{"group":"Status","pages":[{"title":"Alive","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /alive","href":"/openhands/usage/cloud/api-reference/status/alive"},{"title":"Health","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /health","href":"/openhands/usage/cloud/api-reference/status/health"},{"title":"Get Server Info","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /server_info","href":"/openhands/usage/cloud/api-reference/status/get-server-info"}]},{"group":"API Reference","pages":[{"title":"Is Ready","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /ready","href":"/openhands/usage/cloud/api-reference/is-ready"},{"title":"Is Saas","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /saas","href":"/openhands/usage/cloud/api-reference/is-saas"},{"title":"Authenticate","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/authenticate","href":"/openhands/usage/cloud/api-reference/authenticate"},{"title":"Accept Tos","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/accept_tos","href":"/openhands/usage/cloud/api-reference/accept-tos"},{"title":"Onboarding Status","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/onboarding_status","href":"/openhands/usage/cloud/api-reference/onboarding-status"},{"title":"Complete Onboarding","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/complete_onboarding","href":"/openhands/usage/cloud/api-reference/complete-onboarding"},{"title":"Logout","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/logout","href":"/openhands/usage/cloud/api-reference/logout"},{"title":"Refresh Tokens","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/refresh-tokens","href":"/openhands/usage/cloud/api-reference/refresh-tokens"},{"title":"Keycloak Callback","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /oauth/keycloak/callback","href":"/openhands/usage/cloud/api-reference/keycloak-callback"},{"title":"Keycloak Offline Callback","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /oauth/keycloak/offline/callback","href":"/openhands/usage/cloud/api-reference/keycloak-offline-callback"},{"title":"Github Dummy Callback","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /oauth/github/callback","href":"/openhands/usage/cloud/api-reference/github-dummy-callback"},{"title":"Device Authorization","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /oauth/device/authorize","href":"/openhands/usage/cloud/api-reference/device-authorization"},{"title":"Device Token","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /oauth/device/token","href":"/openhands/usage/cloud/api-reference/device-token"},{"title":"Device Verification Authenticated","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /oauth/device/verify-authenticated","href":"/openhands/usage/cloud/api-reference/device-verification-authenticated"},{"title":"Get User App Settings","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/users/app","href":"/openhands/usage/cloud/api-reference/get-user-app-settings"},{"title":"Update User App Settings","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/users/app","href":"/openhands/usage/cloud/api-reference/update-user-app-settings"},{"title":"Github Events","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /integration/github/events","href":"/openhands/usage/cloud/api-reference/github-events"},{"title":"Gitlab Events","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /integration/gitlab/events","href":"/openhands/usage/cloud/api-reference/gitlab-events"},{"title":"Get Gitlab Resources","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /integration/gitlab/resources","href":"/openhands/usage/cloud/api-reference/get-gitlab-resources"},{"title":"Reinstall Gitlab Webhook","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /integration/gitlab/reinstall-webhook","href":"/openhands/usage/cloud/api-reference/reinstall-gitlab-webhook"},{"title":"Bitbucket Events","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /integration/bitbucket/events","href":"/openhands/usage/cloud/api-reference/bitbucket-events"},{"title":"List Pending Invitations","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/{org_id}/members/invite","href":"/openhands/usage/cloud/api-reference/list-pending-invitations"},{"title":"Create Invitation","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/organizations/{org_id}/members/invite","href":"/openhands/usage/cloud/api-reference/create-invitation"},{"title":"Revoke Invitation","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json delete /api/organizations/{org_id}/members/invite/{invitation_id}","href":"/openhands/usage/cloud/api-reference/revoke-invitation"},{"title":"Accept Invitation Redirect","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/members/invite/accept","href":"/openhands/usage/cloud/api-reference/accept-invitation-redirect"},{"title":"Accept Invitation","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/organizations/members/invite/accept","href":"/openhands/usage/cloud/api-reference/accept-invitation"},{"title":"Install","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /slack/install","href":"/openhands/usage/cloud/api-reference/install"},{"title":"Install Callback","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /slack/install-callback","href":"/openhands/usage/cloud/api-reference/install-callback"},{"title":"Keycloak Callback","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /slack/keycloak-callback","href":"/openhands/usage/cloud/api-reference/keycloak-callback-1"},{"title":"On Event","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /slack/on-event","href":"/openhands/usage/cloud/api-reference/on-event"},{"title":"On Options Load","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /slack/on-options-load","href":"/openhands/usage/cloud/api-reference/on-options-load"},{"title":"On Form Interaction","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /slack/on-form-interaction","href":"/openhands/usage/cloud/api-reference/on-form-interaction"},{"title":"Jira Events","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /integration/jira/events","href":"/openhands/usage/cloud/api-reference/jira-events"},{"title":"Create Jira Workspace","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /integration/jira/workspaces","href":"/openhands/usage/cloud/api-reference/create-jira-workspace"},{"title":"Get Current Workspace Link","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /integration/jira/workspaces/link","href":"/openhands/usage/cloud/api-reference/get-current-workspace-link"},{"title":"Create Workspace Link","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /integration/jira/workspaces/link","href":"/openhands/usage/cloud/api-reference/create-workspace-link"},{"title":"Jira Callback","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /integration/jira/callback","href":"/openhands/usage/cloud/api-reference/jira-callback"},{"title":"Unlink Workspace","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /integration/jira/workspaces/unlink","href":"/openhands/usage/cloud/api-reference/unlink-workspace"},{"title":"Validate Workspace Integration","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /integration/jira/workspaces/validate/{workspace_name}","href":"/openhands/usage/cloud/api-reference/validate-workspace-integration"},{"title":"Update Email","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/email","href":"/openhands/usage/cloud/api-reference/update-email"},{"title":"Resend Email Verification","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json put /api/email/resend","href":"/openhands/usage/cloud/api-reference/resend-email-verification"},{"title":"Verified Email","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/email/verified","href":"/openhands/usage/cloud/api-reference/verified-email"}]},{"group":"Billing","pages":[{"title":"Get Credits","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/billing/credits","href":"/openhands/usage/cloud/api-reference/billing/get-credits"},{"title":"Get Subscription Access","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/billing/subscription-access","href":"/openhands/usage/cloud/api-reference/billing/get-subscription-access"},{"title":"Has Payment Method","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/billing/has-payment-method","href":"/openhands/usage/cloud/api-reference/billing/has-payment-method"},{"title":"Create Customer Setup Session","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/billing/create-customer-setup-session","href":"/openhands/usage/cloud/api-reference/billing/create-customer-setup-session"},{"title":"Create Checkout Session","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/billing/create-checkout-session","href":"/openhands/usage/cloud/api-reference/billing/create-checkout-session"},{"title":"Success Callback","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/billing/success","href":"/openhands/usage/cloud/api-reference/billing/success-callback"},{"title":"Cancel Callback","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/billing/cancel","href":"/openhands/usage/cloud/api-reference/billing/cancel-callback"}]},{"group":"Sharing","pages":[{"title":"Batch Get Shared Conversations","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/shared-conversations","href":"/openhands/usage/cloud/api-reference/sharing/batch-get-shared-conversations"},{"title":"Search Shared Events","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/shared-events/search","href":"/openhands/usage/cloud/api-reference/sharing/search-shared-events"},{"title":"Count Shared Events","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/shared-events/count","href":"/openhands/usage/cloud/api-reference/sharing/count-shared-events"},{"title":"Batch Get Shared Events","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/shared-events","href":"/openhands/usage/cloud/api-reference/sharing/batch-get-shared-events"},{"title":"Get Shared Event","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/shared-events/{conversation_id}/{event_id}","href":"/openhands/usage/cloud/api-reference/sharing/get-shared-event"}]},{"group":"Keys","pages":[{"title":"Check Byor Permitted","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/keys/llm/byor/permitted","href":"/openhands/usage/cloud/api-reference/keys/check-byor-permitted"},{"title":"List Api Keys","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/keys","href":"/openhands/usage/cloud/api-reference/keys/list-api-keys"},{"title":"Create Api Key","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/keys","href":"/openhands/usage/cloud/api-reference/keys/create-api-key"},{"title":"Delete Api Key","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json delete /api/keys/{key_id}","href":"/openhands/usage/cloud/api-reference/keys/delete-api-key"},{"title":"Get Current Api Key","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/keys/current","href":"/openhands/usage/cloud/api-reference/keys/get-current-api-key"},{"title":"Refresh Managed Llm Api Key","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/keys/llm/managed/refresh","href":"/openhands/usage/cloud/api-reference/keys/refresh-managed-llm-api-key"},{"title":"Get Llm Api Key For Byor","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/keys/llm/byor","href":"/openhands/usage/cloud/api-reference/keys/get-llm-api-key-for-byor"},{"title":"Refresh Llm Api Key For Byor","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/keys/llm/byor/refresh","href":"/openhands/usage/cloud/api-reference/keys/refresh-llm-api-key-for-byor"}]},{"group":"Service","pages":[{"title":"Service Health","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/service/health","href":"/openhands/usage/cloud/api-reference/service/service-health"},{"title":"Get Or Create Api Key For User","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/service/users/{user_id}/orgs/{org_id}/api-keys","href":"/openhands/usage/cloud/api-reference/service/get-or-create-api-key-for-user"},{"title":"Delete User Api Key","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json delete /api/service/users/{user_id}/orgs/{org_id}/api-keys/{key_name}","href":"/openhands/usage/cloud/api-reference/service/delete-user-api-key"}]},{"group":"Orgs","pages":[{"title":"List User Orgs","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations","href":"/openhands/usage/cloud/api-reference/orgs/list-user-orgs"},{"title":"Create Org","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/organizations","href":"/openhands/usage/cloud/api-reference/orgs/create-org"},{"title":"Get Org Defaults Settings","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/{org_id}/settings","href":"/openhands/usage/cloud/api-reference/orgs/get-org-defaults-settings"},{"title":"Update Org Defaults Settings","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json patch /api/organizations/{org_id}/settings","href":"/openhands/usage/cloud/api-reference/orgs/update-org-defaults-settings"},{"title":"Get Legacy Org Defaults Settings","deprecated":true,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/llm","href":"/openhands/usage/cloud/api-reference/orgs/get-legacy-org-defaults-settings"},{"title":"Update Legacy Org Defaults Settings","deprecated":true,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/organizations/llm","href":"/openhands/usage/cloud/api-reference/orgs/update-legacy-org-defaults-settings"},{"title":"Get Org App Settings","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/app","href":"/openhands/usage/cloud/api-reference/orgs/get-org-app-settings"},{"title":"Update Org App Settings","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/organizations/app","href":"/openhands/usage/cloud/api-reference/orgs/update-org-app-settings"},{"title":"Get Org","deprecated":true,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/{org_id}","href":"/openhands/usage/cloud/api-reference/orgs/get-org"},{"title":"Delete Org","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json delete /api/organizations/{org_id}","href":"/openhands/usage/cloud/api-reference/orgs/delete-org"},{"title":"Update Org","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json patch /api/organizations/{org_id}","href":"/openhands/usage/cloud/api-reference/orgs/update-org"},{"title":"Get Me","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/{org_id}/me","href":"/openhands/usage/cloud/api-reference/orgs/get-me"},{"title":"Get Org Members","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/{org_id}/members","href":"/openhands/usage/cloud/api-reference/orgs/get-org-members"},{"title":"Get Org Members Count","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/{org_id}/members/count","href":"/openhands/usage/cloud/api-reference/orgs/get-org-members-count"},{"title":"Get Org Members Financial","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/{org_id}/members/financial","href":"/openhands/usage/cloud/api-reference/orgs/get-org-members-financial"},{"title":"Get Org Budget Settings","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/{org_id}/budgets","href":"/openhands/usage/cloud/api-reference/orgs/get-org-budget-settings"},{"title":"Update Org Budget Settings","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json patch /api/organizations/{org_id}/budgets","href":"/openhands/usage/cloud/api-reference/orgs/update-org-budget-settings"},{"title":"Upsert Org Budget Override","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json put /api/organizations/{org_id}/budgets/overrides/{user_id}","href":"/openhands/usage/cloud/api-reference/orgs/upsert-org-budget-override"},{"title":"Delete Org Budget Override","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json delete /api/organizations/{org_id}/budgets/overrides/{user_id}","href":"/openhands/usage/cloud/api-reference/orgs/delete-org-budget-override"},{"title":"Remove Org Member","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json delete /api/organizations/{org_id}/members/{user_id}","href":"/openhands/usage/cloud/api-reference/orgs/remove-org-member"},{"title":"Update Org Member","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json patch /api/organizations/{org_id}/members/{user_id}","href":"/openhands/usage/cloud/api-reference/orgs/update-org-member"},{"title":"Switch Org","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/organizations/{org_id}/switch","href":"/openhands/usage/cloud/api-reference/orgs/switch-org"},{"title":"Get Git Claims","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/{org_id}/git-claims","href":"/openhands/usage/cloud/api-reference/orgs/get-git-claims"},{"title":"Claim Git Organization","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/organizations/{org_id}/git-claims","href":"/openhands/usage/cloud/api-reference/orgs/claim-git-organization"},{"title":"Disconnect Git Organization","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json delete /api/organizations/{org_id}/git-claims/{claim_id}","href":"/openhands/usage/cloud/api-reference/orgs/disconnect-git-organization"},{"title":"List Org Conversations","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/{org_id}/conversations","href":"/openhands/usage/cloud/api-reference/orgs/list-org-conversations"},{"title":"Get Org Conversation Stats","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/{org_id}/conversations/stats","href":"/openhands/usage/cloud/api-reference/orgs/get-org-conversation-stats"},{"title":"Get Org Conversation Usage Stats","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/{org_id}/conversations/usage-stats","href":"/openhands/usage/cloud/api-reference/orgs/get-org-conversation-usage-stats"},{"title":"Get Org Conversation User Usage Stats","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/{org_id}/conversations/user-usage","href":"/openhands/usage/cloud/api-reference/orgs/get-org-conversation-user-usage-stats"},{"title":"Export Org Conversations Csv","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/{org_id}/conversations/export","href":"/openhands/usage/cloud/api-reference/orgs/export-org-conversations-csv"},{"title":"Get Org Conversation","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/{org_id}/conversations/{conversation_id}","href":"/openhands/usage/cloud/api-reference/orgs/get-org-conversation"},{"title":"Stop Org Conversation","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/organizations/{org_id}/conversations/{conversation_id}/stop","href":"/openhands/usage/cloud/api-reference/orgs/stop-org-conversation"}]},{"group":"Admin","pages":[{"title":"List Super Admins","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/admin/super-admins","href":"/openhands/usage/cloud/api-reference/admin/list-super-admins"},{"title":"Grant Super Admin","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/admin/super-admins","href":"/openhands/usage/cloud/api-reference/admin/grant-super-admin"},{"title":"Revoke Super Admin","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json delete /api/admin/super-admins/{user_id}","href":"/openhands/usage/cloud/api-reference/admin/revoke-super-admin"}]},{"group":"Organization Profiles","pages":[{"title":"List Profiles","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/{org_id}/profiles","href":"/openhands/usage/cloud/api-reference/organization-profiles/list-profiles"},{"title":"Get Profile","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/organizations/{org_id}/profiles/{name}","href":"/openhands/usage/cloud/api-reference/organization-profiles/get-profile"},{"title":"Save Profile","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/organizations/{org_id}/profiles/{name}","href":"/openhands/usage/cloud/api-reference/organization-profiles/save-profile"},{"title":"Delete Profile","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json delete /api/organizations/{org_id}/profiles/{name}","href":"/openhands/usage/cloud/api-reference/organization-profiles/delete-profile"},{"title":"Activate Profile","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/organizations/{org_id}/profiles/{name}/activate","href":"/openhands/usage/cloud/api-reference/organization-profiles/activate-profile"},{"title":"Rename Profile","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/organizations/{org_id}/profiles/{name}/rename","href":"/openhands/usage/cloud/api-reference/organization-profiles/rename-profile"}]},{"group":"Agent Profiles","pages":[{"title":"List Agent Profiles","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/agent-profiles","href":"/openhands/usage/cloud/api-reference/agent-profiles/list-agent-profiles"},{"title":"Get Agent Profile","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/agent-profiles/{name}","href":"/openhands/usage/cloud/api-reference/agent-profiles/get-agent-profile"},{"title":"Save Agent Profile","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/agent-profiles/{name}","href":"/openhands/usage/cloud/api-reference/agent-profiles/save-agent-profile"},{"title":"Delete Agent Profile","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json delete /api/agent-profiles/{name}","href":"/openhands/usage/cloud/api-reference/agent-profiles/delete-agent-profile"},{"title":"Rename Agent Profile","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/agent-profiles/{name}/rename","href":"/openhands/usage/cloud/api-reference/agent-profiles/rename-agent-profile"},{"title":"Activate Agent Profile","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/agent-profiles/{profile_id}/activate","href":"/openhands/usage/cloud/api-reference/agent-profiles/activate-agent-profile"},{"title":"Materialize Agent Profile","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/agent-profiles/{name}/materialize","href":"/openhands/usage/cloud/api-reference/agent-profiles/materialize-agent-profile"}]},{"group":"Verified Models","pages":[{"title":"Search Verified Models","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json get /api/admin/verified-models","href":"/openhands/usage/cloud/api-reference/verified-models/search-verified-models"},{"title":"Create Verified Model","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/admin/verified-models","href":"/openhands/usage/cloud/api-reference/verified-models/create-verified-model"},{"title":"Update Verified Model","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json put /api/admin/verified-models/{provider}/{model_name}","href":"/openhands/usage/cloud/api-reference/verified-models/update-verified-model"},{"title":"Delete Verified Model","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json delete /api/admin/verified-models/{provider}/{model_name}","href":"/openhands/usage/cloud/api-reference/verified-models/delete-verified-model"}]},{"group":"Analytics","pages":[{"title":"Track Frontend Event","deprecated":null,"version":null,"openapi":"/openapi/openhands-cloud.json post /api/analytics/events","href":"/openhands/usage/cloud/api-reference/analytics/track-frontend-event"}]}]}]}]},{"tab":"Enterprise","pages":[{"title":"Enterprise","href":"/enterprise"}]},{"tab":"Enterprise Cookbook","pages":[{"title":"Enterprise Cookbook","href":"/cookbook"}]}]},"basePath":"","title":"On Conversation Update - OpenHands Docs","buildId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","deploymentId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DDP9JXtj.js","utils-8yQyvEtx.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-CBCFR8Sn.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-rQaXkUHa.js","snippetPresets-J5KpBTgV.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BVxVH4Cj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BxdQ2vIi.js","shallow-BjV2tFiD.js","getApiPlaygroundDisplay-C_55tL4O.js","CodeSnippet-C0JpiCOC.js","CodeSnippets-w9Ps7djG.js","Page-DTNSD-0M.js","getPastedJson-BDfB-H8d.js","icon-g-kUkkO9.js","MethodPill-v4l6fq0h.js","DuplicateIcon-CvLo-CfU.js","createIcon-165clrrV.js","DynamicMarkdown-D3RQ-fEj.js","SectionHeading-vvo-3yLf.js","axios-vUo_bRtp.js","Markdown-CMT1uFWQ.js","clsx-C8f2yC9R.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CI2D8R2Y.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-k78Wrw_e.js"]}