Built-in Skills

View as MarkdownOpen in Claude

Available Skills

SkillDescriptionRequirements
datetimeDate/time informationpytz
mathMathematical calculations(none)
web_searchWeb search via Google APIAPI key
wikipedia_searchWikipedia lookups(none)
weather_apiWeather informationAPI key
jokeTell jokes(none)
play_background_filePlay audio files(none)
swml_transferTransfer to SWML endpoint(none)
datasphereDataSphere document searchAPI credentials
native_vector_searchLocal vector searchsearch extras
mcp_gatewayMCP server integrationMCP Gateway service
google_mapsAddress validation & routingGoogle Maps API key
info_gathererStructured question collection(none)
claude_skillsLoad SKILL.md files as toolsPyYAML

datetime

Get current date and time information with timezone support. This is one of the most commonly used skills — callers often ask “what time is it?” or need scheduling help.

Functions:

  • get_current_time - Get current time in a timezone
  • get_current_date - Get today’s date

Requirements: pytz package (usually installed automatically)

Parameters:

ParameterTypeDescriptionDefault
default_timezonestringDefault timezone if none specified”UTC”
tool_name_timestringCustom name for time function”get_current_time”
tool_name_datestringCustom name for date function”get_current_date”

Output format:

  • Time: “The current time in America/New_York is 2:30 PM”
  • Date: “Today’s date is November 25, 2024”

Common use cases:

  • “What time is it?” / “What time is it in Tokyo?”
  • “What’s today’s date?”
  • Scheduling and appointment contexts
  • Time zone conversions

Limitations:

  • Requires valid timezone names (e.g., “America/New_York”, not “EST”)
  • Doesn’t do time math or calculate durations
  • Doesn’t handle historical dates
LanguageAdding datetime with config
Pythonself.add_skill("datetime", {"default_timezone": "America/New_York"})
TypeScriptagent.addSkill('datetime', { defaultTimezone: 'America/New_York' })
1from signalwire import AgentBase
2
3class TimeAgent(AgentBase):
4 def __init__(self):
5 super().__init__(name="time-agent")
6 self.add_language("English", "en-US", "rime.spore")
7
8 self.add_skill("datetime", {
9 "default_timezone": "America/New_York"
10 })
11
12 self.prompt_add_section(
13 "Role",
14 "You help users with date and time information."
15 )

math

Perform mathematical calculations safely. The skill uses a secure expression evaluator that supports common operations without executing arbitrary code.

Functions:

  • calculate - Evaluate mathematical expressions

Requirements: None

Parameters:

ParameterTypeDescriptionDefault
tool_namestringCustom function name”calculate”
tool_descriptionstringCustom description”Perform calculations”

Supported operations:

  • Basic: +, -, *, /, ** (power), % (modulo)
  • Functions: sqrt, sin, cos, tan, log, abs, round
  • Constants: pi, e
  • Parentheses for grouping

Common use cases:

  • “What’s 15 percent of 230?”
  • “Calculate 45 times 67”
  • “What’s the square root of 256?”
  • Price calculations, tip calculations

Limitations:

  • Limited to supported functions (no arbitrary Python)
  • Large numbers may lose precision
  • Can’t solve equations or do symbolic math
1from signalwire import AgentBase
2
3class CalculatorAgent(AgentBase):
4 def __init__(self):
5 super().__init__(name="calculator")
6 self.add_language("English", "en-US", "rime.spore")
7
8 self.add_skill("math")
9
10 self.prompt_add_section(
11 "Role",
12 "You are a calculator that helps with math."
13 )

Search the web using Google Custom Search API. Results are filtered for quality and summarized for voice delivery.

Functions:

  • web_search - Search the web and return summarized results

Requirements:

  • Google Custom Search API key (from Google Cloud Console)
  • Search Engine ID (from Programmable Search Engine)

Setup:

  1. Create a project in Google Cloud Console
  2. Enable the Custom Search JSON API
  3. Create an API key
  4. Create a Programmable Search Engine at https://programmablesearchengine.google.com/
  5. Get the Search Engine ID

