stablyai/orca · warning · RuntimeError
appBlocked("{app}")
Error message
appBlocked("{app}") What it means
Raised by reject_blocked_app (runtime.py:220-223), called from find_app immediately after a match. The bridge hard-blocks automation of password-manager apps: BLOCKED_APP_FRAGMENTS (line 40-47) lists '1password', 'bitwarden', 'dashlane', 'lastpass', 'nordpass', 'proton pass'. If any fragment appears (substring match, case-insensitive) in the matched app's name OR any of its window names, the bridge refuses automation and raises appBlocked("<appName>"). This is a deliberate security guardrail, not a config toggle.
Source
Thrown at native/computer-use-linux/runtime.py:223
return any(value == needle or needle in value for value in haystacks)
def parse_positive_pid(value):
return int(value) if value.isdigit() and int(value) > 0 else None
def find_app(query):
for app in desktop_apps():
if app_matches(app, query):
reject_blocked_app(app)
return app
raise RuntimeError(f'appNotFound("{query}")')
def reject_blocked_app(app):
haystacks = [name_of(app).lower()] + [name_of(window).lower() for _, window in windows_for(app)]
if any(fragment in value for fragment in BLOCKED_APP_FRAGMENTS for value in haystacks):
raise RuntimeError(f'appBlocked("{name_of(app)}")')
def action_labels(node):
labels = []
count = int(attempt(node.get_n_actions, 0) or 0)
for index in range(count):
label = str(attempt(lambda i=index: node.get_action_name(i), "") or "")
description = str(attempt(lambda i=index: node.get_action_description(i), "") or "")
value = label or description
if value and value not in labels:
labels.append(value)
return labels
def meaningful_actions(actions):
noisy = {
"click",
"press",View on GitHub (pinned to 1136503c6a)
Solutions
- Do not automate password managers — orchestrate credential entry through the OS keychain / extension APIs instead, or have the user paste manually.
- If a non-blocked app was mis-matched (e.g., a browser whose tab title contained a blocked fragment), refine the query (use pid: or a more specific name) to match the intended app without the blocked window title.
- There is no opt-out flag by design; do not attempt to bypass BLOCKED_APP_FRAGMENTS.
Defensive patterns
Strategy: validation
Validate before calling
# Before find_app, refuse blocked queries client-side
BLOCKED = ('1password', 'bitwarden', 'dashlane', 'lastpass', 'nordpass', 'proton pass')
if any(frag in str(query or '').lower() for frag in BLOCKED):
raise SystemExit('Refusing to automate a blocked password-manager app.') Type guard
def is_blocked_app_query(query) -> bool:
q = str(query or '').lower()
return any(frag in q for frag in BLOCKED_APP_FRAGMENTS) Try / catch
try:
app = find_app(query)
except RuntimeError as exc:
if str(exc).startswith('appBlocked('):
# do not retry — surface to caller that this app is intentionally blocked
raise SystemExit(f'{exc}. Password managers cannot be automated; use the OS keychain.')
raise Prevention
- Never automate password managers — use the OS keychain / extension APIs.
- If a non-blocked app was mis-matched due to a blocked window-title fragment, refine the query to avoid that window.
- Do not attempt to bypass BLOCKED_APP_FRAGMENTS — it is a deliberate security guardrail.
When it happens
Trigger: find_app matched an app whose name or window title contains a blocked fragment — most directly when the query itself names a password manager (e.g., app='1Password') and the AT-SPI app/window title also contains the fragment. The check runs after a successful match, so even an unrelated match whose windows include a blocked title trips it.
Common situations: Agent attempts to automate credential entry into a password manager (the exact scenario this guard exists to prevent); an app whose window title happens to contain 'lastpass' (e.g., a browser tab titled 'LastPass – My Vault') matched the query.
Related errors
- Linux computer use requires an active desktop session; missi
- No top-level AT-SPI window is available for {app}
- windowId is not supported by the Linux AT-SPI provider; use
- windowNotFound("{window_index}")
- window_not_focused: keyboard input requires the target windo
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/fd701c84cfc1e104.
Report an issue: GitHub.