Skill metadata
Reference: full SKILL.md
The following is the complete skill definition that Mibyan loads when this skill is triggered. This is what the agent sees as instructions when the skill is active.
Telephony — Numbers, Calls, and Texts without Core Tool Changes
This optional skill gives Mibyan practical phone capabilities while keeping telephony out of the core tool list. It ships with a helper script,scripts/telephony.py, that can:
- save provider credentials into
${mibyan_HOME:-~/.mibyan}/.env - search for and buy a Twilio phone number
- remember that owned number for later sessions
- send SMS / MMS from the owned number
- poll inbound SMS for that number with no webhook server required
- make direct Twilio calls using TwiML
<Say>or<Play> - import the owned Twilio number into Vapi
- place outbound AI calls through Bland.ai or Vapi
What this solves
This skill is meant to cover the practical phone tasks users actually want:- outbound calls
- texting
- owning a reusable agent number
- checking messages that arrive to that number later
- preserving that number and related IDs between sessions
- future-friendly telephony identity for inbound SMS polling and other automations
Safety rules — mandatory
- Always confirm before placing a call or sending a text.
- Never dial emergency numbers.
- Never use telephony for harassment, spam, impersonation, or anything illegal.
- Treat third-party phone numbers as sensitive operational data:
- do not save them to Mibyan memory
- do not include them in skill docs, summaries, or follow-up notes unless the user explicitly wants that
- It is fine to persist the agent-owned Twilio number because that is part of the user’s configuration.
- VoIP numbers are not guaranteed to work for all third-party 2FA flows. Use with caution and set user expectations clearly.
Decision tree — which service to use?
Use this logic instead of hardcoded provider routing:1) “I want Mibyan to own a real phone number”
Use Twilio. Why:- easiest path to buying and keeping a number
- best SMS / MMS support
- simplest inbound SMS polling story
- cleanest future path to inbound webhooks or call handling
- receive texts later
- send deployment alerts / cron notifications
- maintain a reusable phone identity for the agent
- experiment with phone-based auth flows later
2) “I only need the easiest outbound AI phone call right now”
Use Bland.ai. Why:- quickest setup
- one API key
- no need to first buy/import a number yourself
- less flexible
- voice quality is decent, but not the best
3) “I want the best conversational AI voice quality”
Use Twilio + Vapi. Why:- Twilio gives you the owned number
- Vapi gives you better conversational AI call quality and more voice/model flexibility
- Buy/save a Twilio number
- Import it into Vapi
- Save the returned
VAPI_PHONE_NUMBER_ID - Use
ai-call --provider vapi
4) “I want to call with a custom prerecorded voice message”
Use Twilio direct call with a public audio URL. Why:- easiest way to play a custom MP3
- pairs well with Mibyan
text_to_speechplus a public file host or tunnel
Files and persistent state
The skill persists telephony state in two places:${mibyan_HOME:-~/.mibyan}/.env
Used for long-lived provider credentials and owned-number IDs, for example:
TWILIO_ACCOUNT_SIDTWILIO_AUTH_TOKENTWILIO_PHONE_NUMBERTWILIO_PHONE_NUMBER_SIDBLAND_API_KEYVAPI_API_KEYVAPI_PHONE_NUMBER_IDPHONE_PROVIDER(AI call provider: bland or vapi)
~/.mibyan/telephony_state.json
Used for skill-only state that should survive across sessions, for example:
- remembered default Twilio number / SID
- remembered Vapi phone number ID
- last inbound message SID/date for inbox polling checkpoints
- the next time the skill is loaded,
diagnosecan tell you what number is already configured twilio-inbox --since-last --mark-seencan continue from the previous checkpoint
Locate the helper script
After installing this skill, locate the script like this:SCRIPT is empty, the skill is not installed yet.
Install
This is an official optional skill, so install it from the Skills Hub:Provider setup
Twilio — owned number, SMS/MMS, direct calls, inbound SMS polling
Sign up at: Then save credentials into Mibyan:Bland.ai — easiest outbound AI calling
Sign up at: Save config:Vapi — better conversational voice quality
Sign up at: Save the API key first:Diagnose current state
At any time, inspect what the skill already knows:Common workflows
A. Buy an agent number and keep using it later
- Save Twilio credentials:
- Search for a number:
- Buy it and save it into
${mibyan_HOME:-~/.mibyan}/.env+ state:
- Next session, run:
B. Send a text from the agent number
C. Check inbound texts later with no webhook server
Poll the inbox for the default Twilio number:D. Make a direct Twilio call with built-in TTS
E. Call with a prerecorded / custom voice message
This is the main path for reusing Mibyan’s existingtext_to_speech support.
Use this when:
- you want the call to use Mibyan’s configured TTS voice rather than Twilio
<Say> - you want a one-way voice delivery (briefing, alert, joke, reminder, status update)
- you do not need a live conversational phone call
- Generate the audio with Mibyan
text_to_speech. - Make the resulting MP3 publicly reachable.
- Place the Twilio call with
--audio-url.
- Ask Mibyan to create the message audio with
text_to_speech - If needed, expose the file with a temporary static host / tunnel / object storage URL
- Use
twilio-call --audio-url ...to deliver it by phone
- a temporary public object/storage URL
- a short-lived tunnel to a local static file server
- any existing HTTPS URL the phone provider can fetch directly
- Mibyan TTS is great for prerecorded outbound messages
- Bland/Vapi are better for live conversational AI calls because they handle the real-time telephony audio stack themselves
- Mibyan STT/TTS alone is not being used here as a full duplex phone conversation engine; that would require a much heavier streaming/webhook integration than this skill is trying to introduce
F. Navigate a phone tree / IVR with Twilio direct calling
If you need to press digits after the call connects, use--send-digits.
Twilio interprets w as a short wait.
G. Outbound AI phone call with Bland.ai
H. Outbound AI phone call with Vapi on your owned number
- Import your Twilio number into Vapi:
- Place the call:
- Check result:
Suggested agent procedure
When the user asks for a call or text:- Determine which path fits the request via the decision tree.
- Run
diagnoseif configuration state is unclear. - Gather the full task details.
- Confirm with the user before dialing or texting.
- Use the correct command.
- Poll for results if needed.
- Summarize the outcome without persisting third-party numbers to Mibyan memory.
What this skill still does not do
- real-time inbound call answering
- webhook-based live SMS push into the agent loop
- guaranteed support for arbitrary third-party 2FA providers
Pitfalls
- Twilio trial accounts and regional rules can restrict who you can call/text.
- Some services reject VoIP numbers for 2FA.
twilio-inboxpolls the REST API; it is not instant push delivery.- Vapi outbound calling still depends on having a valid imported number.
- Bland is easiest, but not always the best-sounding.
- Do not store arbitrary third-party phone numbers in Mibyan memory.
Verification checklist
After setup, you should be able to do all of the following with just this skill:diagnoseshows provider readiness and remembered state- search and buy a Twilio number
- persist that number to
${mibyan_HOME:-~/.mibyan}/.env - send an SMS from the owned number
- poll inbound texts for the owned number later
- place a direct Twilio call
- place an AI call via Bland or Vapi
References
- Twilio phone numbers: https://www.twilio.com/docs/phone-numbers/api
- Twilio messaging: https://www.twilio.com/docs/messaging/api/message-resource
- Twilio voice: https://www.twilio.com/docs/voice/api/call-resource
- Vapi docs: https://docs.vapi.ai/
- Bland.ai: https://app.bland.ai/

