# Quickstart

## Install the release

Linux and macOS:

```sh
curl -fsSL https://zerocode.ulas.tech/install.sh | sh
```

The installer reads the channel pointer at
`https://zerocode.ulas.tech/dl/stable-<arch>-<os>`, downloads
`zerocode-<label>-<arch>-<os>.tar.gz`, verifies it against the `.sha256` the
release published, lays it out under `~/.local/share/zerocode/<label>/` with a
`current` link, and puts `~/.local/bin/zerocode` on the path unless
`--no-modify-path` says otherwise.

Pin a release instead of following the channel: `ZEROCODE_VERSION=<label>`.
Read the channel from elsewhere: `ZEROCODE_BASE_URL=<https://host/dl or
file:///path/dl>`.

Then run `zerocode`. The first launch opens setup: it names any other coding
agent it finds (Claude Code, Codex, Cursor CLI, Gemini CLI and more) and asks
before reading anything; Import brings over keys, instructions, memory,
skills, MCP servers, bots and jobs. Then pick a provider, a model and the
reasoning effort.

## Build from source

SBCL **2.6.8** is what this tree targets — the Debian 2.5.2 package is too old
(`SB-UNIX:CLOCK-MONOTONIC` does not exist there). Dependencies come from
Quicklisp; the shipped cells come from the pinned repository.

```sh
src/tools/pull-cells.sh          # lays the pinned cells under src/cells/
cd src
sbcl --dynamic-space-size 4096 --non-interactive \
  --eval '(load "~/quicklisp/setup.lisp")' \
  --eval '(push (truename ".") asdf:*central-registry*)' \
  --eval '(dolist (d (directory "cells/*/")) (push d asdf:*central-registry*))' \
  --eval '(progn (asdf:load-system :nodecode/bin) (asdf:make :nodecode/bin))'
# -> ../zerocode
```

The core suite is `asdf:test-system :nodecode`, or one lane at a time with
`NEEDLES=a,b sbcl --load tools/test-subset.lisp`. It needs a terminal: some
lanes spawn the binary and a display.
