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
- Re-run get_app_state, confirm the target element is editable/has a role like text entry, and use a fresh element index.
- Use type_text or paste_text on a focused editable field instead of set_value for elements without a Value interface.
- 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
- Target only editable/value elements for set_value; verify via get_app_state first.
- Keep a type_text/paste_text fallback for non-value elements.
- Use a fresh element index from a recent get_app_state to avoid stale-node None.
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
- {action} is not a valid secondary action
- {name} must be a positive number
- {name} is required
- unsupported mouse button: {button}
- click modifiers require modifier keys only
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/5b65d72301c803d7.
Report an issue: GitHub.