SignalWire’s cloud needs to reach your agent via HTTP:


Visit ngrok.com/download and download for your platform.
This enables:
Start your agent in one terminal:
Start ngrok in another terminal:
You’ll see output like:
Your public URL is: https://abc123def456.ngrok-free.app
Both should return the same SWML document.
ngrok provides a web interface at http://127.0.0.1:4040 showing:
This is invaluable for debugging SignalWire webhook calls!
Free ngrok gives you random URLs that change each restart. For easier development, use a static domain:
your-name.ngrok-free.app)Now your URL stays the same across restarts!
The SDK automatically secures your agent with HTTP Basic Authentication. Every time you start your agent, you’ll see:
The password changes on every restart unless you set environment variables.
For development, set these environment variables to use the same credentials across restarts:
Then start your agent:
Now it will show:
Why this matters:
Set the SWML_PROXY_URL_BASE environment variable so your agent generates correct webhook URLs:
Or set them when running:
This ensures:
Here’s the full workflow:
Create start-dev.sh:
Make it executable:
For production, don’t use ngrok. Instead:
See the Deployment chapter for production deployment guides.
Your auth token is invalid or expired. Get a new one from the ngrok dashboard:
Your agent isn’t running or is on a different port:
Set SWML_PROXY_URL_BASE:
Free ngrok tunnels expire after a few hours. Solutions:
Your agent is now accessible at a public URL. You’re ready to connect it to SignalWire!
Your agent is ready at: https://your-domain.ngrok-free.app
Next Chapter: Architecture - Deep dive into SWML, SWAIG, and agent architecture
Or jump to: SignalWire Integration - Connect your agent to phone numbers