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
- agent-skills
- call-e
- python
Log in or sign up for Devpost to join the conversation.