Amber is a compiler for shareable AI agent components. You write component manifests that describe containers, inputs, outputs, and wiring. Amber resolves and validates the manifest graph, then emits a runnable, reproducible scenario plus artifacts you can execute or inspect.
Amber is useful for benchmarking, RL rollouts, reproducible research experiments, and quick multi-agent prototyping.
- Inputs: a root component manifest (plus any referenced child manifests).
- Outputs: a linked scenario plus artifacts like Scenario IR JSON, Graphviz DOT, Docker Compose YAML, and offline bundles.
- Behavior: resolves manifests from local files and
https://URLs, validates structure and wiring, and produces deterministic, inspectable outputs.
Amber does not run your agents by itself. It compiles to artifacts that you can run in other environments like Docker Compose and Kubernetes.
- Component manifest: JSON5 file that describes one component: optional program container, optional network endpoints, and how it connects to others.
- Slots / provides: what a component needs (slots) and what it offers (provides).
- Bindings / exports: wiring between components, and what gets exposed to the parent.
- Scenario: the fully linked, validated graph produced by the compiler.
If you want the full schema and examples, run amber docs manifest. If you have the repo checked
out, the same content lives in manifest/README.md.
Amber is distributed as a prebuilt CLI binary or as a Docker image.
Download the latest artifact from the amber-publish workflow:
https://github.com/RDI-Foundation/amber/actions/workflows/publish.yaml?query=branch%3Amain
Pick the amber-cli-<platform>.tar.gz artifact, extract it, and run:
tar -xzf amber-cli-linux-amd64.tar.gz
./amber --helpIf you want amber on your PATH, move it into a directory that’s already on PATH.
docker run --rm -v "$PWD":/work -w /work ghcr.io/rdi-foundation/amber-cli:main --helpAmber compiles manifests. The fastest way to learn is to compile a tiny manifest pair and inspect the outputs.
mkdir -p amber-demo
cat > amber-demo/child.json <<'JSON'
{
"manifest_version": "0.1.0",
"program": {
"image": "python:3.11-alpine",
"entrypoint": ["python", "-m", "http.server", "8080"],
"network": { "endpoints": [{ "name": "http", "port": 8080 }] }
},
"provides": { "api": { "kind": "http", "endpoint": "http" } },
"exports": { "api": "api" }
}
JSON
cat > amber-demo/parent.json <<'JSON'
{
"manifest_version": "0.1.0",
"components": { "child": "./child.json" },
"exports": { "api": "#child.api" }
}
JSONThis is a small end-to-end example: a child component with a single HTTP capability and a parent that re-exports it.
amber check amber-demo/parent.json
amber compile amber-demo/parent.json --output /tmp/amber.scenario.json
amber compile amber-demo/parent.json --dot -If you're using the Dockerized CLI, replace amber with:
docker run --rm -v "$PWD":/work -w /work ghcr.io/rdi-foundation/amber-cli:mainamber compile amber-demo/parent.json \
--docker-compose /tmp/amber-compose.yaml
docker compose -f /tmp/amber-compose.yaml upThe Docker Compose output references the sidecar and helper images used to
enforce the wiring: ghcr.io/rdi-foundation/amber-sidecar:main and
ghcr.io/rdi-foundation/amber-compose-helper:v1. Docker Compose will pull them automatically;
if you're in a restricted environment, pre-pull them ahead of time.
amber compile path/to/root.json5 --output /tmp/scenario.jsonamber check path/to/root.json5amber compile path/to/root.json5 --bundle /tmp/amber-bundleIf you're working in this repo, these docs go deeper:
- Manifest format and examples:
manifest/README.md(oramber docs manifest) - CLI behavior and outputs:
cli/README.md - Compiler pipeline and reporters:
compiler/README.md - Scenario data model:
scenario/README.md - Manifest resolution (file/http) details:
resolver/README.md - Examples:
examples/
If you're building new components or integrating Amber into a larger system, start with the
minimal example above, run amber check, then iterate
until the compiler output matches the scenario you want to run.