changedInput schema / allOf
Previous value: -[
- {
- "if": {
- "properties": {
- "operation": {
- "const": "computer_snapshot"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "properties": {
- "browser_max_nodes": {
- "description": "Maximum browser accessibility nodes; default 500, maximum 2000.",
- "type": "number"
- },
- "grid_columns": {
- "description": "Optional reference-grid column count returned as visual metadata; 0..20.",
- "type": "number"
- },
- "grid_rows": {
- "description": "Optional reference-grid row count returned as visual metadata; 0..20.",
- "type": "number"
- },
- "include_browser": {
- "description": "Include CDP browser accessibility when available. Default auto: only when the active app looks Chromium-based.",
- "type": "boolean"
- },
- "include_ocr": {
- "description": "Run optional local OCR. Default auto: only when native accessibility and browser DOM are unavailable. Requires tesseract on PATH.",
- "type": "boolean"
- },
- "include_screenshot": {
- "description": "Include real rendered desktop pixels; default true.",
- "type": "boolean"
- },
- "include_ui": {
- "description": "Include native accessibility tree; default true. False is the fast screenshot-only path.",
- "type": "boolean"
- },
- "max_ui_depth": {
- "description": "Maximum native accessibility depth; default 12.",
- "type": "number"
- },
- "max_ui_nodes": {
- "description": "Maximum native accessibility nodes; default 800.",
- "type": "number"
- },
- "ocr_language": {
- "description": "Tesseract language code, default eng; multiple languages may use eng+deu.",
- "type": "string"
- },
- "ocr_max_words": {
- "description": "Maximum OCR word boxes returned; default 2000, maximum 10000.",
- "type": "number"
- },
- "ocr_psm": {
- "description": "Tesseract page segmentation mode, 3..13; default 11.",
- "type": "number"
- },
- "ocr_timeout_ms": {
- "description": "OCR timeout, default 30000 ms, maximum 120000 ms.",
- "type": "number"
- },
- "screenshot_monitor": {
- "description": "Monitor name substring or \"primary\".",
- "type": "string"
- },
- "screenshot_monitor_index": {
- "description": "Zero-based monitor index.",
- "type": "number"
- },
- "screenshot_padding": {
- "description": "Pixels of context around a targeted screenshot; 0..200.",
- "type": "number"
- },
- "screenshot_region": {
- "description": "Virtual-desktop [left,top,right,bottom] region; takes precedence over full desktop.",
- "items": {
- "type": "number"
- },
- "maxItems": 4,
- "minItems": 4,
- "type": "array"
- },
- "screenshot_window_id": {
- "description": "Capture the window returned by list_windows instead of the whole desktop.",
- "type": "string"
- },
- "semantic_tree": {
- "description": "Include compact semantic hierarchy text alongside nodes; default true.",
- "type": "boolean"
- },
- "ui_browser_dom": {
- "description": "Prefer the native browser accessibility document subtree when the OS exposes one; on Windows this also enables the Firefox MSAA/IAccessible fallback.",
- "type": "boolean"
- },
- "ui_scope": {
- "description": "Accessibility scope for computer_snapshot. Default active keeps the compact snapshot fast; desktop requests all accessible applications/windows.",
- "enum": [
- "active",
- "desktop"
- ],
- "type": "string"
- }
- },
- "type": "object"
- }
- }
- }
- },
- {
- "if": {
- "properties": {
- "operation": {
- "const": "list_windows"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "properties": {
- "include_monitor": {
- "description": "Enrich each window with monitor and monitor_index; default true.",
- "type": "boolean"
- }
- },
- "type": "object"
- }
- }
- }
- },
- {
- "if": {
- "properties": {
- "operation": {
- "const": "ui_snapshot"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "properties": {
- "app": {
- "description": "Optional application/process name substring scope.",
- "type": "string"
- },
- "browser_dom": {
- "description": "Prefer the native browser document accessibility subtree instead of browser chrome when supported.",
- "type": "boolean"
- },
- "max_depth": {
- "description": "Maximum traversal depth; default 8, maximum 32.",
- "type": "number"
- },
- "max_nodes": {
- "description": "Maximum nodes; default 500, maximum 5000.",
- "type": "number"
- },
- "pid": {
- "description": "Optional owning process id scope.",
- "type": "number"
- },
- "scope": {
- "description": "Default active. Use desktop only when cross-application discovery is required.",
- "enum": [
- "active",
- "desktop"
- ],
- "type": "string"
- },
- "semantic_tree": {
- "description": "Include compact semantic hierarchy text; default true.",
- "type": "boolean"
- },
- "window_title": {
- "description": "Optional top-level accessibility window/frame title scope.",
- "type": "string"
- }
- },
- "type": "object"
- }
- }
- }
- },
- {
- "if": {
- "properties": {
- "operation": {
- "const": "ui_find"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "anyOf": [
- {
- "required": [
- "id"
- ]
- },
- {
- "required": [
- "label"
- ]
- },
- {
- "required": [
- "name"
- ]
- },
- {
- "required": [
- "role"
- ]
- },
- {
- "required": [
- "automation_id"
- ]
- }
- ],
- "properties": {
- "app": {
- "description": "Limit matching to an application/process name substring when available.",
- "type": "string"
- },
- "automation_id": {
- "description": "Windows AutomationId when available.",
- "type": "string"
- },
- "id": {
- "description": "Element id returned by ui_snapshot or ui_find. Linux ids are stable per-process accessibility paths and legacy linux:<index> ids remain accepted.",
- "type": "string"
- },
- "label": {
- "description": "Compact numeric label from the most recent ui_snapshot/ui_find; useful for repeated actions without repeating names or coordinates.",
- "type": "number"
- },
- "limit": {
- "description": "Maximum matches; default 20.",
- "type": "number"
- },
- "max_depth": {
- "description": "Maximum accessibility tree depth to traverse.",
- "type": "number"
- },
- "max_nodes": {
- "description": "Maximum accessibility nodes to inspect or return; keep this bounded and raise it only when the target is missing.",
- "type": "number"
- },
- "name": {
- "description": "Accessible name/title substring.",
- "type": "string"
- },
- "pid": {
- "description": "Limit matching to one owning process id when available.",
- "type": "number"
- },
- "refresh": {
- "description": "Force a fresh accessibility capture instead of the short-lived snapshot cache.",
- "type": "boolean"
- },
- "role": {
- "description": "Accessible role such as Button, Edit, textbox or AXButton.",
- "type": "string"
- },
- "window_title": {
- "description": "Limit matching to a top-level accessibility window/frame title substring when available.",
- "type": "string"
- }
- },
- "type": "object"
- }
- }
- }
- },
- {
- "if": {
- "properties": {
- "operation": {
- "const": "wait_for_ui"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "allOf": [
- {
- "if": {
- "properties": {
- "condition": {
- "const": "text_exists"
- }
- },
- "required": [
- "condition"
- ]
- },
- "then": {
- "required": [
- "text"
- ]
- }
- },
- {
- "if": {
- "properties": {
- "condition": {
- "const": "active_window"
- }
- },
- "required": [
- "condition"
- ]
- },
- "then": {
- "anyOf": [
- {
- "required": [
- "text"
- ]
- },
- {
- "required": [
- "name"
- ]
- },
- {
- "required": [
- "window_title"
- ]
- }
- ]
- }
- },
- {
- "if": {
- "properties": {
- "condition": {
- "enum": [
- "element_exists",
- "element_enabled"
- ]
- }
- },
- "required": [
- "condition"
- ]
- },
- "then": {
- "anyOf": [
- {
- "required": [
- "id"
- ]
- },
- {
- "required": [
- "label"
- ]
- },
- {
- "required": [
- "name"
- ]
- },
- {
- "required": [
- "role"
- ]
- },
- {
- "required": [
- "automation_id"
- ]
- }
- ]
- }
- },
- {
- "if": {
- "properties": {
- "state": {
- "enum": [
- "present",
- "absent"
- ]
- }
- },
- "required": [
- "state"
- ]
- },
- "then": {
- "anyOf": [
- {
- "required": [
- "id"
- ]
- },
- {
- "required": [
- "label"
- ]
- },
- {
- "required": [
- "name"
- ]
- },
- {
- "required": [
- "role"
- ]
- },
- {
- "required": [
- "automation_id"
- ]
- }
- ]
- }
- }
- ],
- "anyOf": [
- {
- "required": [
- "state"
- ]
- },
- {
- "required": [
- "condition"
- ]
- }
- ],
- "properties": {
- "app": {
- "description": "Limit matching to an application/process name substring when available.",
- "type": "string"
- },
- "automation_id": {
- "description": "Windows AutomationId when available.",
- "type": "string"
- },
- "browser_dom": {
- "description": "Use native browser document accessibility where supported.",
- "type": "boolean"
- },
- "condition": {
- "description": "Semantic condition to wait for; choose the condition that directly proves the requested state transition.",
- "enum": [
- "text_exists",
- "active_window",
- "element_exists",
- "element_enabled",
- "focused_element"
- ],
- "type": "string"
- },
- "id": {
- "description": "Element id returned by ui_snapshot or ui_find. Linux ids are stable per-process accessibility paths and legacy linux:<index> ids remain accepted.",
- "type": "string"
- },
- "label": {
- "description": "Compact numeric label from the most recent ui_snapshot/ui_find; useful for repeated actions without repeating names or coordinates.",
- "type": "number"
- },
- "name": {
- "description": "Accessible name/title substring.",
- "type": "string"
- },
- "pid": {
- "description": "Limit matching to one owning process id when available.",
- "type": "number"
- },
- "poll_ms": {
- "description": "Polling interval, 50..5000 ms.",
- "type": "number"
- },
- "role": {
- "description": "Accessible role such as Button, Edit, textbox or AXButton.",
- "type": "string"
- },
- "state": {
- "description": "changed captures the first matching semantic state and waits until it differs.",
- "enum": [
- "present",
- "absent",
- "changed"
- ],
- "type": "string"
- },
- "text": {
- "description": "Text used by text_exists or active_window.",
- "type": "string"
- },
- "timeout_ms": {
- "description": "Maximum wait, capped at 120000 ms.",
- "type": "number"
- },
- "window_title": {
- "description": "Limit matching to a top-level accessibility window/frame title substring when available.",
- "type": "string"
- }
- },
- "type": "object"
- }
- }
- }
- },
- {
- "if": {
- "properties": {
- "operation": {
- "const": "display_inventory"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "properties": {},
- "type": "object"
- }
- }
- }
- },
- {
- "if": {
- "properties": {
- "operation": {
- "const": "computer_action"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "allOf": [
- {
- "if": {
- "properties": {
- "action": {
- "const": "click"
- }
- },
- "required": [
- "action"
- ]
- },
- "then": {
- "anyOf": [
- {
- "required": [
- "id"
- ]
- },
- {
- "required": [
- "label"
- ]
- },
- {
- "required": [
- "name"
- ]
- },
- {
- "required": [
- "role"
- ]
- },
- {
- "required": [
- "automation_id"
- ]
- },
- {
- "required": [
- "selector"
- ]
- },
- {
- "required": [
- "browser_text"
- ]
- },
- {
- "required": [
- "ocr_text"
- ]
- },
- {
- "required": [
- "x",
- "y"
- ]
- }
- ]
- }
- },
- {
- "if": {
- "properties": {
- "action": {
- "enum": [
- "invoke",
- "set_value",
- "select",
- "toggle",
- "expand",
- "collapse",
- "scroll_into_view",
- "set_range_value",
- "add_to_selection",
- "remove_from_selection"
- ]
- }
- },
- "required": [
- "action"
- ]
- },
- "then": {
- "anyOf": [
- {
- "required": [
- "id"
- ]
- },
- {
- "required": [
- "label"
- ]
- },
- {
- "required": [
- "name"
- ]
- },
- {
- "required": [
- "role"
- ]
- },
- {
- "required": [
- "automation_id"
- ]
- },
- {
- "required": [
- "selector"
- ]
- },
- {
- "required": [
- "browser_text"
- ]
- }
- ]
- }
- },
- {
- "if": {
- "properties": {
- "action": {
- "const": "focus"
- }
- },
- "required": [
- "action"
- ]
- },
- "then": {
- "anyOf": [
- {
- "required": [
- "id"
- ]
- },
- {
- "required": [
- "label"
- ]
- },
- {
- "required": [
- "name"
- ]
- },
- {
- "required": [
- "role"
- ]
- },
- {
- "required": [
- "automation_id"
- ]
- },
- {
- "required": [
- "selector"
- ]
- },
- {
- "required": [
- "browser_text"
- ]
- },
- {
- "required": [
- "pid"
- ]
- },
- {
- "required": [
- "app"
- ]
- },
- {
- "required": [
- "window_title"
- ]
- },
- {
- "required": [
- "title"
- ]
- }
- ]
- }
- },
- {
- "if": {
- "properties": {
- "action": {
- "enum": [
- "set_value",
- "set_range_value"
- ]
- }
- },
- "required": [
- "action"
- ]
- },
- "then": {
- "required": [
- "value"
- ]
- }
- },
- {
- "if": {
- "properties": {
- "action": {
- "const": "multi_select"
- }
- },
- "required": [
- "action"
- ]
- },
- "then": {
- "required": [
- "targets"
- ]
- }
- },
- {
- "if": {
- "properties": {
- "action": {
- "const": "multi_edit"
- }
- },
- "required": [
- "action"
- ]
- },
- "then": {
- "required": [
- "edits"
- ]
- }
- }
- ],
- "properties": {
- "action": {
- "description": "Operation to perform; choose the narrowest action that directly matches the requested outcome.",
- "enum": [
- "click",
- "invoke",
- "focus",
- "set_value",
- "select",
- "toggle",
- "expand",
- "collapse",
- "scroll_into_view",
- "set_range_value",
- "add_to_selection",
- "remove_from_selection",
- "multi_select",
- "multi_edit"
- ],
- "type": "string"
- },
- "app": {
- "description": "Limit matching to an application/process name substring when available.",
- "type": "string"
- },
- "automation_id": {
- "description": "Windows AutomationId when available.",
- "type": "string"
- },
- "backend": {
- "description": "Input backend preference. auto uses proven local backends and already-authorized portal input; portal explicitly requests XDG RemoteDesktop consent on Wayland; x11 forces XWayland/xdotool only for operations where read-back testing shows it is reliable. GNOME Wayland keyboard/text deliberately reject x11.",
- "enum": [
- "auto",
- "x11",
- "portal"
- ],
- "type": "string"
- },
- "browser_text": {
- "description": "Visible browser text used to locate a DOM fallback target.",
- "type": "string"
- },
- "edits": {
- "description": "Native semantic target + text entries for action=multi_edit.",
- "items": {
- "additionalProperties": false,
- "properties": {
- "app": {
- "description": "Limit matching to an application/process name substring when available.",
- "type": "string"
- },
- "automation_id": {
- "description": "Windows AutomationId when available.",
- "type": "string"
- },
- "clear": {
- "description": "Clear the current value before entering text; default true.",
- "type": "boolean"
- },
- "id": {
- "description": "Element id returned by ui_snapshot or ui_find. Linux ids are stable per-process accessibility paths and legacy linux:<index> ids remain accepted.",
- "type": "string"
- },
- "label": {
- "description": "Compact numeric label from the most recent ui_snapshot/ui_find; useful for repeated actions without repeating names or coordinates.",
- "type": "number"
- },
- "method": {
- "description": "Text-entry strategy; auto is recommended.",
- "enum": [
- "auto",
- "accessibility",
- "clipboard",
- "keys"
- ],
- "type": "string"
- },
- "name": {
- "description": "Accessible name/title substring.",
- "type": "string"
- },
- "pid": {
- "description": "Limit matching to one owning process id when available.",
- "type": "number"
- },
- "role": {
- "description": "Accessible role such as Button, Edit, textbox or AXButton.",
- "type": "string"
- },
- "text": {
- "description": "Replacement text for this semantic edit.",
- "type": "string"
- },
- "window_title": {
- "description": "Limit matching to a top-level accessibility window/frame title substring when available.",
- "type": "string"
- }
- },
- "required": [
- "text"
- ],
- "type": "object"
- },
- "maxItems": 100,
- "minItems": 1,
- "type": "array"
- },
- "endpoint": {
- "description": "Loopback Chrome DevTools endpoint for a browser fallback.",
- "type": "string"
- },
- "id": {
- "description": "Element id returned by ui_snapshot or ui_find. Linux ids are stable per-process accessibility paths and legacy linux:<index> ids remain accepted.",
- "type": "string"
- },
- "label": {
- "description": "Compact numeric label from the most recent ui_snapshot/ui_find; useful for repeated actions without repeating names or coordinates.",
- "type": "number"
- },
- "name": {
- "description": "Accessible name/title substring.",
- "type": "string"
- },
- "ocr_language": {
- "description": "Tesseract language code, default eng.",
- "type": "string"
- },
- "ocr_psm": {
- "description": "Tesseract page segmentation mode, default 11.",
- "type": "number"
- },
- "ocr_region": {
- "description": "Optional virtual-desktop [left,top,right,bottom] region to OCR. Prefer bounds from list_windows or computer_snapshot.",
- "items": {
- "type": "number"
- },
- "maxItems": 4,
- "minItems": 4,
- "type": "array"
- },
- "ocr_text": {
- "description": "Visible text to find in rendered pixels for the OCR click fallback.",
- "type": "string"
- },
- "ocr_timeout_ms": {
- "description": "OCR timeout in milliseconds.",
- "type": "number"
- },
- "option": {
- "description": "Option value for browser select.",
- "type": "string"
- },
- "pid": {
- "description": "Limit matching to one owning process id when available.",
- "type": "number"
- },
- "replace_selection": {
- "description": "For multi_select, select the first item before adding the rest; default true.",
- "type": "boolean"
- },
- "role": {
- "description": "Accessible role such as Button, Edit, textbox or AXButton.",
- "type": "string"
- },
- "selector": {
- "description": "CSS selector when the fallback target is a browser element.",
- "type": "string"
- },
- "target": {
- "description": "Optional target type. auto tries native accessibility first, then browser DOM/CDP, OCR text when requested, then coordinates for click.",
- "enum": [
- "auto",
- "ui",
- "ui_element",
- "browser",
- "ocr",
- "coordinates"
- ],
- "type": "string"
- },
- "target_id": {
- "description": "Browser page target id returned by browser_tabs.",
- "type": "string"
- },
- "targets": {
- "description": "Native semantic targets for action=multi_select.",
- "items": {
- "additionalProperties": false,
- "properties": {
- "app": {
- "description": "Limit matching to an application/process name substring when available.",
- "type": "string"
- },
- "automation_id": {
- "description": "Windows AutomationId when available.",
- "type": "string"
- },
- "id": {
- "description": "Element id returned by ui_snapshot or ui_find. Linux ids are stable per-process accessibility paths and legacy linux:<index> ids remain accepted.",
- "type": "string"
- },
- "label": {
- "description": "Compact numeric label from the most recent ui_snapshot/ui_find; useful for repeated actions without repeating names or coordinates.",
- "type": "number"
- },
- "name": {
- "description": "Accessible name/title substring.",
- "type": "string"
- },
- "pid": {
- "description": "Limit matching to one owning process id when available.",
- "type": "number"
- },
- "role": {
- "description": "Accessible role such as Button, Edit, textbox or AXButton.",
- "type": "string"
- },
- "window_title": {
- "description": "Limit matching to a top-level accessibility window/frame title substring when available.",
- "type": "string"
- }
- },
- "type": "object"
- },
- "maxItems": 100,
- "minItems": 1,
- "type": "array"
- },
- "text": {
- "description": "Text used by multi_edit or as a compatibility value for a semantic edit.",
- "type": "string"
- },
- "title": {
- "description": "Optional browser page title substring when target=browser.",
- "type": "string"
- },
- "url_contains": {
- "description": "Browser URL substring used to select a page.",
- "type": "string"
- },
- "value": {
- "description": "New value for set_value, set_range_value, or select.",
- "type": "string"
- },
- "window_title": {
- "description": "Limit matching to a top-level accessibility window/frame title substring when available.",
- "type": "string"
- },
- "x": {
- "description": "Virtual-desktop X coordinate used only by the final click fallback.",
- "type": "number"
- },
- "y": {
- "description": "Virtual-desktop Y coordinate used only by the final click fallback.",
- "type": "number"
- }
- },
- "required": [
- "action"
- ],
- "type": "object"
- }
- },
- "required": [
- "parameters"
- ]
- }
- },
- {
- "if": {
- "properties": {
- "operation": {
- "const": "window_action"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "allOf": [
- {
- "anyOf": [
- {
- "required": [
- "id"
- ]
- },
- {
- "required": [
- "pid"
- ]
- },
- {
- "required": [
- "app"
- ]
- },
- {
- "required": [
- "title"
- ]
- }
- ]
- },
- {
- "if": {
- "properties": {
- "action": {
- "const": "move"
- }
- },
- "required": [
- "action"
- ]
- },
- "then": {
- "required": [
- "x",
- "y"
- ]
- }
- },
- {
- "if": {
- "properties": {
- "action": {
- "const": "resize"
- }
- },
- "required": [
- "action"
- ]
- },
- "then": {
- "required": [
- "width",
- "height"
- ]
- }
- },
- {
- "if": {
- "properties": {
- "action": {
- "const": "move_resize"
- }
- },
- "required": [
- "action"
- ]
- },
- "then": {
- "required": [
- "x",
- "y",
- "width",
- "height"
- ]
- }
- }
- ],
- "properties": {
- "action": {
- "description": "Operation to perform; choose the narrowest action that directly matches the requested outcome.",
- "enum": [
- "focus",
- "minimize",
- "maximize",
- "restore",
- "move",
- "resize",
- "move_resize",
- "close"
- ],
- "type": "string"
- },
- "app": {
- "description": "Application/process name substring.",
- "type": "string"
- },
- "backend": {
- "description": "Input backend preference. auto uses proven local backends and already-authorized portal input; portal explicitly requests XDG RemoteDesktop consent on Wayland; x11 forces XWayland/xdotool only for operations where read-back testing shows it is reliable. GNOME Wayland keyboard/text deliberately reject x11.",
- "enum": [
- "auto",
- "x11",
- "portal"
- ],
- "type": "string"
- },
- "height": {
- "description": "Height in pixels.",
- "type": "number"
- },
- "id": {
- "description": "Window id returned by list_windows.",
- "type": "string"
- },
- "pid": {
- "description": "Owning process id.",
- "type": "number"
- },
- "title": {
- "description": "Window title substring.",
- "type": "string"
- },
- "width": {
- "description": "Width in pixels.",
- "type": "number"
- },
- "x": {
- "description": "Virtual-desktop X coordinate in pixels.",
- "type": "number"
- },
- "y": {
- "description": "Virtual-desktop Y coordinate in pixels.",
- "type": "number"
- }
- },
- "required": [
- "action"
- ],
- "type": "object"
- }
- },
- "required": [
- "parameters"
- ]
- }
- },
- {
- "if": {
- "properties": {
- "operation": {
- "const": "launch_app"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "anyOf": [
- {
- "required": [
- "app"
- ]
- },
- {
- "required": [
- "path"
- ]
- }
- ],
- "properties": {
- "app": {
- "description": "Application name, friendly Start Menu name, or executable path.",
- "type": "string"
- },
- "args": {
- "description": "Argument array passed directly to the launched application; no shell parsing.",
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "cwd": {
- "description": "Optional permitted working directory for direct executable launch.",
- "type": "string"
- },
- "path": {
- "description": "Alias for app.",
- "type": "string"
- },
- "wait_for_window": {
- "description": "Optional application/title substring that must appear after launch.",
- "type": "string"
- },
- "wait_timeout_ms": {
- "description": "Maximum wait for wait_for_window; default 10000, maximum 120000.",
- "type": "number"
- }
- },
- "type": "object"
- }
- }
- }
- },
- {
- "if": {
- "properties": {
- "operation": {
- "const": "ui_action"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "allOf": [
- {
- "anyOf": [
- {
- "required": [
- "id"
- ]
- },
- {
- "required": [
- "label"
- ]
- },
- {
- "required": [
- "name"
- ]
- },
- {
- "required": [
- "role"
- ]
- },
- {
- "required": [
- "automation_id"
- ]
- }
- ]
- },
- {
- "if": {
- "properties": {
- "action": {
- "enum": [
- "set_value",
- "set_range_value"
- ]
- }
- },
- "required": [
- "action"
- ]
- },
- "then": {
- "required": [
- "value"
- ]
- }
- }
- ],
- "properties": {
- "action": {
- "description": "Operation to perform; choose the narrowest action that directly matches the requested outcome.",
- "enum": [
- "click",
- "invoke",
- "focus",
- "set_value",
- "select",
- "toggle",
- "expand",
- "collapse",
- "scroll_into_view",
- "set_range_value",
- "add_to_selection",
- "remove_from_selection"
- ],
- "type": "string"
- },
- "app": {
- "description": "Limit matching to an application/process name substring when available.",
- "type": "string"
- },
- "automation_id": {
- "description": "Windows AutomationId when available.",
- "type": "string"
- },
- "id": {
- "description": "Element id returned by ui_snapshot or ui_find. Linux ids are stable per-process accessibility paths and legacy linux:<index> ids remain accepted.",
- "type": "string"
- },
- "label": {
- "description": "Compact numeric label from the most recent ui_snapshot/ui_find; useful for repeated actions without repeating names or coordinates.",
- "type": "number"
- },
- "name": {
- "description": "Accessible name/title substring.",
- "type": "string"
- },
- "pid": {
- "description": "Limit matching to one owning process id when available.",
- "type": "number"
- },
- "role": {
- "description": "Accessible role such as Button, Edit, textbox or AXButton.",
- "type": "string"
- },
- "value": {
- "description": "New text or numeric range value."
- },
- "window_title": {
- "description": "Limit matching to a top-level accessibility window/frame title substring when available.",
- "type": "string"
- }
- },
- "required": [
- "action"
- ],
- "type": "object"
- }
- },
- "required": [
- "parameters"
- ]
- }
- },
- {
- "if": {
- "properties": {
- "operation": {
- "const": "type_text"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "properties": {
- "app": {
- "description": "Limit matching to an application/process name substring when available.",
- "type": "string"
- },
- "automation_id": {
- "description": "Windows AutomationId when available.",
- "type": "string"
- },
- "backend": {
- "description": "Input backend preference. auto uses proven local backends and already-authorized portal input; portal explicitly requests XDG RemoteDesktop consent on Wayland; x11 forces XWayland/xdotool only for operations where read-back testing shows it is reliable. GNOME Wayland keyboard/text deliberately reject x11.",
- "enum": [
- "auto",
- "x11",
- "portal"
- ],
- "type": "string"
- },
- "caret_position": {
- "description": "Where text insertion should occur when the semantic editor supports caret placement.",
- "enum": [
- "start",
- "idle",
- "end"
- ],
- "type": "string"
- },
- "clear": {
- "description": "Replace existing text for semantic/window-scoped accessibility input, or clear it before keyboard/paste fallback.",
- "type": "boolean"
- },
- "delay_ms": {
- "description": "Per-key delay for method=keys.",
- "type": "number"
- },
- "id": {
- "description": "Element id returned by ui_snapshot or ui_find. Linux ids are stable per-process accessibility paths and legacy linux:<index> ids remain accepted.",
- "type": "string"
- },
- "label": {
- "description": "Compact numeric label from the most recent ui_snapshot/ui_find; useful for repeated actions without repeating names or coordinates.",
- "type": "number"
- },
- "method": {
- "description": "Default auto prefers verified accessibility editing and falls back to clipboard paste. keys sends physical key events and therefore follows the active keyboard layout.",
- "enum": [
- "auto",
- "accessibility",
- "clipboard",
- "keys"
- ],
- "type": "string"
- },
- "name": {
- "description": "Accessible name/title substring.",
- "type": "string"
- },
- "pid": {
- "description": "Limit matching to one owning process id when available.",
- "type": "number"
- },
- "press_enter": {
- "description": "Press Enter after typing; physical Enter delivery requires verified window focus.",
- "type": "boolean"
- },
- "role": {
- "description": "Accessible role such as Button, Edit, textbox or AXButton.",
- "type": "string"
- },
- "text": {
- "description": "Text to enter.",
- "type": "string"
- },
- "title": {
- "description": "Optional target window title substring. With auto/accessibility + clear=true, a unique editable control may be updated semantically without compositor focus.",
- "type": "string"
- },
- "window_id": {
- "description": "Optional target window id. With auto/accessibility + clear=true, a unique editable control may be updated semantically without focus; keyboard/clipboard fallbacks verify focus before dispatch.",
- "type": "string"
- },
- "window_title": {
- "description": "Limit matching to a top-level accessibility window/frame title substring when available.",
- "type": "string"
- }
- },
- "required": [
- "text"
- ],
- "type": "object"
- }
- },
- "required": [
- "parameters"
- ]
- }
- },
- {
- "if": {
- "properties": {
- "operation": {
- "const": "keyboard"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "anyOf": [
- {
- "required": [
- "shortcut"
- ]
- },
- {
- "required": [
- "key"
- ]
- },
- {
- "required": [
- "keys"
- ]
- }
- ],
- "properties": {
- "app": {
- "description": "Optional target application/process name substring.",
- "type": "string"
- },
- "backend": {
- "description": "Input backend preference. auto uses proven local backends and already-authorized portal input; portal explicitly requests XDG RemoteDesktop consent on Wayland; x11 forces XWayland/xdotool only for operations where read-back testing shows it is reliable. GNOME Wayland keyboard/text deliberately reject x11.",
- "enum": [
- "auto",
- "x11",
- "portal"
- ],
- "type": "string"
- },
- "key": {
- "description": "Single key name such as Enter, Escape, Tab or A.",
- "type": "string"
- },
- "keys": {
- "description": "Ordered key names that together form the requested shortcut or key sequence.",
- "items": {
- "type": "string"
- },
- "minItems": 1,
- "type": "array"
- },
- "pid": {
- "description": "Optional target process id.",
- "type": "number"
- },
- "shortcut": {
- "description": "Keyboard shortcut such as CTRL+L, CMD+K or ALT+F4.",
- "type": "string"
- },
- "title": {
- "description": "Optional target window title substring.",
- "type": "string"
- },
- "window_id": {
- "description": "Optional target window id returned by list_windows. On Wayland the target is focused and verified before keyboard/text input is dispatched.",
- "type": "string"
- }
- },
- "type": "object"
- }
- }
- }
- },
- {
- "if": {
- "properties": {
- "operation": {
- "const": "pointer"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "allOf": [
- {
- "if": {
- "properties": {
- "action": {
- "const": "move"
- }
- },
- "required": [
- "action"
- ]
- },
- "then": {
- "required": [
- "x",
- "y"
- ]
- }
- }
- ],
- "properties": {
- "action": {
- "description": "Operation to perform; choose the narrowest action that directly matches the requested outcome.",
- "enum": [
- "move",
- "click",
- "double_click",
- "right_click",
- "down",
- "up"
- ],
- "type": "string"
- },
- "backend": {
- "description": "Input backend preference. auto uses proven local backends and already-authorized portal input; portal explicitly requests XDG RemoteDesktop consent on Wayland; x11 forces XWayland/xdotool only for operations where read-back testing shows it is reliable. GNOME Wayland keyboard/text deliberately reject x11.",
- "enum": [
- "auto",
- "x11",
- "portal"
- ],
- "type": "string"
- },
- "button": {
- "description": "Pointer button to use for click/down/up or drag gestures.",
- "enum": [
- "left",
- "right",
- "middle"
- ],
- "type": "string"
- },
- "x": {
- "description": "Virtual-desktop X coordinate in pixels.",
- "type": "number"
- },
- "y": {
- "description": "Virtual-desktop Y coordinate in pixels.",
- "type": "number"
- }
- },
- "required": [
- "action"
- ],
- "type": "object"
- }
- },
- "required": [
- "parameters"
- ]
- }
- },
- {
- "if": {
- "properties": {
- "operation": {
- "const": "drag_drop"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "allOf": [
- {
- "anyOf": [
- {
- "required": [
- "from_id"
- ]
- },
- {
- "required": [
- "from_x",
- "from_y"
- ]
- }
- ]
- },
- {
- "anyOf": [
- {
- "required": [
- "to_id"
- ]
- },
- {
- "required": [
- "to_x",
- "to_y"
- ]
- }
- ]
- }
- ],
- "properties": {
- "backend": {
- "description": "Input backend preference. auto uses proven local backends and already-authorized portal input; portal explicitly requests XDG RemoteDesktop consent on Wayland; x11 forces XWayland/xdotool only for operations where read-back testing shows it is reliable. GNOME Wayland keyboard/text deliberately reject x11.",
- "enum": [
- "auto",
- "x11",
- "portal"
- ],
- "type": "string"
- },
- "button": {
- "description": "Pointer button to use for click/down/up or drag gestures.",
- "enum": [
- "left",
- "right",
- "middle"
- ],
- "type": "string"
- },
- "duration_ms": {
- "description": "Duration of the drag/movement gesture in milliseconds.",
- "type": "number"
- },
- "from_id": {
- "description": "Source UI element id; use instead of from_x/from_y.",
- "type": "string"
- },
- "from_x": {
- "description": "Source X coordinate for a drag gesture.",
- "type": "number"
- },
- "from_y": {
- "description": "Source Y coordinate for a drag gesture.",
- "type": "number"
- },
- "hold_ms": {
- "description": "How long to hold the pointer button before movement during a drag.",
- "type": "number"
- },
- "to_id": {
- "description": "Destination UI element id; use instead of to_x/to_y.",
- "type": "string"
- },
- "to_x": {
- "description": "Destination X coordinate for a drag gesture.",
- "type": "number"
- },
- "to_y": {
- "description": "Destination Y coordinate for a drag gesture.",
- "type": "number"
- }
- },
- "type": "object"
- }
- }
- }
- },
- {
- "if": {
- "properties": {
- "operation": {
- "const": "scroll"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "anyOf": [
- {
- "required": [
- "delta_x"
- ]
- },
- {
- "required": [
- "delta_y"
- ]
- },
- {
- "required": [
- "delta"
- ]
- },
- {
- "required": [
- "direction"
- ]
- }
- ],
- "properties": {
- "app": {
- "description": "Limit matching to an application/process name substring when available.",
- "type": "string"
- },
- "automation_id": {
- "description": "Windows AutomationId when available.",
- "type": "string"
- },
- "backend": {
- "description": "Input backend preference. auto uses proven local backends and already-authorized portal input; portal explicitly requests XDG RemoteDesktop consent on Wayland; x11 forces XWayland/xdotool only for operations where read-back testing shows it is reliable. GNOME Wayland keyboard/text deliberately reject x11.",
- "enum": [
- "auto",
- "x11",
- "portal"
- ],
- "type": "string"
- },
- "delta": {
- "description": "Alias for delta_y.",
- "type": "number"
- },
- "delta_x": {
- "description": "Horizontal delta; positive means right.",
- "type": "number"
- },
- "delta_y": {
- "description": "Vertical delta; positive means down.",
- "type": "number"
- },
- "direction": {
- "description": "Human-readable scroll direction used with wheel_times instead of explicit deltas.",
- "enum": [
- "up",
- "down",
- "left",
- "right"
- ],
- "type": "string"
- },
- "id": {
- "description": "Element id returned by ui_snapshot or ui_find. Linux ids are stable per-process accessibility paths and legacy linux:<index> ids remain accepted.",
- "type": "string"
- },
- "label": {
- "description": "Compact numeric label from the most recent ui_snapshot/ui_find; useful for repeated actions without repeating names or coordinates.",
- "type": "number"
- },
- "name": {
- "description": "Accessible name/title substring.",
- "type": "string"
- },
- "pid": {
- "description": "Limit matching to one owning process id when available.",
- "type": "number"
- },
- "role": {
- "description": "Accessible role such as Button, Edit, textbox or AXButton.",
- "type": "string"
- },
- "wheel_times": {
- "description": "Number of 120-unit wheel steps when direction is used; 1..50.",
- "type": "number"
- },
- "window_title": {
- "description": "Limit matching to a top-level accessibility window/frame title substring when available.",
- "type": "string"
- },
- "x": {
- "description": "Virtual-desktop X coordinate in pixels.",
- "type": "number"
- },
- "y": {
- "description": "Virtual-desktop Y coordinate in pixels.",
- "type": "number"
- }
- },
- "type": "object"
- }
- }
- }
- },
- {
- "if": {
- "properties": {
- "operation": {
- "const": "clipboard"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "properties": {
- "action": {
- "description": "Operation to perform; choose the narrowest action that directly matches the requested outcome.",
- "enum": [
- "read",
- "write",
- "clear"
- ],
- "type": "string"
- },
- "text": {
- "description": "Text to write.",
- "type": "string"
- }
- },
- "required": [
- "action"
- ],
- "type": "object"
- }
- },
- "required": [
- "parameters"
- ]
- }
- },
- {
- "if": {
- "properties": {
- "operation": {
- "const": "open_path"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "properties": {
- "path": {
- "description": "File or directory to open.",
- "type": "string"
- }
- },
- "required": [
- "path"
- ],
- "type": "object"
- }
- },
- "required": [
- "parameters"
- ]
- }
- },
- {
- "if": {
- "properties": {
- "operation": {
- "const": "reveal_path"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "properties": {
- "path": {
- "description": "File or directory to reveal.",
- "type": "string"
- }
- },
- "required": [
- "path"
- ],
- "type": "object"
- }
- },
- "required": [
- "parameters"
- ]
- }
- },
- {
- "if": {
- "properties": {
- "operation": {
- "const": "notification"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "properties": {
- "message": {
- "description": "Notification message.",
- "type": "string"
- },
- "timeout_seconds": {
- "description": "Bounded native notification display timeout in seconds when the platform supports it.",
- "type": "number"
- },
- "title": {
- "description": "Window/page title substring used to select the target.",
- "type": "string"
- }
- },
- "required": [
- "message"
- ],
- "type": "object"
- }
- },
- "required": [
- "parameters"
- ]
- }
- },
- {
- "if": {
- "properties": {
- "operation": {
- "const": "record_screen"
- }
- },
- "required": [
- "operation"
- ]
- },
- "then": {
- "properties": {
- "parameters": {
- "additionalProperties": false,
- "properties": {
- "destination": {
- "description": "Permitted output path. If an extension is supplied, use .webm for native GNOME Wayland recording and .mp4 for the other recorder backends.",
- "type": "string"
- },
- "duration_seconds": {
- "description": "1..120 seconds.",
- "type": "number"
- },
- "fps": {
- "description": "1..60.",
- "type": "number"
- }
- },
- "type": "object"
- }
- }
- }
- }
-]New value: +[
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "computer_snapshot"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {
+ "browser_max_nodes": {
+ "description": "Maximum browser accessibility nodes; default 500, maximum 2000.",
+ "type": "number"
+ },
+ "grid_columns": {
+ "description": "Optional reference-grid column count returned as visual metadata; 0..20.",
+ "type": "number"
+ },
+ "grid_rows": {
+ "description": "Optional reference-grid row count returned as visual metadata; 0..20.",
+ "type": "number"
+ },
+ "include_browser": {
+ "description": "Include CDP browser accessibility when available. Default auto: only when the active app looks Chromium-based.",
+ "type": "boolean"
+ },
+ "include_ocr": {
+ "description": "Run optional local OCR. Default auto: only when native accessibility and browser DOM are unavailable. Requires tesseract on PATH.",
+ "type": "boolean"
+ },
+ "include_screenshot": {
+ "description": "Include real rendered desktop pixels; default true.",
+ "type": "boolean"
+ },
+ "include_ui": {
+ "description": "Include native accessibility tree; default true. False is the fast screenshot-only path.",
+ "type": "boolean"
+ },
+ "max_ui_depth": {
+ "description": "Maximum native accessibility depth; default 12.",
+ "type": "number"
+ },
+ "max_ui_nodes": {
+ "description": "Maximum native accessibility nodes; default 800.",
+ "type": "number"
+ },
+ "ocr_language": {
+ "description": "Tesseract language code, default eng; multiple languages may use eng+deu.",
+ "type": "string"
+ },
+ "ocr_max_words": {
+ "description": "Maximum OCR word boxes returned; default 2000, maximum 10000.",
+ "type": "number"
+ },
+ "ocr_psm": {
+ "description": "Tesseract page segmentation mode, 3..13; default 11.",
+ "type": "number"
+ },
+ "ocr_timeout_ms": {
+ "description": "OCR timeout, default 30000 ms, maximum 120000 ms.",
+ "type": "number"
+ },
+ "screenshot_monitor": {
+ "description": "Monitor name substring or \"primary\".",
+ "type": "string"
+ },
+ "screenshot_monitor_index": {
+ "description": "Zero-based monitor index.",
+ "type": "number"
+ },
+ "screenshot_padding": {
+ "description": "Pixels of context around a targeted screenshot; 0..200.",
+ "type": "number"
+ },
+ "screenshot_region": {
+ "description": "Virtual-desktop [left,top,right,bottom] region; takes precedence over full desktop.",
+ "items": {
+ "type": "number"
+ },
+ "maxItems": 4,
+ "minItems": 4,
+ "type": "array"
+ },
+ "screenshot_window_id": {
+ "description": "Capture the window returned by list_windows instead of the whole desktop.",
+ "type": "string"
+ },
+ "semantic_tree": {
+ "description": "Include compact semantic hierarchy text alongside nodes; default true.",
+ "type": "boolean"
+ },
+ "ui_browser_dom": {
+ "description": "Prefer the native browser accessibility document subtree when the OS exposes one; on Windows this also enables the Firefox MSAA/IAccessible fallback.",
+ "type": "boolean"
+ },
+ "ui_scope": {
+ "description": "Accessibility scope for computer_snapshot. Default active keeps the compact snapshot fast; desktop requests all accessible applications/windows.",
+ "enum": [
+ "active",
+ "desktop"
+ ],
+ "type": "string"
+ }
+ },
+ "type": "object"
+ }
+ }
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "list_windows"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {
+ "include_monitor": {
+ "description": "Enrich each window with monitor and monitor_index; default true.",
+ "type": "boolean"
+ }
+ },
+ "type": "object"
+ }
+ }
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "ui_snapshot"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {
+ "app": {
+ "description": "Optional application/process name substring scope.",
+ "type": "string"
+ },
+ "browser_dom": {
+ "description": "Prefer the native browser document accessibility subtree instead of browser chrome when supported.",
+ "type": "boolean"
+ },
+ "max_depth": {
+ "description": "Maximum traversal depth; default 8, maximum 32.",
+ "type": "number"
+ },
+ "max_nodes": {
+ "description": "Maximum nodes; default 500, maximum 5000.",
+ "type": "number"
+ },
+ "pid": {
+ "description": "Optional owning process id scope.",
+ "type": "number"
+ },
+ "scope": {
+ "description": "Default active. Use desktop only when cross-application discovery is required.",
+ "enum": [
+ "active",
+ "desktop"
+ ],
+ "type": "string"
+ },
+ "semantic_tree": {
+ "description": "Include compact semantic hierarchy text; default true.",
+ "type": "boolean"
+ },
+ "window_title": {
+ "description": "Optional top-level accessibility window/frame title scope.",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ }
+ }
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "ui_find"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "anyOf": [
+ {
+ "required": [
+ "id"
+ ]
+ },
+ {
+ "required": [
+ "label"
+ ]
+ },
+ {
+ "required": [
+ "name"
+ ]
+ },
+ {
+ "required": [
+ "role"
+ ]
+ },
+ {
+ "required": [
+ "automation_id"
+ ]
+ }
+ ],
+ "properties": {
+ "app": {
+ "description": "Limit matching to an application/process name substring when available.",
+ "type": "string"
+ },
+ "automation_id": {
+ "description": "Windows AutomationId when available.",
+ "type": "string"
+ },
+ "id": {
+ "description": "Element id returned by ui_snapshot or ui_find. Linux ids are stable per-process accessibility paths and legacy linux:<index> ids remain accepted.",
+ "type": "string"
+ },
+ "label": {
+ "description": "Compact numeric label from the most recent ui_snapshot/ui_find; useful for repeated actions without repeating names or coordinates.",
+ "type": "number"
+ },
+ "limit": {
+ "description": "Maximum matches; default 20.",
+ "type": "number"
+ },
+ "max_depth": {
+ "description": "Maximum accessibility tree depth to traverse.",
+ "type": "number"
+ },
+ "max_nodes": {
+ "description": "Maximum accessibility nodes to inspect or return; keep this bounded and raise it only when the target is missing.",
+ "type": "number"
+ },
+ "name": {
+ "description": "Accessible name/title substring.",
+ "type": "string"
+ },
+ "pid": {
+ "description": "Limit matching to one owning process id when available.",
+ "type": "number"
+ },
+ "refresh": {
+ "description": "Force a fresh accessibility capture instead of the short-lived snapshot cache.",
+ "type": "boolean"
+ },
+ "role": {
+ "description": "Accessible role such as Button, Edit, textbox or AXButton.",
+ "type": "string"
+ },
+ "window_title": {
+ "description": "Limit matching to a top-level accessibility window/frame title substring when available.",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ }
+ }
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "wait_for_ui"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "allOf": [
+ {
+ "if": {
+ "properties": {
+ "condition": {
+ "const": "text_exists"
+ }
+ },
+ "required": [
+ "condition"
+ ]
+ },
+ "then": {
+ "required": [
+ "text"
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "condition": {
+ "const": "active_window"
+ }
+ },
+ "required": [
+ "condition"
+ ]
+ },
+ "then": {
+ "anyOf": [
+ {
+ "required": [
+ "text"
+ ]
+ },
+ {
+ "required": [
+ "name"
+ ]
+ },
+ {
+ "required": [
+ "window_title"
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "condition": {
+ "enum": [
+ "element_exists",
+ "element_enabled"
+ ]
+ }
+ },
+ "required": [
+ "condition"
+ ]
+ },
+ "then": {
+ "anyOf": [
+ {
+ "required": [
+ "id"
+ ]
+ },
+ {
+ "required": [
+ "label"
+ ]
+ },
+ {
+ "required": [
+ "name"
+ ]
+ },
+ {
+ "required": [
+ "role"
+ ]
+ },
+ {
+ "required": [
+ "automation_id"
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "state": {
+ "enum": [
+ "present",
+ "absent"
+ ]
+ }
+ },
+ "required": [
+ "state"
+ ]
+ },
+ "then": {
+ "anyOf": [
+ {
+ "required": [
+ "id"
+ ]
+ },
+ {
+ "required": [
+ "label"
+ ]
+ },
+ {
+ "required": [
+ "name"
+ ]
+ },
+ {
+ "required": [
+ "role"
+ ]
+ },
+ {
+ "required": [
+ "automation_id"
+ ]
+ }
+ ]
+ }
+ }
+ ],
+ "anyOf": [
+ {
+ "required": [
+ "state"
+ ]
+ },
+ {
+ "required": [
+ "condition"
+ ]
+ }
+ ],
+ "properties": {
+ "app": {
+ "description": "Limit matching to an application/process name substring when available.",
+ "type": "string"
+ },
+ "automation_id": {
+ "description": "Windows AutomationId when available.",
+ "type": "string"
+ },
+ "browser_dom": {
+ "description": "Use native browser document accessibility where supported.",
+ "type": "boolean"
+ },
+ "condition": {
+ "description": "Semantic condition to wait for; choose the condition that directly proves the requested state transition.",
+ "enum": [
+ "text_exists",
+ "active_window",
+ "element_exists",
+ "element_enabled",
+ "focused_element"
+ ],
+ "type": "string"
+ },
+ "id": {
+ "description": "Element id returned by ui_snapshot or ui_find. Linux ids are stable per-process accessibility paths and legacy linux:<index> ids remain accepted.",
+ "type": "string"
+ },
+ "label": {
+ "description": "Compact numeric label from the most recent ui_snapshot/ui_find; useful for repeated actions without repeating names or coordinates.",
+ "type": "number"
+ },
+ "name": {
+ "description": "Accessible name/title substring.",
+ "type": "string"
+ },
+ "pid": {
+ "description": "Limit matching to one owning process id when available.",
+ "type": "number"
+ },
+ "poll_ms": {
+ "description": "Polling interval, 50..5000 ms.",
+ "type": "number"
+ },
+ "role": {
+ "description": "Accessible role such as Button, Edit, textbox or AXButton.",
+ "type": "string"
+ },
+ "state": {
+ "description": "changed captures the first matching semantic state and waits until it differs.",
+ "enum": [
+ "present",
+ "absent",
+ "changed"
+ ],
+ "type": "string"
+ },
+ "text": {
+ "description": "Text used by text_exists or active_window.",
+ "type": "string"
+ },
+ "timeout_ms": {
+ "description": "Maximum wait, capped at 120000 ms.",
+ "type": "number"
+ },
+ "window_title": {
+ "description": "Limit matching to a top-level accessibility window/frame title substring when available.",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ }
+ }
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "display_inventory"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {},
+ "type": "object"
+ }
+ }
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "computer_action"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "allOf": [
+ {
+ "if": {
+ "properties": {
+ "target": {
+ "const": "window"
+ }
+ },
+ "required": [
+ "target"
+ ]
+ },
+ "then": {
+ "anyOf": [
+ {
+ "required": [
+ "window_id"
+ ]
+ },
+ {
+ "required": [
+ "pid"
+ ]
+ },
+ {
+ "required": [
+ "app"
+ ]
+ },
+ {
+ "required": [
+ "window_title"
+ ]
+ },
+ {
+ "required": [
+ "title"
+ ]
+ }
+ ],
+ "properties": {
+ "action": {
+ "enum": [
+ "type",
+ "focus",
+ "scroll",
+ "drag"
+ ]
+ }
+ }
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "action": {
+ "const": "click"
+ }
+ },
+ "required": [
+ "action"
+ ]
+ },
+ "then": {
+ "anyOf": [
+ {
+ "required": [
+ "id"
+ ]
+ },
+ {
+ "required": [
+ "label"
+ ]
+ },
+ {
+ "required": [
+ "name"
+ ]
+ },
+ {
+ "required": [
+ "role"
+ ]
+ },
+ {
+ "required": [
+ "automation_id"
+ ]
+ },
+ {
+ "required": [
+ "selector"
+ ]
+ },
+ {
+ "required": [
+ "browser_text"
+ ]
+ },
+ {
+ "required": [
+ "name"
+ ]
+ },
+ {
+ "required": [
+ "ocr_text"
+ ]
+ },
+ {
+ "required": [
+ "x",
+ "y"
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "action": {
+ "enum": [
+ "invoke",
+ "set_value",
+ "select",
+ "toggle",
+ "expand",
+ "collapse",
+ "scroll_into_view",
+ "set_range_value",
+ "add_to_selection",
+ "remove_from_selection"
+ ]
+ }
+ },
+ "required": [
+ "action"
+ ]
+ },
+ "then": {
+ "anyOf": [
+ {
+ "required": [
+ "id"
+ ]
+ },
+ {
+ "required": [
+ "label"
+ ]
+ },
+ {
+ "required": [
+ "name"
+ ]
+ },
+ {
+ "required": [
+ "role"
+ ]
+ },
+ {
+ "required": [
+ "automation_id"
+ ]
+ },
+ {
+ "required": [
+ "selector"
+ ]
+ },
+ {
+ "required": [
+ "browser_text"
+ ]
+ },
+ {
+ "required": [
+ "name"
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "action": {
+ "const": "focus"
+ }
+ },
+ "required": [
+ "action"
+ ]
+ },
+ "then": {
+ "anyOf": [
+ {
+ "required": [
+ "id"
+ ]
+ },
+ {
+ "required": [
+ "label"
+ ]
+ },
+ {
+ "required": [
+ "name"
+ ]
+ },
+ {
+ "required": [
+ "role"
+ ]
+ },
+ {
+ "required": [
+ "automation_id"
+ ]
+ },
+ {
+ "required": [
+ "selector"
+ ]
+ },
+ {
+ "required": [
+ "browser_text"
+ ]
+ },
+ {
+ "required": [
+ "name"
+ ]
+ },
+ {
+ "required": [
+ "window_id"
+ ]
+ },
+ {
+ "required": [
+ "pid"
+ ]
+ },
+ {
+ "required": [
+ "app"
+ ]
+ },
+ {
+ "required": [
+ "window_title"
+ ]
+ },
+ {
+ "required": [
+ "title"
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "action": {
+ "const": "type"
+ }
+ },
+ "required": [
+ "action"
+ ]
+ },
+ "then": {
+ "allOf": [
+ {
+ "anyOf": [
+ {
+ "required": [
+ "id"
+ ]
+ },
+ {
+ "required": [
+ "label"
+ ]
+ },
+ {
+ "required": [
+ "name"
+ ]
+ },
+ {
+ "required": [
+ "role"
+ ]
+ },
+ {
+ "required": [
+ "automation_id"
+ ]
+ },
+ {
+ "required": [
+ "selector"
+ ]
+ },
+ {
+ "required": [
+ "browser_text"
+ ]
+ },
+ {
+ "required": [
+ "name"
+ ]
+ },
+ {
+ "required": [
+ "window_id"
+ ]
+ },
+ {
+ "required": [
+ "pid"
+ ]
+ },
+ {
+ "required": [
+ "app"
+ ]
+ },
+ {
+ "required": [
+ "window_title"
+ ]
+ },
+ {
+ "required": [
+ "title"
+ ]
+ }
+ ]
+ },
+ {
+ "if": {
+ "properties": {
+ "target": {
+ "enum": [
+ "ui",
+ "ui_element"
+ ]
+ }
+ },
+ "required": [
+ "target"
+ ]
+ },
+ "then": {
+ "anyOf": [
+ {
+ "required": [
+ "id"
+ ]
+ },
+ {
+ "required": [
+ "label"
+ ]
+ },
+ {
+ "required": [
+ "name"
+ ]
+ },
+ {
+ "required": [
+ "role"
+ ]
+ },
+ {
+ "required": [
+ "automation_id"
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "target": {
+ "const": "browser"
+ }
+ },
+ "required": [
+ "target"
+ ]
+ },
+ "then": {
+ "anyOf": [
+ {
+ "required": [
+ "selector"
+ ]
+ },
+ {
+ "required": [
+ "browser_text"
+ ]
+ },
+ {
+ "required": [
+ "name"
+ ]
+ }
+ ]
+ }
+ }
+ ],
+ "properties": {
+ "target": {
+ "enum": [
+ "auto",
+ "ui",
+ "ui_element",
+ "browser",
+ "window"
+ ]
+ }
+ },
+ "required": [
+ "text"
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "action": {
+ "const": "scroll"
+ }
+ },
+ "required": [
+ "action"
+ ]
+ },
+ "then": {
+ "allOf": [
+ {
+ "anyOf": [
+ {
+ "required": [
+ "delta_x"
+ ]
+ },
+ {
+ "required": [
+ "delta_y"
+ ]
+ },
+ {
+ "required": [
+ "delta"
+ ]
+ },
+ {
+ "required": [
+ "direction"
+ ]
+ }
+ ]
+ },
+ {
+ "if": {
+ "properties": {
+ "target": {
+ "enum": [
+ "ui",
+ "ui_element"
+ ]
+ }
+ },
+ "required": [
+ "target"
+ ]
+ },
+ "then": {
+ "anyOf": [
+ {
+ "required": [
+ "id"
+ ]
+ },
+ {
+ "required": [
+ "label"
+ ]
+ },
+ {
+ "required": [
+ "name"
+ ]
+ },
+ {
+ "required": [
+ "role"
+ ]
+ },
+ {
+ "required": [
+ "automation_id"
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "target": {
+ "const": "coordinates"
+ }
+ },
+ "required": [
+ "target"
+ ]
+ },
+ "then": {
+ "required": [
+ "x",
+ "y"
+ ]
+ }
+ }
+ ],
+ "properties": {
+ "target": {
+ "enum": [
+ "auto",
+ "ui",
+ "ui_element",
+ "browser",
+ "coordinates",
+ "window"
+ ]
+ }
+ }
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "action": {
+ "const": "drag"
+ }
+ },
+ "required": [
+ "action"
+ ]
+ },
+ "then": {
+ "allOf": [
+ {
+ "anyOf": [
+ {
+ "required": [
+ "from_id"
+ ]
+ },
+ {
+ "required": [
+ "from_x",
+ "from_y"
+ ]
+ }
+ ]
+ },
+ {
+ "anyOf": [
+ {
+ "required": [
+ "to_id"
+ ]
+ },
+ {
+ "required": [
+ "to_x",
+ "to_y"
+ ]
+ }
+ ]
+ },
+ {
+ "if": {
+ "properties": {
+ "target": {
+ "enum": [
+ "ui",
+ "ui_element"
+ ]
+ }
+ },
+ "required": [
+ "target"
+ ]
+ },
+ "then": {
+ "required": [
+ "from_id",
+ "to_id"
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "target": {
+ "const": "coordinates"
+ }
+ },
+ "required": [
+ "target"
+ ]
+ },
+ "then": {
+ "required": [
+ "from_x",
+ "from_y",
+ "to_x",
+ "to_y"
+ ]
+ }
+ }
+ ],
+ "properties": {
+ "target": {
+ "enum": [
+ "auto",
+ "ui",
+ "ui_element",
+ "coordinates",
+ "window"
+ ]
+ }
+ }
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "action": {
+ "enum": [
+ "set_value",
+ "set_range_value"
+ ]
+ }
+ },
+ "required": [
+ "action"
+ ]
+ },
+ "then": {
+ "required": [
+ "value"
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "action": {
+ "const": "multi_select"
+ }
+ },
+ "required": [
+ "action"
+ ]
+ },
+ "then": {
+ "required": [
+ "targets"
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "action": {
+ "const": "multi_edit"
+ }
+ },
+ "required": [
+ "action"
+ ]
+ },
+ "then": {
+ "required": [
+ "edits"
+ ]
+ }
+ }
+ ],
+ "properties": {
+ "action": {
+ "description": "Operation to perform; choose the narrowest action that directly matches the requested outcome.",
+ "enum": [
+ "click",
+ "type",
+ "invoke",
+ "focus",
+ "select",
+ "scroll",
+ "drag",
+ "set_value",
+ "toggle",
+ "expand",
+ "collapse",
+ "scroll_into_view",
+ "set_range_value",
+ "add_to_selection",
+ "remove_from_selection",
+ "multi_select",
+ "multi_edit"
+ ],
+ "type": "string"
+ },
+ "app": {
+ "description": "Limit matching to an application/process name substring when available.",
+ "type": "string"
+ },
+ "automation_id": {
+ "description": "Windows AutomationId when available.",
+ "type": "string"
+ },
+ "backend": {
+ "description": "Input backend preference. auto uses proven local backends and already-authorized portal input; portal explicitly requests XDG RemoteDesktop consent on Wayland; x11 forces XWayland/xdotool only for operations where read-back testing shows it is reliable. GNOME Wayland keyboard/text deliberately reject x11.",
+ "enum": [
+ "auto",
+ "x11",
+ "portal"
+ ],
+ "type": "string"
+ },
+ "browser_text": {
+ "description": "Visible browser text used only to locate a DOM target; for action=type, text remains the value to enter.",
+ "type": "string"
+ },
+ "button": {
+ "description": "Pointer button to use for click/down/up or drag gestures.",
+ "enum": [
+ "left",
+ "right",
+ "middle"
+ ],
+ "type": "string"
+ },
+ "clear": {
+ "description": "For action=type, clear the current semantic/browser value before inserting text when supported.",
+ "type": "boolean"
+ },
+ "delta": {
+ "description": "Alias for delta_y.",
+ "type": "number"
+ },
+ "delta_x": {
+ "description": "Horizontal scroll delta; positive means right.",
+ "type": "number"
+ },
+ "delta_y": {
+ "description": "Vertical scroll delta; positive means down.",
+ "type": "number"
+ },
+ "direction": {
+ "description": "Human-readable scroll direction used with wheel_times instead of explicit deltas.",
+ "enum": [
+ "up",
+ "down",
+ "left",
+ "right"
+ ],
+ "type": "string"
+ },
+ "duration_ms": {
+ "description": "Drag movement duration.",
+ "type": "number"
+ },
+ "edits": {
+ "description": "Native semantic target + text entries for action=multi_edit.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "app": {
+ "description": "Limit matching to an application/process name substring when available.",
+ "type": "string"
+ },
+ "automation_id": {
+ "description": "Windows AutomationId when available.",
+ "type": "string"
+ },
+ "clear": {
+ "description": "Clear the current value before entering text; default true.",
+ "type": "boolean"
+ },
+ "id": {
+ "description": "Element id returned by ui_snapshot or ui_find. Linux ids are stable per-process accessibility paths and legacy linux:<index> ids remain accepted.",
+ "type": "string"
+ },
+ "label": {
+ "description": "Compact numeric label from the most recent ui_snapshot/ui_find; useful for repeated actions without repeating names or coordinates.",
+ "type": "number"
+ },
+ "method": {
+ "description": "Text-entry strategy; auto is recommended.",
+ "enum": [
+ "auto",
+ "accessibility",
+ "clipboard",
+ "keys"
+ ],
+ "type": "string"
+ },
+ "name": {
+ "description": "Accessible name/title substring.",
+ "type": "string"
+ },
+ "pid": {
+ "description": "Limit matching to one owning process id when available.",
+ "type": "number"
+ },
+ "role": {
+ "description": "Accessible role such as Button, Edit, textbox or AXButton.",
+ "type": "string"
+ },
+ "text": {
+ "description": "Replacement text for this semantic edit.",
+ "type": "string"
+ },
+ "window_title": {
+ "description": "Limit matching to a top-level accessibility window/frame title substring when available.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "text"
+ ],
+ "type": "object"
+ },
+ "maxItems": 100,
+ "minItems": 1,
+ "type": "array"
+ },
+ "endpoint": {
+ "description": "Loopback Chrome DevTools endpoint for a browser fallback.",
+ "type": "string"
+ },
+ "from_id": {
+ "description": "Source semantic UI element id for action=drag.",
+ "type": "string"
+ },
+ "from_x": {
+ "description": "Drag source X coordinate.",
+ "type": "number"
+ },
+ "from_y": {
+ "description": "Drag source Y coordinate.",
+ "type": "number"
+ },
+ "hold_ms": {
+ "description": "Delay after pointer down before moving during action=drag.",
+ "type": "number"
+ },
+ "id": {
+ "description": "Element id returned by ui_snapshot or ui_find. Linux ids are stable per-process accessibility paths and legacy linux:<index> ids remain accepted.",
+ "type": "string"
+ },
+ "label": {
+ "description": "Compact numeric label from the most recent ui_snapshot/ui_find; useful for repeated actions without repeating names or coordinates.",
+ "type": "number"
+ },
+ "name": {
+ "description": "Accessible name/title substring.",
+ "type": "string"
+ },
+ "ocr_language": {
+ "description": "Tesseract language code, default eng.",
+ "type": "string"
+ },
+ "ocr_psm": {
+ "description": "Tesseract page segmentation mode, default 11.",
+ "type": "number"
+ },
+ "ocr_region": {
+ "description": "Optional virtual-desktop [left,top,right,bottom] region to OCR. Prefer bounds from list_windows or computer_snapshot.",
+ "items": {
+ "type": "number"
+ },
+ "maxItems": 4,
+ "minItems": 4,
+ "type": "array"
+ },
+ "ocr_text": {
+ "description": "Visible text to find in rendered pixels for the OCR click fallback.",
+ "type": "string"
+ },
+ "ocr_timeout_ms": {
+ "description": "OCR timeout in milliseconds.",
+ "type": "number"
+ },
+ "option": {
+ "description": "Option value for browser select.",
+ "type": "string"
+ },
+ "pid": {
+ "description": "Limit matching to one owning process id when available.",
+ "type": "number"
+ },
+ "replace_selection": {
+ "description": "For multi_select, select the first item before adding the rest; default true.",
+ "type": "boolean"
+ },
+ "role": {
+ "description": "Accessible role such as Button, Edit, textbox or AXButton.",
+ "type": "string"
+ },
+ "selector": {
+ "description": "CSS selector when the fallback target is a browser element.",
+ "type": "string"
+ },
+ "target": {
+ "description": "Optional target type. auto prefers native accessibility, then browser DOM/CDP, then OCR/coordinates where supported. Use window for explicit top-level window focus/text/scroll targeting.",
+ "enum": [
+ "auto",
+ "ui",
+ "ui_element",
+ "browser",
+ "ocr",
+ "coordinates",
+ "window"
+ ],
+ "type": "string"
+ },
+ "target_id": {
+ "description": "Browser page target id returned by browser_tabs.",
+ "type": "string"
+ },
+ "targets": {
+ "description": "Native semantic targets for action=multi_select.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "app": {
+ "description": "Limit matching to an application/process name substring when available.",
+ "type": "string"
+ },
+ "automation_id": {
+ "description": "Windows AutomationId when available.",
+ "type": "string"
+ },
+ "id": {
+ "description": "Element id returned by ui_snapshot or ui_find. Linux ids are stable per-process accessibility paths and legacy linux:<index> ids remain accepted.",
+ "type": "string"
+ },
+ "label": {
+ "description": "Compact numeric label from the most recent ui_snapshot/ui_find; useful for repeated actions without repeating names or coordinates.",
+ "type": "number"
+ },
+ "name": {
+ "description": "Accessible name/title substring.",
+ "type": "string"
+ },
+ "pid": {
+ "description": "Limit matching to one owning process id when available.",
+ "type": "number"
+ },
+ "role": {
+ "description": "Accessible role such as Button, Edit, textbox or AXButton.",
+ "type": "string"
+ },
+ "window_title": {
+ "description": "Limit matching to a top-level accessibility window/frame title substring when available.",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "maxItems": 100,
+ "minItems": 1,
+ "type": "array"
+ },
+ "text": {
+ "description": "Unicode text to enter for action=type, or text used by multi_edit.",
+ "type": "string"
+ },
+ "title": {
+ "description": "Optional browser page title substring or top-level window title when target=window.",
+ "type": "string"
+ },
+ "to_id": {
+ "description": "Destination semantic UI element id for action=drag.",
+ "type": "string"
+ },
+ "to_x": {
+ "description": "Drag destination X coordinate.",
+ "type": "number"
+ },
+ "to_y": {
+ "description": "Drag destination Y coordinate.",
+ "type": "number"
+ },
+ "url_contains": {
+ "description": "Browser URL substring used to select a page.",
+ "type": "string"
+ },
+ "value": {
+ "description": "New value for set_value, set_range_value, or select.",
+ "type": "string"
+ },
+ "wheel_times": {
+ "description": "Number of 120-unit wheel steps for direction; 1..50.",
+ "type": "number"
+ },
+ "window_id": {
+ "description": "Top-level window id returned by list_windows when target=window.",
+ "type": "string"
+ },
+ "window_title": {
+ "description": "Limit matching to a top-level accessibility window/frame title substring when available.",
+ "type": "string"
+ },
+ "x": {
+ "description": "Virtual-desktop X coordinate used by click/scroll coordinate targeting.",
+ "type": "number"
+ },
+ "y": {
+ "description": "Virtual-desktop Y coordinate used by click/scroll coordinate targeting.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "action"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "parameters"
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "window_action"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "allOf": [
+ {
+ "anyOf": [
+ {
+ "required": [
+ "id"
+ ]
+ },
+ {
+ "required": [
+ "pid"
+ ]
+ },
+ {
+ "required": [
+ "app"
+ ]
+ },
+ {
+ "required": [
+ "title"
+ ]
+ }
+ ]
+ },
+ {
+ "if": {
+ "properties": {
+ "action": {
+ "const": "move"
+ }
+ },
+ "required": [
+ "action"
+ ]
+ },
+ "then": {
+ "required": [
+ "x",
+ "y"
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "action": {
+ "const": "resize"
+ }
+ },
+ "required": [
+ "action"
+ ]
+ },
+ "then": {
+ "required": [
+ "width",
+ "height"
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "action": {
+ "const": "move_resize"
+ }
+ },
+ "required": [
+ "action"
+ ]
+ },
+ "then": {
+ "required": [
+ "x",
+ "y",
+ "width",
+ "height"
+ ]
+ }
+ }
+ ],
+ "properties": {
+ "action": {
+ "description": "Operation to perform; choose the narrowest action that directly matches the requested outcome.",
+ "enum": [
+ "focus",
+ "minimize",
+ "maximize",
+ "restore",
+ "move",
+ "resize",
+ "move_resize",
+ "close"
+ ],
+ "type": "string"
+ },
+ "app": {
+ "description": "Application/process name substring.",
+ "type": "string"
+ },
+ "backend": {
+ "description": "Input backend preference. auto uses proven local backends and already-authorized portal input; portal explicitly requests XDG RemoteDesktop consent on Wayland; x11 forces XWayland/xdotool only for operations where read-back testing shows it is reliable. GNOME Wayland keyboard/text deliberately reject x11.",
+ "enum": [
+ "auto",
+ "x11",
+ "portal"
+ ],
+ "type": "string"
+ },
+ "height": {
+ "description": "Height in pixels.",
+ "type": "number"
+ },
+ "id": {
+ "description": "Window id returned by list_windows.",
+ "type": "string"
+ },
+ "pid": {
+ "description": "Owning process id.",
+ "type": "number"
+ },
+ "title": {
+ "description": "Window title substring.",
+ "type": "string"
+ },
+ "width": {
+ "description": "Width in pixels.",
+ "type": "number"
+ },
+ "x": {
+ "description": "Virtual-desktop X coordinate in pixels.",
+ "type": "number"
+ },
+ "y": {
+ "description": "Virtual-desktop Y coordinate in pixels.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "action"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "parameters"
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "launch_app"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "anyOf": [
+ {
+ "required": [
+ "app"
+ ]
+ },
+ {
+ "required": [
+ "path"
+ ]
+ }
+ ],
+ "properties": {
+ "app": {
+ "description": "Application name, friendly Start Menu name, or executable path.",
+ "type": "string"
+ },
+ "args": {
+ "description": "Argument array passed directly to the launched application; no shell parsing.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "cwd": {
+ "description": "Optional permitted working directory for direct executable launch.",
+ "type": "string"
+ },
+ "path": {
+ "description": "Alias for app.",
+ "type": "string"
+ },
+ "wait_for_window": {
+ "description": "Optional application/title substring that must appear after launch.",
+ "type": "string"
+ },
+ "wait_timeout_ms": {
+ "description": "Maximum wait for wait_for_window; default 10000, maximum 120000.",
+ "type": "number"
+ }
+ },
+ "type": "object"
+ }
+ }
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "ui_action"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "allOf": [
+ {
+ "anyOf": [
+ {
+ "required": [
+ "id"
+ ]
+ },
+ {
+ "required": [
+ "label"
+ ]
+ },
+ {
+ "required": [
+ "name"
+ ]
+ },
+ {
+ "required": [
+ "role"
+ ]
+ },
+ {
+ "required": [
+ "automation_id"
+ ]
+ }
+ ]
+ },
+ {
+ "if": {
+ "properties": {
+ "action": {
+ "enum": [
+ "set_value",
+ "set_range_value"
+ ]
+ }
+ },
+ "required": [
+ "action"
+ ]
+ },
+ "then": {
+ "required": [
+ "value"
+ ]
+ }
+ }
+ ],
+ "properties": {
+ "action": {
+ "description": "Operation to perform; choose the narrowest action that directly matches the requested outcome.",
+ "enum": [
+ "click",
+ "invoke",
+ "focus",
+ "set_value",
+ "select",
+ "toggle",
+ "expand",
+ "collapse",
+ "scroll_into_view",
+ "set_range_value",
+ "add_to_selection",
+ "remove_from_selection"
+ ],
+ "type": "string"
+ },
+ "app": {
+ "description": "Limit matching to an application/process name substring when available.",
+ "type": "string"
+ },
+ "automation_id": {
+ "description": "Windows AutomationId when available.",
+ "type": "string"
+ },
+ "id": {
+ "description": "Element id returned by ui_snapshot or ui_find. Linux ids are stable per-process accessibility paths and legacy linux:<index> ids remain accepted.",
+ "type": "string"
+ },
+ "label": {
+ "description": "Compact numeric label from the most recent ui_snapshot/ui_find; useful for repeated actions without repeating names or coordinates.",
+ "type": "number"
+ },
+ "name": {
+ "description": "Accessible name/title substring.",
+ "type": "string"
+ },
+ "pid": {
+ "description": "Limit matching to one owning process id when available.",
+ "type": "number"
+ },
+ "role": {
+ "description": "Accessible role such as Button, Edit, textbox or AXButton.",
+ "type": "string"
+ },
+ "value": {
+ "description": "New text or numeric range value."
+ },
+ "window_title": {
+ "description": "Limit matching to a top-level accessibility window/frame title substring when available.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "action"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "parameters"
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "type_text"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {
+ "app": {
+ "description": "Limit matching to an application/process name substring when available.",
+ "type": "string"
+ },
+ "automation_id": {
+ "description": "Windows AutomationId when available.",
+ "type": "string"
+ },
+ "backend": {
+ "description": "Input backend preference. auto uses proven local backends and already-authorized portal input; portal explicitly requests XDG RemoteDesktop consent on Wayland; x11 forces XWayland/xdotool only for operations where read-back testing shows it is reliable. GNOME Wayland keyboard/text deliberately reject x11.",
+ "enum": [
+ "auto",
+ "x11",
+ "portal"
+ ],
+ "type": "string"
+ },
+ "caret_position": {
+ "description": "Where text insertion should occur when the semantic editor supports caret placement.",
+ "enum": [
+ "start",
+ "idle",
+ "end"
+ ],
+ "type": "string"
+ },
+ "clear": {
+ "description": "Replace existing text for semantic/window-scoped accessibility input, or clear it before keyboard/paste fallback.",
+ "type": "boolean"
+ },
+ "delay_ms": {
+ "description": "Per-key delay for method=keys.",
+ "type": "number"
+ },
+ "id": {
+ "description": "Element id returned by ui_snapshot or ui_find. Linux ids are stable per-process accessibility paths and legacy linux:<index> ids remain accepted.",
+ "type": "string"
+ },
+ "label": {
+ "description": "Compact numeric label from the most recent ui_snapshot/ui_find; useful for repeated actions without repeating names or coordinates.",
+ "type": "number"
+ },
+ "method": {
+ "description": "Default auto prefers verified accessibility editing and falls back to clipboard paste. keys sends physical key events and therefore follows the active keyboard layout.",
+ "enum": [
+ "auto",
+ "accessibility",
+ "clipboard",
+ "keys"
+ ],
+ "type": "string"
+ },
+ "name": {
+ "description": "Accessible name/title substring.",
+ "type": "string"
+ },
+ "pid": {
+ "description": "Limit matching to one owning process id when available.",
+ "type": "number"
+ },
+ "press_enter": {
+ "description": "Press Enter after typing; physical Enter delivery requires verified window focus.",
+ "type": "boolean"
+ },
+ "role": {
+ "description": "Accessible role such as Button, Edit, textbox or AXButton.",
+ "type": "string"
+ },
+ "text": {
+ "description": "Text to enter.",
+ "type": "string"
+ },
+ "title": {
+ "description": "Optional target window title substring. With auto/accessibility + clear=true, a unique editable control may be updated semantically without compositor focus.",
+ "type": "string"
+ },
+ "window_id": {
+ "description": "Optional target window id. With auto/accessibility + clear=true, a unique editable control may be updated semantically without focus; keyboard/clipboard fallbacks verify focus before dispatch.",
+ "type": "string"
+ },
+ "window_title": {
+ "description": "Limit matching to a top-level accessibility window/frame title substring when available.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "text"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "parameters"
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "keyboard"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "anyOf": [
+ {
+ "required": [
+ "shortcut"
+ ]
+ },
+ {
+ "required": [
+ "key"
+ ]
+ },
+ {
+ "required": [
+ "keys"
+ ]
+ }
+ ],
+ "properties": {
+ "app": {
+ "description": "Optional target application/process name substring.",
+ "type": "string"
+ },
+ "backend": {
+ "description": "Input backend preference. auto uses proven local backends and already-authorized portal input; portal explicitly requests XDG RemoteDesktop consent on Wayland; x11 forces XWayland/xdotool only for operations where read-back testing shows it is reliable. GNOME Wayland keyboard/text deliberately reject x11.",
+ "enum": [
+ "auto",
+ "x11",
+ "portal"
+ ],
+ "type": "string"
+ },
+ "key": {
+ "description": "Single key name such as Enter, Escape, Tab or A.",
+ "type": "string"
+ },
+ "keys": {
+ "description": "Ordered key names that together form the requested shortcut or key sequence.",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "pid": {
+ "description": "Optional target process id.",
+ "type": "number"
+ },
+ "shortcut": {
+ "description": "Keyboard shortcut such as CTRL+L, CMD+K or ALT+F4.",
+ "type": "string"
+ },
+ "title": {
+ "description": "Optional target window title substring.",
+ "type": "string"
+ },
+ "window_id": {
+ "description": "Optional target window id returned by list_windows. On Wayland the target is focused and verified before keyboard/text input is dispatched.",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ }
+ }
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "pointer"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "allOf": [
+ {
+ "if": {
+ "properties": {
+ "action": {
+ "const": "move"
+ }
+ },
+ "required": [
+ "action"
+ ]
+ },
+ "then": {
+ "required": [
+ "x",
+ "y"
+ ]
+ }
+ }
+ ],
+ "properties": {
+ "action": {
+ "description": "Operation to perform; choose the narrowest action that directly matches the requested outcome.",
+ "enum": [
+ "move",
+ "click",
+ "double_click",
+ "right_click",
+ "down",
+ "up"
+ ],
+ "type": "string"
+ },
+ "backend": {
+ "description": "Input backend preference. auto uses proven local backends and already-authorized portal input; portal explicitly requests XDG RemoteDesktop consent on Wayland; x11 forces XWayland/xdotool only for operations where read-back testing shows it is reliable. GNOME Wayland keyboard/text deliberately reject x11.",
+ "enum": [
+ "auto",
+ "x11",
+ "portal"
+ ],
+ "type": "string"
+ },
+ "button": {
+ "description": "Pointer button to use for click/down/up or drag gestures.",
+ "enum": [
+ "left",
+ "right",
+ "middle"
+ ],
+ "type": "string"
+ },
+ "x": {
+ "description": "Virtual-desktop X coordinate in pixels.",
+ "type": "number"
+ },
+ "y": {
+ "description": "Virtual-desktop Y coordinate in pixels.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "action"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "parameters"
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "drag_drop"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "allOf": [
+ {
+ "anyOf": [
+ {
+ "required": [
+ "from_id"
+ ]
+ },
+ {
+ "required": [
+ "from_x",
+ "from_y"
+ ]
+ }
+ ]
+ },
+ {
+ "anyOf": [
+ {
+ "required": [
+ "to_id"
+ ]
+ },
+ {
+ "required": [
+ "to_x",
+ "to_y"
+ ]
+ }
+ ]
+ }
+ ],
+ "properties": {
+ "backend": {
+ "description": "Input backend preference. auto uses proven local backends and already-authorized portal input; portal explicitly requests XDG RemoteDesktop consent on Wayland; x11 forces XWayland/xdotool only for operations where read-back testing shows it is reliable. GNOME Wayland keyboard/text deliberately reject x11.",
+ "enum": [
+ "auto",
+ "x11",
+ "portal"
+ ],
+ "type": "string"
+ },
+ "button": {
+ "description": "Pointer button to use for click/down/up or drag gestures.",
+ "enum": [
+ "left",
+ "right",
+ "middle"
+ ],
+ "type": "string"
+ },
+ "duration_ms": {
+ "description": "Duration of the drag/movement gesture in milliseconds.",
+ "type": "number"
+ },
+ "from_id": {
+ "description": "Source UI element id; use instead of from_x/from_y.",
+ "type": "string"
+ },
+ "from_x": {
+ "description": "Source X coordinate for a drag gesture.",
+ "type": "number"
+ },
+ "from_y": {
+ "description": "Source Y coordinate for a drag gesture.",
+ "type": "number"
+ },
+ "hold_ms": {
+ "description": "How long to hold the pointer button before movement during a drag.",
+ "type": "number"
+ },
+ "to_id": {
+ "description": "Destination UI element id; use instead of to_x/to_y.",
+ "type": "string"
+ },
+ "to_x": {
+ "description": "Destination X coordinate for a drag gesture.",
+ "type": "number"
+ },
+ "to_y": {
+ "description": "Destination Y coordinate for a drag gesture.",
+ "type": "number"
+ }
+ },
+ "type": "object"
+ }
+ }
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "scroll"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "anyOf": [
+ {
+ "required": [
+ "delta_x"
+ ]
+ },
+ {
+ "required": [
+ "delta_y"
+ ]
+ },
+ {
+ "required": [
+ "delta"
+ ]
+ },
+ {
+ "required": [
+ "direction"
+ ]
+ }
+ ],
+ "properties": {
+ "app": {
+ "description": "Limit matching to an application/process name substring when available.",
+ "type": "string"
+ },
+ "automation_id": {
+ "description": "Windows AutomationId when available.",
+ "type": "string"
+ },
+ "backend": {
+ "description": "Input backend preference. auto uses proven local backends and already-authorized portal input; portal explicitly requests XDG RemoteDesktop consent on Wayland; x11 forces XWayland/xdotool only for operations where read-back testing shows it is reliable. GNOME Wayland keyboard/text deliberately reject x11.",
+ "enum": [
+ "auto",
+ "x11",
+ "portal"
+ ],
+ "type": "string"
+ },
+ "delta": {
+ "description": "Alias for delta_y.",
+ "type": "number"
+ },
+ "delta_x": {
+ "description": "Horizontal delta; positive means right.",
+ "type": "number"
+ },
+ "delta_y": {
+ "description": "Vertical delta; positive means down.",
+ "type": "number"
+ },
+ "direction": {
+ "description": "Human-readable scroll direction used with wheel_times instead of explicit deltas.",
+ "enum": [
+ "up",
+ "down",
+ "left",
+ "right"
+ ],
+ "type": "string"
+ },
+ "id": {
+ "description": "Element id returned by ui_snapshot or ui_find. Linux ids are stable per-process accessibility paths and legacy linux:<index> ids remain accepted.",
+ "type": "string"
+ },
+ "label": {
+ "description": "Compact numeric label from the most recent ui_snapshot/ui_find; useful for repeated actions without repeating names or coordinates.",
+ "type": "number"
+ },
+ "name": {
+ "description": "Accessible name/title substring.",
+ "type": "string"
+ },
+ "pid": {
+ "description": "Limit matching to one owning process id when available.",
+ "type": "number"
+ },
+ "role": {
+ "description": "Accessible role such as Button, Edit, textbox or AXButton.",
+ "type": "string"
+ },
+ "wheel_times": {
+ "description": "Number of 120-unit wheel steps when direction is used; 1..50.",
+ "type": "number"
+ },
+ "window_title": {
+ "description": "Limit matching to a top-level accessibility window/frame title substring when available.",
+ "type": "string"
+ },
+ "x": {
+ "description": "Virtual-desktop X coordinate in pixels.",
+ "type": "number"
+ },
+ "y": {
+ "description": "Virtual-desktop Y coordinate in pixels.",
+ "type": "number"
+ }
+ },
+ "type": "object"
+ }
+ }
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "clipboard"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {
+ "action": {
+ "description": "Operation to perform; choose the narrowest action that directly matches the requested outcome.",
+ "enum": [
+ "read",
+ "write",
+ "clear"
+ ],
+ "type": "string"
+ },
+ "text": {
+ "description": "Text to write.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "action"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "parameters"
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "open_path"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {
+ "path": {
+ "description": "File or directory to open.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "path"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "parameters"
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "reveal_path"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {
+ "path": {
+ "description": "File or directory to reveal.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "path"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "parameters"
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "notification"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {
+ "message": {
+ "description": "Notification message.",
+ "type": "string"
+ },
+ "timeout_seconds": {
+ "description": "Bounded native notification display timeout in seconds when the platform supports it.",
+ "type": "number"
+ },
+ "title": {
+ "description": "Window/page title substring used to select the target.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "message"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "parameters"
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "operation": {
+ "const": "record_screen"
+ }
+ },
+ "required": [
+ "operation"
+ ]
+ },
+ "then": {
+ "properties": {
+ "parameters": {
+ "additionalProperties": false,
+ "properties": {
+ "destination": {
+ "description": "Permitted output path. If an extension is supplied, use .webm for native GNOME Wayland recording and .mp4 for the other recorder backends.",
+ "type": "string"
+ },
+ "duration_seconds": {
+ "description": "1..120 seconds.",
+ "type": "number"
+ },
+ "fps": {
+ "description": "1..60.",
+ "type": "number"
+ }
+ },
+ "type": "object"
+ }
+ }
+ }
+ }
+]