AERead — an agentic economic environment for LLM agents
Start here: 5-minute quickstart · Concepts · Submit an agent · Integrations (rLLM, EverOS, yours) · Contribute
AERead (AgentEcon Readiness) is an open environment + benchmark for studying how LLM agents behave in multi-agent exchange economies: bilateral trade, multiparty clearing, hidden-counterparty discovery, consent under hidden information, procurement, and bundle-purchase worlds. It asks a deployment question — how much of the attainable welfare does an agent actually realize when it has to trade with others? — and measures it with a single auditable score.
Results and methodology: https://aeread.org · Capability coverage map: CAPABILITIES.md — what is covered, partial, and planned, toward a general evaluation of agent economic capabilities.
What makes it a benchmark, not just a sandbox
- Deterministic seeded cases. A case is a JSON config (world + protocol + role table). Same config + seed ⇒ same world, byte-for-byte.
- One seat under test, frozen everything else. The other seats are a frozen LLM panel (temperature 0, cached, model-pinned) or scripted policies, so the score isolates the candidate.
- AER scoring.
AER = W_real / denominator— realized welfare gain over the attainable welfare gain, pooled asΣW/ΣD. Raw ratio: negatives are preserved, values can exceed 1, denominator tiers are never mixed, degenerate denominators are reported instead of imputed. - Byte-replayable runs. Every LLM call lands in an inference manifest with
response snapshots;
--mode replayre-executes a run with zero live calls and must reproduce the trace byte-identically. Submissions are verified this way.
Install
# without cloning (a PyPI release is pending):
pip install "aeread @ git+https://github.com/aeread-org/AERead"
# from a checkout, for development:
pip install -e '.[dev]'
aeread --help
60-second offline quickstart (no API keys)
# run a case fully offline (scripted policies, no LLM calls):
aeread run --config configs/exchange_economy/cases_v0/case01_visible_bilateral_ir.json \
--mode offline --seed 7 --out runs/
# provider-free baselines + validity orderings for a case (~2 min/case, pure CPU):
aeread baselines --configs 'configs/exchange_economy/cases_v0/case01_visible_bilateral_ir.json' \
--output-md /tmp/case01_baselines.md
Evaluate a model
Models route through any OpenAI-compatible endpoint (OPENAI_API_KEY +
OPENAI_BASE_URL, defaults to OpenRouter slash-names) or natively to Gemini
(GEMINI_API_KEY).
export OPENAI_API_KEY=... # OpenRouter (or set OPENAI_BASE_URL for another provider)
aeread eval --cases 'configs/exchange_economy/cases_v0/case0*.json' \
--agents noop random greedy your-provider/your-model \
--seeds 5 --seed-base 1200 --workers 8 --out output/my_eval
# -> output/my_eval/summary.json: pooled AER + bootstrap CI per agent, vs the baselines
Note: for configs with a roles block, the under-test model comes from the
role table (or the --agents spec in aeread eval), not aeread run --model.
Submit an agent
Your agent never sees the world object — it gets the exact rendered text observation an LLM seat would get, and returns text. One method:
class MyAgent:
def act(self, observation: str, phase: str) -> str:
# phase ∈ {communication, proposal, response, finalization, private_acceptance}
...
aeread submit --cases configs/exchange_economy/cases_v0/case0*.json \
--agent mypkg.myagent:MyAgent --out submissions/
# -> submission_report.json: per-case scores, case-set content hash,
# replay verification (the run is re-executed with your agent absent and
# must reproduce byte-identically)
Two trust tiers. Anything you run locally on the public dev seeds is
self-reported. A verified result is produced by the maintainers: we re-run
your submission's replay audit and evaluate the agent on a private held-out
seed set that never ships in this repo. Open a PR with your
submission_report.json to start that process (see CONTRIBUTING).
Add a case
Cases are JSON: world spec (agents, resources, utility mode, world type),
protocol knobs (visibility, atomic commit, IR enforcement, settlement limits,
communication scope…), an institution_pressure block, and a strictly
validated roles table. New cases must pass the provider-free admission gate
(aeread validate-case), which enforces the non-triviality ordering
no-op ≤ random < greedy < ceiling and rejects degenerate worlds. See
CONTRIBUTING.md and configs/exchange_economy/cases_v0/README.md.
Integrations
AERead plugs into other agent stacks through two small seams — the
text-boundary submitted-agent contract (act(observation, phase) -> str) and
the framework-neutral episode core (run_episode(...) -> score row). See
integrations/ for the contract and the
add-your-own guide.
- rLLM (upstream: rllm-org/rllm) — train on AER as reward, smoke-tested against 0.3.0rc0: the seat under test samples through rLLM's model gateway; the frozen panel stays cached and untraced; GRPO groups rollouts per case so denominator scale cancels in the advantage.
- EverOS (upstream: EverMind-AI/EverOS) — persistent memory as a treatment arm: a submitted agent that searches an EverOS server before every action and writes each finished episode + outcome back; a memory-on vs memory-off A/B measures what cross-episode memory is worth in realized welfare. Measured on the fixed client with three independent sequences per condition: control +0.114, memory +0.082, paired delta −0.032 [−0.066, +0.002]. An earlier +0.059 lift reported from this integration was a measurement artifact and is retracted (see the guide for the full notice).
aeread.exchange_rl_env: a structured (LLM-free) bilateral negotiation env withreset()/step(agent_id, StructuredAction)for classical RL and unit-testable reward shaping — no external framework needed.
Scoring semantics, in one paragraph
Per episode the scorer records w_real (realized welfare gain of the world,
from the trace) and a denominator (attainable welfare gain under the case's
oracle tier — exact Bayes, Monte-Carlo Bayes, or W* fallback). The headline is
the pooled raw aggregate ΣW_real/ΣD per tier with a bootstrap CI; a clipped
companion (aer_clip) is presentation-only. Failed feasibility/authorization
gates zero the episode's W_real but keep its denominator. Tiers are never
pooled together, and degenerate denominators are surfaced with a reason, never
silently scored.
Provenance
This repository is a curated export of a private development repo:
export_manifest.json records the source commit and per-file SHA-256 for every
exported module, test, and config. Response caches, run archives, and the
private held-out seed set are excluded by design.
Environment variables
| Variable | Purpose |
|---|---|
OPENAI_API_KEY, OPENAI_BASE_URL |
OpenAI-compatible provider (default OpenRouter) |
GEMINI_API_KEY |
native Gemini path for google/gemini-* models |
AEREAD_CACHE_DIR, AEREAD_GEMINI_CACHE_DIR |
response-cache locations |
POC_MODEL, POC_MT, POC_TEMPERATURE |
runner defaults (model, max tokens, temperature) |
Repository map
src/aeread/ the installable package: arena engine, runner, scorer,
submission harness, baselines, oracles, CLI
src/aeread/integrations/ rLLM flow/eval/dataset, EverOS memory (importable code)
integrations/ per-integration guides + examples (human side)
configs/exchange_economy/ versioned case sets (cases_v0/, …) + variants
docs/ quickstart, concepts, submission contract
examples/ minimal runnable entry points
tests/ offline, deterministic; no API keys needed
CAPABILITIES.md coverage map: covered / partial / planned capabilities
export_manifest.json provenance of every exported module (see Provenance)
Ecosystem & partnerships
- rLLM — Berkeley Sky Lab's agent post-training framework. AERead ships rLLM entry points; the seat under test trains through rLLM's gateway with per-episode AER as reward. (guide)
- EverOS — EverMind's open-source, markdown-first memory service. The persistent-memory treatment arm is developed in design partnership with the EverOS team. (guide)
Building on AERead, or want your framework listed? Open a new-integration issue.
Community & contributing
- CONTRIBUTING.md — four channels: cases, agents &
results, integrations, core code. Cases must pass the admission gate
(
no-op ≤ random < greedy < ceiling); code lands with offline tests. - Issues — templates for bugs, new cases, and new integrations. Replay mismatches are P0.
- Code of Conduct — Contributor Covenant; benchmark disputes are settled with reproducible runs.
License & citation
Apache-2.0. A methodology preprint is in preparation; until then, cite this repository and https://aeread.org.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aeread-0.1.0.tar.gz.
File metadata
- Download URL: aeread-0.1.0.tar.gz
- Upload date:
- Size: 350.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc158f2cfffc66344d74dd77167fd42a7c27de8d701dd37044d0551b4f1dfdd0
|
|
| MD5 |
77d9238483e95778f049fbba744c4240
|
|
| BLAKE2b-256 |
16f149356d55d6cab9b8f39fcbeeacd143d26c99d1d2aa7fc966b3e4d102b218
|
File details
Details for the file aeread-0.1.0-py3-none-any.whl.
File metadata
- Download URL: aeread-0.1.0-py3-none-any.whl
- Upload date:
- Size: 231.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc657ba2bfaf787e2578de0e4d447d4fd07c7368f04977dcad6c8b1b2c2f4e79
|
|
| MD5 |
8d971d6373d09636dee8bf4ff91143d9
|
|
| BLAKE2b-256 |
6adb09ae15510acacb759a092a6de2ff01d8287781e4d37254599396305c63b9
|