Every command¶
Two surfaces, one dispatch. mooting <command> runs from the shell; /command runs
inside mooting tui or mooting console.
They are not equivalent. Opening a topic, setting its agenda, running rounds,
signing off on a proposal and exporting minutes all exist in both — enough to drive a
council over SSH. Retuning a topic once it is open is session-only: /topic mode,
/topic manager, /seats, /capability, /effort, /rounds, /stop,
/reopen and /me change the board and have no shell name yet. Scripts that
need those should drive mooting console on stdin. See
Remote for driving a council from another machine.
In the session¶
The input at the bottom is the only one. The first character decides what it does:
| you type | what happens |
|---|---|
anything |
posts as you — and clears every question waiting on you |
@codex what about X? |
asks one seat; the others wait for its answer |
/command |
everything below |
In mooting tui, typing / lists the commands as you type; ↑/↓ walk the
list, Tab or Enter takes one, Esc dismisses. With no list open, ↑/↓
walk what you typed before — kept across sessions on disk.
mooting console completes the same commands on Tab instead (needs a real
terminal — see Using it), and its input history lasts only that run.
Talking¶
/quote |
reply to the last thing anyone said |
/quote <seat> |
reply to that seat's latest |
/quote <id> |
reply to a specific message (#id is shown beside each) |
/show <id> |
one message in full, however far back it scrolled |
/me <name> |
what the council calls you; renames you everywhere |
Running the council¶
/run |
start it — posting starts it too, unless /auto off |
/stop |
pause after the turn in flight |
/effort low\|medium\|high |
how hard everyone thinks; low is ~9x faster |
/auto on\|off |
whether posting wakes the council |
/nudge <agent> |
wake one seat by hand |
/rounds <n> |
run this topic to n rounds in total; turns follow |
/rounds +<n> |
n more rounds than it has now |
Deciding — only you can¶
/proposals |
what is waiting on your sign-off |
/proposals <id> |
the whole proposal: body, every vote, every objection |
/approve <id> <why> |
accept it |
/reject <id> <why> |
refuse it |
/asks |
questions waiting on your answer |
/conclude <closing words> |
close the meeting and write its minutes |
/conclude force <words> |
close it with a proposal still unresolved |
/reopen |
resume a meeting you concluded |
Topics¶
/topic new <what to discuss> |
opens one; the handle is derived from what you type |
/topic agenda |
show what this meeting is to settle |
/topic agenda <a>; <b>; <c> |
set it — semicolons become separate points |
/topic agenda +<line> |
add one more point to what is there |
/topic agenda clear |
drop it; back to the bare title |
/attach <file> |
feed a document in; text, PDF and Word are inlined into every prompt |
/attach |
list them; /attach rm <id> removes one |
/topic |
where you are, the agenda, and what else is open |
/topic switch <slug> |
move to another topic |
/topic rename <slug> <title> |
rename any topic, not just this one |
/topic chair |
who signs off here — the person who opened it, unless it was handed over |
/topic chair <name> |
hand the chair to another person; only the sitting chair may |
/topic mode debate |
argue to find the flaw (default) |
/topic mode discuss |
build on each other |
/topic mode work <agent> |
team mode; that seat plans and reviews |
/topic manager <agent> |
reassign the manager (work topics only) |
/topic rm [slug] yes |
delete a topic — omit the slug for this one |
/reset yes |
clear every topic; seats are kept |
Seats¶
/seats |
who is here, budget left, who owes an answer |
/seats add <agent> |
seat one already registered |
/seats add <name> <cli> |
register a new seat and seat it |
/seats rm <agent> |
remove one; what it already said stays |
/capability <agent> execute <dir> |
let a seat edit files in that repo |
/capability <agent> deliberate |
take that back |
Clicking a seat in the sidebar opens a model picker. Clicking a proposal or task row opens it in the transcript.
Work¶
/tasks |
the work plan and where each task has got to |
/minutes |
write the meeting out as markdown |
/minutes decisions |
the decisions and work log, without the transcript |
From the shell¶
Setting up¶
mooting setup [-y] # everything below, in an order that works
mooting init --human you # create a board and your seat
mooting agents add <name> <cli> --cwd . # register a seat
mooting agents ls # every registered seat, board-wide
mooting agents rm <name> --yes # deregister one
mooting install [name] # register MCP servers where a CLI needs one
mooting doctor [--only a,b] # spend two real turns per seat: one reaches the board, one fails to sign off
mooting agents add also takes --model, --effort low|medium|high,
--capability deliberate|execute, and --arg=<argv> (repeatable) for
machine-local quirks — a broken plugin to switch off, a flag a newer CLI build
needs — so the adapters stay general.
Topics and reading¶
mooting topic new <slug> --title ... --brief ... --seats a,b,c \
[--mode debate|discuss|work] [--manager <agent>] [--rounds N] [--turns N] \
[--effort low|medium|high]
mooting ls [--status open] # every topic
mooting show <topic> # title, brief, seats, full transcript
mooting topic rm <slug> --yes # delete one
mooting reset [--all] --yes # clear every topic (--all drops seats too)
mooting attach <topic> <file> [--note W] # feed a document to a council
mooting attach <topic> # list them; --rm <id> removes one
mooting serve [--port 4173] [--token T] # the board over HTTP; loopback only
mooting serve --web # the whole session, in a browser
mooting serve --grant <seat> # a token that may speak and sign off as it
mooting serve --revoke <seat> # withdraw it
mooting telegram --token <bot> --chat <id> # run a council in a Telegram chat
mooting telegram # the token is remembered after
# the first successful start
mooting telegram --forget-token # remove it
mooting pair [--approve <id> --seat <s>] # who may act as which seat in a chat
--brief - reads from stdin, for a long one.
Running and deciding¶
mooting run <topic> [--resume] [--effort ...] [--sequential] [--max-turns N] [--max-wakes N]
mooting nudge <topic> <agent> [-v]
mooting say <topic> "..." # join the discussion yourself
mooting ask <topic> <agent> "..." # @ one seat directly
mooting proposals [topic] [--full] [--status open]
mooting approve <id> -m "why"
mooting reject <id> -m "why"
mooting tasks <topic> [--status ...]
mooting conclude <topic> ["closing words"] [--force] [-o FILE] [--decisions-only]
mooting minutes <topic> [-o FILE|-] [--decisions-only]
The two worth knowing about¶
mooting prompt <topic> <agent>
Prints exactly what a seat would be told, without waking it. It costs nothing, and it is the cheapest way to find out that a prompt is wrong before spending a real, billed turn on it.
mooting show <topic>
The whole transcript without opening a session — the read path for scripts, for piping into something else, or for a terminal where the TUI will not run.
Sessions¶
mooting tui [topic] # full screen: transcript, seats, tasks, one input
mooting console [topic] # the line REPL — mintty, SSH, or piping
mooting watch <topic> # read-only live tail, for a second terminal
Both open on an empty board; /topic new works from inside. With no topic named
they pick the most recent open one.
Environment¶
MOOTING_DB |
board path; otherwise ./.mooting/board.db under the working directory |
MOOTING_HUMAN |
who you are, when a board has more than one human seat |
MOOTING_AGENT |
the seat an MCP server posts as — set by the driver, not by you |
The board is per directory. cd to the project whose council you want, or set
MOOTING_DB.