Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Audience and prerequisites

Who this book is for

Experienced software engineers who are building, or about to build, agentic systems that do more than answer questions. You are expected to know:

  • HTTP, APIs and authentication (OIDC, sessions, API keys);
  • relational databases, transactions, row locks and constraints;
  • Docker and Docker Compose, service lifecycles and processes;
  • testing, observability and the basics of distributed systems.

You do not need prior experience with agent frameworks. Part I explains agent loops, tool calling and MCP from first principles, and the other parts link back to it instead of re-teaching it.

Languages

The projects use different languages for deliberate reasons (Technology choices follow boundaries). To follow the code walkthroughs you should be comfortable reading:

PartYou will readYou will run
IPython (agent), Rust (gateway, MCP server), YAMLDocker Compose stack, make targets
IITypeScript (SvelteKit, LangGraph.js)Node 24, Ollama, curl, sqlite3
IIIRust (rules engine, MCP server), Python, JSON policycargo, python3; a Compose stack for live labs
IVRust (Axum, cryptography)cargo; a local server for later labs
VElixir (Phoenix, Ash, AshAI)Elixir/Erlang, PostgreSQL, mix, curl, jq

Part IV assumes basic cryptographic vocabulary: hashes, MACs, symmetric encryption, key derivation functions and elliptic-curve keys. Part V does not assume Ash knowledge, but you should be able to read Elixir.

Two kinds of dependencies

Keep these apart:

  • Reading the book needs a browser. Building the book yourself needs only Python 3.11 or newer, git and a pinned mdBook binary. See the repository's README.
  • Running a project's labs needs that project's own stack. Several of these are large: the Part I stack runs about ten services and wants roughly 8 GB of Docker memory. Others are small: most Part III and Part IV lessons need only cargo. Each part's introduction summarises its requirements, and Setting up each track collects them.

Many lessons can be read without running anything. The labs are where the judgment comes from, though. Each one asks you to predict a result, break a guarantee and find the code that stopped you.

Model behaviour is observed, not guaranteed

Several labs quote what a particular local model (often qwen3:8b) did on one run. Your model may choose different tools or phrase things differently. The labs are designed so that the property under test, such as what is persisted, what is refused or what is recomputed, does not depend on the model.