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
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
europacore serve my_agents.agents:registry --state-db .europacore/state.db
ec --server http://127.0.0.1:8765 # chat with it in the terminal (npm i -g @markmo/europacore-cli)
It writes:
- an agent registry (
my_agents/agents.py), built with the option groups; - a tool;
- 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. 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.
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
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.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.0a9
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.0a9.tar.gz | 2.6 MB | With provenance | Details for europacore-0.4.0a9.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| europacore-0.4.0a9-py3-none-any.whl | Python 3 | none | any | Details for europacore-0.4.0a9-py3-none-any.whl |
Total release size: 5.7 MB
Release files / europacore-0.4.0a9.tar.gz
| Download URL | europacore-0.4.0a9.tar.gz |
|---|---|
| Size | 2.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b1b73542e212165299582a02fb62bb3d6e027aa960b95b37adf2478241a85f66
|
|
BLAKE2b-256 checksum How to use checksums |
42ca60e6ace4a14d17a8c1a09733c25ad2d0d62c202f259fbdd2757a3be6d20c
|
| 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 25, 2026.
Transparency logRelease files / europacore-0.4.0a9-py3-none-any.whl
| Download URL | europacore-0.4.0a9-py3-none-any.whl |
|---|---|
| Size | 3.1 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4f3682d7788cdc142f6681d7fee13241903a8c414fb7b201b4dd881759e99d0a
|
|
BLAKE2b-256 checksum How to use checksums |
2ef1965c7ce5276008081fcfa7d4d90fe003b668b58c46953df32337f7c08359
|
| 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 25, 2026.
Transparency logSecurity for europacore 0.4.0a9
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.0a9.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 25, 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.