This release is a pre-release and may not be stable for production use.
europacore
The agent and harness core for building agent-based applications. It includes:
AgentHarness: a multi-turn, tool-calling loop with:- guardrails
- checkpoint/resume and human-in-the-loop approval
- streaming
- provider-agnostic retry
- context compaction
- sub-agent delegation
- opt-in failure-spend governance (
failure_spend_governance=True): a fan-out cap, a circuit breaker for identically failing calls, and a failure budget that steers a failing run to answer early (failure_arm_after_distinct_calls=2arms it only once two different calls have failed, for tools that report ordinary misses as errors)
SingleShotAgent: one prompt in, one schema-validated output, in a single forced LLM call.ToolAgent: the base class for the tools the harness dispatches.- Built-in tools for planning, skills and delegation, each enabled by a flag.
enable_planning=Trueregisterstodo_writeand, by default, nudges the model to plan before substantial work;planning_mode="auto"keeps the tool and drops the nudge, so a one-line question costs no extra round-trip. - An LLM layer: a Chat-Completions-shaped
LLMcontract with Amazon Bedrock (Claude), Anthropic API and OpenAI (Responses API) providers, plus a(name, version)prompt registry. - Optional durable state and runtimes:
- Postgres checkpointer and run journal
- a Temporal-backed autonomous multi-agent runtime
- sandbox providers (local subprocess, AWS Lambda MicroVMs)
Moving code from the library's predecessor? See docs/migration.md.
Install
Python 3.11+. The core has few dependencies; everything else is an extra, imported only when you use it:
pip install --pre europacore # core only (--pre: the 0.4 releases are alphas)
pip install --pre 'europacore[server,bedrock,postgres]' # the server, Claude on Bedrock, Postgres state
europacore doctor --model claude-haiku-4-5 # what is installed and configured, and how to fix what is not
docs/install.md lists every extra, what europacore doctor checks, and the providers' environment variables.
Quickstart
Try it
One command serves the showcase offline, with no credentials: an assistant that plans, calls tools and asks before it saves a note, the Europa Bistro's table-booking flow, a refunds agent whose tool is a flow with an approval gate, and the flow designer with both flows in it:
pip install --pre 'europacore[server,graph]'
europacore demo # --repo DIR adds a sample repository and a coding agent that fixes it
npx @markmo/europacore-cli # the terminal client (Node 22); or open the chat link the demo printed
The chat page at the server's address is europacoreui's session UI (europacoreui is the full product app) around this server; the terminal client is ec. europacore demo --model claude-haiku-4-5 runs the same agents live.
A new project
europacore init makes an agent project that passes its tests and serves offline before any credentials are set:
europacore init my-agents # --model claude-haiku-4-5 to start on a live model
cd my-agents && pip install -e '.[dev]'
pytest # a scripted model plays the turns
npx @markmo/europacore-cli --spawn my_agents.agents:registry # serve it and chat with it in the terminal
It writes:
- an agent registry (
my_agents/agents.py), built with the option groups; - its tools, one of which waits for the user's approval;
- offline tests with an eval set (
evals/smoke.json); .env.exampleand aDockerfile;- a
pyproject.tomlthat depends oneuropacore[server], plus the extra the model's provider needs.
The default model, demo, is an offline stand-in (europacore.testing.DemoLLM) that plans and calls the tools when asked to. Set EUROPACORE_MODEL to go live, and check it with europacore doctor.
In code
An agent that runs offline on a core-only install (examples/minimal_agent.py):
from europacore.agents import AgentHarness, function_tool
from europacore.testing import ScriptedLLM, text, tool_call
@function_tool
def add(a: float, b: float) -> float:
"""Add two numbers."""
return a + b
llm = ScriptedLLM([tool_call("add", {"a": 2, "b": 40}), text("2 + 40 = 42")]) # plays the model
agent = AgentHarness(llm, tools=[add], system_prompt="You are a careful calculator.")
print(agent(question="What is 2 + 40?").text)
To go live, pass a real model instead of ScriptedLLM: create_model("claude-haiku-4-5") (europacore.llm) runs Claude on Bedrock, create_model("anthropic/claude-opus-5-5") on the Anthropic API, and create_model("gpt-6-luna") on OpenAI.
In a notebook
The same API, a step at a time: europacore notebook opens four notebooks (a first agent, durable state and approval, flows, evals) in euporie, a Jupyter client that runs in the terminal. They run offline, and your edits are kept:
pip install --pre 'europacore[notebooks,graph]'
europacore notebook # or `europacore notebook 02` for one; --list lists them
The guide
docs/guide goes from a first agent to agents that run unattended:
- Building an agent: tools, structured answers, option groups, models, hooks, prompt templates, results and stop hints, security defaults
- Durable state: checkpoints and the run journal, approvals, recovery, steering, inspecting runs, memory, tracing
- The server: HTTP and SSE, editors over ACP, tool credentials
- Flows: FlowScript, pauses, flows as tools, the designer
- Coding agents: sandboxes, the coding agent, fleets, design checks, the autonomous runtime
- Testing and evals: scripted models, cassettes, eval sets,
europacore eval, pytest fixtures
europacore in pictures tours it all with screenshots: the coding agent, the ec terminal client, the web session UI, the flow designer and fleets.
What is in it
| Package | What | Read |
|---|---|---|
europacore.agents |
AgentHarness, tools, guardrails, checkpointers and the run journal |
guide 1, 2 |
europacore.llm |
the model contract, providers, create_model, FallbackLLM |
guide 1 |
europacore.routing |
a tier of model per turn (fast, standard, capable), judged by Jev, within the task's budget | guide 1, model-routing.md |
europacore.server |
europacore serve: sessions, runs and resumable streams over HTTP |
guide 3, server-api.md |
europacore.credentials |
tools that act with a person's own account (OAuth, API keys) | guide 3, tool-oauth.md |
europacore.memory |
long-term memory across sessions | guide 2 |
europacore.graph |
FlowScript flows and the designer | guide 4, flowscript.md |
europacore.coding |
the coding agent | guide 5 |
europacore.sandbox |
local, OS-sandboxed and MicroVM sandboxes | guide 5 |
europacore.fleet |
scored parallel coding tasks over one repository | fleet.md |
europacore.cloud |
moving sessions and fleet runs to another server and back | cloud.md |
europacore.design |
design checks that keep a change from making a repository worse | design.md |
europacore.autonomous |
a persisted multi-agent run graph, in process or on Temporal | guide 5 |
europacore.evaluation, europacore.testing |
eval sets, scripted models, cassettes | guide 6 |
europacore.claude_code |
Claude Code sessions served next to europacore's own agents | claude-code.md |
The examples run offline: minimal_agent.py, delegation_agent.py, mcp_agent.py, memory_agent.py, credentialed_tool.py, eval_in_ci, the server registries, flows and the coding agent. kubernetes deploys the server as two replicas on Postgres.
Reference
- api.md: every public name with its signature; anything not listed there is internal. deprecations.md says what a release may change.
- constructor.md: every
AgentHarnessargument, its default and its group. - events.md: every event a run emits.
- settings.md: every
EUROPACORE_*variable;europacore configshows their values. - server-api.md and server-settings.md: the HTTP protocol, and running a server.
- threat-model.md: each trust boundary, its control and its test.
- llms.txt: this documentation's map, for coding agents.
Development
poetry install --all-extras
make check # the suite, mypy, ruff and the design checks against main
docs/development.md has the other commands, and how to request the full CI gates.
Metadata
Release files for europacore 0.4.0a10
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| europacore-0.4.0a10.tar.gz | 4.0 MB | With provenance | Details for europacore-0.4.0a10.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| europacore-0.4.0a10-py3-none-any.whl | Python 3 | none | any | Details for europacore-0.4.0a10-py3-none-any.whl |
Total release size: 8.5 MB
Release files / europacore-0.4.0a10.tar.gz
| Download URL | europacore-0.4.0a10.tar.gz |
|---|---|
| Size | 4.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2bae67d99d28be904c63a0a8e5e21263df54173634a1c9a0a35c4f77a6e0bf36
|
|
BLAKE2b-256 checksum How to use checksums |
0c5ecbeec11cdebcae787432bde22402eb62a00cfa299d429a53d6ad003714fd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.
Transparency logRelease files / europacore-0.4.0a10-py3-none-any.whl
| Download URL | europacore-0.4.0a10-py3-none-any.whl |
|---|---|
| Size | 4.5 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ea3c45db2ac18a00922aad62b0d414f205f9b38220ede20f8ab17f74495b884d
|
|
BLAKE2b-256 checksum How to use checksums |
eb168ed6fc12478964e7c026f3ce0246788f19fb9c619ae9792b600af2186a22
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.
Transparency logSecurity for europacore 0.4.0a10
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for europacore-0.4.0a10.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.