agentleFS
thunderphonethunderphone/skills/use-with-livekit/SKILL.md

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

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
  1. Distinctive:

    Follow use with LiveKit and the Realtime API.

    line 82
  2. Distinctive:

    Keep all API and room tokens server-side and out of logs.

    line 84
  3. Distinctive:

    Verify audio and lifecycle behavior in a real room before a readiness claim.

    line 85

≈ “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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Use ThunderPhone with LiveKit

  1. 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.json
import 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());
  1. 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

SymptomCauseFix
Package cannot be found or lacks pluginUpstream package has not caught up with the forkInstall the documented fork path and pin a reviewed commit.
Worker joins but model is unauthorizedThunderPhone key is absent or invalidLoad the server-side environment variable and verify with a read-only API call.
Agent behavior is staleWrong saved agent or undeployed draftConfirm agent ID and deploy the intended revision.
Room survives after agent failureLifecycle cleanup is incompleteClose 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.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.