Overview
An agent here is a container that stays running, wakes up when something happens, and reaches the outside world only through credentials it never sees.
Two halves, and one question between them
There is the console you type at, and the plane the agents live in. You install the console on the computer you are sitting at, and the first run asks the one question the halves differ on: whether the agents should live here, or on a server you have SSH to.
$ curl -fsSL https://squad.mormon.garden/client.sh | sh
$ squad
Node 22.18 or newer, and nothing else on this computer — no Docker here whichever answer you give. The install page is the long version, including the same thing done by hand.
Everything after that question is the same program. A plane answers the same protocol whether its socket is in a directory here or at the far end of ssh vps squad relay, so the agent list, the log feed, the conversation and a port forwarded out of a sandbox all run on this computer and reach the agents wherever they are.
It is a runtime rather than a harness. The thinking is done by pi; squad gives it a machine to live on, a way to be woken, and a boundary to work inside.
Type its name, and make one
squad with nothing after it opens the console, because someone typing the command with nothing after it is asking to see the thing rather than to be told a fact about it. With no agents at all it opens on the one row there is:
╭──────────────────────╮╭────────────────────────────────────────────────────────────────╮ │ agents ││ new agent │ │ ││ │ │ + new agent ││ A name, and ⏎ builds it: a container, a repository of its own, │ │ ││ nothing in its memory, and exactly what defaults in the config │ │ logs ││ allows it to reach. │ │ config ││ │ │ ││ ╭────────────────────────────────────────────────────────────╮ │ │ ↑↓ moves ││ │ name scout │ │ ╰──────────────────────╯╰────────────────────────────────────────────────────────────────╯ ↑↓ agents ⏎ build ^C quit
The name is the whole of what the keyboard decides there. What the new agent may reach is defaults in the config, answered in advance by whoever wrote that file — because the one thing a keyboard may never do here is grant. Then you talk to it, and it takes a turn.
The console is every key and every command on that screen. Agents is what one turns out to be made of.
Three places a setting lives
Nearly every question that starts "where do I put…" is answered by which of these three it belongs to, and they are told apart by who may write them.
| the console | A slash command or the config screen. Keys, models, hosts, MCP servers, the mailbox and a ceiling, all holding from the next turn with nothing restarted. |
| config.yaml | The operator's file, on the machine the plane is on, which no plane may write: agents, schedules, webhooks, and every credential attached to a host by name. |
| the repository | Inside the agent's own volume: who it is, what it remembers, the skills it loaded and the tools it wrote for itself. Its own to edit, and nothing else's. |
The console keeps what it is given in a store beside config.yaml and never in it, so the operator's file stays the operator's: what a redeploy brings back is what was written there, and what was typed at the console survives the redeploy on its own.
The map
Start
| Overview | the two halves, and what an agent turns out to be |
| A server | renting the cheapest one on any list, and getting in with a key or a password |
| The console | the screen, the keys, and every command there is |
| Agents | making one, what it is made of, and taking it away |
Being reached
| Telegram | a bot per agent, paired to you by a phrase |
| one mailbox for the whole plane, and a list of who may write to it | |
| Webhooks | the one published port, and what a signature proves |
| Schedules | cron you wrote, and the turn an agent books for itself |
What an agent can do
| Models | what it thinks with, and where the key goes |
| MCP servers | tools that live somewhere else, on a shelf the plane keeps |
| Web search | one granted endpoint, and the reading done on the far side of it |
| Repositories | a GitHub repository, the branches it may push, and the token it never holds |
| Writing to another agent | handing a piece of the work sideways, and who says it may go |
| Serving a port | opening what an agent built on the machine your browser is on |
Bounds
| Trust | who may instruct, and who is only ever quoted |
| Reach | the proxy, the grants, and the credential the agent never holds |
| Spending | dollars a day, and what happens at the ceiling |
| config.yaml | the file that is yours, and the store beside it that is the console's |
One address hands an agent the whole of it
Every page here is also written as markdown at the same address with .md on the end, and all 18 of them are in one file. That file is the thing to paste when what you are explaining squad to is a coding agent rather than a person:
https://squad.mormon.garden/llms-full.txt
/llms.txt is the index instead — the same list as the map above, with a link to each page's markdown, for a reader that would rather fetch the one page it needs. Both are converted from these pages at build time rather than written beside them, so neither can be a version behind what you are reading now.