Heym Incident Playbook (L0)

Use this playbook to confirm a Heym incident, assess user impact, choose a severity, and reach the right recovery procedure and owner.

Use this playbook to confirm a Heym incident, assess user impact, choose a severity, and reach the right recovery procedure and owner.

Detailed procedures: Heym Runbook (L1)

Last reviewed: 2026-11-10. Scope: self-hosted Heym, single instance or cluster, on Docker Compose or Kubernetes.

Deployment handover

Fill in this table for each environment before using these documents on call. Names, URLs, capacity targets, and recovery objectives are deployment-specific. Repository examples are not a production inventory.

ItemDeployment value
Environment and public Heym URL<environment>, <public-url>
Platform on-call and backup<rotation-or-contact>, <backup-contact>
Incident channel and incident tracker<channel>, <tracker-url>
Database on-call and database identifier<contact>, <database-id>
Infrastructure, networking, and storage owners<contacts>
Release owner and deployment system<contact>, <deployment-url>
Application errors, latency, and availability dashboard<dashboard-url>
Host or pod CPU, memory, disk, and restart dashboard<dashboard-url>
PostgreSQL connections, locks, disk, and replication dashboard<dashboard-url>
Logs and optional OTel trace backend<logs-url>, <trace-url-or-disabled>
Compose project/files or Kubernetes context/namespace<exact-target>
Main, workers, database, and storage locations<services-or-deployments>, <storage-ids>
Approved smoke workflow and expected result<workflow-id>, <safe-input>, <expected-result>
Database and file backup procedure, latest restore test<procedure-url>, <test-date>
Recovery time and recovery point objectives<RTO>, <RPO>

Keep contacts and dashboard links in the deployment's restricted operational copy. Evidence should contain IDs, timestamps, counts, and sanitized errors rather than credentials or workflow payloads.

Platform inventory

ComponentResponsibilityIncident implication
Frontend and main backendUI, API, MCP, Portal, interactive executionCheck the public route and the main process separately
PostgreSQLApplication state, execution registry, run queue, concurrency slots, coordination, and notificationsA database outage can stop both request handling and background execution
Worker instances, when cluster mode is enabledEligible queued background runsHealthy workers do not replace main's public endpoints
Elected leader processCron, alert evaluation, background coordinationA compatible worker can become leader; this does not change its role to main
Main's persistent storageDrive files, installed plugins, and coding-agent workspacesRecover the storage with main; routing ingress to a worker does not recover it
Sandbox backend on each executing instanceDocker containers or Kubernetes pods for isolated executionA failed sandbox backend can affect selected nodes while the UI works
Workflow dependenciesModel providers, MCP servers, external APIs, data stores, and messaging servicesDetermine whether one dependency or the whole platform is failing
Optional OTel collectorExported workflow, node, and Agent tool spansMissing exported traces alone do not prove execution failed

Heym's built-in run queue uses PostgreSQL. Redis, RabbitMQ, and vector stores can be workflow dependencies; they are not mandatory services for the built-in queue.

GET /api/health reports process health and version only. It does not test PostgreSQL, the queue, leader election, sandbox capacity, or credential synchronization. A green response is one check, not an end-to-end readiness guarantee.

First five minutes

StepActionDecision or evidence
1Acknowledge the alert and verify environment, service, and start timeRecord UTC timestamps and the most recent release/configuration change
2Check the public UI and /api/health, then the direct main backendPublic failure with a healthy direct backend suggests routing or frontend trouble
3Check PostgreSQL connectivity and connection pressureRoute database failures to L1 before restarting application services
4Check container/pod state, CPU, memory, storage, and recent errorsSeparate infrastructure failure, load, and workflow-specific failure
5In cluster mode, check Settings > Instances, queue states, and leader evidenceIdentify main loss, offline/mismatched workers, or main-only work
6Assign severity and start one mitigation from the routing tableFor P1/P2, open an incident and involve the relevant owner immediately
7Verify a safe production-mode workflow run and watch recoveryConfirm queue age, errors, and resources improve; set the next update time

If a release coincides with the failure, inspect Bad deploy or configuration regression. Check schema compatibility before rollback.

Severity and response

These are starting response targets. Apply the deployment's incident policy and business impact when it is stricter.

