stablyai/orca · error · Error
Automation not found.
Error message
Automation not found.
What it means
Thrown by AutomationService.runNow when no automation in store.listAutomations() matches the given automationId. runNow triggers an immediate manual dispatch, so a missing ID means there is no automation definition to schedule a run for.
Source
Thrown at src/main/automations/service.ts:90
// Why: headless serve never gets a renderer-ready IPC, but due runs still
// need the same startup catch-up pass desktop gets after renderer attach.
if (this.rendererReady || this.headlessDispatcher) {
void this.evaluateDueRuns()
}
}
stop(): void {
if (!this.timer) {
return
}
clearInterval(this.timer)
this.timer = null
}
async runNow(automationId: string): Promise<AutomationRun> {
const automation = this.store.listAutomations().find((entry) => entry.id === automationId)
if (!automation) {
throw new Error('Automation not found.')
}
const run = this.store.createAutomationRun(automation, Date.now(), 'manual')
return await this.requestDispatch(automation, run)
}
async runPrecheck(automationId: string, runId: string): Promise<AutomationPrecheckResult | null> {
const automation = this.store.listAutomations().find((entry) => entry.id === automationId)
if (!automation) {
throw new Error('Automation not found.')
}
const run = this.store.listAutomationRuns(automationId).find((entry) => entry.id === runId)
if (!run) {
throw new Error('Automation run not found.')
}
if (run.trigger !== 'scheduled' || !automation.precheck) {
return null
}
const target = resolveAutomationRunTarget(this.store, automation, {View on GitHub (pinned to 1136503c6a)
Solutions
- Verify the automationId exists in the current automation list before showing or invoking 'Run now'.
- Refresh the automation list when the detail view mounts and disable the action if the ID is gone.
- Catch the Error and show 'Automation no longer exists' with an offer to navigate back to the list.
- Use stable IDs from the store rather than reconstructed or user-typed IDs.
Example fix
// before
await automationService.runNow(automationId)
// after
const exists = automationService.listAutomations?.().some((a) => a.id === automationId)
if (!exists) {
throw new NotFoundError(`Automation ${automationId} not found`)
}
await automationService.runNow(automationId) Defensive patterns
Strategy: validation
Validate before calling
const exists = automationService\n .listAutomations()\n .some((a) => a.id === automationId)\nif (!exists) {\n throw new NotFoundError(`Automation ${automationId} not found`)\n}\nawait automationService.runNow(automationId) Try / catch
try {\n await automationService.runNow(automationId)\n} catch (err) {\n if ((err as Error).message === 'Automation not found.') {\n showUserMessage('This automation no longer exists.')\n return\n }\n throw err\n} Prevention
- Refresh the automation list before enabling 'Run now'.
- Disable the action when the automation is deleted.
- Use stable IDs from the store.
- Handle the not-found case gracefully in the UI.
When it happens
Trigger: Calling runNow with an automationId that was deleted, never existed, belongs to a different workspace/store, or is a stale ID held in UI state after the automation was removed.
Common situations: A 'Run now' button bound to a deleted automation, a race where the automation is removed between rendering the list and clicking run, or a copied/pasted ID with a typo.
Related errors
- Automation run not found.
- The target workspace is no longer available.
- invalid_argument
- browser_ref_not_found
- That Claude account no longer exists.
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/29bd735a73cd9fa8.
Report an issue: GitHub.