Parameters:

ParameterTypeDescriptionDefault
api_keystringGoogle API keyRequired
search_engine_idstringSearch engine IDRequired
num_resultsintegerResults to return3
min_quality_scorenumberQuality threshold (0-1)0.3
tool_namestringCustom function name”web_search”
tool_descriptionstringCustom description”Search the web”

Multi-instance support: Yes - add multiple instances for different search engines (news, docs, etc.)

1from signalwire import AgentBase
2
3class SearchAgent(AgentBase):
4 def __init__(self):
5 super().__init__(name="search-agent")
6 self.add_language("English", "en-US", "rime.spore")
7
8 self.add_skill("web_search", {
9 "api_key": "YOUR_GOOGLE_API_KEY",
10 "search_engine_id": "YOUR_SEARCH_ENGINE_ID",
11 "num_results": 3
12 })
13
14 self.prompt_add_section(
15 "Role",
16 "You search the web to answer questions."
17 )

Search Wikipedia for information. A free, no-API-key alternative to web search for factual queries.

Functions:

  • search_wikipedia - Search and retrieve Wikipedia article summaries

Requirements: None (uses public Wikipedia API)

Parameters:

ParameterTypeDescriptionDefault
languagestringWikipedia language code”en”
sentencesintegerSentences to return per result3
tool_namestringCustom function name”search_wikipedia”
1from signalwire import AgentBase
2
3class WikiAgent(AgentBase):
4 def __init__(self):
5 super().__init__(name="wiki-agent")
6 self.add_language("English", "en-US", "rime.spore")
7
8 self.add_skill("wikipedia_search", {
9 "sentences": 5 # More detailed summaries
10 })
11
12 self.prompt_add_section(
13 "Role",
14 "You look up information on Wikipedia to answer factual questions."
15 )

weather_api

Get current weather information for locations worldwide. Commonly used for small talk, travel planning, and location-aware services.

Functions:

  • get_weather - Get current weather conditions for a location

Requirements: WeatherAPI.com API key (free tier available)

Setup:

  1. Sign up at https://www.weatherapi.com/
  2. Get your API key from the dashboard
  3. Free tier allows 1 million calls/month

Parameters:

ParameterTypeDescriptionDefault
api_keystringWeatherAPI.com API keyRequired
tool_namestringCustom function name”get_weather”
tool_descriptionstringCustom description”Get weather”
1from signalwire import AgentBase
2
3class WeatherAgent(AgentBase):
4 def __init__(self):
5 super().__init__(name="weather-agent")
6 self.add_language("English", "en-US", "rime.spore")
7
8 self.add_skill("weather_api", {
9 "api_key": "YOUR_WEATHER_API_KEY"
10 })
11
12 self.prompt_add_section(
13 "Role",
14 "You provide weather information for any location."
15 )

joke

Tell jokes to lighten the mood or entertain callers. Uses a curated joke database for clean, family-friendly humor.

Functions:

  • tell_joke - Get a random joke

Requirements: None

Parameters:

ParameterTypeDescriptionDefault
categorystringJoke category filterNone (random)
tool_namestringCustom function name”tell_joke”
1from signalwire import AgentBase
2
3class FunAgent(AgentBase):
4 def __init__(self):
5 super().__init__(name="fun-agent")
6 self.add_language("English", "en-US", "rime.spore")
7
8 self.add_skill("joke")
9
10 self.prompt_add_section(
11 "Role",
12 "You are a fun assistant that tells jokes when asked."
13 )

play_background_file

Play audio files in the background during calls. Audio plays while conversation continues, useful for hold music, ambient sound, or audio cues.

Functions:

  • play_background_file - Start playing audio file
  • stop_background_file - Stop currently playing audio

Requirements: None (audio file must be accessible via URL)

Parameters:

