Twilio Signal's 2025 keynote demonstration. Featuring multi-agent voice AI using Twilio, Azure Foundry, and Azure AI Search.
twilio-signal-2025-keynote-demo is an early-stage TypeScript project in the AI payments / x402 ecosystem, focused on agent-to-agent, azure-ai-search, azure-foundry, azure-openai. It currently has 7 GitHub stars and 9 forks, and sits alongside related tools like Google_AzureOpenAI_A2A-Simplified, a2a-go, swival.
This demo showcases a multi-agent, voice-based AI system using Twilio ConversationRelay, Azure OpenAI, Azure AI Search, and Azure Foundry. It implements the Talker-Reasoner architecture (paper), a pattern for building agentic voice systems.
Talker Agent
Subconscious Background Processes (Reasoners)
Back-Office Agents
The demo includes a split-screen view of:
.env file params TWILIO_API_KEY and TWILIO_API_SECRET respectivelyTWILIO_SYNC_SVC_SID in both the .env file and the ui/.env file.env.example file, at the end are two mp3 files that need to be uploaded as Twilio assets, and their URLs set respectivelyDEFAULT_TWILIO_NUMBER to a number from your Twilio account that can make outbound callsDEMO_USER_* variables to your demo user<YOUR_SERVER>/incoming-call<YOUR_SERVER>/call-statusMost configuration will occur in the Azure AI Foundry or the Azure portal
Create an Azure account and login to https://portal.azure.com/
Ensure you have an subscription, the transcript storage service uses Azure AI Search which is not available on the free tier.
The following steps are performed in the UI, these can also be completed by commandline or terraform.
AI Search and select the servicesvc-crelay-search, choose deployment regiontranscript-store, use the <proj>/server/agents/recall/setup/search-schema.json as the input schema.env file set the AZURE_SEARCH_INDEX to the name of the index just created, e.g. transcript-storeAZURE_SEARCH_ENDPOINT url to the Search service just created, can be found under Overview on the side menuAZURE_ADMIN_KEY, which can be found under Settings > Keys > Primary Admin KeyLogin to Azure AI Foundry
API Key on the first page and set the FOUNDRY_API_KEY environment variableAzure AI Foundry project endpoint and set the AZURE_CONN_STRING varAzure OpenAI endpoint and set the AZURE_LLM_ENDPOINT varAZURE_LLM_DEPLOYMENT to gpt-4.1 (or whatever model you deployed), can be found under My assets > Models + Endpointstext-embedding-3-large model, set the EMBED_ENDPOINT environment variableLogin to Azure AI Foundry
asst_ and put it in the .env file variable named UNDERWRITER_AGENT_ID<proj>/server/agents/underwriter-agent/instructions.md<proj>/server/agents/underwriter-agent/tool-manifest.json into schema of as an OpenAPI 3.0 specified tool Action and name it UnderwriterBrainTool. Note: Replace {HOSTNAME} with your ngrok hostnameEnsure Azure CLI is installed
OSX
brew update && brew install azure-cli
This will be used in the Fly.io deployment (or other hosting service) The steps below walks you through creating a service user (Service Principal) in Azure and collecting the necessary credentials for automation, scripting, or integration purposes.
my-service-user📌 Save these values from the Overview page:
CLIENT_ID = Application (client) IDTENANT_ID = Directory (tenant) ID📌 Save this value:
CLIENT_SECRET = The generated secret value⚠️ You will not be able to retrieve the secret again after leaving the page.
Azure AI User and Cognitive Services Contributor📌 Save this value:
SUBSCRIPTION_ID = The Subscription's GUIDfly launch to launch a new app with Fly.env configuration to respective [env] variables in fly.toml.env.flysecretsfly secrets import < ./.env.flysecretsOnce the application has been deployed (or before running locally) ensure that the Twilio Sync objects are populated by running the script:
pnpm run data:populate