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
- 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.
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
- Clear quarantine attributes after install (xattr -dr com.apple.quarantine).
- Pre-approve the helper in Privacy & Security.
- Retry permission checks after first-run prompts.
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
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
Related errors
- Microphone access not granted. In System Settings > Privacy
- invalid_argument
- ETIMEDOUT
- accessibility_error
- action_timeout
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/f379de83211a98c0.
Report an issue: GitHub.