ParameterTypeDescriptionDefault
audio_urlstringURL of audio file to playRequired
volumenumberPlayback volume (0.0-1.0)0.5
loopbooleanLoop the audiofalse
tool_name_playstringCustom play function name”play_background_file”
tool_name_stopstringCustom stop function name”stop_background_file”

Supported formats: MP3, WAV, OGG

1from signalwire import AgentBase
2
3class MusicAgent(AgentBase):
4 def __init__(self):
5 super().__init__(name="music-agent")
6 self.add_language("English", "en-US", "rime.spore")
7
8 self.add_skill("play_background_file", {
9 "audio_url": "https://example.com/hold-music.mp3",
10 "volume": 0.3, # Lower volume for background
11 "loop": True
12 })

swml_transfer

Transfer calls to another SWML endpoint.

Functions:

  • transfer_to_swml - Transfer to SWML URL

Requirements: None

1from signalwire import AgentBase
2
3class TransferAgent(AgentBase):
4 def __init__(self):
5 super().__init__(name="transfer-agent")
6 self.add_language("English", "en-US", "rime.spore")
7
8 self.add_skill("swml_transfer", {
9 "swml_url": "https://your-server.com/other-agent",
10 "description": "Transfer to specialist"
11 })

datasphere

Search SignalWire DataSphere documents.

Functions:

  • search_datasphere - Search uploaded documents

Requirements: DataSphere API credentials

1from signalwire import AgentBase
2
3class KnowledgeAgent(AgentBase):
4 def __init__(self):
5 super().__init__(name="knowledge-agent")
6 self.add_language("English", "en-US", "rime.spore")
7
8 self.add_skill("datasphere", {
9 "space_name": "your-space",
10 "project_id": "YOUR_PROJECT_ID",
11 "api_token": "YOUR_API_TOKEN"
12 })

Local vector search using .swsearch index files.

Functions:

  • search_knowledge - Search local vector index

Requirements: Search extras installed (pip install "signalwire[search]")

1from signalwire import AgentBase
2
3class LocalSearchAgent(AgentBase):
4 def __init__(self):
5 super().__init__(name="local-search")
6 self.add_language("English", "en-US", "rime.spore")
7
8 self.add_skill("native_vector_search", {
9 "index_path": "/path/to/knowledge.swsearch",
10 "tool_name": "search_docs"
11 })

mcp_gateway

Connect to MCP (Model Context Protocol) servers via the MCP Gateway service. This skill dynamically creates SWAIG functions from MCP tools, enabling your agent to use any MCP-compatible tool.

Functions: Dynamically created based on connected MCP services

Requirements:

  • MCP Gateway service running
  • Gateway URL and authentication credentials

Parameters:

ParameterTypeDescriptionDefault
gateway_urlstringMCP Gateway service URLRequired
auth_userstringBasic auth usernameNone
auth_passwordstringBasic auth passwordNone
auth_tokenstringBearer token (alternative auth)None
servicesarrayServices and tools to enableAll
session_timeoutintegerSession timeout (seconds)300
tool_prefixstringPrefix for function names”mcp_“
retry_attemptsintegerConnection retries3
request_timeoutintegerRequest timeout (seconds)30
verify_sslbooleanVerify SSL certificatestrue

How it works:

  1. Skill connects to gateway and discovers available tools
  2. Each MCP tool becomes a SWAIG function (e.g., mcp_todo_add_todo)
  3. Sessions persist per call_id, enabling stateful tools
  4. Session automatically closes when call ends
1from signalwire import AgentBase
2
3class MCPAgent(AgentBase):
4 def __init__(self):
5 super().__init__(name="mcp-agent")
6 self.add_language("English", "en-US", "rime.spore")
7
8 self.add_skill("mcp_gateway", {
9 "gateway_url": "http://localhost:8080",
10 "auth_user": "admin",
11 "auth_password": "secure-password",
12 "services": [
13 {"name": "todo", "tools": "*"},
14 {"name": "calculator", "tools": ["add", "multiply"]}
15 ]
16 })
17
18 self.prompt_add_section(
19 "Role",
20 "You help users manage tasks and perform calculations."
21 )

