Metadata-Version: 2.5
Name: readyagentsdev
Version: 2.0.1
Summary: Local one-shot YAML/JSON agent workflow engine + MCP toolkit (BYOK).
Project-URL: Homepage, https://readyagents.dev
Project-URL: Source, https://github.com/readyagentsdev/readyagents-core
Project-URL: Issues, https://github.com/readyagentsdev/readyagents-core
Project-URL: Documentation, https://github.com/readyagentsdev/readyagents-core/tree/main/docs
Author: ReadyAgents contributors
License: Apache-2.0
License-File: LICENSE
Keywords: agents,byok,cli,llm,mcp,workflow,yaml
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: MacOS
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: OS Independent
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.11
Requires-Dist: pydantic-settings>=2.2
Requires-Dist: pydantic>=2.7
Requires-Dist: python-dotenv>=1.0
Requires-Dist: pyyaml>=6.0
Requires-Dist: rich>=13.7
Requires-Dist: typer>=0.12
Provides-Extra: all
Requires-Dist: anthropic>=0.34; extra == 'all'
Requires-Dist: mcp<3,>=1.2; extra == 'all'
Requires-Dist: openai>=1.40; extra == 'all'
Provides-Extra: anthropic
Requires-Dist: anthropic>=0.34; extra == 'anthropic'
Provides-Extra: audio
Requires-Dist: pydub>=0.25; extra == 'audio'
Provides-Extra: bedrock
Requires-Dist: boto3>=1.34; extra == 'bedrock'
Provides-Extra: dev
Requires-Dist: anthropic>=0.34; extra == 'dev'
Requires-Dist: build>=1.2; extra == 'dev'
Requires-Dist: cryptography>=42; extra == 'dev'
Requires-Dist: jsonschema>=4.18; extra == 'dev'
Requires-Dist: mcp<3,>=1.2; extra == 'dev'
Requires-Dist: openai>=1.40; extra == 'dev'
Requires-Dist: pandas>=2.0; extra == 'dev'
Requires-Dist: pyarrow>=14; extra == 'dev'
Requires-Dist: pyjwt>=2.8; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.6; extra == 'dev'
Provides-Extra: gemini
Requires-Dist: google-genai>=1.0; extra == 'gemini'
Provides-Extra: image
Requires-Dist: pillow>=10.0; extra == 'image'
Provides-Extra: jwt
Requires-Dist: cryptography>=42; extra == 'jwt'
Requires-Dist: pyjwt>=2.8; extra == 'jwt'
Provides-Extra: mcp
Requires-Dist: mcp<3,>=1.2; extra == 'mcp'
Provides-Extra: mcp2
Requires-Dist: mcp<3,>=2; extra == 'mcp2'
Provides-Extra: openai
Requires-Dist: openai>=1.40; extra == 'openai'
Provides-Extra: otel
Requires-Dist: opentelemetry-api>=1.20; extra == 'otel'
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.20; extra == 'otel'
Requires-Dist: opentelemetry-sdk>=1.20; extra == 'otel'
Provides-Extra: pdf
Requires-Dist: pypdf>=4.0; extra == 'pdf'
Provides-Extra: sign
Requires-Dist: cryptography>=42; extra == 'sign'
Provides-Extra: table
Requires-Dist: pandas>=2.0; extra == 'table'
Requires-Dist: pyarrow>=14; extra == 'table'
Provides-Extra: tokenizer
Requires-Dist: tiktoken>=0.7; extra == 'tokenizer'
Provides-Extra: vertex
Requires-Dist: google-cloud-aiplatform>=1.70; extra == 'vertex'
Description-Content-Type: text/markdown

# ReadyAgents Core

<!-- mcp-name: io.github.readyagentsdev/readyagents -->
ReadyAgents is a free, self-hosted Apache-2.0 local one-shot agent workflow engine plus MCP toolkit: clone it, bring your own keys; always-on packs are waitlisted and not for sale. **1.0** means every run can be recorded, replayed offline, forked, diffed, and frozen into a regression test — with a written stability contract.

