Discover the catalogue
goals.list
Lists the published Goals. This is the reuse mechanism itself — the thing that makes a procedure library possible rather than a single hard-coded script.
scripts/verify_calle.mjs:49
Architecture
The happy path is four CALL-E Goals API calls. Everything else on this page is the machinery that stops a wrong checklist from reaching someone who is about to cross a city on the strength of it. Two refusals fire before the phone rings; two more fire after it is answered.
Seven measured CALL-E surfaces. Line numbers re-measured against
v1.0.0; scripts/verify_live.mjs holds the same table and
checks it against the live service.
goals.list
Lists the published Goals. This is the reuse mechanism itself — the thing that makes a procedure library possible rather than a single hard-coded script.
scripts/verify_calle.mjs:49
goals.get
Fetches the published input_schema and result_schema before every dial, not once at deploy time. Costs one API call and converts a silent wrong answer into a loud refusal.
skills/countercall/scripts/preflight.mjs:45
goals.run
The only method that makes a phone ring. Carries a business-stable idempotency key, so a retry after a crash can never double-dial a public line with a queue in front of it.
skills/countercall/scripts/call.mjs:70
goals.waitForResult
Polls until either a result or an error exists — never both, never neither. There is no timeout that quietly returns a partial answer.
skills/countercall/scripts/call.mjs:74
Idempotency-Key
countercall:{office}:{procedure}:{date}:v1 — business-stable, not a random UUID. A key that changes on retry is a bug, not a workaround.
skills/countercall/scripts/_lib.mjs:62
diffContract
Compares the pinned contract against the live one and refuses the dial on any mismatch. Dialling a real person with a stale schema returns a result that looks fine and is quietly wrong.
skills/countercall/scripts/_lib.mjs:39
GoalRunError.code
All eight published codes map to distinct, honest outcomes. Not one of them renders a partial checklist.
skills/countercall/scripts/render.mjs:102
renderCard
Six typed fields plus the verbatim line the clerk said. A field nobody answered renders empty and grey — never a typical value, never quietly dropped so the gap disappears.
skills/countercall/scripts/render.mjs:57
no_answerdeclinedresult_invalidresult_unavailable
result_failedtimed_outcall_failedcanceled
Why the schema is the product. The phone call is the part CALL-E handles. The
hard part is the contract around it — pinning it, diffing it before every run, refusing
gracefully when it moves. validateResult and renderCard are
the decision function that must never be wrong, so they are verified across the
entire input space the contract permits: 1,296 valid results, 1,296 rendered
cards checked for invented values, 8,208 single-field corruptions rejected and 720
unexpected-key injections rejected — 11,520 cases. The sweep found a real defect
while it was being written: an empty clerk_quote validated clean, which
would have rendered a card that looks sourced and is not.