Inspiration

The last mile of research is often a phone call. A venue may publish its rooms but not next Friday's availability. A supplier may list a product but not today's inventory. A clinic may describe a service but not its next opening. Search can produce a shortlist; it cannot reliably settle the current, decision-critical facts.

CallForage closes that gap. A user describes the outcome in normal language, CallForage researches first, identifies only what the web could not establish, and prepares focused business calls to confirm those missing facts.

What it does

CallForage turns one request into a reviewable research-to-phone workflow:

  1. It researches current public sources and cites what it finds.
  2. It separates sourced facts from unresolved questions.
  3. It verifies the business recipient and prepares the exact call purpose, disclosure, and questions.
  4. The user chooses which businesses may be called and reviews the Call Credit cost before approval.
  5. A centralized worker sends only the frozen, approved plan to CALL-E.
  6. Returned answers are reconciled into structured facts, unknowns, and evidence states so an attempted call is never presented as a confirmed answer.

This is useful for venue availability, appointment openings, supplier inventory, contractor quotes, hotel group rates, equipment rentals, and pricing or policy details that are difficult to verify online.

How I built it

The production product is a Next.js and TypeScript web application backed by Python services on AWS. Amazon Cognito protects user workspaces. API Gateway, Lambda, SQS, DynamoDB, Secrets Manager, CloudFront, Route 53, and Terraform make the workflow asynchronous, auditable, and reproducible.

CALL-E is integrated at the outbound-call boundary. The call worker revalidates the active authorization, approved recipient, frozen purpose and questions, calling hours, daily limits, reserved credit, and policy version immediately before invoking CALL-E. Content-bound idempotency prevents an approved plan from being silently changed or duplicated. Webhook and polling paths reconcile terminal status and structured results.

OpenAI moderation and intent checks run before research or call planning. A deterministic policy floor rejects prohibited, deceptive, scam-like, emergency, credential-seeking, payment-card, and other high-risk requests even if a model would allow them. Phone numbers and provider credentials stay server-side.

Payments use Stripe Checkout and signed webhooks. One Call Credit covers one approved outbound attempt, giving users a simple, predictable unit instead of metering conversation length.

The reusable Agent Skill

The companion public contribution is research-gap-call-verifier, an Agent Skill that packages the core research-to-call pattern without exposing the private application. The contribution was merged into the official CALL-E repository on August 17, 2026.

It includes deterministic no-call planning, fictional reserved-number fixtures, an approval contract bound to the exact recipient and questions, a documented CALL-E Python SDK handoff, fail-closed result reconciliation, and an executable offline self-test. The skill preserves four evidence states: sourced, confirmed_by_phone, not_established, and not_reached.

Challenges I encountered

The hardest problem was not dialing a number. It was preserving truth and user control across an asynchronous agentic workflow.

Research results can be stale. Business contact data is inconsistent. Model classification can fail or become unavailable. Queues can replay work. A call can reach voicemail, receive a refusal, or return an ambiguous answer. Payments can deliver duplicate webhooks. I designed each boundary to fail closed, remain idempotent, and keep sourced, attempted, and confirmed information distinct.

I also had to make a complex workflow feel simple. The interface progressively reveals citations, recipient verification, exact questions, approval, cost, and results instead of exposing internal implementation details to users.

Accomplishments

  • A production web application with authentication, billing, Call Credits, and an approval-gated CALL-E execution path.
  • A centralized authorization worker that binds every call to the reviewed recipient, purpose, questions, policy version, and reserved credit.
  • Research and phone evidence that remain distinct all the way to the final answer.
  • Account-level daily limits, business-hour boundaries, opt-out handling, and explicit AI disclosure.
  • A portable public Agent Skill with fictional fixtures, no-call defaults, and a deterministic regression suite.
  • A complete product demo under three minutes.

What I learned

Phone agents are most valuable when they are used selectively. Research should do the broad discovery; a call should target the small number of current facts that change the decision. That approach reduces cost, keeps conversations focused, and produces answers that are easier to audit.

I also learned that “completed call” is not the same as “confirmed fact.” The result model must preserve unanswered questions, ambiguity, voicemail, refusal, and failure rather than flattening them into success.

Real production follow-up

After recording the demo, I ran one controlled five-recipient production Job through the approval-gated CALL-E worker. Three attempts reached CALL-E and completed against automated lines; two were blocked before dialing by the account's daily-call safeguard. No approved question received a business answer, so every missing fact remained unknown. Three Call Credits settled and two were released. The gallery now includes sanitized screenshots of these real outcomes. The video's phone exchange remains clearly labeled as simulated.

What's next for CallForage

Next I will expand the controlled live-call evaluation matrix, improve recipient verification across more business websites, add clearer post-call comparison views, and grow the reusable Agent Skill with additional provider-neutral examples. I will continue tightening moderation, abuse prevention, transcript privacy, and account-level controls as usage grows.

Demo note

The video shows the real production request, sourced research, verified recipient, exact proposed questions, cost, and final approval-readiness state. To avoid contacting a real business solely for a recording, the phone exchange and returned answer shown afterward are conspicuously labeled as simulated; no phone call was placed for that segment and no fictional statement is presented as a real business response.

Built With

Share this project:

Updates