An isolated, consent-first CALL-E adapter for one narrow case: Dollar's local safety gate has already blocked an extreme-risk developer action, and a consenting project owner may choose to receive one short callback asking whether work should stop or enter the normal local review flow later.
This repository is a new competition prototype created on 2026-07-30. It contains no Dollar Steam source code, desktop-pet assets, user data, private phone numbers, or production credentials.
Developer-agent safety often fails at the handoff between a local safety event and an unavailable owner. Dollar Callback Gate makes that escalation inspectable and opt-in:
- A deterministic local gate supplies an already-blocked
extremeevent. - The adapter validates the redacted context and recorded recipient consent.
- It produces a masked preview without a network request.
- The user must enter the exact phrase
CALL_OWNER_ONCEfor that preview. - CALL-E asks only whether work should stop or enter normal local review later.
- Every result keeps the original action blocked.
This is deliberately different from a phone approval gate. A callback result can never approve, unblock, rewrite, or execute the destructive action.
Requires Node.js 22+; no package installation, API key, or phone call is needed.
npm.cmd run verifyThe example uses a reserved fictional US number. Preview mode masks it and makes no network request.
- only
blocked_destructive_actionevents atextremerisk are eligible - consent, owner relationship, E.164 format, redacted context, and idempotency are required locally
- previews cannot instantiate a live call
- a CALL-E create request uses
POST /v1/calls, a stable idempotency key, and a constrained result schema - only the official API origin or a loopback test server may receive the key
- ambiguous provider failures never trigger an automatic retry
- output omits raw transcripts, notes, phone numbers, and provider error bodies
actionRemainsBlockedis alwaystrue
The live route uses the official CALL-E Developer API at
https://api.heycall-e.com. Review the
CALL-E API reference and create an
API key through the CALL-E dashboard.
A real run creates an external phone call and may consume CALL-E credits. Use only a number belonging to a person who explicitly consented to this one-time safety callback.
- Create a private request that Git ignores:
Copy-Item examples\safety-escalation.json examples\live-safety-escalation.private.json-
Edit only the private copy. Replace the reserved number, record the real consent time, keep
secretValuesempty, and keep the action summary redacted. -
Run preview again and inspect the exact task:
node src\cli.mjs --preview examples\live-safety-escalation.private.json- If the preview and recipient are correct, enter the API key through a hidden PowerShell prompt and make exactly one call:
$secureCalleKey = Read-Host 'CALL-E API key' -AsSecureString
$calleKeyPointer = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureCalleKey)
try {
$env:CALLE_API_KEY = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($calleKeyPointer)
node src\cli.mjs --call examples\live-safety-escalation.private.json CALL_OWNER_ONCE
}
finally {
Remove-Item Env:CALLE_API_KEY -ErrorAction SilentlyContinue
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($calleKeyPointer)
Remove-Variable secureCalleKey, calleKeyPointer -ErrorAction SilentlyContinue
}The CLI waits for a terminal provider state for up to four minutes and prints
only the constrained decision. Timeout, malformed output, an unexpected
recipient, or an ambiguous create response produces failed_closed or
unknown; do not retry with a new idempotency key.
- Default mode is preview-only and makes no network request.
- The full phone number exists only in the private input and outbound CALL-E request; user-visible output is masked or omitted.
- The API key is read from the process environment only and is sent only to the exact official CALL-E origin. Loopback HTTP is allowed solely for local tests.
- Raw transcripts, free-form notes, source code, secrets, and provider error bodies are not printed.
- A call reaches only the already-consenting project owner.
- The result is
stop,approve_after_review, orunknown.approve_after_reviewstill requires the ordinary local approval flow. - This is not an emergency, authentication, payment, medical, legal, surveillance, or debt-collection workflow.
- Reusable upstream CALL-E Skill PR: CALLE-AI/awesome-phone-call-agents#54
- Reproducible no-call judge path: JUDGE_GUIDE.md
- Isolated public implementation: this repository
src/callback-gate.mjs local validation, preview, and one-time authorization
src/calle-api.mjs trusted-host API client, polling, and safe result summary
src/cli.mjs preview or explicit one-time live-call command
test/ no-network safety and API-contract tests
skill/ reusable consent-first callback skill
JUDGE_GUIDE.md reproducible preview-only judge path
- Local safety, API-contract, fail-closed, and privacy tests pass without a provider account.
- A live CALL-E call still requires a separately configured API key and a consenting test recipient; neither is bundled.
- The competition video must show one real, consented CALL-E call before final submission. A fixture-only preview will not be described as a live call.