Site: [readyagents.dev](https://readyagents.dev). Repo: [github.com/readyagentsdev/readyagents-core](https://github.com/readyagentsdev/readyagents-core).

Tried it? Open an [I-ran-this](https://github.com/readyagentsdev/readyagents-core/issues/new?template=i-ran-this.md) issue. We are not launching. We are listening.

This repository is the free core. You keep the provider account and the bill. Install with `pip install readyagentsdev`, or from this clone.

## 60-second start

Requires **Python 3.11–3.14** on Linux, macOS, or Windows. Current version is **2.0.1**. Install with `pip install readyagentsdev`, or from this clone.

```bash
git clone https://github.com/readyagentsdev/readyagents-core.git
cd readyagents-core
python -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -e .
readyagents run examples/calc_pipeline.yaml
readyagents runs list
readyagents doctor
```

`readyagents run examples/calc_pipeline.json` is the same graph.

Or from PyPI (the wheel does not ship `examples/`):

```bash
pip install readyagentsdev
readyagents new my-flow
```

HITL next: [docs/first-ten-minutes.md](docs/first-ten-minutes.md).

## What it does

- Define agent workflows as YAML or JSON (nodes + edges)
- Run **agent**, **tool**, **condition**, **transform**, **approval**, **parallel**, **include**, **foreach**, **a2a**, **memory**, and **code** nodes. Agent nodes may declare a `tools:` allowlist for a bounded tool-use loop.
- Persist after every node and **resume** a paused or failed run from the last successful node
- Inspect past runs: `readyagents runs list` / `show` / `replay` / `report` (local HTML)
- Record, replay offline, fork, diff, and freeze a run into an eval fixture ([time machine](docs/time-machine.md))
- Optional agent firewall: taint, tool policy, MCP pinning ([security model](docs/security-model.md), [policy](docs/policy.md)) — defence in depth, not a solution to prompt injection
- Scaffold a starter: `readyagents new my-flow` (`basic`, `approval`, `research`, `pipeline`, `review`, `foreach`, `agent-tools`, `gated`)
- Builtin tools with **zero extra servers**: `now`, `calc`, `json_get`, `list_dir`, `read_file`, `write_file`, optional `http_get`
- Small governed connector set (`rest`, `sql`, `object_storage`, `message`, `ingest`) plus `readyagents connectors` catalog — [connectors](docs/connectors.md)
- Optional [MCP](https://modelcontextprotocol.io) client and server (`readyagents mcp serve`, `readyagents mcp probe`) with official tasks and MRTR approvals
- Optional [A2A](docs/a2a.md) serve/probe and `type: a2a` delegation (0.3 JSON-RPC projection; remote content untrusted; not certification)
- Optional [memory](docs/memory.md) (`type: memory`, local JSON/SQLite, BM25, TTL/forget) — untrusted; delayed injection and scope escape first; not a quality claim
- Optional [sandboxed code](docs/code-sandbox.md) (`type: code`, subprocess default) — accident-grade isolation, not hostile-code-proof; no bundled container runtime
- Optional [output contracts](docs/guardrails.md) (`contract:` on a value-producing node) — declared schema and content rules, not a safety classifier
- Optional [multi-agent teams](docs/teams.md) (`type: team`) — closed members, engine-enforced stop, no routing-quality claim
- Optional [workflow studio](docs/studio.md) (`readyagents studio`) — loopback canvas and run inspector; YAML on disk stays the source of truth; not a hosted product
- Optional [model routing](docs/model-routing.md) (`routing:`, Gemini/Bedrock/Vertex extras, `readyagents models`) — declared policy, not quality inference; no-policy selection unchanged
- Optional [multimodal I/O](docs/multimodal.md) (`MediaPart`, `type: document`, `type: transcribe`, image/pdf/audio extras) — plumbing and governance, not extraction accuracy; text-only runs unchanged
- Optional [knowledge pipelines](docs/knowledge.md) (`type: ingest`, `readyagents knowledge`) — citations and freshness, not a retrieval-quality claim; plain memory writes unchanged
- Optional [data pipelines](docs/data-pipelines.md) (`type: table`, `type: classify`, `readyagents table`) — deterministic ops and remainder-only classify; not a warehouse; `json_get`/`foreach` defaults unchanged
- Optional [long-horizon waits](docs/long-horizon.md) (`type: wait`, `readyagents wake` / `event`) — lazy wake, no daemon; `waiting` ≠ `paused`; not a scheduler
- Optional [event triggers](docs/event-triggers.md) (`triggers:`, `readyagents triggers`) — core contract only, no listener in core; at-least-once plus idempotency, not exactly-once; loopback-default webhook
- Optional [agent skills](docs/agent-skills.md) (`type: skill`, `readyagents skills` / `agents-md`) — open SKILL.md format; untrusted instructions; sandbox scripts; not a marketplace
- Optional [workflow packaging](docs/packaging.md) (`readyagents package`) — review-before-install archives with policy, fixtures, and signature; signed static index; not a hosted marketplace
- Optional [simulation](docs/simulation.md) (`readyagents simulate`) — declaration-driven cases, honest coverage, dry-run default; not exhaustive, not a hosted simulator
- Optional [self-healing](docs/self-healing.md) (`readyagents health`, `recovery:`) — fingerprints and fail-safe gates; not prediction; not a hosted reliability service
- Optional [benchmark harness](docs/benchmarks.md) (`readyagents bench`) — offline cassettes, labelled engine vs live timing; not a model-quality or competitor ranking
- Optional [prompt optimization](docs/prompt-optimization.md) (`readyagents optimize`, `readyagents prompts`) — versioned prompts, offline reflective loop, gated promotion; not GEPA/DSPy parity; YAML that never optimizes is unchanged
- Optional [feedback export](docs/feedback.md) (`readyagents feedback export|stats`) — consent-gated corrections as eval/sft/dpo; not fine-tuning; not a hosted dataset
- Optional [governed browser use](docs/browser-use.md) (`type: browser`) — declared actions, allowlist, taint, offline replay; driver in an optional pack; no CAPTCHA solving; not a free-running browser agent
- Optional [conversational sessions](docs/conversational-sessions.md) (`type: converse`, `readyagents sessions`, `serve chat`) — turns are durable runs; loopback chat; no audio in core; not a hosted chat product
- Optional [environments and rollout](docs/environments.md) (`readyagents.env.yaml`, `run --env`, `promote`, `rollback`, `env status|history|diff`) — pinned signed releases, gated promote, canary/shadow, lazy rollback; not a hosted deploy
- Optional [migration importers](docs/migration.md) (`readyagents import`) — n8n / LangGraph / CrewAI / trigger-action; structural translation plus a fidelity report; never exec source Python; not behavioural equivalence
- Optional [agent registry](docs/registry.md) (`readyagents registry`) — inventory from declared roots; derived facts plus declared roles/tier; draft Annex VIII export, not a legal filing; not a hosted registry
- Optional [distillation](docs/distillation.md) (`readyagents distill`) — consented hashed splits, pack-owned training, holdout-gated one-node adapters; not a quality claim; core never trains
- Extra node types and tools via Python entry points (`readyagents.packs`)
- Per-node token/cost, budgets, `--estimate` / `--max-spend` caps, local spend ledger, model fallback, JSON logs
- External approval injection (`readyagents decide`) and outbound pause notify
- Secrets / RBAC / PII-redaction hooks and an append-only, hash-chained audit trail; `readyagents evidence` writes a local pack of a run — evidence, not legal compliance or certification ([compliance](docs/compliance.md))
- Pydantic `output_schema` on agent nodes; opt-in local LLM cache
- `readyagents.testing` helpers, recorded LLM mocks, and a tiny eval harness

## Architecture

```mermaid
flowchart LR
  YAML[Workflow YAML/JSON] --> Engine
  subgraph Core["ReadyAgents Core"]
    Engine[Workflow engine]
    Tools[Builtin tools]
    LLM[BYOK LLM providers]
    MCP[MCP client / server]
    Packs[Pack loader]
  end
  Engine --> Tools
  Engine --> LLM
  Engine --> MCP
  Packs --> Engine
  Packs --> Tools
  LLM --> OpenAI[OpenAI]
  LLM --> Anthropic[Anthropic]
  LLM --> Compat[OpenAI-compatible]
```

## CLI

| Command | Purpose |
| --- | --- |
| `readyagents init` | Write `.env` from `.env.example` if missing |
| `readyagents new [name] [--template basic\|approval\|research\|pipeline\|review\|foreach\|agent-tools\|gated]` | Scaffold workflow + README + `.env.example` + local JSON Schema |
| `readyagents import SOURCE PATH [--out DIR] [--explain SOURCE]` | Import n8n / LangGraph / CrewAI / trigger-action exports (structural translation only) |
| `readyagents validate PATH` | Schema-validate a workflow (source-located errors on failure) |
| `readyagents schema` | Print/write/check the generated workflow JSON Schema |
| `readyagents eval PATH` | Score a keyless fixture suite (exit 0/1) |
| `readyagents optimize PATH --eval SUITE` | Reflective prompt optimization against your eval suite (not a hosted optimizer) |
| `readyagents prompts list` / `show` / `history` / `diff` / `rollback` | Versioned prompts beside the workflow; rollback restores exactly |
| `readyagents env status` / `history` / `diff` / `deploy` | Declared environments and pinned releases (not a hosted deploy) |
| `readyagents registry scan` / `annotate` / `check` / `list` / `show` / `stats` / `card` / `export` | Local agent inventory from declared roots (not a hosted registry; Annex VIII export is a draft, not a filing) |
| `readyagents distill plan` / `dataset` / `train` / `evaluate` / `promote` | Local one-node adapters from consented runs (pack trains; holdout required; not a quality claim) |
| `readyagents promote PATH --from SRC --to DST` | Copy a source pin onto a target after eval/fixture/bench/health/approval gates |
| `readyagents rollback --env NAME` | Restore the previous release atomically; never auto-forwards |
| `readyagents feedback export` / `stats` | Consent-gated correction datasets (production data; not a hosted service) |
| `readyagents run PATH [--input KEY=VALUE] [--dry-run] [--approve NODE] [--reject NODE] [--decision-file FILE] [--actor NAME] [--pack PATH] [--policy PATH] [--estimate] [--max-spend USD] [--max-tokens N] [--label KEY=VALUE] [--sovereign] [--stream] [--env NAME]` | Execute (or `--estimate` without running). `--env` runs a pinned release. `--stream` is opt-in |
| `readyagents batch PATH --input-file FILE [--concurrency N] [--max-spend USD] [--out FILE]` | Foreground: one workflow, many JSONL/CSV rows (opt-in) |
| `readyagents attest RUN_ID` | Data-residency attestation (technical evidence, not legal compliance) |
| `readyagents bundle --out DIR` | Offline wheel set for `pip install --no-index --find-links` |
| `readyagents resume RUN_ID [--approve NODE] [--reject NODE] [--decision-file FILE] [--policy PATH]` | Resume a paused or failed run |
| `readyagents policy check PATH` | Validate a firewall policy file (fail closed) |
| `readyagents policy explain PATH [--policy PATH]` | Show which tools each node may call and why |
| `readyagents evidence RUN_ID [--out DIR]` | Local evidence pack (not a compliance certificate) |
| `readyagents audit verify [--file PATH]` | Walk the hash-chained audit trail |
| `readyagents spend [--since DATE] [--by day\|workflow\|model\|actor\|label]` | TokenOps: aggregate the local spend ledger (informational vs the provider invoice) |
| `readyagents graph PATH` | Deterministic Mermaid routing (executes nothing) |
| `readyagents decide RUN_ID [--file FILE \| --node ID --decision approve] [--token-file JWT] [--actor NAME] [--reason TEXT]` | Inject an approval; `--actor` stays the default, `--token-file` identifies |
| `readyagents approvals list [--role ROLE] [--actor NAME] [--expiring-within 1h]` | Queue of paused gates the caller may see |
| `readyagents delegate --from A --to B --until TS [--scope ROLE]` | Time-bounded, single-hop, revocable approval delegation |
| `readyagents delegations list \| revoke ID` | List or revoke local delegations |
| `readyagents identity verify --token-file JWT` | Verify an assertion against local trust anchors |
| `readyagents identity whoami` | Workload fingerprint (never the private key) |
| `readyagents runs list` | List persisted runs |
| `readyagents runs show RUN_ID` | Node timeline + stored state (`inspect` is an alias) |
| `readyagents runs report RUN_ID` | Local HTML summary of a run |
| `readyagents runs replay RUN_ID` | New run from stored inputs |
| `readyagents runs delete RUN_ID --yes` | Delete one local run record |
| `readyagents runs gc --yes` | Prune succeeded/failed/cancelled runs (paused kept; in-window records refused unless `--override-retention`) |
| `readyagents runs fork` / `diff` / `freeze` / `migrate` | Time machine: fork a run, diff two, freeze a cassette, migrate JSON→SQLite |
| `readyagents connectors list` / `show` / `test` | Small governed catalog (`rest`, `sql`, `object_storage`, `message`, `ingest`) — not 500 SaaS |
| `readyagents sign` / `verify` / `lock` / `sbom` / `trust` | Supply-chain: signatures prove origin, not safety |
| `readyagents approvals serve` | Foreground localhost approval page (not a hosted dashboard) |
| `readyagents studio [--port 8790] [--open] [--read-only]` | Foreground localhost canvas and run inspector (not a hosted product) |
| `readyagents models list` / `show` / `route --explain` | Dry model catalog and routing explain (no provider call) |
| `readyagents mcp serve` | Stdio MCP server (builtin tools); `--json` prints protocol versions |
| `readyagents mcp probe URL` | Read-only `server/discover` diagnostic (never calls a tool) |
| `readyagents a2a serve PATH` | Foreground A2A door for one workflow (loopback by default) |
| `readyagents a2a card PATH` | Deterministic Agent Card (no network) |
| `readyagents a2a probe URL` | Read-only remote card diagnostic (no secret values) |
| `readyagents memory list` / `show` / `search` / `forget` / `export` | Local scoped memory (offline except optional embeddings) |
| `readyagents packs [--pack PATH]` | List installed / local packs |
| `readyagents doctor` | Read-only platform / extras / permissions / loopback / run-store / sovereign diagnostic |
| `readyagents version` | Print version |

## Examples (no keys unless noted)

| File | What it shows |
| --- | --- |
| `examples/calc_pipeline.yaml` | Builtin tools, transform, condition |
| `examples/calc_pipeline.json` | Same graph as `calc_pipeline.yaml` |
| `examples/approval_gate.yaml` | Human-in-the-loop pause / resume |
| `examples/ollama_local.yaml` | Keyless loopback OpenAI-compat path (no live model) |
| `examples/quorum_gate.yaml` | Two-approver gate (keyless) |
| `examples/expiring_gate.yaml` | Lazy deadline, `on_expire: reject` (keyless) |
| `examples/multi_gate.yaml` | Two sequential approval gates |
| `examples/fanout_gate.yaml` | Parallel branches + approval |
| `examples/include_demo.yaml` | Sub-workflow `include` |
| `examples/composed_gate.yaml` | Include + parallel + approval |
| `examples/research_brief.yaml` | Agent node (needs a key) |
| `examples/support_triage.yaml` | Classify then branch (needs a key) |
| `examples/code_review.yaml` | `read_file` + review (needs a key) |
| `examples/agent_tools.yaml` | Agent `tools: [calc]` (needs a key; `--dry-run` is keyless) |
| `examples/foreach_calc.yaml` | Sequential foreach + `calc` (no keys) |
| `examples/policy_gated.yaml` | Policy gate on tainted `write_file` (no keys) |
| `examples/readyagents.policy.yaml` | Starter firewall policy |
| `examples/json_mutate.yaml` | `json_set` / `json_merge` (no keys) |
| `examples/table_pipeline.yaml` | `type: table` + `type: classify` (validate keyless) |
| `examples/list_dir.yaml` | Builtin `list_dir` (no keys, no MCP, no Node) |
| `examples/eval/pass.yaml` | Keyless `readyagents eval` fixture suite |
| `examples/a2a_delegate.yaml` | `type: a2a` dry-run (no network) |
| `examples/memory_triage.yaml` | `type: memory` write then search (keyless) |
| `examples/code_reshape.yaml` | `type: code` JSON in/out (keyless, subprocess) |
| `examples/batch_echo.yaml` | Keyless `readyagents batch` row echo (`batch_rows.jsonl` / `.csv`) |
| `examples/connector_rest.yaml` | Keyless `rest` connector against a local fixture |
| `examples/connector_demo.yaml` | Local `--pack` connector (`examples/packs/connector_pack.py`) |
| `examples/gated_write.yaml` | Approval then `write_file` (no keys) |
| `examples/env/echo.yaml` | Keyless env deploy + `run --env` (`examples/env/readyagents.env.yaml`) |

## Docs

- [Why ReadyAgents?](docs/why-readyagents.md)
- [Getting started](docs/getting-started.md)
- [First ten minutes](docs/first-ten-minutes.md)
- [Concepts](docs/concepts.md)
- [Configuration (BYOK)](docs/configuration.md)
- [Workflows](docs/workflows.md)
- [Authoring (JSON Schema, editors, located errors)](docs/authoring.md)
- [Connectors](docs/connectors.md) (small catalog; write-shaped ops gate by default)
- [Sovereign mode](docs/sovereign.md) (in-process egress refuse, not an OS sandbox)
- [Cost / TokenOps](docs/cost.md) (informational vs the provider invoice)
- [Time machine](docs/time-machine.md) (record / replay / fork / diff / freeze)
- [MCP](docs/mcp.md)
- [A2A](docs/a2a.md) (untrusted remote content; delegation can exfiltrate; not certification)
- [Memory](docs/memory.md) (untrusted; delayed injection and scope escape; not a quality claim)
- [Scale and batch](docs/scale.md) (opt-in; not a distributed worker; benchmarks are not a marketing claim)
- [Streaming](docs/streaming.md) (opt-in `--stream`; not audio)
- [Guardrails / output contracts](docs/guardrails.md) (opt-in `contract:`; declared rules, not a safety claim)
- [Multi-agent teams](docs/teams.md) (opt-in `type: team`; closed members; no quality claim)
- [Model routing](docs/model-routing.md) (opt-in `routing:`; declared policy, not a quality claim)
- [Multimodal I/O](docs/multimodal.md) (opt-in `MediaPart` / `type: document` / `type: transcribe`; extras; not an OCR claim)
- [Knowledge pipelines](docs/knowledge.md) (opt-in `type: ingest`; citations/freshness; not a retrieval-quality claim)
- [Data pipelines](docs/data-pipelines.md) (opt-in `type: table` / `type: classify`; not a warehouse)
- [Long-horizon waits](docs/long-horizon.md) (opt-in `type: wait`; lazy `wake`; not a scheduler)
- [Event triggers](docs/event-triggers.md) (opt-in `triggers:`; no listener in core; at-least-once plus idempotency)
- [Agent Skills](docs/agent-skills.md) (opt-in `type: skill`; open format; not a marketplace)
- [Governed browser use](docs/browser-use.md) (opt-in `type: browser`; declared actions; no CAPTCHA; optional pack)
- [Conversational sessions](docs/conversational-sessions.md) (opt-in `type: converse`; loopback `serve chat`; no audio in core)
- [Environments and rollout](docs/environments.md) (opt-in `readyagents.env.yaml`; pinned releases; gated promote; not a hosted deploy)
- [Migration](docs/migration.md) (opt-in `readyagents import`; structural translation only)
- [Agent registry](docs/registry.md) (opt-in `readyagents registry`; declared roots; draft Annex VIII, not a filing)
- [Distillation](docs/distillation.md) (opt-in `readyagents distill`; pack-owned training; holdout-gated adapters; not a quality claim)
- [Packaging](docs/packaging.md) (opt-in `readyagents package`; review-before-install; not a marketplace)
- [Simulation](docs/simulation.md) (opt-in `readyagents simulate`; not exhaustive; not a hosted simulator)
- [Self-healing](docs/self-healing.md) (opt-in `readyagents health` / `recovery:`; not prediction; not a hosted service)
- [Benchmarks](docs/benchmarks.md) (opt-in `readyagents bench`; offline cassettes; not a quality ranking)
- [Packs](docs/packs.md)
- [Supply-chain trust](docs/supply-chain.md) (signatures prove origin, not safety)
- [Continuous pack](docs/continuous-pack.md) (optional, separate distribution)
- [Platform support](docs/platform-support.md)
- [CLI](docs/cli.md)
- [Compliance evidence](docs/compliance.md) (Articles 12–14 mapping; not certification)
- [Observability](docs/observability.md)
- [Changelog](CHANGELOG.md)
- [Release notes 2.0.1](RELEASE_NOTES.md)

## Install extras

LLM and MCP extras are optional.

```bash
pip install "readyagentsdev[openai]"
pip install "readyagentsdev[anthropic]"
pip install "readyagentsdev[gemini]"
pip install "readyagentsdev[bedrock]"
pip install "readyagentsdev[vertex]"
pip install "readyagentsdev[mcp]"
pip install "readyagentsdev[all]"
pip install "readyagentsdev[image]"
pip install "readyagentsdev[pdf]"
pip install "readyagentsdev[audio]"
pip install "readyagentsdev[table]"
```

From a clone, the same extras are `pip install -e ".[openai]"` (and `anthropic` /
`gemini` / `bedrock` / `vertex` / `mcp` / `all`). The optional `[otel]` extra is
**not** included in `[all]`; it starts no collector (see
[observability.md](docs/observability.md)). The optional `[sign]` extra (Ed25519
artifact signatures), `[jwt]`, `[gemini]`, `[bedrock]`, `[vertex]`, `[image]`,
`[pdf]`, `[audio]`, and `[table]` extras are also **not** in `[all]`. Unsigned default runs
never import them. Codecs are extras; core installs stay text-only. Pandas is
optional for table ops; stdlib is sufficient.

Then `cp .env.example .env` and paste your own keys. Core workflows that only use builtin tools do **not** need extras, keys, or Node.js.

```bash
docker compose run --rm readyagents run examples/calc_pipeline.yaml
make smoke
```


## What is not in this repository

Always-on packs are waitlisted and not for sale.

Always-on / continuous workers are not in Core. The optional `readyagents-pack-continuous` distribution (separate repository, not a Core extra) can run configured workflows from an explicit foreground command. Installing Core still starts no scheduler or listener.

Hosted control plane. Hosted recovery and remote run stores. SSO, multi-tenant teams, billing.

The core has persist, resume, and approval pauses for a local one-shot. It does not run always-on.

## License

Apache License 2.0. See [LICENSE](LICENSE).

## Security

Please report vulnerabilities as described in [SECURITY.md](SECURITY.md). Public contact: [info@readyagents.dev](mailto:info@readyagents.dev). Do not commit API keys. Local operator files such as `.env` are gitignored.
