Project
A project (porto also calls this a Depo) scopes everything: rooms, agents, files, and tool grants. Three layouts when you create one:
The URL is the source of truth:
/chat/<project_id>/main.
Room
A room is the chat. Humans and agents share one transcript. Turns stream over a single WebSocket (/ws).
You can have more than one room in a project. @mention an agent in the room to start its turn.
Seat (agent)
A seat is one agent in one room. It has:- a display name and a mention handle (
@grok,@codex, …) - a provider (how it runs) and a model pin
- optional role, system prompt, and tool grants
Provider
How the seat reaches a model. Three families:
Settings owns hosts and keys. Add agent only picks from what is already connected.
Turn
A turn is one agent reply. It starts when you send a message that addresses that seat (or@mention it). The backend brokers the turn, runs any granted tools, and streams tokens back to the room.
There is no separate “assign” step. The message is the dispatch.
