Tool tree
gradeNot graded
describe_regionsAnswer
List available prepared regions with place counts and evidence coverage. Choose a returned regionId when opening a room. No participant session required.
View tool JSON
{
"name": "describe_regions",
"kind": "answer",
"impl": "imperative",
"description": "List available prepared regions with place counts and evidence coverage. Choose a returned regionId when opening a room. No participant session required.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"properties": {}
}
}open_roomAction
Create a room from the goal and automatically accept the proposed plan (food fallback if planning fails). Returns steps and a member invite when available, then reloads into the room. After navigation, obtain tools for the new document and call sync_session. No prior participant session required.
View tool JSON
{
"name": "open_room",
"kind": "act",
"impl": "imperative",
"description": "Create a room from the goal and automatically accept the proposed plan (food fallback if planning fails). Returns steps and a member invite when available, then reloads into the room. After navigation, obtain tools for the new document and call sync_session. No prior participant session required.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"goal",
"organizerName",
"regionId"
],
"properties": {
"goal": {
"minLength": 1,
"maxLength": 300,
"description": "The user's goal in ordinary words. The planner accepts steps automatically here, without a separate review or clarification turn.",
"type": "string"
},
"organizerName": {
"minLength": 1,
"maxLength": 40,
"description": "The name of the person opening the room, as others should see it.",
"type": "string"
},
"regionId": {
"maxLength": 40,
"description": "Which prepared region to run in. Call describe_regions first and choose the one whose data suits the goal.",
"type": "string"
}
}
}
}sync_sessionAnswer
Read identity, revisions, privacy rules, roster and outstanding work. Start with {} for the manifest. For catch-up use sinceRevision, then continue delta.cursor until delta.truncated is false. Candidate summaries and need IDs come from get_spatial_context.
View tool JSON
{
"name": "sync_session",
"kind": "answer",
"impl": "imperative",
"description": "Read identity, revisions, privacy rules, roster and outstanding work. Start with {} for the manifest. For catch-up use sinceRevision, then continue delta.cursor until delta.truncated is false. Candidate summaries and need IDs come from get_spatial_context.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"properties": {
"sinceRevision": {
"minimum": 0,
"description": "Last fully consumed event revision. Omit both sinceRevision and cursor on first connection to receive the manifest.",
"type": "integer"
},
"cursor": {
"minLength": 1,
"maxLength": 512,
"description": "Opaque delta continuation. Return unchanged until delta.truncated is false; omit with sinceRevision for the first manifest.",
"type": "string"
}
}
}
}submit_requirementSensitive Action
Add or update your need; requirementId updates an existing one. Hard needs classify candidates; unknown evidence remains uncertain. Shared publishes content; application-private stores it for the app and owner; agent-private declares without payload/note and uses screening verdicts. Returns the need ID and applied settings.
View tool JSON
{
"name": "submit_requirement",
"kind": "transact",
"impl": "imperative",
"description": "Add or update your need; requirementId updates an existing one. Hard needs classify candidates; unknown evidence remains uncertain. Shared publishes content; application-private stores it for the app and owner; agent-private declares without payload/note and uses screening verdicts. Returns the need ID and applied settings.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"baseRevision",
"visibility",
"hardness",
"delegation"
],
"properties": {
"baseRevision": {
"minimum": 0,
"description": "Use the revision from your last sync; on sync_required, read the delta before retrying.",
"type": "integer"
},
"requirementId": {
"maxLength": 40,
"type": "string"
},
"visibility": {
"type": "string",
"enum": [
"shared",
"application-private",
"agent-private"
]
},
"hardness": {
"type": "string",
"enum": [
"hard",
"soft"
]
},
"delegation": {
"additionalProperties": false,
"type": "object",
"required": [
"mode"
],
"properties": {
"mode": {
"type": "string",
"enum": [
"locked",
"approval_required",
"negotiable",
"soft"
]
},
"bound": {
"additionalProperties": false,
"type": "object",
"required": [
"dimension",
"max"
],
"properties": {
"dimension": {
"type": "string",
"enum": [
"radius_m",
"per_person_eur",
"walk_min"
]
},
"max": {
"type": "number"
}
}
}
}
},
"payload": {
"anyOf": [
{
"additionalProperties": false,
"type": "object",
"required": [
"kind",
"key",
"expect"
],
"properties": {
"kind": {
"const": "attribute",
"type": "string"
},
"key": {
"type": "string",
"enum": [
"vegetarian-options",
"vegan-options",
"gluten-free-options",
"halal-options",
"lactose-free-options",
"wheelchair-accessible",
"outdoor-seating",
"dog-friendly",
"wifi",
"quiet",
"step-free-entrance",
"accessible-toilet",
"assistance-dog-access",
"takeaway",
"delivery",
"price-level",
"cuisine"
]
},
"expect": {
"type": "string",
"enum": [
"verified_true",
"verified_false"
]
}
}
},
{
"additionalProperties": false,
"type": "object",
"required": [
"kind",
"dimension",
"max"
],
"properties": {
"kind": {
"const": "scope",
"type": "string"
},
"dimension": {
"type": "string",
"enum": [
"walk_min",
"radius_m"
]
},
"max": {
"type": "number"
},
"referent": {
"$ref": "#/$defs/schema1"
}
}
},
{
"additionalProperties": false,
"type": "object",
"required": [
"kind",
"dimension",
"max",
"mode"
],
"properties": {
"kind": {
"const": "scope",
"type": "string"
},
"dimension": {
"const": "travel_min",
"type": "string"
},
"max": {
"type": "number"
},
"mode": {
"type": "string",
"enum": [
"walk",
"bike",
"car",
"transit"
]
},
"referent": {
"$ref": "#/$defs/schema1"
}
}
},
{
"additionalProperties": false,
"type": "object",
"required": [
"kind",
"perPersonMax"
],
"properties": {
"kind": {
"const": "budget",
"type": "string"
},
"perPersonMax": {
"additionalProperties": false,
"type": "object",
"required": [
"amount",
"currency"
],
"properties": {
"amount": {
"minimum": 0,
"type": "number"
},
"currency": {
"type": "string",
"enum": [
"EUR",
"USD"
]
}
}
}
}
},
{
"additionalProperties": false,
"type": "object",
"required": [
"kind",
"window"
],
"properties": {
"kind": {
"const": "time",
"type": "string"
},
"window": {
"additionalProperties": false,
"type": "object",
"required": [
"start",
"end"
],
"properties": {
"start": {
"format": "date-time",
"maxLength": 40,
"type": "string"
},
"end": {
"format": "date-time",
"maxLength": 40,
"type": "string"
}
}
},
"phrase": {
"minLength": 1,
"maxLength": 200,
"type": "string"
}
}
},
{
"additionalProperties": false,
"type": "object",
"required": [
"kind",
"text"
],
"properties": {
"kind": {
"const": "text",
"type": "string"
},
"text": {
"minLength": 1,
"maxLength": 200,
"type": "string"
},
"evidenceKeys": {
"maxItems": 6,
"uniqueItems": true,
"type": "array",
"items": {
"type": "string",
"enum": [
"vegetarian-options",
"vegan-options",
"gluten-free-options",
"halal-options",
"lactose-free-options",
"wheelchair-accessible",
"outdoor-seating",
"dog-friendly",
"wifi",
"quiet",
"step-free-entrance",
"accessible-toilet",
"assistance-dog-access",
"takeaway",
"delivery",
"price-level",
"cuisine",
"nearby-toilets"
]
}
}
}
},
{
"additionalProperties": false,
"type": "object",
"required": [
"kind",
"key",
"values",
"lifetime"
],
"properties": {
"kind": {
"const": "exclusion",
"type": "string"
},
"key": {
"const": "cuisine",
"type": "string"
},
"values": {
"minItems": 1,
"maxItems": 8,
"type": "array",
"items": {
"maxLength": 60,
"type": "string"
}
},
"lifetime": {
"type": "string",
"enum": [
"session",
"durable"
]
}
}
},
{
"additionalProperties": false,
"type": "object",
"required": [
"kind",
"key",
"values",
"lifetime"
],
"properties": {
"kind": {
"const": "inclusion",
"type": "string"
},
"key": {
"const": "cuisine",
"type": "string"
},
"values": {
"minItems": 1,
"maxItems": 8,
"type": "array",
"items": {
"maxLength": 60,
"type": "string"
}
},
"lifetime": {
"type": "string",
"enum": [
"session",
"durable"
]
}
}
}
]
},
"scopeHint": {
"additionalProperties": false,
"type": "object",
"required": [
"affects"
],
"properties": {
"affects": {
"const": "candidate-eligibility",
"type": "string"
},
"category": {
"type": "string",
"enum": [
"dietary",
"accessibility",
"budget",
"distance",
"time",
"personal-history",
"atmosphere",
"other"
]
}
}
},
"note": {
"maxLength": 200,
"type": "string"
}
},
"$defs": {
"schema3": {
"minLength": 1,
"maxLength": 40,
"description": "Step whose chosen place this referent points at; omit for the current step (`s1` by default).",
"type": "string"
},
"schema2": {
"additionalProperties": false,
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"const": "self",
"type": "string"
},
"stepId": {
"$ref": "#/$defs/schema3"
}
}
},
"schema4": {
"additionalProperties": false,
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"const": "scopeCenter",
"type": "string"
},
"stepId": {
"$ref": "#/$defs/schema3"
}
}
},
"schema5": {
"additionalProperties": false,
"type": "object",
"required": [
"kind",
"candidateId"
],
"properties": {
"kind": {
"const": "candidate",
"type": "string"
},
"candidateId": {
"minLength": 1,
"maxLength": 40,
"type": "string"
},
"stepId": {
"$ref": "#/$defs/schema3"
}
}
},
"schema6": {
"additionalProperties": false,
"type": "object",
"required": [
"kind",
"participantId"
],
"properties": {
"kind": {
"const": "participant",
"type": "string"
},
"participantId": {
"minLength": 1,
"maxLength": 40,
"type": "string"
},
"stepId": {
"$ref": "#/$defs/schema3"
}
}
},
"schema7": {
"additionalProperties": false,
"type": "object",
"required": [
"kind",
"lat",
"lng"
],
"properties": {
"kind": {
"const": "point",
"type": "string"
},
"lat": {
"minimum": -90,
"maximum": 90,
"type": "number"
},
"lng": {
"minimum": -180,
"maximum": 180,
"type": "number"
},
"label": {
"minLength": 1,
"maxLength": 100,
"type": "string"
},
"stepId": {
"$ref": "#/$defs/schema3"
}
}
},
"schema8": {
"additionalProperties": false,
"type": "object",
"required": [
"kind",
"landmarkId"
],
"properties": {
"kind": {
"const": "landmark",
"type": "string"
},
"landmarkId": {
"minLength": 1,
"maxLength": 100,
"type": "string"
},
"stepId": {
"$ref": "#/$defs/schema3"
}
}
},
"schema1": {
"anyOf": [
{
"$ref": "#/$defs/schema2"
},
{
"$ref": "#/$defs/schema4"
},
{
"$ref": "#/$defs/schema5"
},
{
"$ref": "#/$defs/schema6"
},
{
"$ref": "#/$defs/schema7"
},
{
"$ref": "#/$defs/schema8"
}
]
}
}
}
}withdraw_requirementAction
Withdraw your need using its requirementId from get_spatial_context or its mutation receipt. Recomputes eligibility and returns the affected ID. Stored history keeps its visibility rules.
View tool JSON
{
"name": "withdraw_requirement",
"kind": "act",
"impl": "imperative",
"description": "Withdraw your need using its requirementId from get_spatial_context or its mutation receipt. Recomputes eligibility and returns the affected ID. Stored history keeps its visibility rules.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"baseRevision",
"requirementId"
],
"properties": {
"baseRevision": {
"minimum": 0,
"description": "Use the revision from your last sync; on sync_required, read the delta before retrying.",
"type": "integer"
},
"requirementId": {
"maxLength": 40,
"type": "string"
}
}
}
}set_requirement_activeAction
Set aside or restore one of your own current-step needs without withdrawing it. An inactive need stops affecting eligibility but keeps its row, visibility and history. A need belonging to an already settled step cannot be restored with this tool.
View tool JSON
{
"name": "set_requirement_active",
"kind": "act",
"impl": "imperative",
"description": "Set aside or restore one of your own current-step needs without withdrawing it. An inactive need stops affecting eligibility but keeps its row, visibility and history. A need belonging to an already settled step cannot be restored with this tool.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"baseRevision",
"requirementId",
"active"
],
"properties": {
"baseRevision": {
"minimum": 0,
"description": "Use the revision from your last sync; on sync_required, read the delta before retrying.",
"type": "integer"
},
"requirementId": {
"maxLength": 40,
"type": "string"
},
"active": {
"type": "boolean"
}
}
}
}evaluate_candidatesAction
Record up to 10 candidate verdicts covering all your agent-private needs together, not one requirement. Use candidate IDs from outstanding evaluation_request items. Send verdict: acceptable, unacceptable or needs_info, and each dossier mapRevision as screenedMapRevision; missing or old revisions stay stale. needs_info requires infoNeeded, which the server receives. Keep private condition text out of that field. Each new verdict replaces your prior verdict for that candidate.
View tool JSON
{
"name": "evaluate_candidates",
"kind": "act",
"impl": "imperative",
"description": "Record up to 10 candidate verdicts covering all your agent-private needs together, not one requirement. Use candidate IDs from outstanding evaluation_request items. Send verdict: acceptable, unacceptable or needs_info, and each dossier mapRevision as screenedMapRevision; missing or old revisions stay stale. needs_info requires infoNeeded, which the server receives. Keep private condition text out of that field. Each new verdict replaces your prior verdict for that candidate.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"baseRevision",
"verdicts"
],
"properties": {
"baseRevision": {
"minimum": 0,
"description": "Use the revision from your last sync; on sync_required, read the delta before retrying.",
"type": "integer"
},
"verdicts": {
"minItems": 1,
"maxItems": 10,
"uniqueItems": true,
"type": "array",
"items": {
"anyOf": [
{
"additionalProperties": false,
"type": "object",
"required": [
"candidateId",
"verdict"
],
"properties": {
"candidateId": {
"maxLength": 40,
"type": "string"
},
"verdict": {
"type": "string",
"enum": [
"acceptable",
"unacceptable"
]
},
"infoNeeded": {
"minLength": 1,
"maxLength": 100,
"type": "string"
},
"screenedMapRevision": {
"minimum": 0,
"description": "mapRevision from the inspected dossier; omission records a legacy verdict as stale.",
"type": "integer"
}
}
},
{
"additionalProperties": false,
"type": "object",
"required": [
"candidateId",
"verdict",
"infoNeeded"
],
"properties": {
"candidateId": {
"maxLength": 40,
"type": "string"
},
"verdict": {
"const": "needs_info",
"type": "string"
},
"infoNeeded": {
"minLength": 1,
"maxLength": 100,
"type": "string"
},
"screenedMapRevision": {
"minimum": 0,
"description": "mapRevision from the inspected dossier; omission records a legacy verdict as stale.",
"type": "integer"
}
}
}
]
}
}
}
}
}respond_to_proposalAction
Set your stance on an open or vetoed proposal: accept, reject, abstain or conditionally_accept. A rejection blocks agreement while it stands. Accepting also marks you ready; abstaining does not. conditionally_accept carries no condition and blocks commit until replaced. reason is optional; omit it for agent-private stances. Staged, committed and withdrawn proposals reject new stances.
View tool JSON
{
"name": "respond_to_proposal",
"kind": "act",
"impl": "imperative",
"description": "Set your stance on an open or vetoed proposal: accept, reject, abstain or conditionally_accept. A rejection blocks agreement while it stands. Accepting also marks you ready; abstaining does not. conditionally_accept carries no condition and blocks commit until replaced. reason is optional; omit it for agent-private stances. Staged, committed and withdrawn proposals reject new stances.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"baseRevision",
"proposalId",
"disposition",
"visibility"
],
"properties": {
"baseRevision": {
"minimum": 0,
"description": "Use the revision from your last sync; on sync_required, read the delta before retrying.",
"type": "integer"
},
"proposalId": {
"maxLength": 40,
"type": "string"
},
"disposition": {
"type": "string",
"enum": [
"accept",
"reject",
"abstain",
"conditionally_accept"
]
},
"visibility": {
"type": "string",
"enum": [
"shared",
"application-private",
"agent-private"
]
},
"reason": {
"additionalProperties": false,
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"type": "string",
"enum": [
"history",
"domain"
]
},
"note": {
"maxLength": 200,
"type": "string"
}
}
}
}
}
}resolve_private_requestAction
Grant or deny an adjustment request addressed to you in outstanding. A grant within its delegated bound applies immediately; an outside-bound grant returns staged: true and requires page confirmation before applying. Denial closes the request. This tool answers an existing adjustment; it does not change its terms or implement disclosure escalation.
View tool JSON
{
"name": "resolve_private_request",
"kind": "act",
"impl": "imperative",
"description": "Grant or deny an adjustment request addressed to you in outstanding. A grant within its delegated bound applies immediately; an outside-bound grant returns staged: true and requires page confirmation before applying. Denial closes the request. This tool answers an existing adjustment; it does not change its terms or implement disclosure escalation.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"baseRevision",
"requestId",
"decision"
],
"properties": {
"baseRevision": {
"minimum": 0,
"description": "Use the revision from your last sync; on sync_required, read the delta before retrying.",
"type": "integer"
},
"requestId": {
"maxLength": 40,
"type": "string"
},
"decision": {
"type": "string",
"enum": [
"grant",
"deny"
]
}
}
}
}set_ready_stateAction
Mark yourself ready or contributing. Staging agreement also requires every participant to accept or abstain on the proposal, with no veto or conditional stance. Disconnected participants still count. Readiness carries into subsequent plan steps; each proposal requires its own stances.
View tool JSON
{
"name": "set_ready_state",
"kind": "act",
"impl": "imperative",
"description": "Mark yourself ready or contributing. Staging agreement also requires every participant to accept or abstain on the proposal, with no veto or conditional stance. Disconnected participants still count. Readiness carries into subsequent plan steps; each proposal requires its own stances.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"baseRevision",
"state"
],
"properties": {
"baseRevision": {
"minimum": 0,
"description": "Use the revision from your last sync; on sync_required, read the delta before retrying.",
"type": "integer"
},
"state": {
"type": "string",
"enum": [
"contributing",
"ready"
]
}
}
}
}set_originAction
Set your starting position and optional label. The stored origin is visible to the application and you; the page separately controls live sharing, off by default. Your position can affect shared eligibility even while live sharing is off. This does not change the shared search circle.
View tool JSON
{
"name": "set_origin",
"kind": "act",
"impl": "imperative",
"description": "Set your starting position and optional label. The stored origin is visible to the application and you; the page separately controls live sharing, off by default. Your position can affect shared eligibility even while live sharing is off. This does not change the shared search circle.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"baseRevision",
"position",
"source"
],
"properties": {
"baseRevision": {
"minimum": 0,
"description": "Use the revision from your last sync; on sync_required, read the delta before retrying.",
"type": "integer"
},
"position": {
"additionalProperties": false,
"type": "object",
"required": [
"lat",
"lng"
],
"properties": {
"lat": {
"minimum": -90,
"maximum": 90,
"type": "number"
},
"lng": {
"minimum": -180,
"maximum": 180,
"type": "number"
}
}
},
"label": {
"minLength": 1,
"maxLength": 100,
"type": "string"
},
"source": {
"type": "string",
"enum": [
"device",
"stated"
]
}
}
}
}confirm_agreementAction
Stage an open proposal for final page confirmation. Organizer only: every participant must be ready and have accepted or abstained, with no veto or conditional stance. Returns staged: true; it does not commit. The page commit rechecks these conditions, then settles the current plan step or opens final arrival planning.
View tool JSON
{
"name": "confirm_agreement",
"kind": "act",
"impl": "imperative",
"description": "Stage an open proposal for final page confirmation. Organizer only: every participant must be ready and have accepted or abstained, with no veto or conditional stance. Returns staged: true; it does not commit. The page commit rechecks these conditions, then settles the current plan step or opens final arrival planning.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"baseRevision",
"proposalId"
],
"properties": {
"baseRevision": {
"minimum": 0,
"description": "Use the revision from your last sync; on sync_required, read the delta before retrying.",
"type": "integer"
},
"proposalId": {
"maxLength": 40,
"type": "string"
}
}
}
}find_landmarksAnswer
Find named landmarks in this room's prepared area before submitting a distance need. Returns stable landmark IDs, names, place-type labels and locations ranked by name match. Use a returned landmarkId in a scope referent. This is a landmark search, not worldwide venue discovery.
View tool JSON
{
"name": "find_landmarks",
"kind": "answer",
"impl": "imperative",
"description": "Find named landmarks in this room's prepared area before submitting a distance need. Returns stable landmark IDs, names, place-type labels and locations ranked by name match. Use a returned landmarkId in a scope referent. This is a landmark search, not worldwide venue discovery.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"minLength": 1,
"maxLength": 100,
"description": "Landmark or public place name to resolve in this room's area.",
"type": "string"
}
}
}
}get_spatial_contextAnswer
Summarize the current plan, needs, participants and candidate choices. Returns stable IDs, recorded-evidence classifications and estimated-walk ordering. Continue page.nextCursor with cursor only. Pages share a five-minute snapshot; start again without cursor for current state. Starts no lookup.
View tool JSON
{
"name": "get_spatial_context",
"kind": "answer",
"impl": "imperative",
"description": "Summarize the current plan, needs, participants and candidate choices. Returns stable IDs, recorded-evidence classifications and estimated-walk ordering. Continue page.nextCursor with cursor only. Pages share a five-minute snapshot; start again without cursor for current state. Starts no lookup.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"properties": {
"cursor": {
"minLength": 1,
"maxLength": 100,
"description": "Continue a candidate snapshot unchanged; omit other arguments. Expires after five minutes or document reload.",
"type": "string"
},
"limit": {
"minimum": 1,
"maximum": 20,
"description": "Maximum candidates per page; default eight. The result budget may return fewer.",
"type": "integer"
},
"query": {
"minLength": 1,
"maxLength": 100,
"description": "Filter candidates by name or category within the room's current pool.",
"type": "string"
},
"eligibility": {
"type": "string",
"enum": [
"eligible",
"likely",
"uncertain",
"unlikely",
"excluded"
]
}
}
}
}inspect_candidatesAnswer
Read cached facts for 1-3 candidate IDs, in requested order. Returns active-need verdicts, map revisions, evidence source/time and availableKeys. Choose keys or details (hours, evidence, links). Starts no lookup; use look_up_places to refresh evidence.
View tool JSON
{
"name": "inspect_candidates",
"kind": "answer",
"impl": "imperative",
"description": "Read cached facts for 1-3 candidate IDs, in requested order. Returns active-need verdicts, map revisions, evidence source/time and availableKeys. Choose keys or details (hours, evidence, links). Starts no lookup; use look_up_places to refresh evidence.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"candidateIds"
],
"properties": {
"candidateIds": {
"minItems": 1,
"maxItems": 3,
"type": "array",
"items": {
"maxLength": 40,
"description": "Stable candidateId from get_spatial_context.",
"type": "string"
}
},
"keys": {
"minItems": 1,
"maxItems": 12,
"uniqueItems": true,
"description": "Attribute keys to return. By default prioritize active needs and recorded positive facts. Available keys are returned.",
"type": "array",
"items": {
"minLength": 1,
"maxLength": 100,
"type": "string"
}
},
"details": {
"maxItems": 3,
"uniqueItems": true,
"description": "Optional detail groups. Evidence includes notes and source links; hours are in the returned timezone.",
"type": "array",
"items": {
"type": "string",
"enum": [
"hours",
"evidence",
"links"
]
}
}
}
}
}set_search_scopeAction
Organizer only: change the shared circle and/or walk/bike/car transport modes. Provide area, transport or both. The change applies to the room and recomputes eligibility without collecting affected members' consent. Circle radii are 100-5000 metres. This does not calculate routes or set a planning time.
View tool JSON
{
"name": "set_search_scope",
"kind": "act",
"impl": "imperative",
"description": "Organizer only: change the shared circle and/or walk/bike/car transport modes. Provide area, transport or both. The change applies to the room and recomputes eligibility without collecting affected members' consent. Circle radii are 100-5000 metres. This does not calculate routes or set a planning time.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"baseRevision"
],
"properties": {
"baseRevision": {
"minimum": 0,
"description": "Use the revision from your last sync; on sync_required, read the delta before retrying.",
"type": "integer"
},
"area": {
"additionalProperties": false,
"type": "object",
"required": [
"kind",
"center",
"radiusM"
],
"properties": {
"kind": {
"const": "circle",
"type": "string"
},
"center": {
"additionalProperties": false,
"type": "object",
"required": [
"lat",
"lng"
],
"properties": {
"lat": {
"minimum": -90,
"maximum": 90,
"type": "number"
},
"lng": {
"minimum": -180,
"maximum": 180,
"type": "number"
}
}
},
"radiusM": {
"minimum": 100,
"maximum": 5000,
"type": "integer"
}
}
},
"transport": {
"minItems": 1,
"maxItems": 3,
"uniqueItems": true,
"type": "array",
"items": {
"type": "string",
"enum": [
"walk",
"bike",
"car"
]
}
}
}
}
}add_candidatesAction
Add up to 40 source refs from the page's explore/search places to the active step's shared candidate pool. The page is the discovery path for refs. Already-present refs are ignored; the live pool ceiling applies. This adds places without removing existing ones or moving other participants' viewports.
View tool JSON
{
"name": "add_candidates",
"kind": "act",
"impl": "imperative",
"description": "Add up to 40 source refs from the page's explore/search places to the active step's shared candidate pool. The page is the discovery path for refs. Already-present refs are ignored; the live pool ceiling applies. This adds places without removing existing ones or moving other participants' viewports.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"baseRevision",
"refs"
],
"properties": {
"baseRevision": {
"minimum": 0,
"description": "Use the revision from your last sync; on sync_required, read the delta before retrying.",
"type": "integer"
},
"refs": {
"minItems": 1,
"maxItems": 40,
"uniqueItems": true,
"type": "array",
"items": {
"maxLength": 40,
"description": "A `ref` from the explore layer (GET /api/rooms/:id/places).",
"type": "string"
}
}
}
}
}look_up_placesAction
Start evidence lookup for 1-3 candidates using configured sources and models; this can spend provider budget and write caches. Validated explicit venue statements may become verified; other evidence can remain likely or unknown. Returns compact records after a bounded wait; unfinished work continues on the page. Optionally focus on keys or request an interactive refresh with force. Refresh does not guarantee new facts.
View tool JSON
{
"name": "look_up_places",
"kind": "act",
"impl": "imperative",
"description": "Start evidence lookup for 1-3 candidates using configured sources and models; this can spend provider budget and write caches. Validated explicit venue statements may become verified; other evidence can remain likely or unknown. Returns compact records after a bounded wait; unfinished work continues on the page. Optionally focus on keys or request an interactive refresh with force. Refresh does not guarantee new facts.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"candidateIds"
],
"properties": {
"candidateIds": {
"minItems": 1,
"maxItems": 3,
"type": "array",
"items": {
"maxLength": 40,
"description": "Stable candidateId from get_spatial_context.",
"type": "string"
}
},
"keys": {
"minItems": 1,
"maxItems": 6,
"type": "array",
"items": {
"maxLength": 64,
"description": "Missing attribute keys, active criterion IDs, or nearby-toilets for scoped facility context.",
"type": "string"
}
},
"force": {
"description": "Request an interactive refresh of sources and inference for keys. Source caches, failures and provider budgets still apply.",
"type": "boolean"
}
}
}
}propose_destinationAction
Create a shared proposal on a candidate in the current plan step's live pool so participants can take stances. Uncertain or excluded candidates can also be proposed; classification is advice, not agreement. A candidate with an existing live proposal must use that proposal instead.
View tool JSON
{
"name": "propose_destination",
"kind": "act",
"impl": "imperative",
"description": "Create a shared proposal on a candidate in the current plan step's live pool so participants can take stances. Uncertain or excluded candidates can also be proposed; classification is advice, not agreement. A candidate with an existing live proposal must use that proposal instead.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"baseRevision",
"candidateId"
],
"properties": {
"baseRevision": {
"minimum": 0,
"description": "Use the revision from your last sync; on sync_required, read the delta before retrying.",
"type": "integer"
},
"candidateId": {
"maxLength": 40,
"type": "string"
}
}
}
}focus_destinationAction
Select and highlight a known candidate on your page. Publishes your viewing presence to the room and starts evidence lookup. Returns the selected place; proposing a destination is a separate action.
View tool JSON
{
"name": "focus_destination",
"kind": "act",
"impl": "imperative",
"description": "Select and highlight a known candidate on your page. Publishes your viewing presence to the room and starts evidence lookup. Returns the selected place; proposing a destination is a separate action.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"candidateId"
],
"properties": {
"candidateId": {
"maxLength": 40,
"description": "Known candidate to select and pan/highlight; the page shares viewing presence and starts evidence work.",
"type": "string"
}
}
}
}plan_arrivalAction
Record your walk, bike or car arrival mode and optional pickupNote after the final destination is agreed. The mode is shared; the note is private to the application and you. The first plan enters the arrival phase. This stores coordination details; it does not calculate routes, book transport or create a meeting point.
View tool JSON
{
"name": "plan_arrival",
"kind": "act",
"impl": "imperative",
"description": "Record your walk, bike or car arrival mode and optional pickupNote after the final destination is agreed. The mode is shared; the note is private to the application and you. The first plan enters the arrival phase. This stores coordination details; it does not calculate routes, book transport or create a meeting point.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"baseRevision",
"mode"
],
"properties": {
"baseRevision": {
"minimum": 0,
"description": "Use the revision from your last sync; on sync_required, read the delta before retrying.",
"type": "integer"
},
"mode": {
"type": "string",
"enum": [
"walk",
"bike",
"car"
]
},
"pickupNote": {
"maxLength": 200,
"type": "string"
}
}
}
}confirm_factAction
Record a fact you verified for a place with a permanent source reference. Use a vocabulary criterionId or q:<sha1> and boolean lean; open:* time windows and synthetic value IDs are not accepted. The named confirmation applies only in this room and may dispute a verified record. Your private-question note/sourceUrl are discarded. Withdrawal is a page action for the confirmer or organizer.
View tool JSON
{
"name": "confirm_fact",
"kind": "act",
"impl": "imperative",
"description": "Record a fact you verified for a place with a permanent source reference. Use a vocabulary criterionId or q:<sha1> and boolean lean; open:* time windows and synthetic value IDs are not accepted. The named confirmation applies only in this room and may dispute a verified record. Your private-question note/sourceUrl are discarded. Withdrawal is a page action for the confirmer or organizer.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"baseRevision",
"candidateId",
"criterionId",
"lean"
],
"properties": {
"baseRevision": {
"minimum": 0,
"description": "Use the revision from your last sync; on sync_required, read the delta before retrying.",
"type": "integer"
},
"candidateId": {
"maxLength": 40,
"type": "string"
},
"criterionId": {
"anyOf": [
{
"const": "vegetarian-options",
"type": "string"
},
{
"const": "vegan-options",
"type": "string"
},
{
"const": "gluten-free-options",
"type": "string"
},
{
"const": "halal-options",
"type": "string"
},
{
"const": "lactose-free-options",
"type": "string"
},
{
"const": "wheelchair-accessible",
"type": "string"
},
{
"const": "outdoor-seating",
"type": "string"
},
{
"const": "dog-friendly",
"type": "string"
},
{
"const": "wifi",
"type": "string"
},
{
"const": "quiet",
"type": "string"
},
{
"const": "step-free-entrance",
"type": "string"
},
{
"const": "accessible-toilet",
"type": "string"
},
{
"const": "assistance-dog-access",
"type": "string"
},
{
"const": "takeaway",
"type": "string"
},
{
"const": "delivery",
"type": "string"
},
{
"const": "price-level",
"type": "string"
},
{
"const": "cuisine",
"type": "string"
},
{
"pattern": "^q:[0-9a-f]{40}$",
"maxLength": 42,
"type": "string"
}
]
},
"lean": {
"type": "boolean"
},
"note": {
"minLength": 1,
"maxLength": 200,
"type": "string"
},
"sourceUrl": {
"maxLength": 300,
"format": "uri",
"type": "string"
}
}
}
}attest_attributeAction
Add shared, named evidence for a boolean vocabulary key (not price-level or cuisine) or q:<sha1>. Supply verified_true/verified_false, confidence 0-1 and a note stating what you checked. Below 0.7 the answer is likely. Contradictions with verified facts or disagreeing attesters become disputed/unknown. Notes are shared: do not include a private condition. This changes evidence, not a requirement or stance.
View tool JSON
{
"name": "attest_attribute",
"kind": "act",
"impl": "imperative",
"description": "Add shared, named evidence for a boolean vocabulary key (not price-level or cuisine) or q:<sha1>. Supply verified_true/verified_false, confidence 0-1 and a note stating what you checked. Below 0.7 the answer is likely. Contradictions with verified facts or disagreeing attesters become disputed/unknown. Notes are shared: do not include a private condition. This changes evidence, not a requirement or stance.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"required": [
"baseRevision",
"candidateId",
"key",
"status",
"confidence",
"note"
],
"properties": {
"baseRevision": {
"minimum": 0,
"description": "Use the revision from your last sync; on sync_required, read the delta before retrying.",
"type": "integer"
},
"candidateId": {
"maxLength": 40,
"type": "string"
},
"key": {
"anyOf": [
{
"const": "vegetarian-options",
"type": "string"
},
{
"const": "vegan-options",
"type": "string"
},
{
"const": "gluten-free-options",
"type": "string"
},
{
"const": "halal-options",
"type": "string"
},
{
"const": "lactose-free-options",
"type": "string"
},
{
"const": "wheelchair-accessible",
"type": "string"
},
{
"const": "outdoor-seating",
"type": "string"
},
{
"const": "dog-friendly",
"type": "string"
},
{
"const": "wifi",
"type": "string"
},
{
"const": "quiet",
"type": "string"
},
{
"const": "step-free-entrance",
"type": "string"
},
{
"const": "accessible-toilet",
"type": "string"
},
{
"const": "assistance-dog-access",
"type": "string"
},
{
"const": "takeaway",
"type": "string"
},
{
"const": "delivery",
"type": "string"
},
{
"pattern": "^q:[0-9a-f]{40}$",
"maxLength": 42,
"type": "string"
}
]
},
"status": {
"type": "string",
"enum": [
"verified_true",
"verified_false"
]
},
"confidence": {
"minimum": 0,
"maximum": 1,
"type": "number"
},
"note": {
"minLength": 1,
"maxLength": 200,
"type": "string"
},
"sourceUrl": {
"maxLength": 300,
"format": "uri",
"type": "string"
}
}
}
}prepare_navigationAnswer
Return geo:, Google Maps and Apple Maps handoff links from stored coordinates. Pass candidateId to navigate before agreement, or omit it to use the committed destination. Optional from overrides your saved origin. Returning links does not navigate or calculate a route; opening one sends its coordinates to the selected map application.
View tool JSON
{
"name": "prepare_navigation",
"kind": "answer",
"impl": "imperative",
"description": "Return geo:, Google Maps and Apple Maps handoff links from stored coordinates. Pass candidateId to navigate before agreement, or omit it to use the committed destination. Optional from overrides your saved origin. Returning links does not navigate or calculate a route; opening one sends its coordinates to the selected map application.",
"inputSchema": {
"additionalProperties": false,
"type": "object",
"properties": {
"candidateId": {
"maxLength": 40,
"description": "Destination to navigate to. Omit to use the committed agreement.",
"type": "string"
},
"from": {
"additionalProperties": false,
"description": "Starting position for directions. Omit to use your saved origin when available.",
"type": "object",
"required": [
"lat",
"lng"
],
"properties": {
"lat": {
"minimum": -90,
"maximum": 90,
"type": "number"
},
"lng": {
"minimum": -180,
"maximum": 180,
"type": "number"
}
}
}
}
}
}