holdline
SkillAI & modelsAsk one question of many places by phone and get back only the answers the call actually established. Use for batch phone enquiries where a wrong answer is worse than no answer, supplier stock checks, capacity and availability enquiries, claim and case status, directory verification. Includes evidence checking that catches values a call returns for questions it never asked.
Available today. Use it from your connected AI after setup.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the holdline skill
What this skill tells your AI
The instructions your AI receives, as published by calle-ai/awesome-phone-call-agents in skills/holdline/SKILL.md and read by ahel’s review.
Place a batch of phone enquiries through CALL-E, then check every returned field against the transcript turns the agent actually spoke. A field whose question was never asked does not come back, whatever the model reported.
When to use this
Use it when the same question goes to several places and a confidently wrong answer causes real damage: sourcing a part across suppliers, checking which clinics have capacity, chasing case status across agencies, verifying that a directory listing is still true.
Do not use it for a conversation, for anything requiring negotiation or judgement on the call, or where a person must decide something in the moment. This asks a fixed question and records the answer.
Safety
- Real calls reach real people.
run_holdrequiresconfirm: truein the same request. There is no setting that removes the confirmation. - Plan first.
plan_holdshows the compiled task, every number it would dial, and what the ledger already knows. It never dials. - Do not guess phone numbers, country codes, or subject ids. Ask the user.
- Emergency and crisis-line prefixes are refused unconditionally and cannot be enabled by configuration.
- Every number in every response is masked. Do not attempt to reconstruct one, and do not echo raw numbers the user gave you back into a report.
- An unknown call outcome is never re-dialed. If
run_holdreturnsoutcome: "unresolved", report it and stop; a retry rings a second person.
Setup
This directory is documentation. It contains no runnable code. The three tools below are served by an MCP server that lives in a separate repository, and the commands here only work from a clone of it:
git clone https://github.com/Elioz404/HOLDLINE
cd HOLDLINE
npm install
export CALLE_API_KEY=... # server-side only, never in client code
npm run mcp # serves plan_hold, run_hold, get_verdict over stdio
Then point your MCP client at that command. Nothing in this skill directory is
executable, and running npm inside it will not work.
Without CALLE_API_KEY, plan_hold still works — planning needs no network —
and the dialing tools return an error saying exactly what is missing.
To exercise the tools with no CALL-E account at all, from the same clone:
HOLDLINE_SIMULATE=1 npm run mcp
Every response is then tagged simulated: true with a notice saying no
telephone was involved. Treat simulated output as a rehearsal, never as a
finding, and say so if you report it.
Tools
plan_hold
Compiles the task within CALL-E's 255-character limit, validates every number, derives the idempotency key from the authorizing record, and reports which targets the freshness ledger already answers. Dials nothing.
Start here every time.
run_hold
Dispatches the batch as one call task with many recipients, then judges each
answer separately. Requires confirm: true.
Returns per target: a verdict, the gated result, and the reasons. Fields the
transcript does not support are null.
get_verdict
Fetches a call by id and judges it. Use it to re-examine a call, or to reconcile one whose outcome was unknown.
Reading the verdicts
| Verdict | Meaning |
|---|---|
verified | The agent raised the topic and a usable answer came back. |
asked_but_unclear | The agent asked; the answer was not usable. |
unattributed | Some question was asked and answered, but none of this field's probes match it, so the answer cannot be pinned here. |
attributed | No probe matched, but exactly one question went unclaimed and this was the only unmatched field, so the answer can only have come from it. Weaker evidence than a match, and reported as such. Only appears when elimination is enabled. |
never_asked | Nothing was asked that this value could answer. If a value came back anyway, it is flagged. |
no_transcript | No transcript, so nothing could be checked. |
A batch verdict is verified only when every required field is verified —
or attributed, if the caller enabled elimination — and completion confidence
clears the floor. There is no partial pass.
never_asked with a value present is the case worth surfacing to the user: the
call returned something the conversation does not support.
Writing probes
A probe is the list of phrases that identify the agent raising a topic. Write the words the agent would actually say, not the field name.
{ "name": "accepts_new_patients", "asks": ["new patients", "accepting new", "taking patients"] }
Matching is lexical, so a question phrased in words no probe contains reads as
unattributed and is withheld. That is the safe direction, but it costs a real
answer — see references/probes.md before writing them for a new workflow.
Every result carries unclaimedQuestions: the questions the agent asked that no
probe claimed, verbatim. If one of them is the question you meant to ask, add
its wording to that field. That is the fix; elimination is the fallback.
Side effects and cancellation
run_hold places outbound calls, billed per call, one per dialable target,
dispatched together. Each target carries its own idempotency key derived from
batchId, workflow, intent and that target's subject id; running the batch
again fetches each existing call rather than dialing anyone a second time.
One call per target rather than one call with many recipients, because a multi-recipient call returns no transcript turns and this skill has nothing to verify without them.
Nothing in this skill schedules recurring work, so there is nothing to cancel. A batch in flight cannot be recalled — the confirmation before dispatch is the only stopping point.
References
references/safety.md— what a phone answer proves, and what it does not.references/probes.md— writing probes, and the failure they trade against.
Signals
- GitHub stars
- 104
- Forks
- 527
- Last commit
- Sep 2026
ahel review
K1binfo
installs-packagesK1binfo
installs-packages (in references/examples.md)K1binfo
installs-packages (in references/probes.md)
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Item type
- skill
- Key
holdline- Source
- github.com/calle-ai/awesome-phone-call-agents