Authenticated voice-first web app using:
- Supabase (Google OAuth + persistent audit storage)
- Composio (connectable app catalog + tool execution)
- Anthropic (reasoning + tool orchestration + draft revision)
- ElevenLabs (one-shot STT + streaming TTS)
- Speechmatics (STT/TTS fallback providers)
Flow:
- Browser records utterances, auto-detects end-of-speech, encodes to MP3, and sends one-shot audio for STT.
- Agent can auto-execute read tools.
- Mutating tools create pending drafts and require explicit approval/rejection.
- Approval loop supports iterative voice revisions.
- Gmail triage supports relative windows such as
last hour(mapped tonewer_than:1h). - In Gmail triage mode, the agent can prepare draft-reply actions for approval directly from the selected email.
- Node.js 20+
- pnpm 10+
pnpm install
cp apps/server/.env.example apps/server/.env.local
cp apps/web/.env.example apps/web/.env.local
# fill keys in both .env.local filesRequired server env keys:
SUPABASE_URLSUPABASE_SERVICE_ROLE_KEYSUPABASE_ANON_KEYCOMPOSIO_API_KEYCOMPOSIO_CONNECT_CALLBACK_URLANTHROPIC_API_KEYANTHROPIC_MODEL(recommended:claude-haiku-4-5)ELEVENLABS_API_KEYELEVENLABS_STT_MODEL_ID(defaultscribe_v1)SPEECHMATICS_API_KEY(optional fallback)SPEECHMATICS_TTS_BASE_URL(optional fallback, default provided)SPEECHMATICS_TTS_VOICE(optional fallback, defaultsarah)SPEECHMATICS_TTS_OUTPUT_FORMAT(optional fallback, defaultwav_16000)
Required web env keys:
VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEYVITE_API_BASE_URL(optional, defaults tohttp://localhost:4000)
Supabase schema:
- The schema is now a Supabase CLI migration in
supabase/migrations/20260301042017_init_agent_action_schema.sql. - Apply it with:
supabase link --project-ref <your-project-ref>supabase db push
Supabase CLI bootstrap done in this repo:
supabase/config.tomlinitializedsupabase/seed.sqlcreated- auth redirect defaults updated to
http://localhost:5173
pnpm dev- Web UI:
http://localhost:5173 - API:
http://localhost:4000 - Voice health:
http://localhost:4000/health/voice
pnpm dev
pnpm build
pnpm typecheck
pnpm test- Authentication is mandatory for action-capable sessions.
- General chat memory remains in-memory and can reset on restart.
- Gmail triage workflow memory (selection/draft/sent progress) is persisted locally in
apps/server/.runtime/email-workflows.json. - Action/audit persistence is available when Supabase schema is applied.
- STT/TTS priority is ElevenLabs first, then Speechmatics fallback.
- Real credentials should stay in
.env.localonly.