stablyai/orca · error · Error
ETIMEDOUT
ETIMEDOUT
Error message
security timed out after ${KEYCHAIN_COMMAND_TIMEOUT_MS}ms What it means
Rejected by execSecurityCommand() when the macOS `security` child process does not settle within KEYCHAIN_COMMAND_TIMEOUT_MS (3000 ms). The timer kills the child and rejects with code 'ETIMEDOUT'. It guards against a stuck `security` binary (e.g. waiting on a Keychain unlock prompt) that would otherwise leave auth/keychain operations hanging indefinitely.
Source
Thrown at src/main/claude-accounts/keychain.ts:192
(error as { message?: unknown }).message ?? ''
)}`.toLowerCase()
: String(error).toLowerCase()
return code === 44 || message.includes('could not be found') || message.includes('not be found')
}
function execSecurityCommand(args: string[]): Promise<SecurityCommandResult> {
return new Promise((resolve, reject) => {
let settled = false
let child: ReturnType<typeof execFile> | undefined
const timer = setTimeout(() => {
if (settled) {
return
}
settled = true
child?.kill()
reject(
Object.assign(new Error(`security timed out after ${KEYCHAIN_COMMAND_TIMEOUT_MS}ms`), {
code: 'ETIMEDOUT',
stderr: ''
})
)
}, KEYCHAIN_COMMAND_TIMEOUT_MS)
const settle = (callback: () => void): void => {
if (settled) {
return
}
settled = true
clearTimeout(timer)
callback()
}
// Why: Node's execFile timeout only signals the `security` process; a
// stuck callback would otherwise leave auth/keychain operations pending.
try {
child = execFile(View on GitHub (pinned to 1136503c6a)
Solutions
- Unlock the login Keychain first (Keychain Access, or `security unlock-keychain`) and retry.
- Repair the Keychain with Keychain First Aid / Keychain Access > Keychain Repair.
- Increase KEYCHAIN_COMMAND_TIMEOUT_MS only if the environment legitimately needs longer (rare).
- Ensure no GUI dialog is pending approval for Orca/security to access the item.
Defensive patterns
Strategy: retry
Type guard
function isKeychainTimeout(error: unknown): boolean {
return (
error instanceof Error &&
(error as NodeJS.ErrnoException).code === 'ETIMEDOUT' &&
error.message.includes('security timed out')
)
} Try / catch
try {
return await execSecurityCommand(args)
} catch (error) {
if (isKeychainTimeout(error)) {
// Likely locked Keychain — surface a user action, then retry once
throw new Error('Keychain appears locked. Unlock the login Keychain and retry.')
}
throw error
} Prevention
- Unlock the login Keychain before issuing security commands.
- Grant Orca automation permission for the security CLI.
- Repair corrupt Keychains proactively.
- Avoid operations while iCloud Keychain is mid-sync.
When it happens
Trigger: The Keychain is locked and macOS shows a GUI unlock dialog that `security` (non-interactive) waits on. A system prompt for permission is blocking the process. The security binary is hung due to a corrupted Keychain. Slow/inaccessible iCloud Keychain sync.
Common situations: Fresh login after restart where the login Keychain is still locked. MDM policies that require approval for security CLI access. Corrupted login.keychain-db. iCloud Keychain desync causing long stalls.
Understand the failure class
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
Related errors
- Could not read macOS Keychain item ${service}/${account}.
- Missing signing identity for Orca Computer Use helper app
- Missing signing identity for orca-notification-status helper
- Expected helper to exit after abrupt authenticated owner los
- Cannot capture current Claude Keychain credentials
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/1b0f7cb14d23df18.
Report an issue: GitHub.