Skip to main content

Upgrading

Coming from 0.3, start here: sections 1 to 5 cover 0.3 to 0.4. Each later release has its own section below them, ending with From 0.4 to 0.5.0. Most 0.3 code runs on 0.4 unchanged: an agent built from a name, an instruction, a model, local tools and MCP servers, run() and its result, sessions, memory, and the OmniServe routes. What changed is listed below, all of it measured: the public surface of 0.3.8 was installed next to 0.4 and compared name by name, setting by setting and route by route.
On 0.3.9? That release cannot build an agent: it was published without one of its own modules, and OmniCoreAgent(...) raises ModuleNotFoundError: No module named 'omnicoreagent.core.workspace'. If you are pinned to it, you are effectively upgrading from 0.3.8 — this page is for you.

1. Python 3.12 or later

0.4 and later need Python 3.12, 3.13 or 3.14. On 3.10 or 3.11, pip install -U omnicoreagent now stops with a message saying so. Before the guard release (0.3.10, published with 0.4.3) it did not fail: it quietly stayed on 0.3.9 (Installation). Check what you got:
The omnicoreagent command is new in 0.4; if omnicoreagent --version is not found, the upgrade did not happen.

2. What runs unchanged

3. What was removed, and what took its place

The workflow classes are gone; ordinary Python composes runs, and each run keeps its own trace.
For routing (was RouterAgent), give one agent the others as sub_agents=[billing, support]: the model gets a delegate_billing and a delegate_support tool and chooses. See Subagents.
Its parts are settings on any agent now: enable_subagents=True lets the model spawn focused workers with spawn_subagents, and workspace files (on by default) give it the files it plans and works in. See Subagents and Workspace files.
The memory_* tools are gone. The agent’s files live in its workspace, on by default (enable_workspace_files), with ls, read_file, write_file, edit_file, glob, grep and the rest; local disk, S3 or R2 through workspace_config. A 0.3 config that still sets the key fails when the agent is built and names this replacement. See Workspace files.
0.3’s event store is replaced by telemetry: every run is recorded as a trace, one readable record from the question to the answer, with every model call, tool call, approval and budget decision.See Telemetry events and Observability.
BackgroundAgentManager remains, rebuilt around tasks and runs kept in a task store (memory, SQL, Redis or MongoDB), with leases, retries and cron. It no longer needs APScheduler; the background extra is gone.See Background agents.
OmniAgent was another name for OmniCoreAgent; use OmniCoreAgent. with_retry, retry_async, RetryConfig, RetryStrategy, CircuitBreaker, CircuitBreakerConfig, Configuration and get_metrics were OmniServe internals exported at the top level; they are not public in 0.4. Model calls retry with backoff on their own.
Removed. Every other omniserve option is unchanged.

4. Defaults that changed

An agent built the 0.3 way behaves differently in these ways: To keep 0.3’s step limit and timeout, and every run record, set them:
Telemetry writes to your disk from the first run. To leave model prompts and responses out of it, keep it in memory only, or move it:
See the TelemetryConfig reference and Guardrails and privacy.

5. What is new

Nothing here needs to change for the upgrade; it is what 0.4 adds. A tour shows most of it in fifteen minutes.

Policies and approvals

Allow, deny or ask a person, per capability; budgets the agent cannot overspend.

Sandboxes

Commands in Docker, E2B, Daytona, Modal or Vercel, with a network policy.

Durable runs

resume, interrupt, steer: a run survives a crash and a person’s pause.

Headless runs and Harbor

omnicoreagent run for CI and evaluations; omnicoreagent harbor for Terminal-Bench.
Every setting, method and command is in the reference.

From 0.4.0 or 0.4.1 to 0.4.2

Code that runs on 0.4.1 runs on 0.4.2, with these exceptions, each a setting that now does what its name says: Finished run records and traces are kept as before; traces whose process died are now removed by trace retention as well. The changelog lists every fix.

From 0.4.2 to 0.4.3

Code that runs on 0.4.2 runs on 0.4.3. One behaviour changed, and only after a crash: See what is guaranteed for the whole contract.

From 0.4.3 to 0.4.4

Code that runs on 0.4.3 runs on 0.4.4. A policy without command rules decides exactly as before, with the same policy hash.

From 0.4 to 0.5.0

One change you will notice: an agent is governed unless it says otherwise. Code that runs on 0.4 runs on 0.5.0 unless it does one of the things the default profile, permissive-dev, refuses or asks about: To keep 0.4’s behaviour exactly: agent_config={"governance_config": {"enabled": False}}.