google_maps

Validate addresses and compute driving routes using Google Maps. Supports geocoding, spoken number normalization (e.g., “seven one four” becomes “714”), and location-biased search.

Functions:

  • lookup_address - Validate and geocode a street address or business name
  • compute_route - Compute driving distance and estimated travel time between two points

Requirements: Google Maps API key with Geocoding and Routes APIs enabled

Parameters:

ParameterTypeDescriptionDefault
api_keystringGoogle Maps API keyRequired
lookup_tool_namestringCustom name for address lookup function”lookup_address”
route_tool_namestringCustom name for route computation function”compute_route”
1from signalwire import AgentBase
2
3class DeliveryAgent(AgentBase):
4 def __init__(self):
5 super().__init__(name="delivery-agent")
6 self.add_language("English", "en-US", "rime.spore")
7
8 self.add_skill("google_maps", {
9 "api_key": "YOUR_GOOGLE_MAPS_API_KEY"
10 })
11
12 self.prompt_add_section(
13 "Role",
14 "You help customers verify delivery addresses and estimate delivery times."
15 )

info_gatherer

Gather answers to a configurable list of questions. This is the skill version of the InfoGathererAgent prefab, designed to be embedded within larger agents.

Functions:

  • start_questions - Begin the question sequence
  • submit_answer - Submit an answer and get the next question

Requirements: None

Parameters:

ParameterTypeDescriptionDefault
questionslistList of question dictionaries (key_name, question_text, confirm)Required
prefixstringPrefix for tool names and namespace (enables multi-instance)None

Multi-instance support: Yes - use the prefix parameter to run multiple question sets on a single agent. With prefix="intake", tools become intake_start_questions and intake_submit_answer, and state is stored under skill:intake in global_data.

1from signalwire import AgentBase
2
3class MultiFormAgent(AgentBase):
4 def __init__(self):
5 super().__init__(name="multi-form")
6 self.add_language("English", "en-US", "rime.spore")
7
8 # First question set
9 self.add_skill("info_gatherer", {
10 "prefix": "contact",
11 "questions": [
12 {"key_name": "name", "question_text": "What is your name?"},
13 {"key_name": "email", "question_text": "What is your email?", "confirm": True}
14 ]
15 })
16
17 # Second question set
18 self.add_skill("info_gatherer", {
19 "prefix": "feedback",
20 "questions": [
21 {"key_name": "rating", "question_text": "How would you rate our service?"},
22 {"key_name": "comments", "question_text": "Any additional comments?"}
23 ]
24 })

claude_skills

Load Claude Code-style SKILL.md files as agent tools. Each SKILL.md file in the configured directory becomes a SWAIG function, with YAML frontmatter parsed for metadata (name, description, parameters).

Functions: Dynamically created from SKILL.md files (prefixed with claude_ by default)

Requirements: PyYAML package

Parameters:

ParameterTypeDescriptionDefault
skills_pathstringPath to directory containing SKILL.md filesRequired
tool_prefixstringPrefix for generated function names”claude_“
1from signalwire import AgentBase
2
3class ClaudeSkillsAgent(AgentBase):
4 def __init__(self):
5 super().__init__(name="claude-skills-agent")
6 self.add_language("English", "en-US", "rime.spore")
7
8 self.add_skill("claude_skills", {
9 "skills_path": "/path/to/skills/directory",
10 "tool_prefix": "skill_"
11 })

Skills Summary Table

SkillFunctionsAPI RequiredMulti-Instance
datetime2NoNo
math1NoNo
web_search1YesYes
wikipedia_search1NoNo
weather_api1YesNo
joke1NoNo
play_background_file2NoNo
swml_transfer1NoYes
datasphere1YesYes
native_vector_search1NoYes
mcp_gatewayDynamicNo*Yes
google_maps2YesNo
info_gatherer2NoYes
claude_skillsDynamicNoYes

* Requires MCP Gateway service, not external API