stablyai/orca · error · RuntimeClientError

accessibility_error

accessibility_error

Error message

Timed out checking permissions

What it means

readPermissionStatusFromHelperApp launches the macOS helper app with a status-file argument and polls up to 50 times (100ms apart, ~5s total) for status.json. If the file never appears, it throws accessibility_error: Timed out checking permissions. The helper writes TCC permission status to that file. macOS-only.

Source

Thrown at src/main/computer/macos-computer-use-permission-status.ts:96

  helperAppPath: string
): Promise<Partial<Record<ComputerUsePermissionId, ComputerUsePermissionStatus>>> {
  const tempDir = await mkdtemp(join(tmpdir(), 'orca-computer-use-permissions-'))
  const statusPath = join(tempDir, 'status.json')
  try {
    // Why: TCC status must be checked through the helper app identity. Directly
    // execing the binary can inherit the parent app's already-granted context.
    await launchPermissionStatusHelper(helperAppPath, statusPath)

    for (let attempt = 0; attempt < 50; attempt++) {
      if (await fileExists(statusPath)) {
        const output = await readFile(statusPath, 'utf8')
        return JSON.parse(output) as Partial<
          Record<ComputerUsePermissionId, ComputerUsePermissionStatus>
        >
      }
      await delay(100)
    }
    throw new RuntimeClientError('accessibility_error', 'Timed out checking permissions')
  } finally {
    await rm(tempDir, { recursive: true, force: true })
  }
}

function launchPermissionStatusHelper(helperAppPath: string, statusPath: string): Promise<void> {
  return new Promise((resolve, reject) => {
    const launch = spawn(
      '/usr/bin/open',
      ['-n', helperAppPath, '--args', '--permission-status-file', statusPath],
      {
        stdio: ['ignore', 'pipe', 'pipe']
      }
    )
    let stdout = ''
    let stderr = ''

    launch.stdout?.setEncoding('utf8')

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Remove quarantine: xattr -dr com.apple.quarantine '/path/Orca Computer Use.app'.
  2. Grant Accessibility permission to the helper in System Settings > Privacy & Security.
  3. Re-launch the permission check and retry after first-run approval.
  4. Reinstall the app bundle if the helper is missing or corrupt.
Defensive patterns

Strategy: retry

Try / catch

try {
  return await getComputerUsePermissionStatus()
} catch (err) {
  if (err instanceof RuntimeClientError && err.code === 'accessibility_error' && /Timed out checking permissions/.test(err.message)) {
    // prompt the user to approve the helper in System Settings, then retry once
  }
  throw err
}

Prevention

When it happens

Trigger: macOS only; helper app launched but never wrote status.json; helper blocked by Gatekeeper or quarantine; system under heavy load; helper crashed silently after launch.

Common situations: First run after install while quarantine attributes are present; helper not code-signed properly; a slow or loaded machine; macOS blocking the helper's execution.

Understand the failure class

Related errors


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