migrate-from-vapi
Skill0 starsChanged 57 days agoMITView on GitHub
Import and validate Vapi assistants in ThunderPhone. Use when someone asks to migrate from Vapi, create a Vapi agent-import job, choose imported items, review mapped prompts or tools, identify manual migration gaps, commit an import, or run side-by-side tests.
- Reads credentials
- Sends data out
In this repository21 other files it gives its agents.
- AGENTS.mdAGENTS.md
- add-knowledgeSkill
- build-tool-integrationSkill
- create-agentSkill
- embed-web-widgetSkill
- get-phone-numberSkill
- handle-inbound-callsSkill
- iterate-on-agentSkill
- migrate-from-blandSkill
- migrate-from-elevenlabsSkill
- migrate-from-retellSkill
- place-outbound-callsSkill
- run-campaignSkill
- setup-api-keySkill
- setup-webhooksSkill
- test-agentSkill
- thunderphone-mcp-setupSkill
- thunderphone-prompt-builderSkill
- use-with-livekitSkill
- use-with-openai-realtimeSkill
- use-with-pipecatSkill
The file
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 4 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Very specific: line 16
Choose auth mode: Use api_key when the import worker may read Vapi directly, or paste for an authorized exported payload.
- Very specific: line 69
Test side by side: Use test-agent with the same scenarios against the source and imported behavior.
- Very specific: line 73
Compare current pricing from data: Use https://thunderphone.com/data/voice-ai-price-index.json.
- Distinctive: line 88
Follow import agents and the agent-import API.
- Distinctive: line 89
Never log source credentials or treat a discovered item as a committed agent.
- Distinctive: line 90
Do not switch phone traffic, delete source assets, or revoke credentials during import review.
- Distinctive: line 91
Use current source exports and current price-index data.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Migrate from Vapi
- Inventory before writing. Export the assistants, numbers, tools, knowledge, server URLs, credentials, squads/workflows, traffic, and test cases in scope. Record the source revision and owner. Do not switch traffic.
- Choose auth mode. Use
api_keywhen the import worker may read Vapi directly, orpastefor an authorized exported payload. Put source credentials in the protected request flow, never in a prompt or file. - Create an import job with
POST /v1/agent-importsusingsource: vapiand the chosen auth mode.
{
"source": "vapi",
"auth_mode": "paste",
"payload": "${EXPORTED_AGENT_JSON}"
}curl --fail-with-body -X POST https://api.thunderphone.com/v1/agent-imports \
-H "Authorization: Bearer $THUNDERPHONE_API_KEY" \
-H "Content-Type: application/json" \
-H "X-ThunderPhone-Client: skills/migrate-from-vapi@1.0" \
--data-binary @vapi-import.jsonimport json, os, requests
with open("vapi-import.json", encoding="utf-8") as f: payload = json.load(f)
r = requests.post("https://api.thunderphone.com/v1/agent-imports", json=payload,
headers={"Authorization": f"Bearer {os.environ['THUNDERPHONE_API_KEY']}",
"X-ThunderPhone-Client": "skills/migrate-from-vapi@1.0"}, timeout=60)
r.raise_for_status(); print(r.json())import { readFile } from "node:fs/promises";
const r = await fetch("https://api.thunderphone.com/v1/agent-imports", { method: "POST",
headers: { Authorization: `Bearer ${process.env.THUNDERPHONE_API_KEY}`,
"Content-Type": "application/json", "X-ThunderPhone-Client": "skills/migrate-from-vapi@1.0" },
body: await readFile("vapi-import.json", "utf8") });
if (!r.ok) throw new Error(await r.text()); console.log(await r.json());- Poll and review. Poll
GET /v1/agent-imports/{public_id}until review is ready. Inspect every item; usePATCH /v1/agent-imports/{public_id}/items/{item_id}to select it and correct its name, voice, product, or prompt choice. - Check mapping and gaps. Prompt, first message, voice, language, model, supported tools, transfer/end behavior, knowledge, voicemail, silence, and duration can map. Numbers, server URLs, credentials, squads/workflows, and unsupported tools need an explicit manual plan. See references/vapi-mapping.md.
- Commit only reviewed items with
POST /v1/agent-imports/{public_id}/commit. Poll the job until terminal and record each created ThunderPhone agent ID. Delete an unneeded job withDELETE /v1/agent-imports/{public_id}before commit. - Test side by side. Use
test-agentwith the same scenarios against the source and imported behavior. Compare task outcome, prompt facts, tools, transfers, knowledge, language, audio, and timing. Move phone traffic only under a separate approved cutover with rollback. - Compare current pricing from data. Use
https://thunderphone.com/data/voice-ai-price-index.json; do not copy old or invented competitor prices into the migration plan.
Errors
| Symptom | Cause | Fix |
| Import cannot read Vapi | Source key lacks scope, is expired, or auth mode is wrong | Use authorized access through the protected flow or a permitted export. |
| Item is not selectable | Discovery or mapping failed | Read the item error and make a manual plan; do not invent mapped fields. |
| Tools behave differently | Vendor-specific schema or server behavior did not map | Rebuild a narrow ThunderPhone integration and test success/failure cases. |
| Imported call differs from source | Manual assets, deployed revision, or runtime semantics differ | Reconcile the mapping checklist and rerun matched scenarios. |
Source and safety rules
- Follow import agents and the agent-import API.
- Never log source credentials or treat a discovered item as a committed agent.
- Do not switch phone traffic, delete source assets, or revoke credentials during import review.
- Use current source exports and current price-index data; do not invent parity.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

