An AI agent that answers your phone calls as you.
Present! picks up incoming phone calls, speaks in your cloned voice, and handles real tasks β searching files, reading documents, checking your calendar, creating events, and sending emails with attachments. You monitor everything in real-time from a live dashboard.
Call the Twilio number. The AI agent answers as you, has a natural conversation, and executes tasks on your computer β all while you watch the live transcript and approve tool calls from the dashboard.
Live Dashboard: dashboard-ten-rho-71.vercel.app
Caller dials your number
β
βΌ
Twilio receives call β streams audio via WebSocket
β
βΌ
Deepgram STT β real-time speech-to-text (nova-2)
β
βΌ
Gemini 2.5 Flash β decides what to say + which tools to use
β
βΌ
ElevenLabs TTS β synthesizes response in YOUR cloned voice
β
βΌ
Audio streamed back to caller via Twilio
β
βΌ
Dashboard shows live transcript, tool calls need your approval
- Answers phone calls as you β first-person, casual, natural
- Cloned voice via ElevenLabs β sounds like you, not a robot
- Real-time speech β streams TTS audio back to the caller with low latency
- Barge-in support β caller can interrupt the agent mid-sentence
- Adaptive debounce β waits for natural pauses before responding
The agent can perform real actions on your computer during a call:
| Tool | What it does |
|---|---|
list_files |
Searches Desktop/Documents/Downloads for files |
open_file |
Opens and reads .docx, .txt, .csv, .json, .md files |
check_calendar |
Queries Apple Calendar for events |
create_event |
Creates calendar events via .ics files |
send_email |
Sends emails with attachments via Outlook/Mail.app |
browse_url |
Opens URLs in a headed browser |
- Live transcript β see the conversation as it happens, with timestamps
- Tool approval gate β Claude Code-style Allow/Deny before any tool executes
- Call duration timer β live elapsed time counter
- Fullscreen chat mode β expand to full viewport for mobile use
- Past sessions β browse previous calls with expandable transcripts (persisted in Supabase)
- Voice cloning β record or upload audio to clone your voice from the dashboard
- Copy transcript β one-click copy of the full conversation
- Confirmation dialogs β safety net before ending calls
- Toast notifications β feedback for actions
- Mobile-friendly β deployed on Vercel, accessible from your phone
| Layer | Technology |
|---|---|
| Phone | Twilio (Voice API + Media Streams WebSocket) |
| Speech-to-Text | Deepgram (nova-2, real-time streaming) |
| LLM | Google Gemini 2.5 Flash (multi-round tool calling) |
| Text-to-Speech | ElevenLabs (turbo v2.5, instant voice cloning) |
| Tool Execution | Playwright (headed Chromium for browser automation) |
| Server | Node.js, Express, Socket.IO |
| Dashboard | Next.js 16, React 19, Tailwind CSS 4 |
| Database | Supabase (PostgreSQL β session history) |
| Hosting | Vercel (dashboard), ngrok (server tunnel) |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Dashboard (Next.js) β
β Live transcript β Tool approval β Voice cloning β
β Past sessions β Fullscreen β Connection status β
ββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββ
β Socket.IO (real-time)
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Server (Express) β
β β
β ββββββββββββ ββββββββββββββββ ββββββββββββββββββ β
β β Twilio β β Orchestrator β β Browser Agent β β
β β Media WS ββ β (Gemini) ββ β (Playwright) β β
β ββββββββββββ ββββββββββββββββ ββββββββββββββββββ β
β β β β β
β βΌ βΌ βΌ β
β ββββββββββββ ββββββββββββββββ ββββββββββββββββββ β
β β Deepgram β β ElevenLabs β β Files, Calendarβ β
β β STT β β TTS β β Email, Browser β β
β ββββββββββββ ββββββββββββββββ ββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Supabase β session history + transcripts ββ
β βββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Node.js 24+
- Twilio account with a phone number
- Deepgram API key
- Google Gemini API key
- ElevenLabs API key
- Supabase project
- ngrok (for exposing the server to Twilio)
Copy .env.example to .env and fill in:
TWILIO_ACCOUNT_SID=
TWILIO_AUTH_TOKEN=
TWILIO_PHONE_NUMBER=
DEEPGRAM_API_KEY=
GEMINI_API_KEY=
ELEVENLABS_API_KEY=
ELEVENLABS_VOICE_ID=
SERVER_URL= # ngrok host (e.g. abc.ngrok-free.app)
SUPABASE_URL=
SUPABASE_ANON_KEY=
# Terminal 1 β expose server to Twilio
ngrok http 3001
# Terminal 2 β start server
cd server && npm install && npm run dev
# Terminal 3 β start dashboard
cd dashboard && npm install && npm run devSet your Twilio Voice webhook to https://<ngrok-host>/api/twilio/voice.
Open http://localhost:3000 to see the dashboard.
Built by Lucas Tran (@lukietee)
