{"record":{"id":"f379de83211a98c0","repo":"stablyai/orca","slug":"accessibility-error-f379de","errorCode":"accessibility_error","errorMessage":"Timed out checking permissions","messagePattern":"Timed out checking permissions","errorType":"error_code","errorClass":"RuntimeClientError","httpStatus":null,"severity":"error","filePath":"src/main/computer/macos-computer-use-permission-status.ts","lineNumber":96,"sourceCode":"  helperAppPath: string\n): Promise<Partial<Record<ComputerUsePermissionId, ComputerUsePermissionStatus>>> {\n  const tempDir = await mkdtemp(join(tmpdir(), 'orca-computer-use-permissions-'))\n  const statusPath = join(tempDir, 'status.json')\n  try {\n    // Why: TCC status must be checked through the helper app identity. Directly\n    // execing the binary can inherit the parent app's already-granted context.\n    await launchPermissionStatusHelper(helperAppPath, statusPath)\n\n    for (let attempt = 0; attempt < 50; attempt++) {\n      if (await fileExists(statusPath)) {\n        const output = await readFile(statusPath, 'utf8')\n        return JSON.parse(output) as Partial<\n          Record<ComputerUsePermissionId, ComputerUsePermissionStatus>\n        >\n      }\n      await delay(100)\n    }\n    throw new RuntimeClientError('accessibility_error', 'Timed out checking permissions')\n  } finally {\n    await rm(tempDir, { recursive: true, force: true })\n  }\n}\n\nfunction launchPermissionStatusHelper(helperAppPath: string, statusPath: string): Promise<void> {\n  return new Promise((resolve, reject) => {\n    const launch = spawn(\n      '/usr/bin/open',\n      ['-n', helperAppPath, '--args', '--permission-status-file', statusPath],\n      {\n        stdio: ['ignore', 'pipe', 'pipe']\n      }\n    )\n    let stdout = ''\n    let stderr = ''\n\n    launch.stdout?.setEncoding('utf8')","sourceCodeStart":78,"sourceCodeEnd":114,"githubUrl":"https://github.com/stablyai/orca/blob/1136503c6a231a16dce8f921f6fadb63d181e8db/src/main/computer/macos-computer-use-permission-status.ts#L78-L114","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Remove quarantine: xattr -dr com.apple.quarantine '/path/Orca Computer Use.app'.","Grant Accessibility permission to the helper in System Settings > Privacy & Security.","Re-launch the permission check and retry after first-run approval.","Reinstall the app bundle if the helper is missing or corrupt."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  return await getComputerUsePermissionStatus()\n} catch (err) {\n  if (err instanceof RuntimeClientError && err.code === 'accessibility_error' && /Timed out checking permissions/.test(err.message)) {\n    // prompt the user to approve the helper in System Settings, then retry once\n  }\n  throw err\n}","preventionTips":["Clear quarantine attributes after install (xattr -dr com.apple.quarantine).","Pre-approve the helper in Privacy & Security.","Retry permission checks after first-run prompts."],"tags":["accessibility-error","macos","permissions","tcc","timeout"],"backgroundTag":null,"analyzedSha":"1136503c6a231a16dce8f921f6fadb63d181e8db","analyzedAt":"2026-08-12T23:15:58.167Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}