openclaw/skills/restaurant-snipe/SKILL.md
Stage tightly scoped background reservation monitoring for OpenTable or Resy after explicit bounded preauthorization. Resy may auto-book after approval; OpenTable remains notification-only until this runtime adapter integrates the deployed live reservations reader. Not for one-shot search, attended booking, or cancellation.
npx skillsauth add Dbochman/dotfiles restaurant-snipeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Stage a reviewable authorization and per-user LaunchAgent for a bounded, cache-only reservation monitor. Staging never deploys, loads, books, or changes a live LaunchAgent.
auto-book scope must not create an attempt marker or call the
booking endpoint while that integration is absent..env-token or
.secrets-cache, or let a LaunchAgent invoke op. Refresh provider caches
interactively before staging; a cache miss at runtime fails closed.Record every field explicitly:
read-only or auto-bookThe absolute expiry must equal the authorization timestamp plus the approved duration. A reservation already inside the requested time window blocks staging.
Load the appropriate platform skill, then resolve and verify the venue with
its attended read-only info or search command.
Review the booking account through its normalized read-only command:
resy-read reservations
opentable-reservations --json
Any command failure, incomplete account proof, malformed row, or authentication uncertainty is unknown—not an empty reservations list—and blocks staging.
Save only normalized, non-secret facts to a temporary JSON file:
{
"reservations": [
{
"platform": "resy",
"venue_id": "example-id",
"date": "YYYY-MM-DD",
"time": "19:00",
"party_size": 2,
"status": "confirmed"
}
]
}
Use an empty reservations array only after the attended check confirms none.
~/.openclaw and ~/Library/LaunchAgents:restaurant-snipe stage \
--output-dir /tmp/restaurant-snipe-review/<job> \
--slug <job> \
--authorization-id <approval-reference> \
--approved-by <approver> \
--authorized-at <ISO-8601-with-timezone> \
--platform <opentable-or-resy> \
--booking-mode <read-only-or-auto-book> \
--venue-id <verified-id> \
--venue-name <verified-name> \
--date <YYYY-MM-DD> \
--party-size <number> \
--target-time <HH:MM> \
--window-start <HH:MM> \
--window-end <HH:MM> \
--max-delta-minutes <minutes> \
--duration-seconds <seconds> \
--expires-at <ISO-8601-with-timezone> \
--poll-interval-seconds <300-to-3600> \
--notification-target <explicit-chat-id> \
--existing-reservations-json /tmp/<job>-existing.json \
--existing-reservation-checked-at <ISO-8601-with-timezone> \
--existing-reservation-source <account-view-used>
OpenTable may use digest-bound auto-book only after the user explicitly approves
that mode, but its current adapter still downgrades matches to notified
read-only results because it does not integrate the deployed account reader as
the live pre-mutation guard required for mutation. The helper emits only
authorization.json and a plist in the staging
directory. Inspect both and summarize the approved venue, dates, party, time
policy, declared booking mode, duration, expiry, and whether an existing conflict
was found. Do not display the notification target.
The tracked runner performs one poll per LaunchAgent invocation:
_op_read fallback disabled and
a PATH that excludes Homebrew op/timeout.success: true
alone, or matching human text is insufficient. Resy requires an exact
reservation read-back after every non-exceptional booking call.restaurant-snipe is the skill-local attended wrapper for staging. It rejects
the internal run subcommand; staged plists invoke the tracked Python runner
directly. Do not call the runner against a live authorization merely to test
the skill.
tools
Use exact configured Reolink cameras through the local Home Hub for availability and power status, fresh stills, visual commentary, protected Dylan/Julia/household sharing, and reversible spotlight control. Supports trusted owner tasks and explicitly scoped proactive automations; not for Nest or Ring cameras, arbitrary recipients, recordings, account changes, or raw camera APIs.
data-ai
Privately manage Dylan and Julia's household plant inventory and care history by physical location, bed, and exact Flower Cam view. Use for confirmed plant onboarding from camera conversations, camera- or bed-filtered inventory, record corrections, individual or whole-bed care, and private filtered exports. Pair with reolink-camera when an owner asks about plants visible in Flower Cam images.
testing
Inspect and control the physically secured Reachy Mini at Crosstown through ClawBody. Use for requests to check Reachy, look around, express an emotion, play any official emotion or dance preset, speak proactively, mute or unmute its microphone, stop movement, or describe what its camera sees.
tools
Handle Reachy/iMessage handoffs, selective durable memory, forgetting, and diagnostics; automatic context comes from the gateway plugin.