Hospitable Ops
Use Hospitable as the unified operational base. Prefer read-first, then safe write verification, then controlled non-price writes.
Core rules
- Treat Hospitable as the system of operational judgment, especially for unified property UUIDs, calendar state, reservations, and parent/child exclusion logic.
- Never expose tokens in chat, logs, screenshots, or shared files.
- Use Hospitable Public API v2 as the only active execution path for reads and automation in this workspace.
- MCP has been removed from the current Hospitable operating path; do not route or describe Hospitable work through MCP.
- Use persistent config or local scripts; avoid session-only ad hoc setup when building repeatable workflows.
- Default to non-price actions only. Price, currency, and money-related changes must be discussed first and then changed manually by the human.
- Assume write effects may be asynchronous. Do not judge failure from an immediate readback alone.
- In this workspace, do not rely on OpenClaw runtime inheriting shell env automatically; prefer script-level loading from
/Users/admin-ai/.openclaw/workspace-qiang/.env.local for repeatable Hospitable execution. HOSPITABLE_TOKEN must contain the token body only; never include a leading Bearer prefix in the env value.
Standard workflow
- Verify
HOSPITABLE_TOKEN is available in the current execution environment without printing it. - If runtime inheritance is uncertain, use local script loading from
.env.local instead of re-debugging shell/profile inheritance. - Read data first:
- properties
- reservations
- calendar
- Save JSON with
statusCode and body envelope. - Build operational judgments from Hospitable first; layer Booking/Airbnb exceptions after.
- For writes, probe safely:
- identify method
- identify minimal body
- test on low-risk future date
- re-read after delay
- Only after semantics are clear, apply controlled non-price changes.
Known API behavior
Read
Use bearer auth plus Accept: application/json.
Current workspace rule:
- default to the current validated token
- treat older/previous Hospitable tokens as deprecated unless the human explicitly restores one
- prefer local env file loading over shell-history fallback or session-only manual export
Common read paths:
propertiesreservations?properties[]=properties//calendar?start_date=YYYY-MM-DD&end_date=YYYY-MM-DD
Runtime inheritance readback (validated)
Validated facts in this workspace:
- host-side token is valid and can return
statusCode: 200 on properties - OpenClaw agent runtime did not automatically inherit
HOSPITABLE_TOKEN - repeatable workaround: load
/Users/admin-ai/.openclaw/workspace-qiang/.env.local directly inside Hospitable scripts - after enabling script-level env loading,
node scripts/hospitable-read.js properties --per-page 1 returned statusCode: 200
Current script CLI contract
/Users/admin-ai/.openclaw/workspace-qiang/scripts/hospitable-read.js
Supported commands:
properties [--per-page N]reservations --property [--per-page N]calendar --property --start YYYY-MM-DD --end YYYY-MM-DD
Important:
calendar uses --start and --end- do not use
--start-date / --end-date with this script - keep
#!/usr/bin/env node on line 1 if editing the script header
Write
For calendar writes:
- route:
properties//calendar - supported method:
PUT PATCH is not supported- request body must include
dates - minimal accepted structure:
{
"dates": [
{ "date": "YYYY-MM-DD" }
]
}
Verified non-price semantics
Block a whole date
{
"dates": [
{ "date": "YYYY-MM-DD", "available": false }
]
}
Expected eventual readback:
status.reason = BLOCKEDstatus.source = apistatus.source_type = VENDORstatus.available = false
Restrict check-in / check-out
{
"dates": [
{
"date": "YYYY-MM-DD",
"closed_for_checkin": true,
"closed_for_checkout": true
}
]
}
Expected eventual readback:
closed_for_checkin = trueclosed_for_checkout = true- day may still remain
AVAILABLE
Operational boundaries
Allowed direct actions
- non-price calendar block/unblock
- check-in/check-out restrictions
- non-price operational lock windows
- parent/child exclusion enforcement
- cross-channel conflict prevention using non-price controls
- one-time cleanup of legacy order occupancy when the business rule is already confirmed
Human-only actions
- price
- currency
- money-related changes
- pricing strategy decisions
Long-term operating model
Reduce the property system into three stable forms whenever possible:
- Airbnb-only
- dual-channel managed by Hospitable native mechanisms
- main-house gate open/closed
Treat legacy exceptions as temporary cleanup layers, not permanent structure.
Current NXM cleanup model
mute(booking) is a historical order source only and should not take new sales.206 -> 201 is a temporary operational occupancy transfer caused by legacy mute orders.- customer-visible order display can remain original while operational occupancy moves internally for anti-overbooking control.
- after cleanup, return to the three stable forms above.
Recommended local files
scripts/hospitable-read.jsscripts/hospitable-write-probe.js- exported JSON snapshots with
statusCode/body - rule config files for object tiers and lock windows
Delay-aware verification
After a write returns 202 accepted:
- wait before declaring failure
- re-read the same date window
- compare operational fields, not only high-level availability
- check whether the change is semantic (blocked vs closed_for_checkin/checkout)
Good output pattern
Report in this order:
- current status
- exact object/date tested
- request accepted or rejected
- delayed readback result
- operational conclusion
- single biggest remaining gap