Compared sets¶
A pack can name private sets the room compares without anyone showing their list. Each person picks or types their own values, the values stay in their vault, and the room learns only what everyone shares, or only how many.
compare:
- id: colours
label: Colours everyone likes
question:
text: "Which of these wall colours would you be happy with?"
kind: choice
options: [white, grey, sage green, sky blue, sunny yellow]
why: "Only the colours everyone picked are shown."
mode: overlap
- id: tools
label: Tools in common
question: { text: "Which tools do you own? Separate them with commas.", kind: text }
mode: count
min_seats: 2
The keys¶
| Key | Required | Meaning |
|---|---|---|
id |
yes | Lowercase letters, digits and hyphens, starting with a letter, at most 32. Distinct within the pack |
label |
yes | The words the Table shows above the result, at most 60 characters |
question.text |
yes | What every seated person is asked, at most 140 characters |
question.kind |
yes | choice (pick any of the options), slots (the room's time slots) or text (a short list separated by commas) |
question.options |
for choice |
Two to twelve distinct options, each at most 60 characters. slots and text take none |
question.why |
no | One line under the question. A default line says only shared values are shown |
mode |
no | overlap (default) publishes the shared values; count publishes only how many there are |
min_seats |
no | How many seats must give values before the room compares, at least 2. Default: every seated person |
A pack declares at most four sets. amount is refused, because a set is matched value by value; to compare amounts, list them as choice options. The loader names the rule a bad entry breaks, for example a compared set needs values to match one by one; an amount is one number.
What happens in the room¶
- Asked. When the room begins, each person's brief holds their agent's own questions and then one question per set. A
choiceset lets the person pick any number of options. The answer stays in that seat's vault. - Compared. After the offers, for each set, the host asks each vault only whether it holds values (
coalition.queryandcoalition.answer). The first seat that does then meets each of the others in turn in a blinded intersection (coalition.matchsetup, request and response), over strings such ascolours:sage green. Only the running overlap goes forward. -
Published. One
coalition.observewithsource: "document"carries the result to the whole room:{"common": 1, "set": "colours", "values": ["sage green", "sky blue"], "compared": 3} {"common": 1, "set": "tools", "count": 2, "compared": 2}With fewer seats than
min_seats, nothing is published and the room moves on. 4. Used. The Table shows each set under Found in common, privately, and each person sees how many of their own values stayed private. Plans are named with the shared sets in view, and a result maker is told to choose only from the shared values. A made thing that names one of the set's options outside them is sent back to be made again.
The feed keys are room.sets and room.mine.sets; see Room feed.
Agents brought over MCP¶
A seat whose own agent acts over MCP is not asked the brief. Its agent gives the values itself by writing the vault key compare:<id> through POST /v1/agent/vault with the seat's viewer token:
For a choice set only the pack's own options count, matched without regard to case; anything else is dropped. A text set takes the values as they are, trimmed and lowercased. The host never shows the values back: GET /v1/agent/vault lists keys only.
There is no MCP tool for this yet, so an agent needs the HTTP route beside its MCP connection.
Choosing the mode¶
Use count when the values themselves are sensitive and the number is enough, for example how many people own a ladder. Count hides the values from the room. It does not hide them from the host: the hosted vaults compare on the host, and only the number leaves it. See Vault and PSI for the limits.
Public questions¶
Some answers are meant for everyone, such as the city a person is in. A pack declares those under public:, beside compare:. Each seated person is asked the question in their brief, and when they answer, the room sees it as a message from their seat, such as City: Lisbon.
public:
- id: city
label: City
question: { text: "Which city are you in?", kind: text }
why: "Everyone in the room sees your city, and your agent searches the web for a stop there."
search: true
| Key | Required | Meaning |
|---|---|---|
id, label |
yes | Same rules as a compared set. The label starts the published message |
question |
yes | text or choice with its options |
why |
no | The line under the question. The default says everyone in the room sees the answer |
search |
no | true adds the answer to that seat's web search on place needs |
A pack declares at most two public questions. With search: true, each seat that offers on a place need searches once with the need's title and its own answer only, for example A must-see place in each city in Lisbon, and the hits of every seat are kept together, each page title ending with the place in brackets. The result maker is told to choose one place for each person. Because the answer is published, web search does not refuse a query for holding it.
An agent brought over MCP gives its answer by writing the vault key public:<id> (a string) through POST /v1/agent/vault. The world tour pack uses one public question for the city.