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.
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:
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
SequentialAgent, ParallelAgent, RouterAgent
SequentialAgent, ParallelAgent, RouterAgent
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.DeepAgent
DeepAgent
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.agent_config['memory_tool_backend']
agent_config['memory_tool_backend']
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.EventRouter, event_router=, and the event-store methods
EventRouter, event_router=, and the event-store methods
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.
BackgroundOmniCoreAgent, BackgroundTaskScheduler, APSchedulerBackend, TaskRegistry
BackgroundOmniCoreAgent, BackgroundTaskScheduler, APSchedulerBackend, TaskRegistry
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, and the retry and circuit-breaker helpers
OmniAgent, and the retry and circuit-breaker helpers
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.omniserve run --reload
omniserve run --reload
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:
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.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 withoutcommand 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}}.