Organize competition submission files
Agent-Oriented Operating System Runtime:让 Agent 的执行可以被调度、隔离、提交、恢复和复核。
A²OS 是运行在 Linux/openEuler 上的多智能体执行底座。上层框架负责描述 Agent、Prompt 和任务图,A²OS 负责处理它们落到真实系统后共同面对的问题:谁先运行、可以使用多少资源、如何共享上下文、怎样合并并发副作用、如何隔离不可信进程,以及故障后如何得到可验证的终态。
A²OS 不替代 LangGraph、AutoGen、CrewAI 等编排框架,也不托管大模型。它位于这些框架与操作系统之间,通过 Rust Runtime、Python SDK 和版本化 JSONL 协议提供统一的执行环境。
Agent 应用 / Workflow / LangGraph / AutoGen / CrewAI │ Python SDK / Adapter / JSONL v1 │ ▼ ┌────────────────────────── A²OS Runtime ──────────────────────────┐ │ Router & Replay Ledger │ ├────────────┬────────────┬────────────┬────────────────────────────┤ │ Lifecycle │ Scheduler │ Workflow │ Execution & Supervision │ ├────────────┼────────────┼────────────┼────────────────────────────┤ │ Context │ A²Tx │ IPC │ LLM Gateway & Telemetry │ ├────────────┴────────────┴────────────┴────────────────────────────┤ │ cgroup v2 · namespace · seccomp · process group · memfd/mmap │ └────────────────────────────────┬─────────────────────────────────┘ ▼ Linux / openEuler
多智能体框架通常已经能表达角色、依赖和对话,但应用层并不适合独自解决所有系统问题。
Runtime 使用状态机管理 Agent 的注册、就绪、运行、阻塞、完成、失败和注销。任务只有取得有期限且绑定执行主体的 RunPermit 后才能运行。后台 Dispatcher 结合依赖、优先级、MLFQ、组间 WFQ 和资源压力选择任务;工具等待结束后,任务可以重新进入就绪队列。
RunPermit
Python SDK 和 Rust Runtime 共享 Workflow Schema。Runtime 原子编译 DAG,执行并行任务、动态任务、Retry、FailFast 和补偿策略。spawn、exit、timeout、cancel 等过程事实最终进入同一终态提交路径,避免重复完成、丢失唤醒和永久等待。
Context 由 Runtime 维护,而不是散落在各个 Agent 的本地内存中。子分支只复制被修改的页面,父子和兄弟分支可以基于 fork snapshot 做三方合并。内容寻址、引用计数、Hot/Warm/Cold 分层、checkpoint 与 WAL 用于降低复制开销并支持重启恢复。
每个 Agent 在独立分支中产生 ContextRead、ContextWrite、FileWrite、MessageSend、ToolCall、NetworkCall 等 Effect。Runtime 根据版本、读写集合、文件哈希、消息语义和可逆性构建冲突图,再生成带 plan hash、graph hash 和 base epoch 的提交信封。
ContextRead
ContextWrite
FileWrite
MessageSend
ToolCall
NetworkCall
plan hash
graph hash
base epoch
提交过程采用 prepare、stage、validate、apply、finalize 五阶段协议。发生崩溃后,恢复结果只能是完整旧状态或完整新状态,不会留下部分应用的混合工作区。
A²OS 管理真实子进程和进程组,并可使用 cgroup v2 限制 CPU、内存和 PID。Formal 路径进一步要求 no_new_privs、seccomp 以及 user、net、mount、ipc、uts namespace。
no_new_privs
user
net
mount
ipc
uts
Formal 结论不依赖配置自报:有效 execution receipt 必须包含真实 pid > 0 和实际验证得到的 isolation_status。Runtime 会读取系统事实逐项确认隔离;缺少委托、PID 或任一必要能力时直接失败。
pid > 0
isolation_status
控制面使用 Unix Domain Socket 上的版本化 JSONL 协议,包含请求标识、帧限制、幂等重放和结构化错误。大数据面支持 memfd、mmap 环形缓冲、eventfd 与 Unix FD 传递。执行完成事件可通过持久事件流通知客户端,避免高频轮询。
memfd
mmap
eventfd
可信 LLM Gateway 使用长连接池访问 OpenAI-compatible API,并把外部模型调用与 sandbox worker 隔开。API Key 只存在于可信 Runtime/Gateway 或场景父进程的内存与环境中;不可信 worker 只接收任务输入或预生成补丁,不读取密钥,也不在工作区创建密钥文件。
Runtime 对超时、SIGKILL、spawn 失败和取消提供统一收据与清理。Context 和 A²Tx 使用 journal 恢复持久状态。实验与发布工具可以记录:
基础开发环境需要:
1.96.0
rust-toolchain.toml
make
pkg-config
Node.js、Playwright、Clang/LLVM、eBPF 工具和 cargo-deny 只在运行相应 Web、诊断或供应链检查时需要。Formal 模式还需要 cgroup v2 delegation、cpu memory pids controller、user namespace 和 seccomp。
cargo-deny
cpu memory pids
openEuler 24.03 的基础系统包:
sudo dnf install -y \ git gcc gcc-c++ make pkgconf \ python3 python3-devel python3-pip \ util-linux
Ubuntu/Debian 的等价基础包:
sudo apt-get update sudo apt-get install -y \ git build-essential pkg-config \ python3 python3-dev python3-venv python3-pip \ util-linux
需要 eBPF 构建或诊断时再安装 Clang/LLVM、libelf、zlib 和可选的 bpftool;需要 Web 测试时再安装 Node.js 18+、npm 和 Playwright Chromium。
bpftool
git clone https://github.com/Tekeli-Li-123/A2OS-public.git A2OS cd A2OS/src/a2os-rust python3 -m venv .venv source .venv/bin/activate python -m pip install --upgrade pip python -m pip install -r requirements-dev.lock.txt python -m pip install --no-deps -e ./a2os-sdk cargo build --workspace --locked
仓库以以下文件作为依赖版本真源:
Cargo.lock
requirements-dev.in
requirements-dev.lock.txt
web-tests/package-lock.json
在第一个终端中:
cd A2OS/src/a2os-rust source .venv/bin/activate mkdir -p /tmp/a2os-quickstart ./target/debug/a2os-runtime \ --socket /tmp/a2os-quickstart/runtime.sock \ --quick
在第二个终端运行 SDK 冒烟场景:
cd A2OS/src/a2os-rust source .venv/bin/activate python scripts/smoke_sdk_runtime.py \ --socket /tmp/a2os-quickstart/runtime.sock
该场景覆盖连接、Agent 注册与状态迁移、调度、CoW Context、消息通信和注销。完成后在第一个终端按 Ctrl-C 停止 Runtime。
Ctrl-C
import asyncio from a2os import RuntimeClient, RuntimeConfig async def main() -> None: client = RuntimeClient( RuntimeConfig( unix_path="/tmp/a2os-quickstart/runtime.sock", timeout=5.0, enable_recv_thread=False, ) ) await client.connect() try: print(await client.raw({"cmd": "ping"})) finally: await client.disconnect() asyncio.run(main())
Agent、Workflow、Transaction、Workspace 和 Effect API 见 Python SDK 文档。
以下命令均从 src/a2os-rust 目录执行。
src/a2os-rust
基础质量检查:
cargo fmt --all -- --check cargo clippy --workspace --all-targets --locked -- -D warnings cargo test --workspace --locked -- --test-threads=1 python -m compileall a2os-sdk benchmarks scenarios scripts acceptance python -m ruff check a2os-sdk benchmarks scenarios scripts acceptance PYTHONPATH=a2os-sdk python -m pytest -q a2os-sdk/tests PYTHONPATH=a2os-sdk python -m pytest -q scripts/tests PYTHONPATH=a2os-sdk python -m pytest -q \ acceptance/tests -m "not formal and not live_llm"
统一验证入口:
verify_dir="$(mktemp -d /tmp/a2os-verify.XXXXXX)" python scripts/verify_all.py \ --profile release \ --mode quick \ --output-dir "$verify_dir" \ --no-latest-update
verify_all.py 支持 a0–a8 与 release profile,以及 baseline、quick、complete 三种深度。它输出机器可读结果、Markdown 摘要和清理检查;某次运行的通过数量不作为 README 的固定能力声明。
verify_all.py
a0
a8
release
baseline
quick
complete
Formal 不是普通开发模式的别名。运行用户必须处于真实的 cgroup v2 委托边界中,并能在空的 A²OS 子树下创建 leaf cgroup、写入 PID 以及设置 cpu.max、memory.max、pids.max。
cpu.max
memory.max
pids.max
先检查主机基础能力:
test "$(stat -fc %T /sys/fs/cgroup)" = "cgroup2fs" unshare -Ur true unshare -Urnmiu true
推荐由带 Delegate=yes 的专用 systemd service 将 cgroup 子树委托给运行 A²OS 的非 root 用户。不要把 /sys/fs/cgroup、systemd 管理的 service 根节点或存在其他进程的 cgroup 直接用作 A²OS 子树。
Delegate=yes
/sys/fs/cgroup
export A2OS_CGROUP_BASE=/sys/fs/cgroup/<delegated-service>/a2os bash scripts/formal_capability_check.sh formal_dir="$(mktemp -d /tmp/a2os-formal.XXXXXX)" PYTHONPATH=a2os-sdk python scripts/verify_all.py \ --profile release \ --mode complete \ --formal \ --output-dir "$formal_dir" \ --no-latest-update
Formal 验收采用 fail-closed 语义:缺少基础能力、实际隔离证据、必要步骤、结果回读或完整清理时不会降级为“通过”。证据目录应放在源码树外;不要使用 git clean 或 reset 制造 clean-worktree 结果。
git clean
仓库提供由多个角色协作完成代码分析、补丁生成、故障重试、冲突审查、A²Tx apply 和最终测试的 Real-SWE 场景。Live Formal 运行需要可用的 cgroup 委托、网络和 DeepSeek API Key:
cd A2OS/src/a2os-rust source .venv/bin/activate export A2OS_LLM_API_KEY='<deepseek-api-key>' ./run_live_formal.sh unset A2OS_LLM_API_KEY
Real-SWE provider 可通过 A2OS_LLM_API_URL 覆盖完整的 Chat Completions 地址;使用 Runtime LLM Gateway 的应用则通过 A2OS_LLM_BASE_URL 和 A2OS_LLM_MODEL 选择兼容服务。不要把 Key 写入 .env、Runtime 配置、命令行参数、工作区、日志或证据包;正式部署应使用密钥管理器向可信进程注入。
A2OS_LLM_API_URL
A2OS_LLM_BASE_URL
A2OS_LLM_MODEL
.env
项目将不同问题拆成不同实验通道:
无需 API Key 的 Echo 对比:
mkdir -p /tmp/a2os-benchmark ./target/debug/a2os-runtime \ --socket /tmp/a2os-benchmark/runtime.sock \ --quick \ --deterministic-dispatch
在另一个终端中:
export A2OS_RUNTIME_SOCKET=/tmp/a2os-benchmark/runtime.sock report_dir="$(mktemp -d /tmp/a2os-compare.XXXXXX)" python -m benchmarks.compare.run_compare \ --workload echo \ --adapters asyncio_baseline,a2os_runtime \ --iterations 5 \ --seed 42 \ --reports "$report_dir"
使用统一记录器包装任意实验或验收命令:
python scripts/run_and_summarize.py \ --output-root /tmp/a2os-run-records \ --label release-quick \ -- \ python scripts/verify_all.py \ --profile release \ --mode quick \ --output-dir '{run_dir}/verification' \ --no-latest-update
每次运行会生成独立目录,其中包括日志、summary.json、summary.md、files.sha256 和结构化子报告。记录器会识别常见敏感变量名并替换已知值,但公开证据前仍应进行独立 secret scan。
summary.json
summary.md
files.sha256
项目根目录/ ├── README.md ├── src/ │ ├── a2os-rust/ # Runtime、Python SDK、场景、工具和工作区内测试 │ └── repo-tools/ # 仓库维护工具 ├── docs/ │ ├── 项目说明书.pdf │ ├── 项目创新说明.pdf │ ├── 成员分工及主要贡献说明.pdf │ └── 人工智能及第三方工具使用说明.pdf ├── tests/ # 根级回归与验证脚本 ├── demo/ # 演示说明与脚本 ├── presentation/ # 决赛演示 PPT 与视频 └── 作品原创承诺书.pdf
0.1.0
A²OS 采用 MIT License。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
A²OS — 面向多智能体应用的系统级 Runtime
A²OS 是运行在 Linux/openEuler 上的多智能体执行底座。上层框架负责描述 Agent、Prompt 和任务图,A²OS 负责处理它们落到真实系统后共同面对的问题:谁先运行、可以使用多少资源、如何共享上下文、怎样合并并发副作用、如何隔离不可信进程,以及故障后如何得到可验证的终态。
A²OS 不替代 LangGraph、AutoGen、CrewAI 等编排框架,也不托管大模型。它位于这些框架与操作系统之间,通过 Rust Runtime、Python SDK 和版本化 JSONL 协议提供统一的执行环境。
为什么需要 A²OS
多智能体框架通常已经能表达角色、依赖和对话,但应用层并不适合独自解决所有系统问题。
核心能力
Agent 生命周期与调度
Runtime 使用状态机管理 Agent 的注册、就绪、运行、阻塞、完成、失败和注销。任务只有取得有期限且绑定执行主体的
RunPermit后才能运行。后台 Dispatcher 结合依赖、优先级、MLFQ、组间 WFQ 和资源压力选择任务;工具等待结束后,任务可以重新进入就绪队列。Workflow 与确定终态
Python SDK 和 Rust Runtime 共享 Workflow Schema。Runtime 原子编译 DAG,执行并行任务、动态任务、Retry、FailFast 和补偿策略。spawn、exit、timeout、cancel 等过程事实最终进入同一终态提交路径,避免重复完成、丢失唤醒和永久等待。
CoW Context
Context 由 Runtime 维护,而不是散落在各个 Agent 的本地内存中。子分支只复制被修改的页面,父子和兄弟分支可以基于 fork snapshot 做三方合并。内容寻址、引用计数、Hot/Warm/Cold 分层、checkpoint 与 WAL 用于降低复制开销并支持重启恢复。
A²Tx Agent Transaction
每个 Agent 在独立分支中产生
ContextRead、ContextWrite、FileWrite、MessageSend、ToolCall、NetworkCall等 Effect。Runtime 根据版本、读写集合、文件哈希、消息语义和可逆性构建冲突图,再生成带plan hash、graph hash和base epoch的提交信封。提交过程采用 prepare、stage、validate、apply、finalize 五阶段协议。发生崩溃后,恢复结果只能是完整旧状态或完整新状态,不会留下部分应用的混合工作区。
真实进程执行与隔离
A²OS 管理真实子进程和进程组,并可使用 cgroup v2 限制 CPU、内存和 PID。Formal 路径进一步要求
no_new_privs、seccomp 以及user、net、mount、ipc、utsnamespace。Formal 结论不依赖配置自报:有效 execution receipt 必须包含真实
pid > 0和实际验证得到的isolation_status。Runtime 会读取系统事实逐项确认隔离;缺少委托、PID 或任一必要能力时直接失败。IPC、事件与外部模型
控制面使用 Unix Domain Socket 上的版本化 JSONL 协议,包含请求标识、帧限制、幂等重放和结构化错误。大数据面支持
memfd、mmap环形缓冲、eventfd与 Unix FD 传递。执行完成事件可通过持久事件流通知客户端,避免高频轮询。可信 LLM Gateway 使用长连接池访问 OpenAI-compatible API,并把外部模型调用与 sandbox worker 隔开。API Key 只存在于可信 Runtime/Gateway 或场景父进程的内存与环境中;不可信 worker 只接收任务输入或预生成补丁,不读取密钥,也不在工作区创建密钥文件。
故障恢复与可验证证据
Runtime 对超时、SIGKILL、spawn 失败和取消提供统一收据与清理。Context 和 A²Tx 使用 journal 恢复持久状态。实验与发布工具可以记录:
快速开始
环境要求
基础开发环境需要:
1.96.0,版本由rust-toolchain.toml固定;make和pkg-config。Node.js、Playwright、Clang/LLVM、eBPF 工具和
cargo-deny只在运行相应 Web、诊断或供应链检查时需要。Formal 模式还需要 cgroup v2 delegation、cpu memory pidscontroller、user namespace 和 seccomp。openEuler 24.03 的基础系统包:
Ubuntu/Debian 的等价基础包:
需要 eBPF 构建或诊断时再安装 Clang/LLVM、libelf、zlib 和可选的
bpftool;需要 Web 测试时再安装 Node.js 18+、npm 和 Playwright Chromium。安装与构建
仓库以以下文件作为依赖版本真源:
rust-toolchain.toml与Cargo.lock;requirements-dev.in与requirements-dev.lock.txt;web-tests/package-lock.json。启动 Runtime
在第一个终端中:
在第二个终端运行 SDK 冒烟场景:
该场景覆盖连接、Agent 注册与状态迁移、调度、CoW Context、消息通信和注销。完成后在第一个终端按
Ctrl-C停止 Runtime。使用 Python SDK
Agent、Workflow、Transaction、Workspace 和 Effect API 见 Python SDK 文档。
典型使用方式
开发验证
以下命令均从
src/a2os-rust目录执行。基础质量检查:
统一验证入口:
verify_all.py支持a0–a8与releaseprofile,以及baseline、quick、complete三种深度。它输出机器可读结果、Markdown 摘要和清理检查;某次运行的通过数量不作为 README 的固定能力声明。Formal 模式
Formal 不是普通开发模式的别名。运行用户必须处于真实的 cgroup v2 委托边界中,并能在空的 A²OS 子树下创建 leaf cgroup、写入 PID 以及设置
cpu.max、memory.max、pids.max。先检查主机基础能力:
推荐由带
Delegate=yes的专用 systemd service 将 cgroup 子树委托给运行 A²OS 的非 root 用户。不要把/sys/fs/cgroup、systemd 管理的 service 根节点或存在其他进程的 cgroup 直接用作 A²OS 子树。Formal 验收采用 fail-closed 语义:缺少基础能力、实际隔离证据、必要步骤、结果回读或完整清理时不会降级为“通过”。证据目录应放在源码树外;不要使用
git clean或 reset 制造 clean-worktree 结果。Real-SWE 与外部 LLM
仓库提供由多个角色协作完成代码分析、补丁生成、故障重试、冲突审查、A²Tx apply 和最终测试的 Real-SWE 场景。Live Formal 运行需要可用的 cgroup 委托、网络和 DeepSeek API Key:
Real-SWE provider 可通过
A2OS_LLM_API_URL覆盖完整的 Chat Completions 地址;使用 Runtime LLM Gateway 的应用则通过A2OS_LLM_BASE_URL和A2OS_LLM_MODEL选择兼容服务。不要把 Key 写入.env、Runtime 配置、命令行参数、工作区、日志或证据包;正式部署应使用密钥管理器向可信进程注入。基准与运行记录
项目将不同问题拆成不同实验通道:
无需 API Key 的 Echo 对比:
在另一个终端中:
使用统一记录器包装任意实验或验收命令:
每次运行会生成独立目录,其中包括日志、
summary.json、summary.md、files.sha256和结构化子报告。记录器会识别常见敏感变量名并替换已知值,但公开证据前仍应进行独立 secret scan。仓库结构
设计边界
0.1.0Alpha,定位是研究与竞赛原型,不是经过安全认证的容器平台。文档
A²OS 采用 MIT License。