A mobile-first, web-based interface for building and managing SignalWire AI agents without writing code.
- Visual agent configuration with drag-and-drop skills
- Mobile-first responsive design with desktop optimization
- Token-based authentication with admin panel
- Real-time SWML preview
- Multi-language support with voice configuration
- Knowledge base integration with pgvector search
- Media library for audio/video file management
- Call summary tracking and analytics
- Environment variable management
- Advanced AI parameter configuration
- Prompt Builder: Visual prompt sections with drag-and-drop ordering
- Skills Selector: Browse and configure built-in and custom skills
- Voice & Language: Support for multiple TTS engines and languages
- AI Parameters: Fine-tune LLM behavior with temperature, token limits, etc.
- Knowledge Bases: Attach multiple knowledge bases with custom configurations
- Media Library: Upload and manage audio/video files for agent responses
- Recording: Configure call recording with format options
- Post-Prompt: Set up conversation summaries and webhooks
- Contexts & Steps: Define conversation flow and data collection
- Native Functions: Enable built-in SignalWire functions
- Custom Pronunciations: Define how specific words should be pronounced
- Global Data: Set data available throughout conversations
- Hints: Configure simple and pattern-based recognition hints
- Token management with role-based access
- System information and health monitoring
- Global settings configuration
- Environment variable management
- Media library settings and quotas
- Audit logging for all actions
- Copy the environment file and configure:
cp .env.example .env
# Edit .env with your settings- Copy the environment file and configure:
copy .env.example .env
# Edit .env with your settings using notepad or your preferred editor- Ensure certificates are in place:
# The system expects /certs/server.pem to exist
# For development, a self-signed certificate is included- Start the application:
docker-compose up -d- Access the application at:
https://your-domain.com:8430
Default login token: admin-token-changeme
The application uses environment variables for configuration. Copy .env.example to .env and configure:
# Database
DB_PASSWORD=your-secure-database-password
# Security
JWT_SECRET=your-long-random-jwt-secret-key-here
SIGNALWIRE_JWT_SECRET=your-signalwire-jwt-secret-key-here
# Server Configuration
HOSTNAME=your-domain.example.com
PORT=8430
API_PORT=8000
# Rate Limiting
RATE_LIMIT_API=100
RATE_LIMIT_SWML=1000
# Development
NODE_ENV=productionThe application uses Docker named volumes for persistent storage:
-
Media Storage (
media_storage):- Path:
/app/data/media - Contains uploaded audio/video files
- Organized in
/audioand/videosubdirectories
- Path:
-
Knowledge Base Storage (
kb_storage):- Path:
/app/data/knowledge_base - Contains uploaded documents for vector search
- Organized by knowledge base UUID
- Path:
-
PostgreSQL Database (
postgres_data):- Path:
/var/lib/postgresql/data - Contains all application data
- Path:
-
Application Logs (
app_logs):- Path:
/app/logs - Contains application log files
- Path:
To backup media files:
docker run --rm -v signalwire-agents-ui_media_storage:/data -v $(pwd):/backup busybox tar czf /backup/media-backup.tar.gz /dataTo backup the database:
docker-compose exec db pg_dump -U agent_builder agent_builder > backup.sql- Docker and Docker Compose
- Node.js 20.x (for local development)
- Python 3.11
- PostgreSQL client tools
signalwire-agents-ui/
├── backend/ # FastAPI backend application
│ ├── api/ # API endpoints
│ ├── core/ # Core utilities
│ ├── services/ # Business logic
│ └── migrations/ # Database migrations
├── frontend/ # React frontend with TypeScript
│ ├── src/
│ │ ├── pages/ # Page components
│ │ ├── components/ # Reusable components
│ │ └── api/ # API client
│ └── public/ # Static assets
├── docker/ # Docker configuration
├── scripts/ # Utility scripts
├── tools/ # Development tools
└── signalwire-agents/ # SignalWire SDK (submodule)
To rebuild after making changes:
Linux/macOS:
./rebuild.shWindows (Command Prompt):
rebuild.batWindows (PowerShell):
.\rebuild.ps1These scripts handle:
- Detecting SDK changes and cache busting
- Building frontend assets
- Rebuilding Docker images
- Restarting containers
POST /api/auth/login- Login with tokenPOST /api/auth/refresh- Refresh JWT token
GET /api/agents- List all agentsPOST /api/agents- Create new agentGET /api/agents/{id}- Get agent detailsPUT /api/agents/{id}- Update agentDELETE /api/agents/{id}- Delete agentGET /agents/{id}/swml- Get SWML document (public)
GET /api/knowledge-bases- List knowledge basesPOST /api/knowledge-bases- Create knowledge baseGET /api/knowledge-bases/{id}- Get knowledge base detailsPOST /api/knowledge-bases/{id}/documents- Upload documentsPOST /api/agents/{agent_id}/knowledge-bases- Attach knowledge base to agent
GET /api/media- List media filesPOST /api/media/upload- Upload media filePOST /api/media/import- Import from URLDELETE /api/media/{id}- Delete media fileGET /api/media/{id}/usage- Get usage information
GET /api/agents/{agent_id}/summaries- Get agent call summariesGET /api/agents/{agent_id}/summaries/{id}- Get detailed summaryGET /api/call-summaries- Get all call summariesPOST /api/call-summaries- Create call summary (webhook)
GET /api/admin/tokens- List tokensPOST /api/admin/tokens- Create tokenDELETE /api/admin/tokens/{id}- Delete tokenGET /api/admin/settings- Get global settingsPUT /api/admin/settings- Update settingsGET /api/admin/system- Get system information
- All API endpoints require JWT authentication (except SWML endpoints)
- HTTPS only with TLS 1.2+ enforced
- Rate limiting configured per endpoint type
- CORS configured for security
- Input validation and sanitization
- SQL injection prevention with parameterized queries
- XSS protection headers
- CSRF protection for state-changing operations
Run the API test suite:
./test-api.sh allTest specific components:
./test-api.sh agents
./test-api.sh summaries
./test-api.sh mediaUse the included API testing tool for interactive exploration:
# Run interactive menu
python3 tools/api_tool.py
# Direct commands
python3 tools/api_tool.py agents # List agents
python3 tools/api_tool.py media # List media files
python3 tools/api_tool.py kb # List knowledge bases
python3 tools/api_tool.py system # Get system infoSee tools/api_tool_usage.md for detailed documentation.
Access the database:
docker-compose exec db psql -U agent_builder -d agent_builderRun migrations:
docker-compose exec app python -m backend.core.migrationsView application logs:
docker-compose logs -f appView nginx access logs:
docker-compose exec app tail -f /var/log/nginx/access.logView nginx error logs:
docker-compose exec app tail -f /var/log/nginx/error.log-
Cannot access the application
- Check that Docker containers are running:
docker-compose ps - Verify the hostname and port in your
.envfile - Check firewall rules for port 8430
- Check that Docker containers are running:
-
Authentication failures
- Ensure JWT_SECRET is set in
.env - Check token expiration (default 1 hour)
- Verify the token format in the Authorization header
- Ensure JWT_SECRET is set in
-
Media upload failures
- Check file size limits (50MB audio, 200MB video)
- Verify allowed file types (MP3, WAV, OGG, MP4, WebM)
- Ensure media storage volume has sufficient space
-
Database connection errors
- Verify DB_PASSWORD matches in
.envand docker-compose.yml - Check that the database container is healthy
- Ensure migrations have been run
- Verify DB_PASSWORD matches in
To enable debug logging, set in your .env:
DEBUG=true- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Proprietary - SignalWire
For issues and feature requests, please contact the SignalWire support team or open an issue in the project repository.