AX is undergoing a significant redesign, moving away from a single CLI with an embedded Python harness toward a general-purpose orchestration layer for agentic tasks. The repository is reorganized around three binaries: ax-server exposes a gRPC API for submitting Task manifests, ax-controller runs as a horizontally scaled reconciler that consumes work from Redis Streams, and ax-task-runner executes tasks inside sandboxed workers. Task state now lives in Redis rather than Kubernetes CRDs so the system can handle millions of short-lived tasks without straining etcd. The legacy Python harness, ATE client, SQL event log, and skill examples are removed, and new design, concepts, manifest, networking, runner, and sandbox docs plus Kubernetes deploy manifests describe the new architecture.
3.3 KiB
How to Contribute
We welcome contributions to AX!
Before You Begin
Sign our Contributor License Agreement
All submissions to this project need to follow Google’s Contributor License Agreement (CLA), which covers any original work of authorship included in the submission. This doesn't prohibit the use of coding assistance tools, including tool-, AI-, or machine-generated code, as long as these submissions abide by the CLA's requirements.
You (or your employer) retain the copyright to your contribution; this simply gives us permission to use and redistribute your contributions as part of the project.
If you or your current employer have already signed the Google CLA (even if it was for a different project), you probably don't need to do it again. Visit https://cla.developers.google.com/ to see your current agreements or sign a new one.
Community Guidelines
This project follows Google's Open Source Community Guidelines.
Code Reviews
All submissions, including submissions by project members, require review. We use GitHub pull requests for this purpose. Consult GitHub Help for more information on using pull requests.
Development Workflow
Prerequisites
- Go 1.27+
ko(for building and deploying control plane images)- Docker or Podman (for building the Linux task-runner container image)
- A Kubernetes cluster with Agent Substrate installed
Building Binaries
Build all local binaries (bin/ax, bin/ax-controller, bin/ax-server):
make build
Or install the ax CLI directly into $(go env GOPATH)/bin:
make install
Make sure that $(go env GOPATH)/bin is on your $PATH:
export PATH="$PATH:$(go env GOPATH)/bin"
Running Tests
Run all unit and integration tests (including the mock Substrate gRPC server and API server tests):
make test
Or run via go test:
go test -v ./...
Building the Task Runner Image
Cross-compile the task runner for linux/amd64 and package the container image:
make build-task-runner
To build and push to a remote container registry:
make push-task-runner TASK_RUNNER_REPO=gcr.io/<your-project>/ax-task-runner
Deploying to Kubernetes
Deploy Redis, controller, and server components to your cluster in the ax-system namespace:
make deploy AX_IMAGE_REPO=gcr.io/<your-project>/ax-images
Creating a Pull Request
-
Fork or Clone the Repository:
git clone git@github.com:rakyll/ax2.git cd ax2 -
Ensure
mainis up to date:git checkout main git pull -r origin main -
Create a feature branch:
git checkout -b my-feature -
Make changes and verify:
- Run tests:
make test - Ensure clean modules:
go mod tidyand verify withgit diff --exit-code go.mod go.sum - Build binaries:
make build
- Run tests:
-
Commit and open a PR:
git add . git commit -m "feat: describe your changes" git push origin my-featureOpen a pull request on GitHub describing the motivation and changes.