Agent orchestrator
Ambrogio
Ambrogio keeps the trace of what is done. It gives order and documentation to every movement, and its own internal agents keep it correct.
It is one static Go binary beside one SQLite file. It supervises resident agent processes over the Agent Client Protocol, hands them work, and exposes the whole of it — the queues, the steps, the documents, the verdicts — through one HTTP API and one event stream. The operator drives it from a page the binary serves itself.
It exists for two problems: several agents working at once without two hands in one place, and the trace of what was done and why, for the agent that comes later and was not there when the decision was taken.
The four things worth knowing
-
The queues, and who accepts them
Work is a queue with a declared ceiling, and nothing starts by itself: the operator accepts it.
-
The two doors, and the sandbox
One door for the operator and a smaller one for the agents, and a worker that may only touch what its role allows.
-
The hands, the budget and the silence
Every hand has a slot, a declared budget and a clock: a step that goes quiet is stopped, and what it did is kept.
-
The conversation
A chat is a queue you talk to: its steps are the messages, its transcript is the chain, and it waits instead of closing.
Built in the lab it runs
Ambrogio is part of tazlab.net, a small homelab on its own hardware and documented in public. A repository holds the desired state, Flux reconciles it, and a push is a deployment — the blog, the wiki and the teaching site arrive the same way.
This site is a description, not the product. It is five static pages served by nginx from one replica; the hub itself is a binary beside a data directory on the operator's machine, and it is not reachable from here.