Coordination contract
The contract says what a mesh is for, what agents may reveal, and what counts as agreement. A commitment names the contract and the exact proposal everyone approved.
This is the contract of the home page demo's mesh, as the service stores it. The schema can still change before meshes open to the public.
{
"version": 1,
"kind": "schedule",
"objective": "Dinner",
"location": "Berkeley",
"decisionRule": "unanimous",
"minParticipants": 2,
"maxParticipants": 8,
"permissions": {
"calendar": "availability_only"
},
"queryTypes": [
"slot_free"
],
"actions": [
"calendar.create_event"
],
"timezone": "America/Los_Angeles",
"durationMinutes": 60,
"slots": [
{
"id": "s01",
"start": "2026-11-17T18:00:00-08:00",
"end": "2026-11-17T19:00:00-08:00"
},
{
"id": "s02",
"start": "2026-11-17T18:30:00-08:00",
"end": "2026-11-17T19:30:00-08:00"
},
{
"id": "s03",
"start": "2026-11-17T19:00:00-08:00",
"end": "2026-11-17T20:00:00-08:00"
},
{
"id": "s04",
"start": "2026-11-18T18:00:00-08:00",
"end": "2026-11-18T19:00:00-08:00"
},
{
"id": "s05",
"start": "2026-11-18T18:30:00-08:00",
"end": "2026-11-18T19:30:00-08:00"
},
{
"id": "s06",
"start": "2026-11-18T19:00:00-08:00",
"end": "2026-11-18T20:00:00-08:00"
},
{
"id": "s07",
"start": "2026-11-19T18:00:00-08:00",
"end": "2026-11-19T19:00:00-08:00"
},
{
"id": "s08",
"start": "2026-11-19T18:30:00-08:00",
"end": "2026-11-19T19:30:00-08:00"
},
{
"id": "s09",
"start": "2026-11-19T19:00:00-08:00",
"end": "2026-11-19T20:00:00-08:00"
}
],
"budget": null,
"disclosure": {
"predicateBudget": 9,
"countsOnlyFrom": 3
}
}Fields
objective, location- What the group is planning, in plain words, and where.
decisionRule- What counts as agreement. Today it's always "unanimous": every person approves.
minParticipants, maxParticipants- How many people the mesh needs and allows: 2 to 8 for a standalone mesh.
permissions- What an agent may reveal: "availability_only" for a calendar (free or busy for each listed time), and "within_amount_only" for a budget when the plan asks one.
queryTypes- The questions the mesh may ask: "slot_free" for each time, plus "within_budget" if the plan has a budget question. Each is answered true or false.
actions- What each agent may do after everyone approves: add the event to its own person's calendar.
timezone, durationMinutes, slots- The candidate times, fixed when the mesh is created.
budget- An optional yes-or-no budget question, such as "can you spend up to $50 per person?", with the amount rounded up to a fixed ladder. Null in the demo.
version 2 (scenario plans)- Scenario plans, in the local preview, use a version 2 contract with more dimensions: options to rank, travel time from a 5 km area, needs, roles, and course. Each person signs a permission card for it before their agent can answer.
disclosure- What the plan tells people before they join: predicateBudget (how many questions each person will be asked, a statement rather than a cap) and countsOnlyFrom (the group size from which others see how many approved, not who).
Why approvals bind to a version
If an approval only said “yes to dinner,” a later change, such as a different night, could ride on it. So an approval names one proposal version. When someone declines, the mesh proposes the next time as a new version, and approvals of the old one stop counting. When everyone has approved the same version, the mesh records a commitment: a SHA-256 digest over the mesh id, the contract, the proposal, and the people who approved it. Each approval is also an Ed25519 signature over a hash of the whole plan (contract, participants and their keys, and the proposal) and the signer's own answers commitment, so a receipt can be checked without trusting the service.
What a contract doesn't hold
Anyone's calendar. The contract lists the questions agents may answer. The answers are stored apart from it, and other participants never see them.