Phone
BlockRunAI/ClawRouter
Verify phone numbers (carrier + SIM-swap fraud signals) and place AI-powered outbound voice calls via BlockRun's gateway (Twilio + Bland.ai).
Research real-world businesses by phone. An agent skill from CALLE-AI/awesome-phone-call-agents.
$ npx skills add CALLE-AI/awesome-phone-call-agents --skill phone-scout -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install CALLE-AI/awesome-phone-call-agents phone-scout --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/phone-scout .claude/skills/phone-scout && 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 "phone-scout" agent skill from https://github.com/CALLE-AI/awesome-phone-call-agents/tree/main/skills/phone-scout into .claude/skills/phone-scout/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "phone-scout", 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/phone-scoutType 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 phone-scout -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install CALLE-AI/awesome-phone-call-agents phone-scout --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/phone-scout .agents/skills/phone-scout && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "phone-scout" agent skill from https://github.com/CALLE-AI/awesome-phone-call-agents/tree/main/skills/phone-scout into .agents/skills/phone-scout/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "phone-scout", 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 phone-scout -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install CALLE-AI/awesome-phone-call-agents phone-scout --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/phone-scout .cursor/skills/phone-scout && 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 "phone-scout" agent skill from https://github.com/CALLE-AI/awesome-phone-call-agents/tree/main/skills/phone-scout into .cursor/skills/phone-scout/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "phone-scout", 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/phone-scout--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 phone-scout -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install CALLE-AI/awesome-phone-call-agents phone-scout --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/phone-scout .gemini/skills/phone-scout && 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 "phone-scout" agent skill from https://github.com/CALLE-AI/awesome-phone-call-agents/tree/main/skills/phone-scout into .gemini/skills/phone-scout/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "phone-scout", 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 phone-scoutInstalls 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 phone-scout -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/phone-scout .github/skills/phone-scout && 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 "phone-scout" agent skill from https://github.com/CALLE-AI/awesome-phone-call-agents/tree/main/skills/phone-scout into .github/skills/phone-scout/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "phone-scout", 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 phone-scout -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 phone-scout --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/phone-scout .opencode/skills/phone-scout && 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 "phone-scout" agent skill from https://github.com/CALLE-AI/awesome-phone-call-agents/tree/main/skills/phone-scout into .opencode/skills/phone-scout/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "phone-scout", 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.
phone-scoutResearch real-world businesses by phone. An agent skill from CALLE-AI/awesome-phone-call-agents.
Phone Scout is an agent skill from CALLE-AI/awesome-phone-call-agents. Research real-world businesses by phone. Use when the user needs to compare places by real-time availability, pricing, or features that only a phone call can verify.
Its SKILL.md is about 5.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including scripts and reference files (for example `references/examples.md`, `references/safety.md` and `scripts/phone_scout.py`).
The repository describes itself as: Portable phone-call Agent Skills, apps, examples, adapters, and scheduler recipes for AI agents. The licence is MIT.
4 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 2 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
python3pipFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
dashboard.heycall-e.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
CALLE_API_KEYGOOGLE_PLACES_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Phone Scout loads about 5.8k tokens when it runs, and up to ~6.8k if it reads all its reference files. Until then it costs about 44 tokens; SKILL.md has 2,370 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 noted patterns worth knowing about, such as sudo or a known installer.
api_key` | `CALLE_API_KEY` missing from `.env` | ❌ No | "Cannot place live calls — CALLE_API_KEY is missing. Set it in yAutomated 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). 2,370 words, ~5,797 tokens.
.claude/skills/phone-scout/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Research the real world by phone. Give PhoneScout a research objective like "find a restaurant for 8 tonight with vegetarian options under R500" and it discovers businesses, calls them through CALL-E, extracts structured results, verifies against your constraints, and returns an evidence-backed ranked recommendation.
PhoneScout thinks in terms of research objectives, not phone calls. Phone calls are the execution mechanism underneath the research workflow. When the user asks "find me…", "compare…", "research…" — NOT "call…" — this is the skill.
call-e-booking skillcall-e-bookingThe user rarely gives every detail upfront. Never guess or assume missing information. Ask follow-up questions until you have enough to build a well-scoped research plan. Ask the user for any missing fields below.
On every task, check the current request or consented host memory for these three keys. If any are missing, ask the user one question at a time. This CLI does not implement persistent memory; ask again when the host has not retained it:
| Memory key | Question if missing | Why |
|---|---|---|
currency | "What currency do you usually use? R, $, €, £?" | Budget prompts say $500 instead of R500 |
home_city | "Which city are you in? (or where do you search most?)" | Becomes the default when you don't mention a city |
timezone | "What timezone are you in? e.g. Africa/Johannesburg, America/New_York" | Log timestamps match your local time |
The host must explicitly pass preferences through CLI arguments or exported
PHONE_SCOUT_CURRENCY / PHONE_SCOUT_DEFAULT_LOCATION / PHONE_SCOUT_TZ
variables. The scripts do not automatically read host memory or create sessions.
These MUST be known before calling web_search.py or discover_candidates().
If any are missing, ask the user before proceeding.
| Field | Question | Why it matters |
|---|---|---|
| Location | "Which city or area?" | Required — without it, search defaults and may return irrelevant results |
| Business type | "What kind of business? Restaurant, dentist, salon…?" | Determines which tags/place-types to search for |
| Max calls | "How many places should I contact?" | Caps call budget (default 3, override with --max-calls) |
Before placing a call, check the current local time at the destination. If it's outside business hours (roughly 8 AM – 8 PM local), warn the user:
"It's currently [time] in [city] — businesses are likely closed. Should I wait until [next reasonable window] or proceed anyway?"
Use the maps skill for quick timezone lookups:
Use any timezone lookup (e.g. a maps skill or web search)Do NOT silently dial a closed business — anonymous rings waste CALL-E credits.
web_search.py checks whether a location was found. If not, it prints a
warning: "Warning: could not geocode the location…". Google Places Text
Search handles location natively (no geocoding needed); the OSM fallback
uses the free Nominatim API.
The agent MUST:
meta.location_geocoded is false| Field | Question if missing | Default / fill from |
|---|---|---|
| Location (city, area) | "Which area or city?" | Memory: user's location |
| Party size | "How many people?" | None — must ask |
| Date / when | "Tonight? A specific date? This week?" | "Tonight" is a reasonable default to suggest |
| Time preference | "After what time? Or any specific time?" | "After now" for tonight; "anytime" otherwise |
| Budget ceiling | "What's your max budget per person?" | None — must ask (budget is a hard constraint) |
| Dietary needs | "Any dietary requirements? Vegetarian, vegan, halal?" | None — but "no dietary restrictions" is an answer |
| Max calls budget | "How many places should I call? (default 3)" | Default 3, overridable |
| Field | Question if missing | Default / fill from |
|---|---|---|
| Location (city, area) | "Which area?" | Memory: user's location |
| Type (GP, dentist, specialist) | "What kind of doctor or clinic?" | None — must ask |
| When (date range) | "When do you need the appointment?" | "This week" is a reasonable default |
| Budget ceiling | "Max budget per appointment?" | None — must ask if constrained |
| Medical aid / insurance | "Do you need a specific medical aid accepted?" | "No preference" if not mentioned |
Errors happen — nobody answers, networks drop, API keys expire. The skill must never crash silently or present a blank result. Every error has a predefined recovery path.
The call-one subcommand and search pipeline return errors in a standard
shape: {"error": "<code>", "recoverable": <bool>, "user_action": "<what to tell>"}.
| Error code | Meaning | Recoverable? | Agent action |
|---|---|---|---|
no_candidates_found | Discovery returned zero matching businesses | ✅ Yes | "No businesses matched [location/constraints]. Should I widen the search area or relax constraints?" Offer the user "Widen location", "Drop budget cap", "Drop dietary filter" |
no_answer | Business rang but nobody picked up | ✅ Yes | "Nobody answered at [name]. Retry in 10 min or skip?" Offer retry / skip |
concurrency_limit | Shared line already has an active call | ✅ Yes | Wait 30-60s for the active call to finish, then retry. If persistent, check for a stale call from a killed/timed-out process. Do NOT fire more calls — they'll all hit the same limit. |
voicemail | Call went to voicemail | �️ Maybe | "Reached voicemail at [name]. I can retry once more, or we can skip. A live person is needed for research." Offer retry once, then skip |
call_blocked | Carrier/region rejected the call | ❌ No | "[Name]'s number was blocked by the carrier. This is usually a regional restriction. I'll mark it as unreachable and continue with other candidates." |
timeout | Call created but never left queued or in_progress | �️ Maybe | "The call to [name] timed out before anyone answered. This can happen with busy lines. I'll hold the partial result. Retry or skip?" Offer retry / skip |
no_api_key | CALLE_API_KEY missing from .env | ❌ No | "Cannot place live calls — CALLE_API_KEY is missing. Set it in your environment." |
calle_ai_not_installed | calle-ai package not in venv | ❌ No | "The calle-ai SDK is not installed. Run: pip install calle-ai into the skill's .venv." |
all_calls_failed | Every candidate returned an error — zero contacts | ✅ Yes | "None of the [N] businesses answered. This is unusual. Possible causes: wrong numbers, region block, or network outage. Options: retry all, try different candidates, or check the phone numbers." |
all_constraints_failed | We contacted businesses but none passed the constraints | ✅ Yes | "[N] businesses answered but none met your constraints. #1 [name] was closest — [price/vegetarian/etc] was just outside. Should I show the near-misses anyway, or relax constraints?" |
subagent_died | A delegated call-one sub-agent crashed or was killed | �️ Maybe | "One of the research calls crashed. [N-1]/[N] completed. I can show results from those that succeeded, or retry the failed one." |
Partial results are results. If 3 of 5 calls succeeded, present the 3. Don't discard everything because of 2 failures.
Retry once, then move on. If a business didn't answer, offer to retry once (after a 10-minute cooldown). If it fails again, mark it unreachable and proceed with remaining candidates.
Don't burn the call budget. Each retry costs a CALLE credit. If the
user's max_calls is 3 and 2 failed, don't retry both — pick the most
promising 1 and retry that one.
Escalate at 50%+ failure rate. If more than half the calls fail (everyone's closed, wrong region, network down), stop and tell the user: "Something is wrong — [X]/[Y] calls failed. This many failures suggests a systemic issue (wrong region, bad numbers, API problem). What should I do?"
Always show what worked. Even if the recommendation is "no perfect match," show the best near-miss with its actual score. A user might relax a constraint when they see "R550/person, everything else perfect."
call-one exits:
| Exit | Meaning |
|---|---|
| 0 | Call completed (contacted or not — both are valid results) |
| 1 | Fatal error (no API key, SDK missing, network unreachable) |
The parent agent interprets exit codes. Exit 0 with "error": "no_answer"
means "nothing went wrong, they just didn't pick up" — proceed with next
candidate. Exit 1 means "stop everything, something is broken."
When running parallel sub-agent research:
call-one returns exit 0 (with any error code), the
sub-agent result is valid — include it in the parent's ranking.unreachable. The parent counts it as contacted: false.PY="python3"
SCOUT="scripts/phone_scout.py"
PY="python3" # or ./venv/bin/python3 if using venv # venv with calle-ai installed
# Full pipeline (discover → call → verify → rank)
PY="python3" # use venv python if calle-ai installed there
SCOUT="scripts/phone_scout.py" # adjust to ./scripts/phone_scout.py or full path
$PY $SCOUT search \
--objective "Find me a restaurant in Johannesburg for 8 people tonight after 7pm. It needs vegetarian options and should cost less than R500 per person." \
--max-calls 3
# Plan only (discovery only, no calls)
PY="python3" # use venv python if calle-ai installed there
SCOUT="scripts/phone_scout.py" # adjust to ./scripts/phone_scout.py or full path
$PY $SCOUT search \
--objective "dentist Manhattan New York teeth cleaning 7-13 September budget 500" \
--plan-only
# After research, verify + rank in memory (no storage)
PY="python3" # use venv python if calle-ai installed there
SCOUT="scripts/phone_scout.py" # adjust to ./scripts/phone_scout.py or full path
$PY $SCOUT verify --results-file /tmp/results.json --constraints '{"max_price":500}'
PY="python3" # use venv python if calle-ai installed there
SCOUT="scripts/phone_scout.py" # adjust to ./scripts/phone_scout.py or full path
$PY $SCOUT rank --results-file /tmp/results.json --constraints '{"max_price":500}'User Request (natural language)
↓
Research Planner → required fields, constraints, max_calls
↓
Candidate Discovery → Google Places or OSM Overpass
↓
Candidate Selector → rank by likelihood, cap at --max-calls (default: top 3)
↓
Phone Research Agents (serial, one at a time)
│ → CALLE in live mode
↓
Structured Extraction → JSON per business
↓
Verification Agent → checks each result against constraints
↓ detects conflicts, computes confidence
Ranking Agent → scored & ranked recommendation
↓
Evidence-backed resultFull JSON includes per-business structured_result, verification
(check-by-check), ranking (score + reasons), recommendation (#1 match),
and events (full timeline).
PhoneScout is not restaurant-specific. It treats a research task as a generic constraints → phone research → verify → rank pipeline:
verify_result() dispatches each key in
constraints to a checker. Built-in checkers cover party_size,
vegetarian, vegan, halal, max_price_per_person, time_after,
min_rating — and any unknown key falls back to a direct field match.plan_research() maps each
constraint to the result field it needs (via CONSTRAINT_FIELD_MAP), so the
live CALLE task and result schema are generated per-research, not hardcoded.Example: a dentist search
python3 phone_scout.py search \
--objective "Find a dentist in Manhattan New York who can see me this week for under $500 and accepts my insurance" \
--max-calls 4The planner would derive fields for max_price_per_person (→ price),
accepts_medical_aid, and time_after; the verifier would check each; the
ranker would score against whatever constraints were supplied.
--max-calls 3).evidence snippets from
the actual call, and verification shows the exact constraint checks.phone_scout.py and web_search.py)pip install calle-ai into a venvCALLE_API_KEY in your environmentGOOGLE_PLACES_API_KEY in your environment (optional — adds phone numbers to discovery; without it, OSM Overpass is used)Default: shared line = 1 concurrent call. CALL-E's shared line allows only ONE active call at a time (author-observed on free-tier accounts; dedicated numbers calls makes N-1 fail with "account concurrency limit of 1". Serialize all calls by default — one
call-oneat a time.
Run call-one sequentially for each candidate using terminal(background=true) +
process(action='wait'). This gives each call its own timeout, survives long hold times,
and doesn't leave stale calls occupying the line if something goes wrong:
PY="python3" # or ./venv/bin/python3 if using venv
SCOUT="scripts/phone_scout.py"
for candidate in "${candidates[@]}"; do
PY="python3" # use venv python if calle-ai installed there
SCOUT="scripts/phone_scout.py" # adjust to ./scripts/phone_scout.py or full path
$PY $SCOUT call-one \
--candidate-id "$id" --name "$name" --phone "$phone" \
--research-questions "availability price booking_requirements" \
--context "..." --pretty
sleep 5 # small gap to ensure line is free
doneAgent pattern: use terminal(background=true, notify_on_complete=true) + process(action='wait')
for each call. Do NOT use execute_code for sequential calls — if a call hangs and the
script hits the 5-minute timeout, the CALLE call stays alive and blocks the shared line.
execute_code has a 300s timeout. If a call-one invocation inside it creates a CALLE call
that hangs (ringing, voicemail, hold queue), the script is killed but the CALLE call keeps
running — occupying the shared line. Every subsequent attempt hits the concurrency limit
until CALL-E's own timeout releases it (~2 minutes). Never batch sequential call-one
calls inside execute_code. Use individual terminal(background=true) calls instead.
Once KYC is complete and a dedicated number is purchased at https://dashboard.heycall-e.com/account/numbers/buy (unlocks up to 10 concurrent calls), switch to parallel delegation:
Use the host's documented task API, not a Python API from this skill. Give each
task one approved candidate, its authorized destination, research questions,
and the selected interpreter plus the full path to scripts/phone_scout.py.
Ask it to execute the approved call-one command and return masked JSON to the
parent. Credentials must be inherited privately, never included in task text.
This is an orchestration recipe, not executable host-independent delegation code.
Bounded by min(len(candidates), account_concurrency) at a time.
PHASE 1 — PLAN (parent, no delegation)
PY="python3" # use venv python if calle-ai installed there
SCOUT="scripts/phone_scout.py" # adjust to ./scripts/phone_scout.py or full path
$PY $SCOUT search --objective "..." --max-calls N --plan-only
→ returns the research plan + candidate list (no calls placed)
Read candidates[].name, candidates[].phone, research_plan.required_fields
PHASE 2 — SERIAL PHONE CALLS (parent, one at a time)
For each candidate, run `PY="python3" # use venv python if calle-ai installed there
SCOUT="scripts/phone_scout.py" # adjust to ./scripts/phone_scout.py or full path
$PY $SCOUT call-one ...` sequentially:
terminal(background=true, notify_on_complete=true)
process(action='wait', timeout=180)
Collect each result, then proceed to verification.
Do NOT batch in execute_code — use individual background terminal calls.
PHASE 3 — VERIFY + RANK (parent, after all subagents finish)
Save the collected results to a JSON file, then re-run verification + ranking
over them and present the recommendation:
PY="python3" # use venv python if calle-ai installed there
SCOUT="scripts/phone_scout.py" # adjust to ./scripts/phone_scout.py or full path
$PY $SCOUT verify --results-file /tmp/results.json --constraints '{"party_size":8,"vegetarian":true,"max_price_per_person":500}'
PY="python3" # use venv python if calle-ai installed there
SCOUT="scripts/phone_scout.py" # adjust to ./scripts/phone_scout.py or full path
$PY $SCOUT rank --results-file /tmp/results.json --constraints '{"party_size":8,"vegetarian":true,"max_price_per_person":500}'
(Or, if the parent ran the one-shot `search` pipeline, just inspect the
stdin: `PY="python3" # use venv python if calle-ai installed there
SCOUT="scripts/phone_scout.py" # adjust to ./scripts/phone_scout.py or full path
$PY $SCOUT verify --results-file /tmp/r.json` / `rank --results-file /tmp/r.json`.\)Phase 2 serial execution (the agent builds this from the candidate list):
For each candidate in order:
1. Start background call:
terminal(background=true, notify_on_complete=true,
command="PY="python3" # use venv python if calle-ai installed there
SCOUT="scripts/phone_scout.py" # adjust to ./scripts/phone_scout.py or full path
$PY $SCOUT call-one
--candidate-id \"<id>\" --phone \"<phone>\" --name \"<name>\"
--research-questions availability price booking_requirements
--context \"...\" --pretty")
2. Wait for completion:
process(action='wait', session_id=<id>, timeout=180)
3. Parse JSON result, add to collected results
4. Sleep 5s to ensure line is free, then next candidateRules:
call-one invocations concurrently
on the shared line — each subsequent call fails with the concurrency limit error.--plan-only first, then
call only the selected candidates.call-e-booking — book the restaurant/clinic that PhoneScout recommendsgoogle-workspace — write the recommendation to a Sheet or DocPhoneScout is fully configurable via environment variables — no code changes needed to run in a different city, country, or currency:
| Variable | Default | Purpose |
|---|---|---|
CALLE_API_KEY | — | Required for all live calls |
GOOGLE_PLACES_API_KEY | — | Optional — enables Google Places for discovery (author-reported ~90% phone coverage). Falls back to OSM Overpass (free). |
PHONE_SCOUT_CURRENCY | R | Currency symbol prefix for budget prompts (e.g. $, €, £) |
PHONE_SCOUT_TZ | Africa/Johannesburg | IANA timezone for log timestamps (e.g. America/New_York) |
PHONE_SCOUT_DEFAULT_LOCATION | Johannesburg | Fallback city when none detected in objective |
PHONE_SCOUT_MAX_CALLS | 3 | Default max businesses to contact |
Minimal config for a new user in NYC:
export PHONE_SCOUT_CURRENCY="$"
export PHONE_SCOUT_TZ="America/New_York"
export PHONE_SCOUT_DEFAULT_LOCATION="New York City"
export CALLE_API_KEY="..."
# Optional — adds phone numbers to discovery:
export GOOGLE_PLACES_API_KEY="..."scripts/phone_scout.py — main research orchestratorsearch — full pipeline (discover → call → verify → rank)call-one — research ONE business (used by sub-agents)verify — re-run constraint verification on an explicit --results-filerank — re-rank an explicit --results-file; no stored-session lookupscripts/web_search.py — keyless business discovery (Google Places if an API key is exported, else OSM Overpass). Export GOOGLE_PLACES_API_KEY explicitly; do not assume a host environment file is loaded.© 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 4 other files (scripts, references) in skills/phone-scout of CALLE-AI/awesome-phone-call-agents.
Open the folder on GitHubat commit 38d4118
Phone Scout 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 |
|---|---|---|---|---|---|---|
| Phone Scout this skillCALLE-AI/awesome-phone-call-agents | 107 | — | ~5.8k | Automated safety check: Notes | MIT | |
| PhoneBlockRunAI/ClawRouter | 6.6k | — | ~2.4k | Automated safety check: Pass | MIT | |
| Agent Scout Explorerruvnet/ruflo | 74k | 2 repos | ~1.6k | Automated safety check: Pass | MIT | |
| Local Businessthedaviddias/Front-End-Checklist | 74k | — | ~589 | Automated safety check: Pass | MIT | |
| Skill Scoutaffaan-m/ECC | 277k | 1 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Skill Scoutaffaan-m/ECC | 276k | — | ~735 | Automated safety check: Pass | MIT |
BlockRunAI/ClawRouter
Verify phone numbers (carrier + SIM-swap fraud signals) and place AI-powered outbound voice calls via BlockRun's gateway (Twilio + Bland.ai).
ruvnet/ruflo
Agent skill for scout-explorer - invoke with $agent-scout-explorer
thedaviddias/Front-End-Checklist
A skill your agent uses when auditing a local business website's structured data.
affaan-m/ECC
Search existing local, marketplace, GitHub, and web skill sources before creating a new skill.
affaan-m/ECC
新しいスキルを作成する前に、ローカル・マーケットプレイス・GitHub・Webの既存スキルを検索する。スキルの作成・ビルド・フォーク・検索を行う際に使用。
sickn33/agentic-awesome-skills
Develop business continuity plans and impact analysis. An agent skill from sickn33/agentic-awesome-skills.
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…
Research real-world businesses by phone. An agent skill from CALLE-AI/awesome-phone-call-agents. Phone Scout is an agent skill from CALLE-AI/awesome-phone-call-agents. Research real-world businesses by phone.
Phone Scout fits situations like: the user needs to compare places by real-time availability; features that only a phone call can verify.
Run `npx skills add CALLE-AI/awesome-phone-call-agents --skill phone-scout -a claude-code`. Or copy the skill folder (skills/phone-scout in CALLE-AI/awesome-phone-call-agents) into .claude/skills/phone-scout in your project. Claude Code loads it when a task matches its description.
Run `npx skills add CALLE-AI/awesome-phone-call-agents --skill phone-scout -a codex`. Or copy the skill folder (skills/phone-scout in CALLE-AI/awesome-phone-call-agents) into .agents/skills/phone-scout 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 phone-scout -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/phone-scout, .gemini/skills/phone-scout, .github/skills/phone-scout and .opencode/skills/phone-scout in your project.
Going by SKILL.md and its folder, Phone Scout needs Python for the scripts in its folder, the command-line tools its instructions call (python3 and pip) and credentials named CALLE_API_KEY and GOOGLE_PLACES_API_KEY. Our summary lists: Python 3; A credential in CALLE_API_KEY.
SKILL.md names 1 domain. As links in the text: dashboard.heycall-e.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. 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.
Phone Scout is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.8k tokens (SKILL.md is roughly 23k 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 1k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Phone Scout: Phone (BlockRunAI/ClawRouter, 6.6k stars), Agent Scout Explorer (ruvnet/ruflo, 74k stars), Local Business (thedaviddias/Front-End-Checklist, 74k stars) and Skill Scout (affaan-m/ECC, 277k 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.