Motel Debug
kitlangton/motel
Debug applications with motel, a local OpenTelemetry ingest and query server.
Deploys and operates a LiveKit agent in production: shipping a version to LiveKit Cloud and rolling it back, secrets and configuration, the worker process model and prewarming, safe async inside…
$ npx skills add livekit-examples/agent-starter-python --skill operating-livekit-agents -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install livekit-examples/agent-starter-python operating-livekit-agents --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/livekit-examples/agent-starter-python.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/operating-livekit-agents .claude/skills/operating-livekit-agents && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "operating-livekit-agents" agent skill from https://github.com/livekit-examples/agent-starter-python/tree/main/.agents/skills/operating-livekit-agents into .claude/skills/operating-livekit-agents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "operating-livekit-agents", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/livekit-examples/agent-starter-python/tree/main/.agents/skills/operating-livekit-agentsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add livekit-examples/agent-starter-python --skill operating-livekit-agents -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install livekit-examples/agent-starter-python operating-livekit-agents --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/livekit-examples/agent-starter-python.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/operating-livekit-agents .agents/skills/operating-livekit-agents && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "operating-livekit-agents" agent skill from https://github.com/livekit-examples/agent-starter-python/tree/main/.agents/skills/operating-livekit-agents into .agents/skills/operating-livekit-agents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "operating-livekit-agents", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add livekit-examples/agent-starter-python --skill operating-livekit-agents -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install livekit-examples/agent-starter-python operating-livekit-agents --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/livekit-examples/agent-starter-python.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/operating-livekit-agents .cursor/skills/operating-livekit-agents && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "operating-livekit-agents" agent skill from https://github.com/livekit-examples/agent-starter-python/tree/main/.agents/skills/operating-livekit-agents into .cursor/skills/operating-livekit-agents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "operating-livekit-agents", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/livekit-examples/agent-starter-python.git --path .agents/skills/operating-livekit-agents--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add livekit-examples/agent-starter-python --skill operating-livekit-agents -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install livekit-examples/agent-starter-python operating-livekit-agents --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/livekit-examples/agent-starter-python.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/operating-livekit-agents .gemini/skills/operating-livekit-agents && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "operating-livekit-agents" agent skill from https://github.com/livekit-examples/agent-starter-python/tree/main/.agents/skills/operating-livekit-agents into .gemini/skills/operating-livekit-agents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "operating-livekit-agents", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install livekit-examples/agent-starter-python operating-livekit-agentsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add livekit-examples/agent-starter-python --skill operating-livekit-agents -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/livekit-examples/agent-starter-python.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/operating-livekit-agents .github/skills/operating-livekit-agents && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "operating-livekit-agents" agent skill from https://github.com/livekit-examples/agent-starter-python/tree/main/.agents/skills/operating-livekit-agents into .github/skills/operating-livekit-agents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "operating-livekit-agents", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add livekit-examples/agent-starter-python --skill operating-livekit-agents -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install livekit-examples/agent-starter-python operating-livekit-agents --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/livekit-examples/agent-starter-python.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/operating-livekit-agents .opencode/skills/operating-livekit-agents && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "operating-livekit-agents" agent skill from https://github.com/livekit-examples/agent-starter-python/tree/main/.agents/skills/operating-livekit-agents into .opencode/skills/operating-livekit-agents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "operating-livekit-agents", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
operating-livekit-agentsDeploys and operates a LiveKit agent in production: shipping a version to LiveKit Cloud and rolling it back, secrets and configuration, the worker process model and prewarming, safe async inside…
Operating Livekit Agents is an agent skill from livekit-examples/agent-starter-python. Deploys and operates a LiveKit agent in production: shipping a version to LiveKit Cloud and rolling it back, secrets and configuration, the worker process model and prewarming, safe async inside worker processes, provider timeouts and degradation, graceful shutdown, SDK upgrades, and observability. Use when the user says "deploy my agent", "roll back the deployment", "tail the agent logs", "the first call after a restart is slow", "attached to a different loop / event loop is closed", "prewarm the VAD", "shut…
Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in DevOps & Cloud, covering Observability, Async programming and Deployment. The repository describes itself as: A complete voice AI starter for LiveKit Agents with Python. The licence is MIT.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 76ddabb. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Operating Livekit Agents loads about 2.4k tokens when it runs. Until then it costs about 203 tokens; SKILL.md has 1,338 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from livekit-examples/agent-starter-python at commit 76ddabb, republished under its MIT licence (© livekit-examples). 1,338 words, ~2,422 tokens.
.claude/skills/operating-livekit-agents/SKILL.md (or your agent's skills folder).Everything after the agent works: getting a version onto LiveKit Cloud, keeping it fast and alive
under real load, and changing it without breaking what's already running. The commands live under
lk agent; read lk agent --help and each subcommand's help rather than trusting this skill for
flags — it deliberately doesn't restate them. reading-livekit-docs has the deployment and
observability docs.
The shape is stable even as the flags move:
livekit.toml).
Commands run from that directory find the agent without an id.lk agent start) before the
first deploy — it's production mode, with production logging and a shutdown drain, and it is
not what dev mode runs.status, versions, and logs (build logs
and deploy logs are separate) tell you what's live and why a rollout failed.After a deploy, verify with the same tools you'd use on a stranger's agent: status for the
rollout, logs for the first minutes, and a real conversation — running-livekit-simulations can
run a scenario file against the deployed agent by name, which is the cheapest end-to-end check that
the thing serving traffic is the thing you meant to ship.
Both SDKs run sessions in worker processes spawned from a parent. Misunderstanding this is the single most common source of production-only bugs.
The parent prewarms; children inherit. Load expensive, read-only resources — VAD and turn detection models, persistent clients — once in the parent through the SDK's prewarm hook, and each session inherits them without re-loading. Everything shared this way must be read-only or concurrency-safe; mutating parent state from a child is undefined behavior. Don't prewarm session-specific state, and don't prewarm what costs more memory than it saves — every byte in the parent is in every child's footprint. Then verify the child actually uses the prewarmed instance: the classic mistake is prewarming a model and having session code load a fresh one anyway, so the prewarm did nothing and startup is still slow.
The framework owns the event loop. Never create a new async runtime inside a worker, and never
block on an async call from a synchronous constructor to force a result. If initialization needs
async work, load lazily on first use from an already-async method, or split construction from an
awaited initialize step. When you see errors about events bound to a different loop, a loop
already running, tasks destroyed while pending, or a closed loop that can't be reused, the cause is
almost always one of those two things — trace back to where a runtime was created or a sync path
awaited something.
STT, TTS, LLM, VAD and any backend will fail in production: rate limits, timeouts, overload, outages. Set timeouts — a call that hangs is worse than one that fails fast. Distinguish transient failures worth retrying from persistent ones that need a fallback or escalation. Degrade to a meaningful spoken response, never to silence. Log provider response times, because rising latency is usually the first sign of an outage.
Adding a provider to an existing agent: check whether the SDK already has a plugin before writing one; follow how the codebase already initializes, configures, and handles errors for its other providers; run its config through the same pipeline; and test under realistic latency, not just happy-path responses.
The metric users feel is time to first audio — from the caller finishing to the agent starting to speak. Break it down before optimizing: connection, provider initialization, first inference, tool execution. Watch context growth over a long call; unbounded history means every turn is slower than the last.
The anti-patterns worth grepping for:
Endpointing and turn detection are tuning parameters, not defaults to accept. Too aggressive and
the agent talks over people who pause to think; too conservative and every reply feels late. The
right setting depends on the use case — a support agent handling complex questions wants patience,
a quick-answer assistant wants speed. Measure with audio simulations (running-livekit-simulations
scores turn-taking and perceived latency) rather than by feel.
In production mode the server drains on a termination signal: it stops taking new jobs, finishes active ones up to a drain timeout, then exits. Two things break this. An orchestrator grace period shorter than the drain timeout kills calls mid-sentence — match them. And post-call work (writing state, publishing events, finalizing recordings) that isn't tied to the job's lifecycle gets cut off — make sure it completes inside the drain. Dev mode has no drain, so shutdown behavior has to be tested in start mode.
The SDK moves fast and breaks things across versions. Pin the version. Read the changelog with
reading-livekit-docs before upgrading. Upgrade on a branch, run the test suite, then have real
conversations and run the simulation suite — some regressions only appear in actual dialogue. Watch
latency and error rates for the first hours after the deploy.
Three things make a production incident tractable instead of a mystery:
LiveKit Cloud provides agent logs, session insights, and tracing you can export to your own observability provider; the docs describe what's available and how to wire it.
Classify first, then reproduce:
Then take it local: reproduce the conversation with debugging-livekit-agents, pin the cause as a
test with testing-livekit-agents, and if it was a whole-conversation failure, add a scenario so it
can't come back quietly.
Read the project's own docs and conventions first — they override anything general. Read two or three modules like the one you're about to add before writing it, and follow how they're initialized, configured, tested, and wired into the config pipeline. Use the test fixtures and mock patterns that already exist rather than building parallel ones; a second way to do something that already has a way confuses every future contributor. Mock at the boundary — the provider call, the database — and exercise the real module logic.
building-livekit-agentsdebugging-livekit-agentstesting-livekit-agentsrunning-livekit-simulationsreading-livekit-docs© livekit-examples, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/operating-livekit-agents of livekit-examples/agent-starter-python.
Open the folder on GitHubat commit 76ddabb
We found 4 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in livekit-examples/agent-starter-python, which our catalogue first saw on October 7, 2026.
Operating Livekit Agents next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Operating Livekit Agents this skilllivekit-examples/agent-starter-python | 264 | 1 repos | ~2.4k | Automated safety check: Pass | MIT | |
| Motel Debugkitlangton/motel | 298 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Aspiremicrosoft/aspire.dev | 196 | 4 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Codex Session Debuggingweave-os/router | 5.6k | — | ~4.5k | Automated safety check: Warn | Apache-2.0 | |
| Medusa Cloud Local Buildmedusajs/medusa-agent-skills | 227 | — | ~1k | Automated safety check: Notes | None | |
| Log Aggregationaspectrr/deer | 405 | — | ~1.4k | Automated safety check: Pass | MIT |
kitlangton/motel
Debug applications with motel, a local OpenTelemetry ingest and query server.
microsoft/aspire.dev
Orchestrates Aspire distributed applications using the Aspire CLI for running, debugging, and managing distributed apps.
weave-os/router
Correlates a Codex CLI session's local transcript with a model router's production logs to explain why a reply rendered the way it did.
medusajs/medusa-agent-skills
Reproduces a Medusa Cloud build on your machine with mcloud local build, to debug build-failed deployments without pushing or waiting on Cloud.
aspectrr/deer
ELK Stack deployment, Logstash pipeline building, Filebeat configuration, and Kibana dashboard setup.
fcakyon/claude-codex-settings
This skill should be used when user asks about "GCloud logs", "Cloud Logging queries", "Google Cloud metrics", "GCP observability", "trace analysis", or "debugging production issues on GCP".
livekit-examples/agent-starter-python
Creates and maintains the scenarios a LiveKit agent simulation runs, and wires the agent to consume them.
livekit-examples/agent-starter-python
Drives a multi-turn conversation with a LiveKit agent running locally to see what it does.
livekit-examples/agent-starter-python
Looks up current LiveKit facts (API signatures, CLI flags, config options, model and provider support, SDK changelogs, pricing) from the docs instead of answering from memory.
livekit-examples/agent-starter-python
Runs LiveKit agent simulations and acts on the results. An agent skill from livekit-examples/agent-starter-python.
livekit-examples/agent-starter-python
Builds voice and chat AI agents with LiveKit Agents and LiveKit Cloud.
livekit-examples/agent-starter-python
Writes turn-level tests for a LiveKit agent in the user's normal test suite: pytest (Python) or Vitest (Node.js).
Categories
Deploys and operates a LiveKit agent in production: shipping a version to LiveKit Cloud and rolling it back, secrets and configuration, the worker process model and prewarming, safe async inside…. Operating Livekit Agents is an agent skill from livekit-examples/agent-starter-python. Deploys and operates a LiveKit agent in production: shipping a version to LiveKit Cloud and rolling it back, secrets and configuration, the worker process model and prewarming, safe async inside worker processes, provider timeouts and degradation, graceful shutdown, SDK upgrades, and observability.
Operating Livekit Agents fits situations like: the user says deploy my agent; roll back the deployment; tail the agent logs; the first call after a restart is slow.
Run `npx skills add livekit-examples/agent-starter-python --skill operating-livekit-agents -a claude-code`. Or copy the skill folder (.agents/skills/operating-livekit-agents in livekit-examples/agent-starter-python) into .claude/skills/operating-livekit-agents in your project. Claude Code loads it when a task matches its description.
Run `npx skills add livekit-examples/agent-starter-python --skill operating-livekit-agents -a codex`. Or copy the skill folder (.agents/skills/operating-livekit-agents in livekit-examples/agent-starter-python) into .agents/skills/operating-livekit-agents in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add livekit-examples/agent-starter-python --skill operating-livekit-agents -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/operating-livekit-agents, .gemini/skills/operating-livekit-agents, .github/skills/operating-livekit-agents and .opencode/skills/operating-livekit-agents in your project.
SKILL.md names no scripts, command-line tools or credentials: Operating Livekit Agents is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Operating Livekit Agents is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.4k tokens (SKILL.md is roughly 9.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Operating Livekit Agents: Motel Debug (kitlangton/motel, 298 stars), Aspire (microsoft/aspire.dev, 196 stars), Codex Session Debugging (weave-os/router, 5.6k stars) and Medusa Cloud Local Build (medusajs/medusa-agent-skills, 227 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
livekit-examples (a GitHub organization) maintains it in livekit-examples/agent-starter-python, which has 264 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 6, 2026.
Source: livekit-examples/agent-starter-python on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.