AIEL Runtime adapter used by the Execution Plane to load and execute user projects.
Project description
AI Execution Layer Runtime (aiel-runtime)
aiel-runtime is the execution adapter used by the Execution Plane (EP) to load and run user projects from
immutable snapshots. It provides a stable, versioned runtime entrypoint that:
- loads a project snapshot (downloaded by EP from the Data Plane),
- imports
entry_point.py(registering exports viaaiel-sdkdecorators), - validates contracts (signatures, export consistency),
- executes exported handlers (tools / agents / flows / HTTP / MCP).
This repository is intentionally focused on runtime orchestration and invocation, not on developer ergonomics.
Developer-facing contracts live in aiel-sdk.
Why this exists
A production Execution Plane needs a deterministic way to execute user code that is:
- versioned (reproducible across time),
- contract-driven (predictable invocation shape),
- isolated (sandboxed by EP),
- observable (structured outputs and error taxonomy),
- portable (runs as a subprocess or container entrypoint).
aiel-runtime is that adapter.
Key features
- Single runner entrypoint:
python -m aiel_runtime.runner - Contract validation via
aiel-sdk - Deterministic execution with lockstep runtime/SDK versioning
- Describe + Invoke protocol (stdin JSON → stdout JSON)
- Snapshot-first execution model (EP controls downloads/caching)
- Designed for EP sandbox enforcement (CPU/memory/timeouts/network/secrets)
Repository layout (src-layout)
This repo uses a src/ layout to prevent accidental import shadowing and to support editable installs reliably.
Installation
Local development (editable)
python -m pip install -U pip
python -m pip install -e .
Production (pinned)
Pin versions for deterministic behavior:
python -m pip install "aiel-runtime==X.Y.Z"
Optional curated bundles (if your runtime image includes these):
python -m pip install "aiel-runtime[ai]==X.Y.Z"
Recommended policy: lockstep versions
aiel-runtime==X.Y.Zdepends onaiel-sdk==X.Y.Z.
Runtime entrypoint
The Execution Plane runs:
python -m aiel_runtime.runner
EP must provide:
- EP_FILES_ROOT: absolute path to a snapshot folder containing entry_point.py.
Example:
export EP_FILES_ROOT=/tmp/ep/snapshots/<tenant>/<project>/<release>/files
Snapshot expectations At minimum, the snapshot must contain:
- entry_point.py (required)
- any local modules imported by entry_point.py (e.g., tools/, agents/, mcp_server/)
A typical snapshot layout:
files/
entry_point.py
tools/
core.py
agents/
main.py
mcp_server/
core.py
requirements.txt # optional (runtime images should be pre-baked)
Dependency installation at runtime is intentionally not supported. Runtime images must include curated dependencies up-front.
Runner protocol (stdin → stdout)
aiel-runtime is a small JSON protocol engine.
Describe exports
stdin
{ "action": "describe" }
stdout
{
"ok": true,
"result": {
"sdk_version": "X.Y.Z",
"runtime_version": "X.Y.Z",
"tools": ["normalize_email"],
"agents": ["collect_personal_data"],
"flows": ["driver_onboarding"],
"http_handlers": [{"method":"POST","path":"/driver/onboard"}],
"mcp_servers": [{"name":"driver_support","tools":["lookup_existing_driver"]}]
}
}
Invoke an export
stdin
{
"action": "invoke",
"kind": "tool",
"name": "normalize_email",
"payload": {
"email": "Test@Example.com",
"name": "Test",
"ctx": {
"request_id": "req_123",
"tenant_id": "t_1",
"workspace_id": "w_1",
"project_id": "p_1"
}
}
}
stdout
{ "ok": true, "result": { "email": "test@example.com" } }
Error response
stdout
{
"ok": false,
"error": {
"message": "Tool not found: normalize_email",
"traceback": "..."
}
}
Execution model
Runtime load sequence:
- Reset registry (defensive against warm process reuse)
- Add EP_FILES_ROOT to sys.path
- Import entry_point (registers exports via decorators)
- Validate contracts (signatures and export invariants)
- Execute describe or invoke
Export kinds
Supported kind values (current):
tool— callable signature: tool(ctx, payload)agent— callable signature: agent(ctx, state)flow— callable signature: flow(ctx, input) OR graph_builder() returning a compiled graph with ainvoke- (
http,mcpare typically served by EP; runtime can expose metadata viadescribe)
EP is responsible for mapping HTTP/MCP requests into invoke payloads.
Versioning and compatibility
Runtime version
runtime_version identifies the runner behavior and dependency bundle.
SDK version
sdk_version identifies the contract surface expected by the user project.
Recommended compatibility policy:
aiel-runtime==X.Y.Zdepends onaiel-sdk==X.Y.Z- Data Plane manifest includes both
runtimeandsdk_version - EP allowlists
runtimevalues and uses (runtime,sdk_version,file hashes) for cache keys.
Security model
aiel-runtime assumes EP enforces isolation. At minimum, EP should provide:
- process/container isolation
- read-only snapshot filesystem
- strict CPU/memory/timeouts
- deny-by-default network egress (unless explicitly enabled)
- controlled secret injection via context (do not expose host env to user code)
Runtime performs defense-in-depth checks where practical (contract validation, error normalization). Hard security boundaries belong in EP.
Development
Run the runtime directly (fast local iteration)
This runs the same execution engine used by EP, but without auth and without the Data Plane. You point the runtime at a local folder that already contains the files.
1) Prerequisites
Your local folder must contain at least:
- entry_point.py (required)
- any modules imported by entry_point.py (e.g. tools/, agents/, mcp_server/)
my-project/
entry_point.py
tools/
core.py
agents/
main.py
2) Install runtime + SDK
python -m venv .venv
source .venv/bin/activate
python -m pip install -U pip
python -m pip install -U aiel-runtime aiel-sdk
If you use optional facades locally (LangGraph/LangChain/LangSmith), install extras. Important (zsh): quote extras:
python -m pip install -U "aiel-sdk[all]"
3) Run describe locally
From the project folder (where entry_point.py exists):
echo '{"action":"describe"}' | python -m aiel_runtime.runner --files-root "$PWD" --no-traceback
You should get something like: { "ok": true, "result": { "tools": ["..."], "agents": ["..."], "flows": ["..."], "http_handlers": [...], "mcp_servers": [...] } }
4) Invoke a tool locally
Create a request inline:
cat > req.json <<'JSON'
{"action":"invoke","kind":"tool","name":"persist_driver_profile","payload":{"email":"a@b.com","name":"Aldenir"}}
JSON
python -m aiel_runtime.runner --files-root "$PWD" < req.json
Common troubleshooting
zsh: no matches found: aiel-sdk[all]
Use quotes:
python -m pip install "aiel-sdk[all]"
entry_point.py not found
Make sure you run from the folder that contains entry_point.py, or pass the correct path:
python -m aiel_runtime.runner --files-root /path/to/project
Import errors (e.g. No module named ...)
Install the required packages in the same venv, or use an EP runtime bundle that includes them.
ModuleNotFoundError: aiel_sdk
- Ensure your runtime environment has aiel-sdk installed.
- Prefer installing aiel-runtime (which should depend on the correct aiel-sdk).
Missing integrations (LangGraph / LangChain / LangSmith)
- Ensure runtime image includes the curated dependency bundle (aiel-runtime[ai]) or explicit deps.
Registry leakage between invocations
- Ensure registry is reset per load (runtime does this by default).
- EP should avoid reusing a single Python process across unrelated tenants/projects unless explicitly designed.
Registry leakage between invocations
- Ensure registry is reset per load (runtime does this by default).
- EP should avoid reusing a single Python process across unrelated tenants/projects unless explicitly designed.
Testing
Recommended minimal tests:
- load snapshot → describe exports
- invoke tool/flow happy path
- contract violation errors are clear
- missing dependency errors are clear
- registry resets properly
Example (pytest):
python -m pip install -U pytest
pytest -q
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 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 aiel_runtime-0.2.2.tar.gz.
File metadata
- Download URL: aiel_runtime-0.2.2.tar.gz
- Upload date:
- Size: 13.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29a6c31b346d024f45acc38ff57b4776a9a2e7d8cbc6ebcd8f8bc59a4856dbbb
|
|
| MD5 |
b971bd8494a2863159414be9485cb108
|
|
| BLAKE2b-256 |
24682c60820ccebfe00344520bf15e8b2338d3910df119936f0eca84f9517e29
|
Provenance
The following attestation bundles were made for aiel_runtime-0.2.2.tar.gz:
Publisher:
publish.yml on aldenirsrv/AI_EXECUTION_LAYER_RUNTIME
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aiel_runtime-0.2.2.tar.gz -
Subject digest:
29a6c31b346d024f45acc38ff57b4776a9a2e7d8cbc6ebcd8f8bc59a4856dbbb - Sigstore transparency entry: 819858534
- Sigstore integration time:
-
Permalink:
aldenirsrv/AI_EXECUTION_LAYER_RUNTIME@6bfa35890c3a42915cc66bdc758acb914c1eb5c1 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/aldenirsrv
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6bfa35890c3a42915cc66bdc758acb914c1eb5c1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file aiel_runtime-0.2.2-py3-none-any.whl.
File metadata
- Download URL: aiel_runtime-0.2.2-py3-none-any.whl
- Upload date:
- Size: 19.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f821ed68bac74f321fc61e35bc4ee5c744d003b0559bc038daa6b24f8a26554f
|
|
| MD5 |
5441daa08602fff460808603d75e5c0b
|
|
| BLAKE2b-256 |
6cfc91f6004d389b213091805b77dbd82ca65f59a420cebc2858a485512c5b8c
|
Provenance
The following attestation bundles were made for aiel_runtime-0.2.2-py3-none-any.whl:
Publisher:
publish.yml on aldenirsrv/AI_EXECUTION_LAYER_RUNTIME
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aiel_runtime-0.2.2-py3-none-any.whl -
Subject digest:
f821ed68bac74f321fc61e35bc4ee5c744d003b0559bc038daa6b24f8a26554f - Sigstore transparency entry: 819858545
- Sigstore integration time:
-
Permalink:
aldenirsrv/AI_EXECUTION_LAYER_RUNTIME@6bfa35890c3a42915cc66bdc758acb914c1eb5c1 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/aldenirsrv
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6bfa35890c3a42915cc66bdc758acb914c1eb5c1 -
Trigger Event:
push
-
Statement type: