开源项目

ax

面向大规模 agent 工作负载的声明式编排运行时,用 Task、Workspace、Gateway、Model 四个原语把沙箱隔离、Git 仓库与 MCP server 预热、出网白名单、平台自身调用的 LLM 凭据全部写成 manifest,一条 ax apply 拉起。CLI 刻意做成 kubectl 的形状,apply/get/describe/watch 之外还有 ax ssh 钻进沙箱看 agent 在干什么、suspend/resume 做断点续跑,底层跑在 Agent Substrate 上,目标是单集群撑十亿级任务;对想把不受信 agent 代码规模化跑起来的团队,这套「agent 是一种新 workload」的抽象比手搓容器调度省事得多。目前核心概念与协议仍在演进,稳定版发布前会有破坏性变更。Apache 2.0。

README

AX axolotl AX

[!WARNING] 我们仍在积极完善核心概念、协议与规范。在稳定版本发布之前,很可能会引入重大的破坏性变更。

用工作区(workspace)和网关(gateway)规范声明一个 agent 任务。AX 为其提供沙箱、装配工作区、隔离网络,并帮助你在规模化场景下运行它。

AX 是一个高吞吐、声明式的编排器,用于在集群中运行数十亿个自主 agent 工作负载。它构建在 Agent Substrate 之上以实现沙箱化执行,并旨在让单个集群能运行数十亿个任务。如果你用过 Kubernetes,ax 会让你感到熟悉。

# task.yaml
apiVersion: ax.io/v1alpha1
kind: Workspace
metadata:
  name: golang
spec:
  git:
    - repo: https://github.com/golang/go.git
      branch: "my-fix"
---
apiVersion: ax.io/v1alpha1
kind: Task
metadata:
  name: test
spec:
  workspaces:
    - name: golang
      goal: "Ensure that Go tool chain is available and is built from source"
  debug: true   # lets you `ax ssh` into the sandbox

然后应用它,观察它启动,并从 agent 的背后审视它:

ax apply -f task.yaml
ax watch task test
ax ssh test -- ls -al /workspace

为什么需要它?

Agent 是一种全新的工作负载。它既不是无状态的微服务,也不是运行到结束的批处理作业。它会累积状态、需要严格隔离、会调用模型 API 和工具服务器,如果没有人在盯着,还可能在一个循环中不断烧钱。AX 提供四个小巧的原语,以声明式的方式处理这一切:

你想要…… AX 提供……
在带有 CPU/内存限制的隔离沙箱中运行不可信的 agent 代码 Task
预先接好 Git 仓库、MCP 服务器和 skill 包,让每个 agent 都热启动 Workspace
将出站流量限制到显式的主机允许列表 Gateway
配置平台自身使用哪个 LLM,并从 Kubernetes secret 中读取凭据 Model
暂停空闲的 agent,并在它停下的地方精确恢复 ax suspend / ax resume
Shell 进入正在运行的 agent,查看它在做什么 ax ssh

一切都以 ax.io/v1alpha1 manifest 的形式表达,并通过一条命令应用。

快速开始

1. 安装 CLI

go install github.com/google/ax/cmd/ax@latest

这会把 ax 二进制文件放到 $(go env GOPATH)/bin。请确保该目录在你的 PATH 中。

2. 部署控制平面

你需要一个 Kubernetes 集群、ko(brew install ko)、一个你的集群可以拉取的容器镜像仓库,以及一个可达的 Agent Substrate Control API(集群内默认:api.ate-system.svc.cluster.local:443)。

make deploy AX_IMAGE_REPO=<your-registry>

这会先部署 Redis,然后使用 ko 构建并部署控制平面镜像。所有内容都会落入 ax-system namespace。

3. 运行你的第一个任务

ax apply -f examples/task.yaml       # Task + Workspace + Gateway + Model in one file
ax get tasks
# NAME      ATESPACE   PHASE     ACTOR           WORKER-IP    AGE
# task123   default    Running   task123         10.20.3.67   1m

ax watch task task123                # stream phase and condition changes live
ax ssh task123 -- ls -la /workspace  # poke around inside the sandbox
ax suspend task task123              # checkpoint and pause
ax resume task task123               # pick up where it left off

想看到完整的生命周期端到端演示?运行 ./demo.sh。它会应用一个自定义工作区、等待就绪、通过 ax ssh 执行命令,并挂起任务。

文档

指南 阅读它来……
核心概念 了解 Task、Workspace、Gateway 和 Model 各自做什么,以及任务如何在阶段(phase)和条件(condition)之间流转。
Manifest 编写你自己的 YAML,每种 kind 都附有带注释的示例。
沙箱 了解 runner 在启动时做什么,以及你的命令可以依赖什么:metadata server、guest services、环境变量。
Runner 理解控制平面与任务容器之间的契约,并构建你自己的 runner 镜像来替换默认镜像。
网络 从集群、你的笔记本电脑或 gRPC 客户端,通过 atenet router 访问正在运行的任务。
架构 理解控制平面如何组合在一起,另有 API 参考。
开发 构建、测试并发布对 AX 本身的修改。

CLI 用法

ax 通过 gRPC 与控制平面通信。它刻意做成 kubectl 的形态:apply、get、describe、watch、delete,外加一些 agent 专属的动词。

日常命令

# Apply anything (multi-document YAML, file or stdin)
ax apply -f examples/task.yaml

# Tasks
ax get tasks                          # list
ax get tasks -a my-atespace           # list in another atespace
ax get task task123                   # full spec + live status as YAML
ax describe task task123              # human-readable detail
ax watch task task123                 # stream status and condition transitions
ax suspend task task123               # checkpoint actor state and pause
ax resume task task123                # resume a suspended task
ax delete task task123

# Shell into the running sandbox
ax ssh task123                        # interactive shell (task needs spec.debug: true)
ax ssh task123 -- ls -la /workspace   # one-off command
ax ssh task123 -- python3 main.py

# Gateways, workspaces, models follow the same pattern
ax get gateways
# NAME              ATESPACE   LISTENERS             EGRESS-HOSTS
# default-gateway   default    8494/gRPC,8080/HTTP   *
ax describe gateway default-gateway
ax delete gateway default-gateway

ax get workspaces
# NAME                ATESPACE   GIT-REPOS   MCP-SERVERS
# default-workspace   default    1           1
ax describe workspace default-workspace
ax delete workspace default-workspace

ax get models
# NAME            ATESPACE   PROVIDER   MODEL
# default-model   default    google     gemini-3.8-flash
ax describe model default-model
ax delete model default-model

# Connection plumbing
ax ctx                                # active kube context and how ax is reaching the control plane
ax tunnel list                        # background tunnels (state lives in ~/.ax/tunnels)
ax tunnel stop
ax version

与 kubectx 协同工作

ax 会跟随你当前活跃的 Kubernetes context。切换集群后,ax 会在后台解析并隧道连接到该集群的控制平面。

kubectx staging-cluster
ax get tasks

kubectx prod-cluster
ax get tasks

# Or target a context without switching
ax --context=dev-cluster get tasks

全局标志

标志 描述 默认值
-a, --atespace 该命令的 Atespace 作用域 default
-n, --namespace 安装 AX 的 Kubernetes namespace ax-system
--context 要指定的 Kubernetes context 当前活跃的 kubectx / current-context
--server 控制平面地址,绕过自动检测 由 kube context 推导,或 $AX_SERVER

许可证

Apache License 2.0。详见 LICENSE。

开源项目google2026-09-22原文

相关内容