use-with-livekit
Skill0 starsChanged 57 days agoMITView on GitHub
Connect LiveKit Agents to ThunderPhone Realtime. Use when someone asks for the ThunderPhone LiveKit plugin, the current GitHub fork install, livekit-agents compatibility, an OpenAI Realtime endpoint swap, saved agent_id sessions, or LiveKit voice-agent troubleshooting.
- Reads credentials
- Installs packages
- 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
- migrate-from-vapiSkill
- place-outbound-callsSkill
- run-campaignSkill
- setup-api-keySkill
- setup-webhooksSkill
- test-agentSkill
- thunderphone-mcp-setupSkill
- thunderphone-prompt-builderSkill
- use-with-openai-realtimeSkill
- use-with-pipecatSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 3 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 82
Follow use with LiveKit and the Realtime API.
- Distinctive: line 84
Keep all API and room tokens server-side and out of logs.
- Distinctive: line 85
Verify audio and lifecycle behavior in a real room before a readiness claim.
≈ “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
Use ThunderPhone with LiveKit
- Install the current source honestly. The published package name is
livekit-plugins-thunderphone, but the current documented install comes from the LiveKit Agents fork branch:
pip install "git+https://github.com/kolchinski/agents@add-thunderphone-plugin#subdirectory=livekit-plugins/livekit-plugins-thunderphone"Require livekit-agents 1.8 or newer and pin a reviewed commit for a
production lockfile. Do not imply the fork is an upstream release.
2. Keep both systems' credentials server-side. Load LiveKit credentials and
THUNDERPHONE_API_KEY from the runtime secret store.
3. Choose saved or inline configuration. A saved deployed agent centralizes
prompt, voice, tools, and knowledge. Inline configuration is appropriate only
when the LiveKit worker intentionally owns those settings.
4. Construct the ThunderPhone plugin following the guide, then pass it as
the realtime model in the LiveKit agent session. The service speaks the
OpenAI Realtime protocol at wss://api.thunderphone.com/v1/realtime.
5. Diagnose server-side session creation through
POST /v1/realtime/sessions when the plugin flow requires it.
{
"agent_id": 12
}curl --fail-with-body -X POST https://api.thunderphone.com/v1/realtime/sessions \
-H "Authorization: Bearer $THUNDERPHONE_API_KEY" \
-H "Content-Type: application/json" \
-H "X-ThunderPhone-Client: skills/use-with-livekit@1.0" \
--data-binary @realtime-session.jsonimport json, os, requests
with open("realtime-session.json", encoding="utf-8") as f: payload = json.load(f)
r = requests.post("https://api.thunderphone.com/v1/realtime/sessions", json=payload,
headers={"Authorization": f"Bearer {os.environ['THUNDERPHONE_API_KEY']}",
"X-ThunderPhone-Client": "skills/use-with-livekit@1.0"}, timeout=30)
r.raise_for_status(); print(r.json())import { readFile } from "node:fs/promises";
const r = await fetch("https://api.thunderphone.com/v1/realtime/sessions", { method: "POST",
headers: { Authorization: `Bearer ${process.env.THUNDERPHONE_API_KEY}`,
"Content-Type": "application/json", "X-ThunderPhone-Client": "skills/use-with-livekit@1.0" },
body: await readFile("realtime-session.json", "utf8") });
if (!r.ok) throw new Error(await r.text()); console.log(await r.json());- Verify end to end. Join a controlled room and test publish/subscribe, two-way audio, interruption, tools, language switching, participant leave, worker restart, and session cleanup. Correlate both LiveKit and ThunderPhone identifiers without logging tokens.
Errors
| Symptom | Cause | Fix |
| Package cannot be found or lacks plugin | Upstream package has not caught up with the fork | Install the documented fork path and pin a reviewed commit. |
| Worker joins but model is unauthorized | ThunderPhone key is absent or invalid | Load the server-side environment variable and verify with a read-only API call. |
| Agent behavior is stale | Wrong saved agent or undeployed draft | Confirm agent ID and deploy the intended revision. |
| Room survives after agent failure | Lifecycle cleanup is incomplete | Close the realtime model and audio/session resources on shutdown paths. |
Source and safety rules
- Follow use with LiveKit and the Realtime API.
- State that the current install is a fork until the official guide changes.
- Keep all API and room tokens server-side and out of logs.
- Verify audio and lifecycle behavior in a real room before a readiness claim.
See references/livekit-checklist.md.
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.

