Skip to main content

Mobile phone + SMS/Voice/WhatsApp agent skills for Concinno — Twilio (MIT) unified. HammerBench-adjacent blue ocean.

Project description

concinno-skills-mobile

Mobile / telephony agent skills for Concinno. Unified on the MIT-licensed Twilio Python SDK — the most mature programmatic-telephony provider for SMS, voice, and WhatsApp Business. Device-side Android / iOS shell control is intentionally out of scope; that belongs to the Sancio runtime layer.

Why this package exists

HammerBench (and adjacent benchmarks) evaluate agents on realistic telephony / SaaS workflows. Concinno can drive Twilio today over plain HTTPS — no device emulator, no OS-level hook — making this the blue-ocean entry point for mobile skills in the Concinno ecosystem.

Status

MVP (0.1.0) — three one-shot tools:

Tool class Channel Underlying API SDK licence
TwilioSms SMS Twilio Programmable Messaging MIT
TwilioWhatsApp WhatsApp Twilio WhatsApp Business (Messaging) MIT
TwilioVoiceCall Voice Twilio Programmable Voice MIT

Microsoft Teams / push-only providers (Pushover, ntfy) are deferred until they land in a dedicated sibling sub-package.

Install

pip install concinno-skills-mobile

twilio>=9.0 is a hard dependency and is pulled in automatically.

Twilio account requirements

You need a Twilio account (trial or paid). Outbound SMS / WhatsApp messages and voice calls cost money per Twilio's per-country pricing. A WARNING-level log line is emitted to stderr before every outbound call so the billing risk is visible in agent traces.

  • SMS: buy (or port) a Twilio phone number in a country you need to send to; long-code numbers are rate-limited to roughly 1 msg/sec.
  • WhatsApp: register a WhatsApp-enabled sender (Twilio Sandbox for trials or a fully-verified Business sender for production) — addresses use the whatsapp:+<digits> prefix on both to and from_.
  • Voice: any Twilio number with Voice capability works; the call behaviour is driven by either inline TwiML XML or a URL pointing at a hosted TwiML document.

Credentials

The Twilio account_sid + auth_token are read from the Concinno CredentialStore, which consults (in order):

  1. Process runtime overrides via CredentialStore.set(...).
  2. Env var CONCINNO_CRED_<UPPER_KEY>.
  3. ~/.concinno/credentials.json.
Key Env var
twilio_account_sid CONCINNO_CRED_TWILIO_ACCOUNT_SID
twilio_auth_token CONCINNO_CRED_TWILIO_AUTH_TOKEN

Example ~/.concinno/credentials.json:

{
  "twilio_account_sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "twilio_auth_token":  "your_auth_token_here"
}

If either credential is missing the tool returns {"error": "no twilio credentials — set account_sid + auth_token via CredentialStore / env"} rather than crashing.

Phone number formats

All destination / sender numbers are validated locally before the network call, both to catch typos early and to avoid burning billable round-trips on malformed input:

  • SMS / Voice: E.164 only (+<country_code><digits>, max 15 digits).
  • WhatsApp: whatsapp:+<country_code><digits>.

Both sides of every send / call are validated with the same rule.

Usage via Concinno ToolRegistry

When the consumer sets CONCINNO_LOAD_PLUGINS=1, the default registry auto-mounts every mobile tool:

import os
os.environ["CONCINNO_LOAD_PLUGINS"] = "1"

from concinno.tools.registry import get_default_registry

reg = get_default_registry()
assert {"TwilioSms", "TwilioWhatsApp", "TwilioVoiceCall"} <= set(
    reg.list_deferred()
)

sms = reg.get("TwilioSms")
sms.call(
    action="send",
    to="+14155551234",
    from_="+14155550000",
    body="Hello from Concinno",
)

Direct Python usage

from concinno_skills_mobile import (
    TwilioSms,
    TwilioWhatsApp,
    TwilioVoiceCall,
)

TwilioSms().call(
    action="send",
    to="+14155551234",
    from_="+14155550000",
    body="hi",
)

TwilioWhatsApp().call(
    action="send",
    to="whatsapp:+14155551234",
    from_="whatsapp:+14155550000",
    body="hi",
)

TwilioVoiceCall().call(
    action="create",
    to="+14155551234",
    from_="+14155550000",
    twiml="<Response><Say>Hi from Concinno</Say></Response>",
)

All tools return {"ok": True, ...} on success or {"error": "..."} on failure — same shape as other Concinno built-in tools. No exceptions escape the call() surface.

Concurrency

All three tools set is_concurrency_safe = False. Twilio rate limits (per-from-number for SMS; per-subaccount for voice; per-sender for WhatsApp) make serial dispatch the sane default; Concinno's scheduler will honour this automatically.

License

Apache-2.0. See LICENSE in the Concinno monorepo.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

concinno_skills_mobile-0.1.0.tar.gz (40.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

concinno_skills_mobile-0.1.0-py3-none-any.whl (14.9 kB view details)

Uploaded Python 3

File details

Details for the file concinno_skills_mobile-0.1.0.tar.gz.

File metadata

  • Download URL: concinno_skills_mobile-0.1.0.tar.gz
  • Upload date:
  • Size: 40.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for concinno_skills_mobile-0.1.0.tar.gz
Algorithm Hash digest
SHA256 de5b92d19482881e7b4f17c34f7c298ca69e9eb02f21e43e670ef3262b662944
MD5 c7d27cac13d53ce454fdd30ba4c852e0
BLAKE2b-256 085bc9826ee4f9516ef5af9858488bafccda1f921bc131400c3453c9ebc5ad82

See more details on using hashes here.

File details

Details for the file concinno_skills_mobile-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for concinno_skills_mobile-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a02cec5a65822f28e367c44bc2c84d09b50f3d566087b006b3ab7b22573606bb
MD5 71d4a2a3b058601ffc0a9e3200dd4045
BLAKE2b-256 a30baa4d9b562b0beda726f7028402f0dd18b1deebd45980d045c301107b7245

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page