Inspiration

A booked guest is already late. The house is still holding the table. Staff need a yes, a no, or a human -- not a guess -- before they give the slot away.

Existing CALL-E skills cover the two sides of that moment and miss the moment itself. appointment-call-confirm calls tomorrow's whole book. standby and priority-call-waterfall offer a slot that is already free. Nobody called the late guest who still owns the hold.

What it does

late-hold-triage places at most one CALL-E call to that guest, reads a structured still-coming plus ETA result, and compares the spoken minutes to the remaining hold window.

  • KEEP_HOLD -- they are coming and the ETA fits
  • RELEASE_NOW -- they gave it back, or they cannot arrive in time
  • NEEDS_HUMAN -- no answer, voicemail, or soon with no number
  • HOLD_EXPIRED -- the clock already ran out; no call is placed

Silence is never treated as permission to give the table away. A RELEASE_NOW does not dial the waitlist.

How we built it

A portable Agent Skill plus a thin Python app. Dry-run is the default and uses only the standard library. Live mode needs --confirm, an exact authorized-numbers allowlist, and an allowlisted HTTPS CALL-E origin. Sixteen stdlib tests cover the clock rule, masking, fictional-number refusal, and origin pinning.

Challenges

Korea/Korean destinations are not in CALL-E's live outbound set, so the recorded demo is the real dry-run board rather than a live KR call. The live path is implemented and fail-closed.

What's next

Pair a RELEASE_NOW with a separately approved standby cascade. Keep this skill one guest, one hold, one call.

Built With

Share this project:

Updates

Submission history