Investor Outreach
affaan-m/ECC
Draft cold emails, warm intro blurbs, follow-ups, update emails, and investor communications for fundraising.
Contact affected customers about a product recall or corrective notice with CALL-E.
$ npx skills add CALLE-AI/awesome-phone-call-agents --skill recall-outreach -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install CALLE-AI/awesome-phone-call-agents recall-outreach --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/CALLE-AI/awesome-phone-call-agents.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/recall-outreach .claude/skills/recall-outreach && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "recall-outreach" agent skill from https://github.com/CALLE-AI/awesome-phone-call-agents/tree/main/skills/recall-outreach into .claude/skills/recall-outreach/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "recall-outreach", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/CALLE-AI/awesome-phone-call-agents/tree/main/skills/recall-outreachType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add CALLE-AI/awesome-phone-call-agents --skill recall-outreach -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install CALLE-AI/awesome-phone-call-agents recall-outreach --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/CALLE-AI/awesome-phone-call-agents.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/recall-outreach .agents/skills/recall-outreach && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "recall-outreach" agent skill from https://github.com/CALLE-AI/awesome-phone-call-agents/tree/main/skills/recall-outreach into .agents/skills/recall-outreach/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "recall-outreach", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add CALLE-AI/awesome-phone-call-agents --skill recall-outreach -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install CALLE-AI/awesome-phone-call-agents recall-outreach --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/CALLE-AI/awesome-phone-call-agents.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/recall-outreach .cursor/skills/recall-outreach && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "recall-outreach" agent skill from https://github.com/CALLE-AI/awesome-phone-call-agents/tree/main/skills/recall-outreach into .cursor/skills/recall-outreach/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "recall-outreach", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/CALLE-AI/awesome-phone-call-agents.git --path skills/recall-outreach--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add CALLE-AI/awesome-phone-call-agents --skill recall-outreach -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install CALLE-AI/awesome-phone-call-agents recall-outreach --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/CALLE-AI/awesome-phone-call-agents.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/recall-outreach .gemini/skills/recall-outreach && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "recall-outreach" agent skill from https://github.com/CALLE-AI/awesome-phone-call-agents/tree/main/skills/recall-outreach into .gemini/skills/recall-outreach/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "recall-outreach", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install CALLE-AI/awesome-phone-call-agents recall-outreachInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add CALLE-AI/awesome-phone-call-agents --skill recall-outreach -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/CALLE-AI/awesome-phone-call-agents.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/recall-outreach .github/skills/recall-outreach && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "recall-outreach" agent skill from https://github.com/CALLE-AI/awesome-phone-call-agents/tree/main/skills/recall-outreach into .github/skills/recall-outreach/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "recall-outreach", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add CALLE-AI/awesome-phone-call-agents --skill recall-outreach -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install CALLE-AI/awesome-phone-call-agents recall-outreach --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/CALLE-AI/awesome-phone-call-agents.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/recall-outreach .opencode/skills/recall-outreach && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "recall-outreach" agent skill from https://github.com/CALLE-AI/awesome-phone-call-agents/tree/main/skills/recall-outreach into .opencode/skills/recall-outreach/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "recall-outreach", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
recall-outreachContact affected customers about a product recall or corrective notice with CALL-E.
Recall Outreach is an agent skill from CALLE-AI/awesome-phone-call-agents. Contact affected customers about a product recall or corrective notice with CALL-E. Relays only organisation-approved wording, dispatches a wave as one batch with a strict per-recipient result schema, routes every unapproved question to a human, and never treats a completed call as a completed recall.
Its SKILL.md is about 3.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 12 other files, including scripts, reference files and assets (for example `assets/sample-campaign.json`, `assets/sample-result-arranged.json` and `assets/sample-result-escalated.json`).
The repository describes itself as: Portable phone-call Agent Skills, apps, examples, adapters, and scheduler recipes for AI agents. The licence is MIT.
10 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 38d4118. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
nodeFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
api.heycall-e.comAlso links to:
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
CALLE_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Recall Outreach loads about 3.7k tokens when it runs, and up to ~7.8k if it reads all its reference files. Until then it costs about 80 tokens; SKILL.md has 1,625 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from CALLE-AI/awesome-phone-call-agents at commit 38d4118, republished under its MIT licence (© CALLE-AI). 1,625 words, ~3,703 tokens.
.claude/skills/recall-outreach/SKILL.md (or your agent's skills folder). This skill also uses 9 other files; get the full folder from GitHub.Use this skill when an organisation has issued a product recall or corrective notice and needs to reach a list of affected customers by phone: read the approved notice, find out whether each person still has the item, offer the return options the business actually runs, and record what each person said in a form someone can audit later.
This is the reusable core of RecallRoute: the
approved-wording contract, the batch call plan, a strict
recipient_result_schema, the idempotency and webhook reconciliation rules, and — most
importantly — the metric model that refuses to report a completed call as a completed recall.
A completed call is not a completed recall.
A recall is finished for a customer when the item is physically back, not when a phone call went
well. Any implementation of this skill must keep those as separate states, and the second must
be reachable only by a named human recording how they know. If you build one boolean called
contacted and set it from a completed call, you have built the thing this skill is designed to
prevent.
Report these as separate measures with separate denominators, never merged:
| Measure | Definition |
|---|---|
| Call attempted | CALL-E accepted a call task containing this recipient |
| Call completed | The call task reached completed on GET /v1/calls |
| Result validated | A per-recipient result satisfying the full schema came back |
| Right person reached | right_person_reached is exactly yes |
| Notice understood | The reached person confirmed understanding, in their own words |
| Next step selected | The reached person chose a real return option |
| Independently resolved | A human confirmed the physical return, and said how they know |
campaign_id: stable identity, e.g. RC-2026-001org_name: the organisation the assistant says it is calling for, in its first sentenceproduct_label: what the item is called out loudproduct_identifier: model, lot, or SKU — for the record, not for reading to voicemailapproved_notice: the exact wording the organisation approved, read verbatimvoicemail_text: a separate, minimal message for answering machinesapproved_answers[]: {question, answer} — the only questions the assistant may answerallowed_next_steps[]: subset of pickup_request, mail_return, store_return, callbackapproved_by: the person who signed off the wordingtimezone (IANA) and calling_window (HH:MM–HH:MM) in the customers' local timeescalation_contact: a human, for the follow-up queue. Never dialled by the assistant.recipients[]: customer_ref, phone_e164, item_identifier, consent_basis,
consent_sourceSee assets/sample-campaign.json for a fictional example using NANP test-range numbers.
Run every check below on the server, at the moment of launch — not when the checklist was rendered. A green checklist from a minute ago authorises nothing.
CALLE_API_KEY and an https webhook origin. Without them,
block launching. Never fall back to a simulated result.Send the wave as a single call task with every recipient in the recipients array.
POST https://api.heycall-e.com/v1/calls
Authorization: Bearer $CALLE_API_KEY
Idempotency-Key: recall-outreach:{campaign_id}:wave{n}:outreach:v1{
"task": "<see template below>",
"recipients": [{ "phones": ["+15005550101"], "locale": "en-US", "region": "US" }],
"recipient_result_schema": { "...": "see references/result-schema.json" },
"metadata": {
"campaign_id": "RC-2026-001",
"call_task_id": "RC-2026-001:wave1:outreach",
"wave_no": 1,
"kind": "outreach"
},
"webhook_url": "https://your-app.example.com/api/webhooks/calle"
}Put no customer identity in metadata — campaign and wave correlation only. CALL-E already
has the number it must dial; nothing else about the person is the provider's business.
Two consequences of batching to design around:
task is shared, so it cannot contain any one customer's name, order number, or serial
number. Treat this as a feature: have the assistant ask the person to confirm they are the
right person rather than asserting who they are. It is the safer identification method and it
discloses nothing to whoever answers.metadata is per call task, so the only per-recipient join key returned is the phone number.
This is why phone uniqueness must be a constraint, not a convention. Match on normalised
digits, with dispatch order as a fallback.Persist the returned call_id before showing anything as started, and create one pending
outcome row per dialled recipient at the same time, so every person dialled is accounted for
even if the provider never returns a result for them.
You are an automated voice assistant calling on behalf of {org_name}. Say so in your first
sentence, and say you are calling about a product notice. Do not claim to be a person.
The organisation has issued a notice about {product_label} ({product_identifier}). Your job is
to reach the customer, read the approved notice to them, check what they want to do, and record
their answers accurately. You are a messenger, not an adviser.
First, ask whether you are speaking with the person who bought or uses this product, or the
person in the household who looks after it. Do not say any customer name, order number, or
serial number: you have not been given them and you must not guess. If the person who answers
is not the right person and cannot help, say a person from the organisation will follow up,
thank them, and end the call.
Once you have the right person, read this approved notice exactly as written, without changing
its meaning: "{approved_notice}"
Then find out, without pressing them: do they recognise this product; do they still have it, or
did they already return it, give it away, or throw it away; did they understand the notice and
what to do next; which of the options below they would like; and whether they have a preferred
day or time for it.
Offer exactly these options and no others: {phrased_next_steps}. Read them out and let the
person choose. Do not recommend one over another, and do not invent an option such as a refund,
a replacement, or a repair unless it is written above.
These are the ONLY answers you are permitted to give. Use the wording as closely as you can:
{approved_answers}
Anything not on this list is outside what you may answer, no matter how simple it sounds or how
confident you feel.
If you reach voicemail or an answering machine, leave only this short message and nothing more:
"{voicemail_text}" Do not read the full notice, do not describe the product problem, and do not
leave any detail about the item on a voicemail, because you cannot know who will hear it.
Hard rules you must follow: {boundaries — see references/safety.md}
Before ending, tell the person what will happen next in plain terms, and make clear that
arranging this is not the same as it being completed: someone from {org_name} will confirm the
arrangement. Thank them for their time.The full boundary list is in references/safety.md. Every one of them has a matching detection
or enforcement path; they are not decoration.
references/result-schema.json, with additionalProperties: false and every field required.
Narrow selected_next_step's enum to the options that campaign actually offers, so CALL-E
structurally cannot return a return channel the business does not run. Always keep none and
unknown available — they are honest answers.
Validate offline with:
node scripts/validate-result.mjs assets/sample-result-arranged.json
node scripts/validate-result.mjs assets/sample-result-escalated.json
node scripts/validate-result.mjs assets/sample-result-invalid.json # exits non-zeroHandle call.completed, call.failed, and call.result_validation_failed at your webhook.
CALL-E-Event-Id and require it to match the body id.GET /v1/calls/{call_id} using your own key. CALL-E sends no signature
today, so treat the body as untrusted: it tells you which call changed; the fetched
snapshot is what changes customer status.Also poll GET /v1/calls/{call_id} for open waves on a schedule. A lost webhook should cost
latency, not truth.
| Provider state | Record as | May count toward |
|---|---|---|
| Valid, complete result | valid | its funnel stages |
| Result present, schema-violating | invalid | nothing above "call completed" |
| Completed call, no result | missing | nothing above "call completed" |
| Failed or canceled call | missing | "attempted" only |
unknown is never agreement. An empty string is never an answer.
Route to a human on any of: a non-empty questions; human_follow_up_required = yes;
contact_outcome = escalate; certainty of low or unknown where someone was reached;
right_person_reached = unknown; a schema-violating result; a failed call.
Do not route a clean miss to a human. right_person_reached = no with
certainty = unknown is a voicemail or wrong number — that is not reached, and treating it as
ambiguity will flood the queue with every unanswered call. This is a real mistake that is easy
to make; the distinction is between "we did not reach them" and "we are not sure what happened."
Make the follow-up queue idempotent: unique on (outcome_id, reason), so a retried webhook
cannot queue duplicate human work.
A narrowly scoped scheduling follow-up is permitted: confirming the day or window for a step the customer already chose. It requires an explicit human approval, an explicit stated purpose, and an explicit recipient list, and it re-runs every preflight gate.
It may not re-read the notice, change the chosen option, or answer anything new. If the customer raises something else, the call ends and it becomes human work.
CALLE_API_KEY only. Never in skill files, never in the browser.Every customer status must trace to a provider call id, and where a webhook arrived, to a provider event id. Statuses set by a human — the only kind that can exist without a call — should say so explicitly and name the person. Export the exact task text and result schema used on each wave, so an auditor can read precisely what was said and what was asked for.
references/result-schema.json — the strict schemareferences/safety.md — the full boundary list and why each existsreferences/examples.md — worked outcomes: arranged, escalated, not reached, invalidassets/sample-campaign.json — a fictional campaignscripts/validate-result.mjs — offline result validator© CALLE-AI, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 9 other files (scripts, references, assets) in skills/recall-outreach of CALLE-AI/awesome-phone-call-agents.
Open the folder on GitHubat commit 38d4118
Recall Outreach next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Recall Outreach this skillCALLE-AI/awesome-phone-call-agents | 107 | — | ~3.7k | Automated safety check: Pass | MIT | |
| Investor Outreachaffaan-m/ECC | 277k | 6 repos | ~664 | Automated safety check: Pass | MIT | |
| Customizeanthropics/claude-for-legal | 9.6k | 4 repos | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Customizeanthropics/claude-for-legal | 9.6k | 3 repos | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Customizeanthropics/claude-for-legal | 9.6k | 3 repos | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Customizeanthropics/claude-for-legal | 9.6k | 3 repos | ~1.1k | Automated safety check: Pass | Apache-2.0 |
affaan-m/ECC
Draft cold emails, warm intro blurbs, follow-ups, update emails, and investor communications for fundraising.
anthropics/claude-for-legal
Guided customization of your IP practice profile — change one thing without re-running the whole cold-start interview.
anthropics/claude-for-legal
Guided customization of your corporate practice profile — change one thing without re-running the whole cold-start interview.
anthropics/claude-for-legal
Guided customization of your litigation practice profile — change one thing without re-running the whole cold-start interview.
anthropics/claude-for-legal
Guided customization of your privacy practice profile — change one thing without re-running the whole cold-start interview.
anthropics/claude-for-legal
Guided customization of your legal clinic profile — change one thing without re-running the whole cold-start interview.
CALLE-AI/awesome-phone-call-agents
Demonstrates advisory accessibility-planning checks with offline fixtures and a proposed bounded CALL-E workflow; use for exploring unknown or qualified venue claims without making calls.
CALLE-AI/awesome-phone-call-agents
A skill your agent uses when an agent holds some evidence for a physical-world claim but the evidence is broader, narrower, or older than the exact question asked, and it must first decide whether a…
CALLE-AI/awesome-phone-call-agents
Call a venue and ask the accessibility questions that matter to one specific person — step-free entry, hearing loop, guide dogs, quiet hours, changing places — then return a per-need verdict backed…
CALLE-AI/awesome-phone-call-agents
Turns a pre-written, building-level location config into a CALL-E outbound phone-call task that guides a delivery driver through the last few hundred metres to a specific building using landmarks…
CALLE-AI/awesome-phone-call-agents
Turn cited business research into a bounded, approval-gated phone-call plan that asks only unresolved factual questions, then reconcile CALL-E-compatible results without treating voicemail, refusal…
CALLE-AI/awesome-phone-call-agents
Place a goal-driven CALL-E call that collects specific structured answers, score those answers against a deterministic rubric you supply, and conditionally trigger a follow-up action — all runnable…
Contact affected customers about a product recall or corrective notice with CALL-E. Recall Outreach is an agent skill from CALLE-AI/awesome-phone-call-agents. Contact affected customers about a product recall or corrective notice with CALL-E.
Run `npx skills add CALLE-AI/awesome-phone-call-agents --skill recall-outreach -a claude-code`. Or copy the skill folder (skills/recall-outreach in CALLE-AI/awesome-phone-call-agents) into .claude/skills/recall-outreach in your project. Claude Code loads it when a task matches its description.
Run `npx skills add CALLE-AI/awesome-phone-call-agents --skill recall-outreach -a codex`. Or copy the skill folder (skills/recall-outreach in CALLE-AI/awesome-phone-call-agents) into .agents/skills/recall-outreach in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add CALLE-AI/awesome-phone-call-agents --skill recall-outreach -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/recall-outreach, .gemini/skills/recall-outreach, .github/skills/recall-outreach and .opencode/skills/recall-outreach in your project.
Going by SKILL.md and its folder, Recall Outreach needs JavaScript for the scripts in its folder, the command-line tools its instructions call (node) and credentials named CALLE_API_KEY. Our summary lists: Node.js; A credential in CALLE_API_KEY.
SKILL.md names 2 domains. In commands or code: api.heycall-e.com; the agent is likely to contact it when it follows the instructions. As links in the text: github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Recall Outreach is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.7k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 4.1k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Recall Outreach: Investor Outreach (affaan-m/ECC, 277k stars), Customize (anthropics/claude-for-legal, 9.6k stars), Customize (anthropics/claude-for-legal, 9.6k stars) and Customize (anthropics/claude-for-legal, 9.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
CALLE-AI (a GitHub organization) maintains it in CALLE-AI/awesome-phone-call-agents, which has 107 GitHub stars. The repository holds 101 skills in this directory. The repository was last updated on October 10, 2026.
Source: CALLE-AI/awesome-phone-call-agents on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.