This project has been archived by its maintainers, and is no longer receiving any updates.
Agentic Cyber Environment System
Agentic Cyber Environment System (ACES) is a backend-agnostic scenario description language, Python reference implementation, and contract surface for cyber range scenarios and experiments.
The repository separates authored scenario meaning from processors, backends, participant implementations, runtime state, and archived evidence. In the current implementation, an SDL document can be parsed, validated, instantiated, compiled into runtime models, and checked against published backend contracts without binding the authored scenario to one cloud, range implementation, or execution harness.
This is an academic and engineering project. The repository is intended to be read, tested, and used as reference implementation code, not treated as a product surface.
The repository is not a managed cyber range and does not include a production backend. Backend contracts, stubs, conformance checks, and examples are present; real deployment backends remain separate implementations.
A worked example of ACES SDL driving a concrete range is APTL (Advanced Purple Team Lab), a separate project that specifies its scenarios as ACES SDL documents and realizes the selected topology on a Docker Compose backend.
Contents
- What ACES SDL Describes
- Getting Started
- Using the Python Reference Implementation
- Repository Layout
- Lineage
- Documentation
- Verification
- Contributing
- Versioning
- Citation
- License
- Maintainer
What ACES SDL Describes
An SDL file is a declarative scenario document. It can describe topology, hosts, services, identities, content, relationships, agents, objectives, workflows, variables, and evaluation material without directly describing a specific backend's infrastructure primitives.
name: hospital-ransomware-surgery-day
description: Surgery-day ransomware exercise for a regional hospital.
variables:
surgery_day_speed:
type: number
default: 1.0
nodes:
internet-edge:
type: Switch
description: Public ingress for email, VPN, and external access
mail-gateway:
type: VM
os: linux
source: secure-mail-gateway
resources: {ram: 2 gib, cpu: 1}
services:
- {port: 25, name: smtp-inbound}
roles: {mail-admin: postfix}
Complete examples live in examples/scenarios/.
Reusable non-normative templates and patterns are indexed by
examples/library/catalog.yaml.
Getting Started
Prerequisites:
- Python 3.11 or newer
- uv
- nox for the repository verification graph, or
uvx noxwithout a separate install
Set up the Python reference implementation:
git clone https://github.com/Brad-Edwards/aces.git
cd aces/implementations/python
uv sync --all-extras
uv run aces --help
Using the Python Reference Implementation
Parse and validate a scenario from Python:
from pathlib import Path
from aces_sdl import parse_sdl_file
scenario = parse_sdl_file(
Path("../../examples/scenarios/hospital-ransomware-surgery-day.sdl.yaml")
)
for advisory in scenario.advisories:
print(advisory)
Run the CLI from implementations/python:
uv run aces sdl resolve ../../examples/scenarios/hospital-ransomware-surgery-day.sdl.yaml
uv run aces sdl verify-imports ../../examples/scenarios/hospital-ransomware-surgery-day.sdl.yaml
uv run aces sdl publish ../../examples/scenarios/hospital-ransomware-surgery-day.sdl.yaml
uv run aces processor --help
uv run aces conformance --help
uv run aces-mcp
Repository Layout
specs/- normative prose and formal specification materialcontracts/- published schemas, fixtures, manifests, and profilesimplementations/- reference implementations and their local toolingexamples/- worked SDL scenario examples plus reusable authoring templates and patternsdocs/- explanatory documentation, API docs, and architecture decisionsresearch/- supporting literature and reference ecosystem materialtools/- repository maintenance, policy, and publication tooling
Lineage
- Open Cyber Range SDL
- Open Cybersecurity Schema Framework
- CACAO Security Playbooks v2.0
- STIX 2.1
- CybORG
- TENA
- IEEE High Level Architecture
- SISO Cyber DEM
- SISO Cyber FOM
- MITRE CALDERA
- Atomic Red Team
For a dimension-by-dimension comparison against these systems — what ACES expresses that they do not, and where they still lead ACES — see Related-Work Comparison.
Documentation
The documentation source is under docs/. Important entry points:
docs/index.md- documentation indexdocs/explain/getting-started.md- use-case and rigor-level entrypointexamples/README.md- current worked example inventoryexamples/library/catalog.yaml- template and pattern library catalogdocs/explain/reference/canonical-reference-map.md- current reference mapdocs/explain/reference/documentation-style-guide.md- documentation style and citation rulesdocs/explain/reference/glossary.md- current terminologydocs/explain/sdl/index.md- SDL guidedocs/explain/sdl/runtime-architecture.md- runtime architecturedocs/explain/reference/backend-conformance.md- backend conformance modeldocs/decisions/adrs/README.md- architecture decisionscontracts/README.md- contract publication surface
Verification
nox is the canonical verification graph. From the repository root:
uvx nox -s verify
uvx nox -s tests
uvx nox -l
The full verify session runs the project checks expected for pull requests,
including repository policy, generated artifact checks, tests, and docs.
Contributing
Contributions are welcome where they improve the language, reference implementation, contracts, tests, examples, or documentation. Start with CONTRIBUTING.md.
Language and contract changes should be discussed before implementation because small SDL changes can affect validation, generated schemas, backend conformance, and existing scenario examples.
Versioning
The Python package version lives in
implementations/python/pyproject.toml
and is bumped by release-please
from the Conventional Commit history on main, which also generates
CHANGELOG.md. Do not hand-edit the version or CHANGELOG.md. See
docs/explain/releasing.md.
Published JSON Schemas use versioned contract identifiers such as
sdl-authoring-input-v1, but the suffix is not the same as a stability promise.
The authoritative schema publication manifest records each schema's draft or
stable stability class and canonical content hash. Current checked-in schemas
are draft until a maintainer explicitly promotes them; stable breaking changes
must mint a new schema version as described in
ADR-061.
Maintainers
- Brad Edwards — Personal GitHub, PANW GitHub, LinkedIn
Citation
If you use ACES SDL in academic work, cite the repository:
@software{aces_sdl,
author = {Edwards, Brad},
title = {ACES SDL: Backend-Agnostic Scenario Description Language for Cyber Range Experiments},
year = {2026},
license = {MIT},
url = {https://github.com/Brad-Edwards/aces}
}
License
Released under the MIT License. See LICENSE. Third-party attribution and license notices are recorded in THIRD_PARTY_NOTICES.md.
Metadata
Release files for aces-sdl 0.23.1
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 |
|---|---|---|---|---|
| aces_sdl-0.23.1.tar.gz | 1.7 MB | With provenance | Details for aces_sdl-0.23.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| aces_sdl-0.23.1-py3-none-any.whl | Python 3 | none | any | Details for aces_sdl-0.23.1-py3-none-any.whl |
Total release size: 3.1 MB
Release files / aces_sdl-0.23.1.tar.gz
| Download URL | aces_sdl-0.23.1.tar.gz |
|---|---|
| Size | 1.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0a53f680c5b2420554cc3f6053ba64d0f4ef919a73337ab060f5dc283295bc0d
|
|
BLAKE2b-256 checksum How to use checksums |
b371c3923fc8713fbab0baf779c902ac82a6030793e98e1219eec0f35e0a321e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 Jul 17, 2026.
Transparency logRelease files / aces_sdl-0.23.1-py3-none-any.whl
| Download URL | aces_sdl-0.23.1-py3-none-any.whl |
|---|---|
| Size | 1.5 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
86f5e99d2dff009fe7165bbe8853f6fdf5a41074e7813f2e38e092910c1147a1
|
|
BLAKE2b-256 checksum How to use checksums |
c2b477b40bb8214385c243d187d04614175b0f1a162ec7183a5143c016c06be6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 Jul 17, 2026.
Transparency logSecurity for aces-sdl 0.23.1
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 aces_sdl-0.23.1.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 Jul 17, 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.