ZOT
AUTOMATED SOFTWARE FACTORY

Stop prompting.
Start shipping._

Hand zot a software task and get back finished, tested code. It reads the repo, writes and edits, runs the build and the tests, and fixes what it broke — on its own, from one brief to a recorded outcome.

One open source Go binary that talks straight to your model provider. No hosted engine, no account beyond the provider’s own, no telemetry.

zot - factory runREC

QUICKSTART

Grab a prebuilt binary for your platform — Linux, macOS or Windows, no toolchain required — export a provider key, and hand it a brief.

your shell
$ export ZAI_API_KEY="..."
$ zot "add input validation to the signup handler and a test"

A key and a brief is the whole setup. Point it at a scratch checkout with --dir, or read the brief from a file with --task-file when it is longer than a line.

ANY PROVIDER

openaianthropicgroqmistraldeepseekopenroutertogethercerebrasxaimoonshotzaiqwenvercelollama

Fourteen backends ship built in, each reading its provider’s conventional key, so switching is a flag. Anything else that speaks the OpenAI chat-completions API works with a base URL and a key — including a local Ollama, which needs no key at all.

gateways
$ zot --backend openrouter --model glm-5.2 "..." # sent as z-ai/glm-5.2
$ zot --backend vercel --model glm-5.2 "..." # sent as zai/glm-5.2

OpenRouter, the Vercel AI Gateway and Cloudflare’s each spell a model’s creator differently. Give the bare name and zot supplies the right prefix from its catalogue, then sizes the context budget to the real model behind it.

EVERY RUN IS ON THE RECORD

An autonomous run is unattended by definition: nobody watched it, and by the time you look the terminal is gone. Every run is written to disk line by line as it happens — the brief, the model, every message and tool call, and how it ended.

sessions
$ zot sessions # what has run, newest first
$ zot --resume last "now add the tests you skipped" # pick up where it stopped

REAL ACCESS, BOUNDED

zot is fully autonomous and has real file-write and shell access. Provider keys are stripped from the environment before the agent starts, so its commands cannot read them — but --dir is a working directory, not a sandbox. The published container image is the practical boundary: the agent can only touch the volume you mounted.

docker
$ docker run --rm -it --env ZAI_API_KEY \ --volume "$PWD":/workspace \ ghcr.io/openzot/openzot:latest "add a /health endpoint and a test"