MESS Protocol v1.1¶
Meatspace Execution and Submission System¶
Changelog¶
| Version | Date | Changes |
|---|---|---|
| 1.1.0 | 2026-02-08 | Add needed_by, confirm_before, structured responses, location schema, claim estimates |
| 1.0.0 | 2026-01-31 | Initial release |
Summary of Changes from v1.0¶
New Request Fields¶
| Field | Type | Description |
|---|---|---|
needed_by |
datetime | When the request becomes stale (top-level, simpler than constraints.timing.expires) |
confirm_before |
boolean | Require confirmation before executor proceeds |
New Status Fields¶
| Field | Context | Description |
|---|---|---|
estimate |
claimed status |
ISO 8601 duration for expected completion time |
Structured Response Schemas¶
Responses now have defined schemas for each response_hint type, making them machine-readable.
1. Request Extensions¶
1.1 needed_by — Request Expiration¶
Physical-world tasks are time-sensitive. A request to check the door before bed is useless at 6am.
Behavior:
- If needed_by passes before the request is claimed, the exchange MAY auto-transition to expired status
- If needed_by passes while in_progress, the executor decides whether to continue
- Executors SHOULD see needed_by when claiming to assess feasibility
Relationship to constraints.timing:
- needed_by is a convenience field equivalent to constraints.timing.expires
- If both are specified, needed_by takes precedence
- Use needed_by for simple cases; use constraints.timing for complex scheduling
1.2 confirm_before — Pre-execution Confirmation¶
For consequential or irreversible actions, the requestor may require confirmation before the executor proceeds.
Behavior:
- Executor MUST send needs_confirmation status before taking action
- Executor includes action description and optionally consequences
- Requestor replies with confirm: true or confirm: false
- If confirm: false, executor transitions to cancelled or held
Enforcement: - If executor submits a response without prior confirmation, the exchange SHOULD reject it - The exchange MAY allow a grace period for executors that don't support v1.1
Example flow:
# Request
MESS:
- request:
id: water-valve
intent: Turn off the main water valve
confirm_before: true
---
# Executor seeks confirmation
MESS:
- status:
re: water-valve
code: needs_confirmation
executor: home-assistant
action: Close main water shutoff valve in garage
consequences: All water fixtures will stop working
reversible: true
---
# Requestor confirms
MESS:
- reply:
re: water-valve
confirm: true
---
# Executor completes
MESS:
- response:
re: water-valve
content:
- confirmation: true
2. Status Extensions¶
2.1 estimate on Claim¶
When claiming a request, executors MAY provide an estimated completion time.
MESS:
- status:
re: grocery-run
code: claimed
executor: instacart-proxy
estimate: PT45M # ISO 8601 duration: 45 minutes
Format: ISO 8601 duration (PT30M, PT2H, P1D)
Relationship to eta:
- estimate is a duration (how long: PT45M)
- eta (from v1.0) is an absolute time (when done: 17:30:00)
- Both MAY be provided; estimate is preferred for v1.1
Usage:
- Helps requestor decide whether to wait or context-switch
- Not a commitment — actual completion may vary
- Executor MAY update estimate via subsequent in_progress status
3. Structured Response Schemas¶
When a request includes response_hint, the response SHOULD use the corresponding structured format. This makes responses machine-readable.
3.1 Response Hint Types¶
| Hint | Response Schema | Description |
|---|---|---|
text |
string | Free-form text description |
image |
image content entry | Photo or image |
video |
video content entry | Video recording |
audio |
audio content entry | Audio recording or voice note |
location |
location object | Geographic location |
file |
file content entry | Document or data file |
confirmation |
confirmation object | Yes/no acknowledgment |
3.2 Location Schema¶
Location responses include both machine-readable coordinates AND human-readable descriptions.
location:
# Machine-readable (at least one of lat/lng or address recommended)
lat: 37.7749
lng: -122.4194
accuracy: 10 # meters, optional
altitude: 15 # meters, optional
# Human-readable (at least one recommended)
name: "Kitchen" # Casual/local name
address: "52 Paradise Dr, Corte Madera, CA 94925" # Formal address
description: "By the back door" # Additional context
Design rationale:
- lat/lng are canonical for machine processing
- name captures local/casual references ("Kitchen", "Samuel P. Taylor Park")
- address captures formal postal addresses
- description adds context that doesn't fit elsewhere
- Executors SHOULD provide what's natural; consumers pick what's useful
Request vs Response locations:
- Request constraints.location (v1.0) defines a target area: { lat, lng, radius_km }
- Response location (v1.1) describes a specific place: { lat, lng, name, address, description }
- These serve different purposes and have different schemas intentionally
Examples:
# Indoor location
location:
name: Kitchen
description: By the refrigerator
# Outdoor with coordinates
location:
lat: 37.9542
lng: -122.7261
name: Samuel P. Taylor Park
description: Near the main picnic area
# Delivery address
location:
address: "52 Paradise Dr, Corte Madera, CA 94925"
description: Leave at front door
3.3 Confirmation Schema¶
Or shorthand: confirmation: true
3.4 Full Response Example¶
Request:
Response:
MESS:
- response:
re: last
content:
- location:
lat: 37.9234
lng: -122.5193
name: Safeway
address: "180 Donahue St, Sausalito, CA 94965"
- Picking up groceries, should be home in 20 minutes
3.5 Multiple Hints¶
When multiple hints are specified, response SHOULD include matching content entries:
# Request
response_hint:
- image
- location
- text
# Response content
content:
- image: data:image/jpeg;base64,...
- location:
name: Backyard
description: The garden bed by the fence
- The tomatoes are looking healthy, about 2 weeks from harvest
4. Updated Request Schema¶
MESS:
- request:
# === REQUIRED ===
intent: string
# === NEW IN v1.1 ===
needed_by: datetime # When request becomes stale
confirm_before: boolean # Require confirmation before action
# === OPTIONAL (unchanged from v1.0) ===
id: string
precision: loose | guided | exact
requires:
- <capability-id>
context:
- <entry>
constraints:
location: string | { lat, lng, radius_km }
timing:
not_before: datetime
expires: datetime | duration
urgency: whenever | soon | now
environment: [string]
depends_on: [id]
response_hint:
- <type>
priority: background | normal | elevated | urgent
compensation:
shells: integer
note: string
5. Compatibility¶
5.1 Version Negotiation¶
- v1.1 messages SHOULD include
v: 1.1.0 - v1.0 consumers that encounter unknown fields MUST ignore them
- v1.1 features gracefully degrade:
needed_byignored → request never auto-expires (v1.0 behavior)confirm_beforeignored → executor proceeds without confirmationestimateignored → requestor has no ETA information- Structured responses parsed as generic content entries
5.2 Migration¶
No migration required. v1.1 is fully backward compatible with v1.0.
6. Examples¶
6.1 Time-Sensitive Request¶
MESS:
- v: 1.1.0
- request:
intent: Check if the garage door is closed
needed_by: "2026-02-08T23:00:00-08:00"
response_hint:
- image
- confirmation
6.2 Consequential Action with Confirmation¶
MESS:
- v: 1.1.0
- request:
intent: Delete all photos from the shared album
confirm_before: true
context:
- The album named "Old Vacation Photos"
- We've already backed these up to the NAS
6.3 Location Request and Response¶
# Request
MESS:
- v: 1.1.0
- request:
intent: Where did I leave my keys?
response_hint:
- location
- image
---
# Response
MESS:
- response:
re: last
content:
- location:
name: Kitchen counter
description: Next to the fruit bowl
- image: data:image/jpeg;base64,...
6.4 Claim with Estimate¶
MESS:
- status:
re: grocery-run
code: claimed
executor: teague-phone
estimate: PT30M
message: Heading to Safeway now
Appendix: Response Hint Reference¶
| Hint | Structured Schema | Example |
|---|---|---|
text |
bare string | - The door is closed |
image |
image: <uri or data> |
- image: data:image/jpeg;base64,... |
video |
video: <uri or data> |
- video: data:video/mp4;base64,... |
audio |
audio: <uri or data> |
- audio: data:audio/wav;base64,... |
location |
location: {lat?, lng?, name?, address?, description?} |
See section 3.2 |
file |
file: <uri or {uri, name?, mime?}> |
- file: file://report.pdf |
confirmation |
confirmation: true or {confirmed, details?} |
- confirmation: true |
MESS Protocol v1.1 — Draft