lea · Teams of agents
Control tower
lea brings its own Claude Code plugin, lea, loaded in every agent (from the image, for the
session only: nothing is installed in your ~/.claude). Its skill /lea:control-tower turns a
lead into your control tower: you talk to it only, it splits your requests into tasks, starts
dev and reviewer agents with self-contained briefs, answers their questions when it can, and
follows them with board_read, and briefs you in one line per agent. Between your requests an
agent's report wakes it, as it wakes every agent whose turn is over:
fix-login · done · PR #42, 18 tests pass
dark-mode · blocked · which palette: Catppuccin or Nord?
Needs you: palette for dark-mode
Ask it for the board, the detail of an agent, or to stop one, in your own words.
It replies in the language of your latest message, and switches as soon as you do; its agents' messages, mostly in English, never change it. In tower mode lea reminds it on every prompt.
It asks you one question at a time, whatever the number of agents with a question for you: its
user_ask tool opens a question when none is open and queues the others (an incident first,
then what blocks an agent, then the rest, in order); the agents keep working meanwhile. Your next
prompt, or your answer to its AskUserQuestion, answers the open question, and the tower relays the answer to the agent it came from, then
asks the next one. While you have a question, lea denies the tower a second AskUserQuestion. A
question left unanswered LEA_QUESTION_REMIND minutes (120) is asked once more, prefixed with
reminder:. The deck shows the tower as ❓ 1 · 3 queued; lea questions lists the questions,
lea questions drop ID drops a queued one; in the deck, Q (or the tower's right-click menu,
Questions…) lists them and drops a queued one. The tower's status line shows the same count.
To answer in peace, pause the tower's inbox: H in the deck (or Hold messages in its menu), or
lea hold (lea hold --off releases it). The messages its agents send it wait, and the row
shows ⏸ N; your own notes and the replies to what the tower sends during the pause still
arrive, and an agent's ask to it fails at once (the agent sends instead and keeps working).
On release the tower gets them all and briefs you once. lea releases a pause on its own after
LEA_HOLD_MAX minutes (30; 0: never). Only you can pause or release an inbox, never an agent.
When lea opens the deck on a container with no agent running (the very first launch, or every
agent ended), the agent it starts is a Control Tower: a lead on Claude, labelled
Control Tower, whose first prompt runs /lea:control-tower (lea deck-open --no-default
starts nothing). In the deck, N starts another one (Control Tower 2…). A Control Tower
always runs on the claude provider, whatever the default one, since the skill and its hook ship
in the Claude plugin. Only you start one: agents cannot.
The tower never does the work itself, not even a git push: every request goes to an agent. The
plugin enforces it with a hook: once /lea:control-tower runs, the session may only use lea's
team tools (agents_*, msg_*, board_read, task_update), ask you questions and run
lea inbox --agent --wait; any other tool (Bash, Edit, Read, git, gh, the web…) is denied with a
reminder to delegate. /lea:control-tower off gives the session its tools back.
Type /lea:check (or ask for a status, a "point", a "topo") for the state of the work in
progress, in at most 10 lines: done since the last check, in progress, left, and what is blocked
or yours to decide. A tower builds it from the board and the agents' reports, without doing any
work; any other agent from its own task. Nothing new since the last check: one line.
✅ Done
dev-1: login fix merged, CI green
🔄 In progress
dev-2: dark mode, tests being written
⚠️ Blocked / to decide
dev-2: palette, Catppuccin or Nord?