> For a complete index of all SignalWire documentation pages, fetch https://signalwire.com/docs/llms.txt

# SignalWire SDKs

> Everything you need to install the SignalWire SDK, create your first voice AI agent, and connect it to the SignalWire platform.

[installation]: /docs/server-sdks/guides/installation

[quick-start]: /docs/server-sdks/guides/quickstart

[development-environment]: /docs/server-sdks/guides/dev-environment

[exposing-agents]: /docs/server-sdks/guides/exposing-agents

## Supported Languages

The SignalWire Server SDK is available in multiple languages. Select the variant that matches your development environment.

## What You'll Learn

This chapter walks you through the complete setup process:

1. **Installation** - Install the SDK and verify it works
2. **Quick Start** - Build your first agent in under 5 minutes
3. **Development Environment** - Set up a professional development workflow
4. **Exposing Your Agent** - Make your agent accessible to SignalWire using ngrok

## Prerequisites

Before starting, ensure you have the following:

| Language   | Requirement | Package Manager |
| ---------- | ----------- | --------------- |
| Python     | 3.10+       | pip             |
| TypeScript | Node.js 18+ | npm             |

You'll also need:

* A **terminal/command line** interface
* A **text editor or IDE** (VS Code, etc.)
* (Optional) A **SignalWire account** for testing with real phone calls

## Time to Complete

| Section         | Time             |
| --------------- | ---------------- |
| Installation    | 5 min            |
| Quick Start     | 5 min            |
| Dev Environment | 10 min           |
| Exposing Agents | 10 min           |
| **Total**       | **\~30 minutes** |

## By the End of This Chapter

You will have:

* A working voice AI agent
* Accessible via public URL
* Ready to connect to SignalWire phone numbers

<img class="diagram" src="https://files.buildwithfern.com/signalwire.docs.buildwithfern.com/1f47d3ed5d278bf121fce88e9764ea37a0aa0958c844dffe7df738b0266353bf/assets/images/sdks/diagrams/01_01_introduction_diagram1.webp" alt="Getting Started Overview." />

## What is the SignalWire SDK?

The SignalWire SDK lets you create **voice AI agents** - intelligent phone-based assistants that can:

* Answer incoming phone calls automatically
* Have natural conversations using AI
* Execute custom functions (check databases, call APIs, etc.)
* Transfer calls, play audio, and manage complex call flows
* Scale from development to production seamlessly

## How It Works

<img class="diagram" src="https://files.buildwithfern.com/signalwire.docs.buildwithfern.com/c73bd2de15ea9a3bdde4b1f25eaa91b58c0cb4ad6a2205fde6d8d72df53161f0/assets/images/sdks/diagrams/01_01_introduction_diagram2.webp" alt="High-Level Architecture." />

**The flow:**

1. A caller dials your SignalWire phone number
2. SignalWire requests instructions from your agent (via HTTP)
3. Your agent returns **SWML** (SignalWire Markup Language) - a JSON document describing how to handle the call
4. SignalWire's AI talks to the caller based on your configuration
5. When the AI needs to perform actions, it calls your **SWAIG functions** (webhooks)
6. Your functions return results, and the AI continues the conversation

## Key Concepts

### Agent

An **Agent** is your voice AI application. It's a class that:

* Defines the AI's personality and behavior (via prompts)
* Provides functions the AI can call (SWAIG functions)
* Configures voice, language, and AI parameters
* Runs as a web server that responds to SignalWire requests

```python
from signalwire import AgentBase

class MyAgent(AgentBase):
    def __init__(self):
        super().__init__(name="my-agent")
        # Configure your agent here
```

```typescript
import { AgentBase } from '@signalwire/sdk';

const agent = new AgentBase({ name: 'my-agent' });
// Configure your agent here
```

### SWML (SignalWire Markup Language)

**SWML** is a JSON format that tells SignalWire how to handle calls. Your agent generates SWML automatically - you don't write it by hand.

```json
{
  "version": "1.0.0",
  "sections": {
    "main": [
      {"answer": {}},
      {"ai": {
        "prompt": {"text": "You are a helpful assistant..."},
        "SWAIG": {"functions": ["..."]}
      }}
    ]
  }
}
```

### SWAIG Functions

**SWAIG** (SignalWire AI Gateway) functions are tools your AI can use during a conversation. When a caller asks something that requires action, the AI calls your function.

```python
@agent.tool(description="Look up a customer by phone number")
def lookup_customer(args, raw_data=None):
    phone_number = args.get("phone_number", "")
    customer = database.find(phone_number)
    return FunctionResult(
        f"Customer: {customer.name}, Account: {customer.id}"
    )
```

```typescript
agent.defineTool({
  name: 'lookup_customer',
  description: 'Look up a customer by phone number',
  parameters: {
    type: 'object',
    properties: {
      phone_number: { type: 'string', description: 'Phone number' },
    },
    required: ['phone_number'],
  },
  handler: (args) => {
    const customer = database.find(args.phone_number as string);
    return new FunctionResult(
      `Customer: ${customer.name}, Account: ${customer.id}`
    );
  },
});
```

## Next Steps

Now that you understand the basics, let's get your development environment set up:

1. [Installation][installation] - Install the SDK
2. [Quick Start][quick-start] - Build your first agent
3. [Development Environment][development-environment] - Professional setup
4. [Exposing Agents][exposing-agents] - Connect to SignalWire