Skip to main content
This page is the user-facing reference for the worker process itself: the exit codes it raises during preflight, before any section is contacted, and the generic limitations that apply no matter which job type a section runs. Section, thread, and transient codes are scoped to a job type and documented with it.

Process exit codes

The worker refuses to run when any of these are detected at start. The failure exits the process with the code; nothing on the server is touched. MISSING_SESSION_KEYS and DUPLICATE_SECTION_TARGET are raised by the session_agent_harness section validator, which the loader runs at preflight; they still exit the process before any section is contacted. DUPLICATE_SECTION_TARGET has a second, section-level realization too: when a section’s session_id is a spelling (uuid or alias) that resolves, after attach, to a session another section is already serving under a different spelling — something this static check cannot see — that one section refuses while the rest of the worker keeps running. See Session Agent Harness → Reference. Section, thread, and transient codes are scoped to a job type. For session_agent_harness, see Reference.

Instance command codes

These come from blobhub-worker instance show/instance stop, not from start’s preflight — they are raised while inspecting or stopping an already-running worker, not while one is coming up. Full behavior: blobhub-worker instance.

Generic limitations

These trade-offs apply regardless of which job type a section runs. Job-type-specific limitations are documented with the job type.

No hot configuration reload

Editing the profile’s config.yaml does not affect a running worker. Restart the worker (blobhub-worker start) to pick up changes.

Single-process per profile

Each worker runs in a single Python process and does not distribute work across machines or scale beyond concurrency.max_agents (in-process). The lock is held per profile, not per machine, so one machine may run several workers side by side — --profile prod and --profile staging at once, each with its own configuration, cursors and lock. What is still refused is a second worker on the same profile.

See also