stablyai/orca · error · RuntimeError

element value is not settable

Error message

element value is not settable

What it means

Raised in the set_value branch of run_operation (runtime.py:1121) when set_value(node, value) returns False — meaning the node is None, is not editable text (or set_text_contents failed), and has no value interface (or set_current_value returned a falsy result). It signals that neither the editable-text nor the value API could write the value.

Source

Thrown at native/computer-use-linux/runtime.py:1121

            screen_point(bounds, operation.get("fromElement"), operation.get("from_x"), operation.get("from_y"), from_node),
            screen_point(bounds, operation.get("toElement"), operation.get("to_x"), operation.get("to_y"), to_node),
        )
        action = {"path": "synthetic", "actionName": "drag", "fallbackReason": None}
    elif tool == "type_text":
        type_text(require_non_empty_string(operation.get("text"), "text"))
        action = {"path": "synthetic", "actionName": "typeText", "fallbackReason": None, "verification": {"state": "unverified", "reason": "synthetic_input"}}
    elif tool == "press_key":
        press_key(require_non_empty_string(operation.get("key"), "key"))
        action = {"path": "synthetic", "actionName": "pressKey", "fallbackReason": None, "verification": {"state": "unverified", "reason": "synthetic_input"}}
    elif tool == "hotkey":
        hotkey(require_non_empty_string(operation.get("key"), "key"))
        action = {"path": "synthetic", "actionName": "hotkey", "fallbackReason": None, "verification": {"state": "unverified", "reason": "synthetic_input"}}
    elif tool == "paste_text":
        paste_text(require_non_empty_string(operation.get("text"), "text"))
        action = {"path": "clipboard", "actionName": "paste", "fallbackReason": None, "verification": {"state": "unverified", "reason": "clipboard_paste"}}
    elif tool == "set_value":
        if not set_value(node, operation.get("value", "")):
            raise RuntimeError("element value is not settable")
        action = {"path": "accessibility", "actionName": "setValue", "fallbackReason": None}
    else:
        raise RuntimeError("unknown tool: " + str(tool))

    try:
        snapshot = make_snapshot(
            operation.get("app", ""),
            include_screenshot,
            operation.get("windowId"),
            operation.get("windowIndex"),
        )
    except Exception:
        if operation.get("windowId") is None and operation.get("windowIndex") is None:
            raise
        action.setdefault("verification", {"state": "unverified", "reason": "window_changed"})
        snapshot = make_snapshot(operation.get("app", ""), include_screenshot, None, None)

    return {"ok": True, "action": action, "snapshot": snapshot}

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Re-run get_app_state, confirm the target element is editable/has a role like text entry, and use a fresh element index.
  2. Use type_text or paste_text on a focused editable field instead of set_value for elements without a Value interface.
  3. If the control is disabled, enable it (via its action) before attempting set_value.

Example fix

// before
{"tool":"set_value","element":7,"value":"hi"}  // element 7 is a label
// after: target a real editable text element, or type into it
{"tool":"click","element":12}
{"tool":"type_text","text":"hi"}
Defensive patterns

Strategy: validation

Validate before calling

state = run_operation({"tool": "get_app_state", "app": app})
node_info = element_info(state, element_index)
if not (node_info.get("editable") or node_info.get("hasValue")):
    raise ValueError("element does not accept set_value")
op = {"tool": "set_value", "element": element_index, "value": value}

Type guard

def is_settable(state, element_index) -> bool:
    info = element_info(state, element_index)
    return bool(info.get("editable") or info.get("hasValue"))

Try / catch

try:
    run_operation(op)
except RuntimeError as e:
    if "element value is not settable" in str(e):
        op = {"tool": "click", "element": element_index}
        run_operation(op)
        run_operation({"tool": "type_text", "text": value})
    else:
        raise

Prevention

When it happens

Trigger: Calling the 'set_value' tool against an element that is not an editable text field and exposes no AT-SPI Value interface (e.g. a label, a container, a disabled control), or against an editable field whose set_text_contents returned False and that lacks a value iface fallback.

Common situations: An agent targets a non-input element (div, span, image) believing it accepts a value; the element is read-only/disabled; the application does not expose a Value interface for a custom widget; node was not resolved (None) because the element index was stale.

Related errors


AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12). Data as JSON: /api/errors/5b65d72301c803d7. Report an issue: GitHub.