SeverityExamplesResponse
P1Main unavailable to all users; database unavailable or writes failing; widespread execution failure; critical intake unavailable across workflowsImmediate mitigation, incident record, platform and dependency on-call
P2Growing backlog; lost worker capacity; connection exhaustion approaching; one workflow degrading shared capacity; repeated OOMStart mitigation immediately, target containment within 15 minutes, incident record
P3Isolated workflow/provider failure; limited impact with healthy platform capacityWorkflow or dependency owner, tracked follow-up and on-call note
P4Informational signal, expected capacity trend, verified false positiveAcknowledge, document, and tune monitoring if needed

Signal to L1 routing

Use these relative anchors when configuring alert links. Where a monitoring service needs an absolute URL, prefix the location of your hosted operational copy.

SignalStart here
UI/API unavailable, public 5xx, process health failureUI or API down
PostgreSQL unreachable, connection refused, write failureDatabase down
Too many clients, pool timeout, lock waits, active connection spikeDatabase connections and locks
Controlled backend/worker restart requiredService restart
Execution count, total duration, tokens, CPU, or memory spikeMost resource-consuming workflows
Growing queue, runs waiting or apparently stuckQueue backlog
Offline/Mismatch instance, worker idle, scheduler or distribution issueCluster checks
Main lost while workers remain healthyMain instance unavailable
Webhook errors, MCP/Portal failures, SSE disconnectsIngress and execution endpoints
OOM, CrashLoop, Pending, disk full, persistent-volume failureContainer, pod, or storage issue
Error increase after image, environment, or schema changeBad deploy
Agent/LLM/MCP provider errors, 429, credential failureModel or integration failure
Code/Playwright/skill/coding-agent sandbox failuresSandbox failure
Recovery cannot meet objectives; database or files lostRecovery and disaster response

Escalation

FindingBring inSupply
Multiple surfaces or workflows affectedPlatform on-call and incident leadEnvironment, scope, start time, mitigation, next update
Database unavailable, saturated, locked, or out of diskDatabase on-callDatabase ID, connection counts, blocker PIDs, sanitized errors, storage state
Pod/node failure, storage attachment, sandbox capacityInfrastructure/storage ownerContext, namespace, workload, pod events, resource pressure
Public route fails while direct backend worksNetworking/ingress ownerAffected routes, status codes, latency, backend comparison
Single workflow dominates load or fails aloneWorkflow ownerWorkflow/run IDs, trigger source, rate, time window, temporary limits
Correlated deployment/configuration changeRelease ownerRunning image digest, rollout time, schema revision, last known-good release
Provider quota/authentication/availabilityCredential or integration ownerProvider, model/service, status code, request ID if safe; no secret values

If P1/P2 impact persists after the first mitigation, escalate immediately with the evidence already collected. Do not wait for a complete root cause.

Failure expectations

FailureWhat may continueFirst action
PostgreSQL unavailableStatic frontend may still loadRestore the database path; do not restart every application instance
Main unavailable, workers healthyEligible background work and scheduling may continue if a compatible worker leadsRestore main with its persistent storage; public UI/API/MCP/Portal remain unavailable
Worker unavailableOther eligible instances take queued work as it is reassignedCheck placement, spare capacity, and recovery before adding traffic
Interrupted runEligible recoverable runs may restart from the beginning, onceCheck automatic recovery and external side effects before manual replay
Main-only workload overloadWorkers may stay idleReduce offending intake or increase main capacity; weight changes cannot move pinned work
Internal alerting unavailableExternal uptime/DB/infra monitoring may still workUse monitoring outside Heym; Heym alerts depend on the same DB and scheduler
Sandbox or provider unavailableWorkflows without that dependency may workContain affected workflows and repair the dependency

Recovery and incident closure

  1. Verify public access, database access, intended instance eligibility, and a safe production-mode smoke workflow. An editor test does not prove worker dispatch.
  2. Observe at least 10 minutes of stable errors, latency, resource use, and decreasing queue age. Also observe the next expected critical schedule or an agreed equivalent smoke check.
  3. Reconcile failed, recovered, skipped, expired, and pending runs with workflow owners. Check external side effects before replaying anything.
  4. Restore temporary trigger pauses, limits, and worker weights gradually. Give every remaining restriction an owner and expiry time.
  5. Update the incident with impact, UTC timeline, actions, evidence, and outstanding risks. Assign a root cause review for P1/P2 and update both documents if a procedure was missing.