▮ agentic-cloud-ops

~15 MIN · DO THIS FIRST

Prepare your laptop

A cold bootstrap takes about two minutes on a good connection, and much longer on a busy one, so start it as soon as you sit down. Everything below is the whole ask.

00Before you start

You need a machine with at least 8 GB of free RAM and ~10 GB of free disk (more if you run the model locally, see step 05), and you need to be comfortable with kubectl — reading a manifest, reading a rollout. No machine-learning background is required; none of this is model training. Budget about fifteen minutes.

On a corporate laptop, check that Docker runs and that api.anthropic.com is reachable before you travel. Proxies and MDM are the two things we cannot debug for you in the room.

orInstall nothing: use a Codespace

Everything runs in a GitHub Codespace and your laptop needs only a browser. The agent runs in pi with Google Gemini there, so all you need is a Gemini key: we hand one to each participant on the day, behind a spend limit. Your own key works if its Google project has billing; a free-tier key runs out before the first lab. Do this and you are done: skip to the checklist.

# 1. github.com/settings/codespaces: set the idle timeout to 120 minutes# 2. Open codespaces.new/leffen/aco-workshop, and wait for the terminal. Then:$ make env-up ENV=codespaces # the cluster, about a minute$ make gemini-key # paste the Gemini key you were given$ make agent-check # the agent reaches the model and the cluster

The default 30-minute idle timeout stops a Codespace in the middle of a long lab. A 4-core Codespace uses about 12 of your 120 free core-hours a month for the workshop and an evening of preparation; delete it afterwards.

01Docker and Git

The two things the repository cannot install for you: a container runtime, and Git to clone it with. Docker Desktop, Colima, OrbStack or Podman all work.

$ xcode-select --install # git and make, if you do not have them yet# Homebrew, from brew.sh: make install uses it for everything else$ brew install --cask docker # or Colima, OrbStack or Podman, if you prefer$ open -a Docker # start it, and leave it running

02Clone the repository

Everything you run on the day lives here, including the Makefile that drives the labs.

$ git clone https://github.com/leffen/aco-workshop.git$ cd aco-workshop

03Install the rest

kubectl, k3d, Python 3.11 or newer, Node.js and Claude Code: only the ones that are missing or too old. It prints every command before it runs it, checks each download against a pinned checksum, and finishes by checking every tool again. Run it until it says everything is installed. DRY_RUN=1 shows what it would do and does nothing.

$ make install$ make install DRY_RUN=1 # just show the commands

04Run the setup

One command: a Python environment inside the repo, a .env file for your settings, two questions (which harness, and its key: paste it), then the preflight, which checks every tool, pulls the container images and caches the agent. It is safe to run again at any point; it only does what is not done yet.

$ make setup
$ make preflightexit 0
OKdocker 27.1runningOKkubectl 1.31foundOKk3d 5.7foundOKpython3 3.12foundOKdisk14.2 GB freeOKimagescached (3.8 GB)6/6checks passed.

05Agent harness and credentials

The setup has already asked for both. Claude Code with an Anthropic API key is the path the labs were measured with; pi with Google Gemini needs a Gemini key on a project with billing, because the free tier runs out before the first lab. The key is read hidden and never printed; make key asks again if you need to change it, and ACO_HARNESS in .env switches harness. No key but a Claude Pro or Max plan? Choose claude, skip the key, set ACO_BACKEND=claude-login in .env and run claude auth login once: the same model, on your own login. A local Ollama model needs its own size plus about 6 GB of RAM (13 GB for aco-qwen3-4b-24k, 20 GB for gpt-oss:20b); on 8 GB it swaps until every run times out, and preflight warns. Workshop keys with a spend cap will be handed out on the day if you would rather not use your own.

$ make key # paste a new key; it goes into .env and is never printed# or, with a Claude plan: ACO_BACKEND=claude-login in .env, then: claude auth login

.env is git-ignored. Never commit it, and use a key you can rotate afterwards.

06Run the preflight

Every line must say OK or LOW; it tells you what to fix if not. Re-run it until it does. Once it has passed it also works offline, so running it again in the room is fine.

$ make preflight

--Troubleshooting

The five you are most likely to meet, in the form you will actually meet them.

Cannot connect to the Docker daemon at unix:///var/run/docker.sockDocker Desktop is installed but not running.$ Start Docker and wait for the whale to stop animating.
error: no configuration has been provided, try setting KUBERNETES_MASTERThe cluster is not up, or your kubectl context points somewhere else.$ make cluster-up && kubectl config current-context
Docker has only 1 GB of disk free; 2 GB or more is neededA full Docker disk taints every node disk-pressure, and the cluster schedules nothing.$ docker system prune && make preflight
zsh: no matches found: agentic-ops:agent-hardenzsh expands $NS:agent-harden using the :a path modifier and mangles it.$ Always brace it: ${NS}:agent-harden
ImagePullBackOffIn Lab 1 this is deliberate — it is the fault the agent has to find.$ Leave it. That one is the exercise.

--Day-of checklist

  • ☐Laptop charged, and a charger in the bag
  • ☐make preflight says OK on every line
  • ☐make cluster-up has been run at least once, so the images are cached
  • ☐An API key in .env, or a plan to collect a workshop key on the day
  • ☐~10 GB of disk still free after all of the above
  • ☐A terminal you are comfortable in, and an editor

Stuck? Bring it to the room — we will be there 15 minutes early.