Aether — AI-native pipeline language and kernel
Project description
Aether
A deterministic orchestration language for AI agents.
LLM agents fail silently, run code with no safety model, and produce pipelines that are impossible to audit. Aether is an intermediate representation (IR) that gives AI-generated pipelines verifiable intent, typed outputs, and compile-time safety gates — without replacing the guest languages (Python, JS, shell) your nodes already use.
"Intent is Compilation."
How it works
You write (or generate) a .ae program describing a pipeline as a directed acyclic graph of typed nodes. Each node declares what it does (_intent), what safety level it requires (_safety), what it reads (::IN), what it writes (::OUT), and what must be true after it runs (::VALIDATE). The Aether kernel executes the DAG, enforces safety gates, validates outputs, and — if a node fails — optionally calls an LLM to repair the code and retry.
§ROOT 0xFF_MAIN {
§ACT 0x1A {
::META { _intent: "fetch active users", _safety: "read_only" }
::EXEC<PYTHON> {
import urllib.request, json
return json.loads(urllib.request.urlopen("https://api.example.com/users").read())
}
::OUT { $0xUSERS: Type<JSON> }
}
§ACT 0x2B {
::META { _intent: "filter to adults only", _safety: "pure" }
::IN { $0xSRC: Ref($0xUSERS) }
::EXEC<PYTHON> {
return [u for u in $0xSRC if u["age"] >= 18]
}
::OUT { $0xADULTS: Type<JSON> }
::VALIDATE { ASSERT len($0xADULTS) >= 0 OR HALT }
}
}
Or use Aether-Short (.as) for ~60% fewer lines:
@pipeline 0xFF_MAIN
$0xUSERS: JSON = @std.io.net_get() {
import urllib.request, json
return json.loads(urllib.request.urlopen("https://api.example.com/users").read())
}
$0xADULTS: JSON = @std.proc.list.filter($0xUSERS) {
return [u for u in $0xUSERS if u["age"] >= 18]
} | ASSERT len($0xADULTS) >= 0 OR HALT
@end
Why not just write Python?
| Raw Python / LangGraph | Aether | |
|---|---|---|
| Safety model | None | L0–L4 compile-time gates |
| Typed outputs | Runtime duck typing | Declared + validated at write time |
| Audit trail | Manual logging | Automatic output.ae.json with full node traces |
| Self-healing | Manual try/except | ASSERT ... OR RETRY(3) — LLM repairs the node |
| LLM generation cost | 715–1,225 tokens (LangGraph/AutoGen) | 415 tokens (3-node baseline) |
| Runtime LLM calls | 0 (LangGraph) — 6,200 (AutoGen) | 0 for deterministic pipelines |
See docs/benchmark.md for the full token-cost comparison.
Features
- 5-tier safety model — L0 (pure math) → L4 (system root). Nodes above your threshold are blocked before execution.
- Typed state ledger — outputs are written to an immutable address space (
$0xADDR) with type validation on every write. - Parallel DAG execution — independent nodes run concurrently via
tokio::spawn; dependencies resolved with Kahn's topological sort. - ASL registry — 32 canonical intents (
std.io.*,std.proc.*,std.ml.*,std.sec.*, etc.) with safety and language defaults. - Self-healing RETRY —
ASSERT expr OR RETRY(3)sends failing code + assertion to Claude for repair. Requires your ownANTHROPIC_API_KEY. - English Toggle —
aether gen "description"turns plain English into a.aeprogram via Claude. Requires your ownANTHROPIC_API_KEY. - MCP server —
aether-mcpexposes validate/execute/inspect as tools for Claude Code and other MCP-compatible clients. - REST API —
aether-apiruns on port 3737 for integration with LangChain, AutoGen, n8n, or any HTTP client. - Aether Lens — a standalone DAG visualizer (
lens/index.html) that renders anyoutput.ae.jsonexecution log.
Installation
# Option 1: pip (recommended — no Rust required)
pip install aether-kernel
# Option 2: Pre-built binary
curl -fsSL https://raw.githubusercontent.com/baiers/aether/main/install.sh | bash
# Option 3: Build from source
cargo build --release
Quick Start
# Run a pipeline
aether examples/demo.ae
# Expand Aether-Short to inspect generated .ae
aether examples/pipeline.as --expand-only
# Run with a higher safety threshold (allow network calls)
aether examples/demo_showcase.ae --safety l3
# Self-healing (requires ANTHROPIC_API_KEY)
ANTHROPIC_API_KEY=sk-... aether examples/self_heal_demo.ae
# Generate a .ae program from plain English
ANTHROPIC_API_KEY=sk-... aether gen "fetch the top 10 HN stories and summarize each one"
# Start the REST API
aether-api # → http://localhost:3737
# Start the MCP server (for Claude Code integration)
aether-mcp
Claude Code / MCP Integration
Add to your MCP config (~/.claude/mcp_config.json):
{
"mcpServers": {
"aether-kernel": {
"command": "aether-mcp",
"args": []
}
}
}
Claude can then call aether_validate, aether_execute, and aether_inspect directly.
Project Structure
src/ Rust kernel (parser, executor, ASL registry, self-healing, MCP, REST API)
asl/ ASL registry — 32 canonical intents (JSON)
examples/ Runnable .ae and .as programs
spec/ Formal EBNF grammar and type system docs
docs/ Whitepaper, benchmark paper, kernel manual
lens/ Aether Lens DAG visualizer (standalone HTML, no build step)
sdk/ LLM system prompt, MCP config, audit prompt
benchmark/ LangGraph / AutoGen equivalents + token counting scripts
python/ pip-installable wrapper (aether-kernel)
What's Included (Community — Free, Apache 2.0)
| Feature | |
|---|---|
| Parser, AST, topological executor | ✓ |
| 5-tier safety model (L0–L4) | ✓ |
| ASL registry (32 canonical intents) | ✓ |
| Aether-Short (.as) notation | ✓ |
Self-healing RETRY (your ANTHROPIC_API_KEY) |
✓ |
English Toggle aether gen (your ANTHROPIC_API_KEY) |
✓ |
| MCP server for Claude Code | ✓ |
| REST API | ✓ |
| Aether Lens DAG visualizer | ✓ |
Aether Pro — hosted execution, managed LLM calls (no API key needed), extended ASL (200+ intents), persistent history. Learn more →
License
Licensed under the Apache License 2.0.
See docs/open-core.md for the Community vs Pro vs Enterprise breakdown.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
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 aether_kernel-0.3.0-py3-none-win_amd64.whl.
File metadata
- Download URL: aether_kernel-0.3.0-py3-none-win_amd64.whl
- Upload date:
- Size: 6.3 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae379f2fd247d69d8b0292b2b25e1819ff277045b23f803597cd06f8e5db849a
|
|
| MD5 |
fda898620e83df4e1c5871dc9b6106a4
|
|
| BLAKE2b-256 |
596c481efa99d9b274d24087e1aea365dbde5e8a78477f15eb65635bbfc79ef1
|
File details
Details for the file aether_kernel-0.3.0-py3-none-manylinux_2_17_x86_64.whl.
File metadata
- Download URL: aether_kernel-0.3.0-py3-none-manylinux_2_17_x86_64.whl
- Upload date:
- Size: 13.9 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8a711bdc766009b9ffa146e89892a276bab5fa0705fede202e835b21084ea52c
|
|
| MD5 |
096d840ffb12ec18d29bd8ac3c05b2e8
|
|
| BLAKE2b-256 |
40f90ca968cbd4f8b06aa7f9db38c7fe0cea6964d921796849a89466b1a5c898
|
File details
Details for the file aether_kernel-0.3.0-py3-none-macosx_14_0_arm64.whl.
File metadata
- Download URL: aether_kernel-0.3.0-py3-none-macosx_14_0_arm64.whl
- Upload date:
- Size: 13.9 MB
- Tags: Python 3, macOS 14.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c06b237263ccf01fd34d365ed0cfd4bf3baaedcc90867f9d61ddbd8f4f56713d
|
|
| MD5 |
82f0a4937a264c42faa44b590e10bbc8
|
|
| BLAKE2b-256 |
19cafd08af30c69c2db4124e7adccc044d1aded2bdd5bd9a9a1794a7f1f3e2de
|
File details
Details for the file aether_kernel-0.3.0-py3-none-macosx_13_0_x86_64.whl.
File metadata
- Download URL: aether_kernel-0.3.0-py3-none-macosx_13_0_x86_64.whl
- Upload date:
- Size: 13.9 MB
- Tags: Python 3, macOS 13.0+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
14d4259f85414004f54f4f0dc3284567fd5165a5ed5de05c8154cdfb8f755d96
|
|
| MD5 |
b92c2849f4aa677461d3b4eda8b10a0f
|
|
| BLAKE2b-256 |
6b92ceea40f3f3906ae4f4d0b38a5a55b7e9bc89058f02d3a2c778f7e8323d65
|