stablyai/orca · error · RuntimeClientError

accessibility_error

accessibility_error

Error message

desktop provider returned invalid JSON: ${error instanceof Error ? error.message : String(error)}

What it means

callBridge writes the request to a temp file, execs the desktop provider script, and parses stdout as JSON. If JSON.parse fails, it throws accessibility_error with the parse failure detail. This signals the provider script crashed or emitted non-JSON output (a stack trace, log lines, or a different format).

Source

Thrown at src/main/computer/desktop-script-provider-client.ts:215

    if (!capabilities.supports.actions[actionKey]) {
      throw new RuntimeClientError(
        'unsupported_capability',
        `${capabilities.provider} does not support actions.${actionKey}`
      )
    }
  }

  private async callBridge(request: BridgeRequest): Promise<BridgeResponse> {
    const operationDirectory = await mkdtemp(join(tmpdir(), 'orca-computer-use-'))
    const operationPath = join(operationDirectory, 'operation.json')
    try {
      await writeFile(operationPath, JSON.stringify(request), { encoding: 'utf8', mode: 0o600 })
      const { stdout, stderr } = await execBridge(this.platform, this.scriptPath, operationPath)
      let response: BridgeResponse
      try {
        response = JSON.parse(stdout) as BridgeResponse
      } catch (error) {
        throw new RuntimeClientError(
          'accessibility_error',
          `desktop provider returned invalid JSON: ${error instanceof Error ? error.message : String(error)}`
        )
      }
      if (!response.ok) {
        throw mapBridgeError(response.error ?? stderr)
      }
      return response
    } finally {
      await rm(operationDirectory, { force: true, recursive: true })
    }
  }

  private async readCapabilities(): Promise<ComputerProviderCapabilities> {
    if (this.providerCapabilities) {
      return this.providerCapabilities
    }
    const response = await this.callBridge({ tool: 'handshake' })

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Run the provider script manually with a sample operation.json to inspect its stdout.
  2. Rebuild or reinstall the desktop provider script.
  3. Inspect the script's stderr and exit code for the underlying crash.
  4. Ensure the script prints only JSON to stdout (redirect logs to stderr).
Defensive patterns

Strategy: fallback

Try / catch

try {
  return await client.action(method, params)
} catch (err) {
  if (err instanceof RuntimeClientError && err.code === 'accessibility_error' && /invalid JSON/.test(err.message)) {
    // log the script path, surface a provider-repair instruction; do not retry unchanged
  }
  throw err
}

Prevention

When it happens

Trigger: Provider script exits with a Python/Node traceback printed to stdout; script writes log lines before the JSON; the script binary is missing or crashes on launch; an incompatible script version outputs a different schema.

Common situations: Provider script not built or installed correctly; runtime error inside the script; stderr/stdout mixing; client and provider script versions out of sync.

Understand the failure class

Related errors


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