Source profileQuality 86/100

team-telnyx/ai/skills/telnyx-ai-assistants-ruby/SKILL.md

telnyx-ai-assistants-ruby

AI voice assistants with custom instructions, knowledge bases, and tool integrations.

Source repository stars
201
Declared platforms
0
Static risk flags
0
Last source update
2026-08-04
Source checked
2026-08-04

Decision brief

What it does—and where it fits

AI voice assistants with custom instructions, knowledge bases, and tool integrations.

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/team-telnyx/ai --skill "skills/telnyx-ai-assistants-ruby"
    Safe inspection promptEditorial

    Inspect the Agent Skill "telnyx-ai-assistants-ruby" from https://github.com/team-telnyx/ai/blob/50f446de5b77867ff751d1a2e65e4c54ba692278/skills/telnyx-ai-assistants-ruby/SKILL.md at commit 50f446de5b77867ff751d1a2e65e4c54ba692278. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Setup

      All examples below assume client is already initialized as shown above.

      All examples below assume client is already initialized as shown above.
    2. 02

      Installation

      Review the “Installation” section in the pinned source before continuing.

      Review and apply the “Installation” source section.
    3. 03

      Error Handling

      All API calls can fail with network errors, rate limits (429), validation errors (422), or authentication errors (401). Always handle errors in production code:

      All API calls can fail with network errors, rate limits (429), validation errors (422), or authentication errors (401). Always handle errors in production code:Common error codes: 401 invalid API key, 403 insufficient permissions, 404 resource not found, 422 validation error (check field formats), 429 rate limited (retry with exponential backoff).
    4. 04

      Important Notes

      Phone numbers must be in E.164 format (e.g., +13125550001). Include the + prefix and country code. No spaces, dashes, or parentheses.

      Phone numbers must be in E.164 format (e.g., +13125550001). Include the + prefix and country code. No spaces, dashes, or parentheses.Pagination: Use .autopagingeach for automatic iteration: page.autopagingeach { |item| puts item.id }.- Phone numbers must be in E.164 format (e.g., +13125550001). Include the + prefix and country code. No spaces, dashes, or parentheses. - Pagination: Use .autopagingeach for automatic iteration: page.autopagingeach { |i…
    5. 05

      Reference Use Rules

      Do not invent Telnyx parameters, enums, response fields, or webhook fields.

      If the parameter, enum, or response field you need is not shown inline in this skill, read references/api-details.md before writing code.Before using any operation in Additional Operations, read the optional-parameters section and the response-schemas section.Do not invent Telnyx parameters, enums, response fields, or webhook fields.

    Permission review

    Static risk signals and limitations

    No configured static risk pattern was detected

    This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score86/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars201SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    team-telnyx/ai
    Skill path
    skills/telnyx-ai-assistants-ruby/SKILL.md
    Commit
    50f446de5b77867ff751d1a2e65e4c54ba692278
    License
    MIT
    Collected
    2026-08-04
    Default branch
    main
    View the original SKILL.md

    Telnyx AI Assistants - Ruby

    Installation

    gem install telnyx
    

    Setup

    require "telnyx"
    
    client = Telnyx::Client.new(
      api_key: ENV["TELNYX_API_KEY"], # This is the default and can be omitted
    )
    

    All examples below assume client is already initialized as shown above.

    Error Handling

    All API calls can fail with network errors, rate limits (429), validation errors (422), or authentication errors (401). Always handle errors in production code:

    assistant = client.ai.assistants.create(instructions: "You are a helpful assistant.", name: "my-resource", model: "openai/gpt-4o")
    puts(assistant)
    

    Common error codes: 401 invalid API key, 403 insufficient permissions, 404 resource not found, 422 validation error (check field formats), 429 rate limited (retry with exponential backoff).

    Important Notes

    • Phone numbers must be in E.164 format (e.g., +13125550001). Include the + prefix and country code. No spaces, dashes, or parentheses.
    • Pagination: Use .auto_paging_each for automatic iteration: page.auto_paging_each { |item| puts item.id }.

    Reference Use Rules

    Do not invent Telnyx parameters, enums, response fields, or webhook fields.

    Core Tasks

    Create an assistant

    Assistant creation is the entrypoint for any AI assistant integration. Agents need the exact creation method and the top-level fields returned by the SDK.

    client.ai.assistants.create()POST /ai/assistants

    ParameterTypeRequiredDescription
    namestringYes
    instructionsstringYesSystem instructions for the assistant.
    tagsarray[string]NoTags associated with the assistant.
    modelstringNoID of the model to use when external_llm is not set.
    toolsarray[object]NoDeprecated for new integrations.
    ...+23 optional params in references/api-details.md
    assistant = client.ai.assistants.create(instructions: "You are a helpful assistant.", name: "my-resource", model: "openai/gpt-4o")
    puts(assistant)
    

    Primary response fields:

    • assistant.id
    • assistant.name
    • assistant.model
    • assistant.instructions
    • assistant.created_at
    • assistant.conversation_flow

    Chat with an assistant

    Chat is the primary runtime path. Agents need the exact assistant method and the response content field.

    client.ai.assistants.chat()POST /ai/assistants/{assistant_id}/chat

    ParameterTypeRequiredDescription
    contentstringYesThe message content sent by the client to the assistant
    conversation_idstring (UUID)YesA unique identifier for the conversation thread, used to mai...
    assistant_idstring (UUID)YesUnique identifier of the assistant.
    namestringNoThe optional display name of the user sending the message
    response = client.ai.assistants.chat(
      "assistant_id",
      content: "Tell me a joke about cats",
      conversation_id: "42b20469-1215-4a9a-8964-c36f66b406f4"
    )
    
    puts(response)
    

    Primary response fields:

    • response.content

    Create an assistant test

    Test creation is the main validation path for production assistant behavior before deployment.

    client.ai.assistants.tests.create()POST /ai/assistants/tests

    ParameterTypeRequiredDescription
    namestringYesA descriptive name for the assistant test.
    destinationstringYesThe target destination for the test conversation.
    instructionsstringYesDetailed instructions that define the test scenario and what...
    rubricarray[object]YesEvaluation criteria used to assess the assistant's performan...
    descriptionstringNoOptional detailed description of what this test evaluates an...
    telnyx_conversation_channelobjectNoThe communication channel through which the test will be con...
    max_duration_secondsintegerNoMaximum duration in seconds that the test conversation shoul...
    ...+1 optional params in references/api-details.md
    assistant_test = client.ai.assistants.tests.create(
      destination: "+15551234567",
      instructions: "Act as a frustrated customer who received a damaged product. Ask for a refund and escalate if not satisfied with the initial response.",
      name: "Customer Support Bot Test",
      rubric: [
        {criteria: "Assistant responds within 30 seconds", name: "Response Time"},
        {criteria: "Provides correct product information", name: "Accuracy"}
      ]
    )
    
    puts(assistant_test)
    

    Primary response fields:

    • assistant_test.test_id
    • assistant_test.name
    • assistant_test.destination
    • assistant_test.created_at
    • assistant_test.instructions
    • assistant_test.description

    Important Supporting Operations

    Use these when the core tasks above are close to your flow, but you need a common variation or follow-up step.

    Get an assistant

    Fetch the current state before updating, deleting, or making control-flow decisions.

    client.ai.assistants.retrieve()GET /ai/assistants/{assistant_id}

    ParameterTypeRequiredDescription
    assistant_idstring (UUID)YesUnique identifier of the assistant.
    call_control_idstring (UUID)NoFilter results by call control id.
    fetch_dynamic_variables_from_webhookbooleanNoWhether to fetch dynamic variables from the configured webho...
    fromstring (E.164)NoStart of the filter range.
    ...+1 optional params in references/api-details.md
    assistant = client.ai.assistants.retrieve("550e8400-e29b-41d4-a716-446655440000")
    
    puts(assistant)
    

    Primary response fields:

    • assistant.id
    • assistant.name
    • assistant.created_at
    • assistant.conversation_flow
    • assistant.description
    • assistant.dynamic_variables

    Update an assistant

    Create or provision an additional resource when the core tasks do not cover this flow.

    client.ai.assistants.update()POST /ai/assistants/{assistant_id}

    ParameterTypeRequiredDescription
    assistant_idstring (UUID)YesUnique identifier of the assistant.
    tagsarray[string]NoTags associated with the assistant.
    namestringNo
    modelstringNoID of the model to use when external_llm is not set.
    ...+27 optional params in references/api-details.md
    assistant = client.ai.assistants.update("550e8400-e29b-41d4-a716-446655440000")
    
    puts(assistant)
    

    Primary response fields:

    • assistant.id
    • assistant.name
    • assistant.created_at
    • assistant.conversation_flow
    • assistant.description
    • assistant.dynamic_variables

    List assistants

    Inspect available resources or choose an existing resource before mutating it.

    client.ai.assistants.list()GET /ai/assistants

    assistants_list = client.ai.assistants.list
    
    puts(assistants_list)
    

    Response wrapper:

    • items: assistants_list.data

    Primary item fields:

    • id
    • name
    • created_at
    • conversation_flow
    • description
    • dynamic_variables

    Import assistants from external provider

    Import existing assistants from an external provider instead of creating from scratch.

    client.ai.assistants.imports()POST /ai/assistants/import

    ParameterTypeRequiredDescription
    providerenum (elevenlabs, vapi, retell)YesThe external provider to import assistants from.
    api_key_refstringYesIntegration secret pointer that refers to the API key for th...
    import_idsarray[string]NoOptional list of assistant IDs to import from the external p...
    assistants_list = client.ai.assistants.imports(api_key_ref: "my-openai-key", provider: :elevenlabs)
    
    puts(assistants_list)
    

    Response wrapper:

    • items: assistants_list.data

    Primary item fields:

    • id
    • name
    • created_at
    • conversation_flow
    • description
    • dynamic_variables

    Get All Tags

    Inspect available resources or choose an existing resource before mutating it.

    client.ai.assistants.tags.list()GET /ai/assistants/tags

    tags = client.ai.assistants.tags.list
    
    puts(tags)
    

    Primary response fields:

    • tags.tags

    List assistant tests with pagination

    Inspect available resources or choose an existing resource before mutating it.

    client.ai.assistants.tests.list()GET /ai/assistants/tests

    ParameterTypeRequiredDescription
    test_suitestringNoFilter tests by test suite name
    telnyx_conversation_channelstringNoFilter tests by communication channel (e.g., 'web_chat', 'sm...
    destinationstringNoFilter tests by destination (phone number, webhook URL, etc....
    ...+1 optional params in references/api-details.md
    page = client.ai.assistants.tests.list
    
    puts(page)
    

    Response wrapper:

    • items: page.data
    • pagination: page.meta

    Primary item fields:

    • name
    • created_at
    • description
    • destination
    • instructions
    • max_duration_seconds

    Get all test suite names

    Inspect available resources or choose an existing resource before mutating it.

    client.ai.assistants.tests.test_suites.list()GET /ai/assistants/tests/test-suites

    test_suites = client.ai.assistants.tests.test_suites.list
    
    puts(test_suites)
    

    Response wrapper:

    • items: test_suites.data

    Primary item fields:

    • data

    Get test suite run history

    Fetch the current state before updating, deleting, or making control-flow decisions.

    client.ai.assistants.tests.test_suites.runs.list()GET /ai/assistants/tests/test-suites/{suite_name}/runs

    ParameterTypeRequiredDescription
    suite_namestringYesName of the suite.
    test_suite_run_idstring (UUID)NoFilter runs by specific suite execution batch ID
    statusstringNoFilter runs by execution status (pending, running, completed...
    pageobjectNoConsolidated page parameter (deepObject style).
    page = client.ai.assistants.tests.test_suites.runs.list("suite_name")
    
    puts(page)
    

    Response wrapper:

    • items: page.data
    • pagination: page.meta

    Primary item fields:

    • status
    • created_at
    • updated_at
    • completed_at
    • conversation_id
    • conversation_insights_id

    Additional Operations

    Use the core tasks above first. The operations below are indexed here with exact SDK methods and required params; use references/api-details.md for full optional params, response schemas, and lower-frequency webhook payloads. Before using any operation below, read the optional-parameters section and the response-schemas section so you do not guess missing fields.

    OperationSDK methodEndpointUse whenRequired params
    Trigger test suite executionclient.ai.assistants.tests.test_suites.runs.trigger()POST /ai/assistants/tests/test-suites/{suite_name}/runsTrigger a follow-up action in an existing workflow rather than creating a new top-level resource.suite_name
    Get assistant test by IDclient.ai.assistants.tests.retrieve()GET /ai/assistants/tests/{test_id}Fetch the current state before updating, deleting, or making control-flow decisions.test_id
    Update an assistant testclient.ai.assistants.tests.update()PUT /ai/assistants/tests/{test_id}Modify an existing resource without recreating it.test_id
    Delete an assistant testclient.ai.assistants.tests.delete()DELETE /ai/assistants/tests/{test_id}Remove, detach, or clean up an existing resource.test_id
    Get test run history for a specific testclient.ai.assistants.tests.runs.list()GET /ai/assistants/tests/{test_id}/runsFetch the current state before updating, deleting, or making control-flow decisions.test_id
    Trigger a manual test runclient.ai.assistants.tests.runs.trigger()POST /ai/assistants/tests/{test_id}/runsTrigger a follow-up action in an existing workflow rather than creating a new top-level resource.test_id
    Get specific test run detailsclient.ai.assistants.tests.runs.retrieve()GET /ai/assistants/tests/{test_id}/runs/{run_id}Fetch the current state before updating, deleting, or making control-flow decisions.test_id, run_id
    Delete an assistantclient.ai.assistants.delete()DELETE /ai/assistants/{assistant_id}Remove, detach, or clean up an existing resource.assistant_id
    Get Canary Deployclient.ai.assistants.canary_deploys.retrieve()GET /ai/assistants/{assistant_id}/canary-deploysFetch the current state before updating, deleting, or making control-flow decisions.assistant_id
    Create Canary Deployclient.ai.assistants.canary_deploys.create()POST /ai/assistants/{assistant_id}/canary-deploysCreate or provision an additional resource when the core tasks do not cover this flow.assistant_id
    Update Canary Deployclient.ai.assistants.canary_deploys.update()PUT /ai/assistants/{assistant_id}/canary-deploysModify an existing resource without recreating it.assistant_id
    Delete Canary Deployclient.ai.assistants.canary_deploys.delete()DELETE /ai/assistants/{assistant_id}/canary-deploysRemove, detach, or clean up an existing resource.assistant_id
    Assistant Sms Chatclient.ai.assistants.send_sms()POST /ai/assistants/{assistant_id}/chat/smsRun assistant chat over SMS instead of direct API chat.from, to, assistant_id
    Clone Assistantclient.ai.assistants.clone_()POST /ai/assistants/{assistant_id}/cloneTrigger a follow-up action in an existing workflow rather than creating a new top-level resource.assistant_id
    Enhance Assistant Instructionsclient.ai.assistants.instructions.enhance()POST /ai/assistants/{assistant_id}/instructions/enhanceCreate or provision an additional resource when the core tasks do not cover this flow.assistant_id
    List scheduled eventsclient.ai.assistants.scheduled_events.list()GET /ai/assistants/{assistant_id}/scheduled_eventsFetch the current state before updating, deleting, or making control-flow decisions.assistant_id
    Create a scheduled eventclient.ai.assistants.scheduled_events.create()POST /ai/assistants/{assistant_id}/scheduled_eventsCreate or provision an additional resource when the core tasks do not cover this flow.telnyx_conversation_channel, telnyx_end_user_target, telnyx_agent_target, scheduled_at_fixed_datetime, +1 more
    Get a scheduled eventclient.ai.assistants.scheduled_events.retrieve()GET /ai/assistants/{assistant_id}/scheduled_events/{event_id}Fetch the current state before updating, deleting, or making control-flow decisions.assistant_id, event_id
    Delete a scheduled eventclient.ai.assistants.scheduled_events.delete()DELETE /ai/assistants/{assistant_id}/scheduled_events/{event_id}Remove, detach, or clean up an existing resource.assistant_id, event_id
    Add Assistant Tagclient.ai.assistants.tags.add()POST /ai/assistants/{assistant_id}/tagsCreate or provision an additional resource when the core tasks do not cover this flow.tag, assistant_id
    Remove Assistant Tagclient.ai.assistants.tags.remove()DELETE /ai/assistants/{assistant_id}/tags/{tag}Remove, detach, or clean up an existing resource.assistant_id, tag
    Get assistant texmlclient.ai.assistants.get_texml()GET /ai/assistants/{assistant_id}/texmlFetch the current state before updating, deleting, or making control-flow decisions.assistant_id
    Add Assistant Toolclient.ai.assistants.tools.add()PUT /ai/assistants/{assistant_id}/tools/{tool_id}Modify an existing resource without recreating it.assistant_id, tool_id
    Remove Assistant Toolclient.ai.assistants.tools.remove()DELETE /ai/assistants/{assistant_id}/tools/{tool_id}Remove, detach, or clean up an existing resource.assistant_id, tool_id
    Test Assistant Toolclient.ai.assistants.tools.test_()POST /ai/assistants/{assistant_id}/tools/{tool_id}/testTrigger a follow-up action in an existing workflow rather than creating a new top-level resource.assistant_id, tool_id
    Get all versions of an assistantclient.ai.assistants.versions.list()GET /ai/assistants/{assistant_id}/versionsFetch the current state before updating, deleting, or making control-flow decisions.assistant_id
    Get a specific assistant versionclient.ai.assistants.versions.retrieve()GET /ai/assistants/{assistant_id}/versions/{version_id}Fetch the current state before updating, deleting, or making control-flow decisions.assistant_id, version_id
    Update a specific assistant versionclient.ai.assistants.versions.update()POST /ai/assistants/{assistant_id}/versions/{version_id}Create or provision an additional resource when the core tasks do not cover this flow.assistant_id, version_id
    Delete a specific assistant versionclient.ai.assistants.versions.delete()DELETE /ai/assistants/{assistant_id}/versions/{version_id}Remove, detach, or clean up an existing resource.assistant_id, version_id
    Promote an assistant version to mainclient.ai.assistants.versions.promote()POST /ai/assistants/{assistant_id}/versions/{version_id}/promoteTrigger a follow-up action in an existing workflow rather than creating a new top-level resource.assistant_id, version_id
    List MCP Serversclient.ai.mcp_servers.list()GET /ai/mcp_serversInspect available resources or choose an existing resource before mutating it.None
    Create MCP Serverclient.ai.mcp_servers.create()POST /ai/mcp_serversCreate or provision an additional resource when the core tasks do not cover this flow.name, type, url
    Get MCP Serverclient.ai.mcp_servers.retrieve()GET /ai/mcp_servers/{mcp_server_id}Fetch the current state before updating, deleting, or making control-flow decisions.mcp_server_id
    Update MCP Serverclient.ai.mcp_servers.update()PUT /ai/mcp_servers/{mcp_server_id}Modify an existing resource without recreating it.mcp_server_id
    Delete MCP Serverclient.ai.mcp_servers.delete()DELETE /ai/mcp_servers/{mcp_server_id}Remove, detach, or clean up an existing resource.mcp_server_id
    List Toolsclient.ai.tools.list()GET /ai/toolsInspect available resources or choose an existing resource before mutating it.None
    Create Toolclient.ai.tools.create()POST /ai/toolsCreate or provision an additional resource when the core tasks do not cover this flow.type, display_name
    Get Toolclient.ai.tools.retrieve()GET /ai/tools/{tool_id}Fetch the current state before updating, deleting, or making control-flow decisions.tool_id
    Update Toolclient.ai.tools.update()PATCH /ai/tools/{tool_id}Modify an existing resource without recreating it.tool_id
    Delete Toolclient.ai.tools.delete()DELETE /ai/tools/{tool_id}Remove, detach, or clean up an existing resource.tool_id

    For exhaustive optional parameters, full response schemas, and complete webhook payloads, see references/api-details.md.

    Alternatives

    Compare before choosing

    Computed 10023,781

    alirezarezvani/claude-skills

    app-store-optimization

    App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist

    Computed 1004,922

    dotnet/skills

    migrate-vstest-to-mtp

    Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP). Use when user asks to "migrate to MTP", "switch from VSTest", "enable Microsoft.Testing.Platform", "use MTP runner", set OutputType=Exe only for test projects in Directory.Build.props, or mentions EnableMSTestRunner, EnableNUnitRunner, or UseMicrosoftTestingPlatformRunner. USE FOR: MTP behavioral differences vs VSTest (exit code 8, zero tests discovered, --ignore-exit-code, TESTINGPLATFORM_EXITCODE_IGNORE); centralizing

    Computed 984,922

    dotnet/skills

    maui-dependency-injection

    Guidance for configuring dependency injection in .NET MAUI apps — service registration in MauiProgram.cs, lifetime selection (Singleton / Transient / Scoped), constructor injection, Shell navigation auto-resolution, platform-specific registrations, and testability patterns. USE FOR: "dependency injection", "DI setup", "AddSingleton", "AddTransient", "AddScoped", "service registration", "constructor injection", "IServiceProvider", "MauiProgram DI", "register services", "BindingContext injection".

    Computed 983,251

    davepoon/buildwithclaude

    circleci-automation

    Automate CircleCI tasks via Rube MCP (Composio): trigger pipelines, monitor workflows/jobs, retrieve artifacts and test metadata. Always search tools first for current schemas.