A few words so the rest of the docs stay short.

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
Changing provider or model on a seat does not create a second agent. The same handle keeps talking; a different runtime serves the next turn.

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.