{"owner":"livekit","repo":"agents","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["CLAUDE.md","AGENTS.md"],"skills":{"CLAUDE.md":"# CLAUDE.md\n\n@AGENTS.md\n","AGENTS.md":"# AGENTS.md\n\n## Build and Development Commands\n\nThis project uses **uv** as the package manager. All commands run from the repository root.\n\n### Installation\n```bash\nmake install          # Install all dependencies with dev extras (uv sync --all-extras --dev)\n```\n\n### Versioning\n\n- Use a `patch` version bump by default.\n- Do not use a `minor` or `major` version bump unless a human explicitly confirms the bump level.\n\n### Code Quality\n```bash\nmake format           # Format code with ruff\nmake lint             # Run ruff linter\nmake lint-fix         # Run ruff linter and auto-fix issues\nmake type-check       # Run mypy type checker (strict mode)\nmake check            # Run all checks (format-check, lint, type-check)\n```\n\n### Testing\n```bash\nuv run pytest --unit                    # Run all unit tests\nuv run pytest tests/test_tools.py       # Run a single test file\nmake unit-tests                         # Run unit tests that don't require cloud accounts\n```\n\n#### Test categories\n\nEvery test module declares exactly one category via a module-level marker, and\neach category has a matching `--<category>` selection flag. Selection happens\n*before* import, so a category run never imports (or fails on) modules outside\nit.\n\n| Marker | Flag | Meaning |\n|--------|------|---------|\n| `pytest.mark.unit` | `--unit` | fast, hermetic, no external providers/credentials/network |\n| `pytest.mark.audio_eot` | `--audio_eot` | hermetic audio end-of-turn / turn-detection suite |\n| `pytest.mark.plugin(\"name\")` | `--plugin [name]` | provider integration test (needs that provider's deps/keys) |\n| `pytest.mark.stt` | `--stt` | cross-provider speech-to-text suite (`tests/test_stt.py`) |\n| `pytest.mark.tts` | `--tts` | cross-provider text-to-speech suite (`tests/test_tts.py`) |\n| `pytest.mark.realtime(\"name\")` | `--realtime [name]` | realtime-model test |\n| `pytest.mark.evals` | `--evals` | behavioral evals against the LiveKit inference gateway |\n| `pytest.mark.docs` | `--docs` | tests for the docs-build tooling under `.github/` |\n\n```bash\nuv run pytest --unit                    # the CI unit gate (no cloud accounts)\nuv run pytest --plugin openai           # only the openai provider tests\nuv run pytest --list-categories         # list every module grouped by category, then exit\n```\n\n**Adding a test:** give the new module a category marker (`pytestmark =\npytest.mark.unit`, etc.) — collection fails with a hint if it lacks one. Run\npytest with the `--allow-uncategorized` option to temporarily disable this rule\n(CI keeps it on by default).\n\n### Running Agents\n```bash\npython myagent.py console   # Terminal mode with local audio I/O (no server needed)\npython myagent.py dev       # Development mode with hot reload (connects to LiveKit)\npython myagent.py start     # Production mode\npython myagent.py connect --room <room> --identity <id>  # Connect to existing room\n```\n\n### Linking Local python-rtc (for SDK development)\n```bash\nmake link-rtc         # Link to local python-rtc with downloaded FFI artifacts\nmake link-rtc-local   # Build and link local rust SDK from source (requires cargo)\nmake unlink-rtc       # Restore PyPI version\nmake status           # Show current linking status\nmake doctor           # Check development environment health\n```\n\n## Architecture Overview\n\n### Core Concepts\n- **AgentServer** (formerly known as **Worker**) (`worker.py`): Main process coordinating job scheduling, launches agents for user sessions\n- **JobContext** (`job.py`): Context provided to entrypoint functions for connecting to LiveKit rooms\n- **Agent** (`voice/agent.py`): LLM-based application with instructions, tools, and model integrations\n- **AgentSession** (`voice/agent_session.py`): Container managing interactions between agents and end users\n\n### Key Directories\n```\nlivekit-agents/livekit/agents/\n├── voice/              # Core voice agent: AgentSession, Agent, room I/O, transcription\n├── llm/                # LLM integration: chat context, tool definitions, MCP support\n├── stt/                # Speech-to-text with fallback and stream adapters\n├── tts/                # Text-to-speech with fallback and stream pacing\n├── ipc/                # Inter-process communication for distributed job execution\n├── cli/                # CLI commands (console, dev, start, connect)\n├── inference/          # Remote model inference (LLM, STT, TTS)\n├── telemetry/          # OpenTelemetry traces and Prometheus metrics\n└── utils/              # Audio processing, codecs, HTTP, async utilities\n\nlivekit-plugins/        # 50+ provider plugins (openai, anthropic, google, deepgram, etc.)\ntests/                  # Test suite with mock implementations (fake_stt.py, fake_vad.py)\nexamples/               # Example agents and use cases\n```\n\n### Plugin System\nPlugins in `livekit-plugins/` provide STT, TTS, LLM, and specialized services. Each plugin is a separate package following the pattern `livekit-plugins-<provider>`. Plugins register via the `Plugin` base class in `plugin.py`.\n\n### Model Interface Pattern\nSTT, TTS, LLM, Realtime models have provider-agnostic interfaces with:\n- Base classes defining the interface (`stt/stt.py`, `tts/tts.py`, `llm/llm.py`, `llm/realtime.py`)\n- Fallback adapters for resilience\n- Stream adapters for different streaming patterns\n\n### Job Execution Flow\n1. Worker receives job request from LiveKit server\n2. Job is dispatched to process/thread pool (`ipc/proc_pool.py`)\n3. Entrypoint function receives `JobContext`\n4. Agent connects to room via `ctx.connect()`\n5. `AgentSession` manages the conversation lifecycle\n\n## Environment Variables\n- `LIVEKIT_URL`: WebSocket URL of LiveKit server\n- `LIVEKIT_API_KEY`: API key for authentication\n- `LIVEKIT_API_SECRET`: API secret for authentication\n- `LIVEKIT_AGENT_NAME`: Agent name for explicit dispatch (optional)\n- Provider-specific keys: `OPENAI_API_KEY`, `DEEPGRAM_API_KEY`, `ANTHROPIC_API_KEY`, etc.\n\n## Code Style\n- Line length: 100 characters\n- Python 3.10+ compatibility required\n- Google-style docstrings\n- Strict mypy type checking enabled\n- Use `make check` and `make fix` before committing\n"},"files":{"CLAUDE.md":"# CLAUDE.md\n\n@AGENTS.md\n","AGENTS.md":"# AGENTS.md\n\n## Build and Development Commands\n\nThis project uses **uv** as the package manager. All commands run from the repository root.\n\n### Installation\n```bash\nmake install          # Install all dependencies with dev extras (uv sync --all-extras --dev)\n```\n\n### Versioning\n\n- Use a `patch` version bump by default.\n- Do not use a `minor` or `major` version bump unless a human explicitly confirms the bump level.\n\n### Code Quality\n```bash\nmake format           # Format code with ruff\nmake lint             # Run ruff linter\nmake lint-fix         # Run ruff linter and auto-fix issues\nmake type-check       # Run mypy type checker (strict mode)\nmake check            # Run all checks (format-check, lint, type-check)\n```\n\n### Testing\n```bash\nuv run pytest --unit                    # Run all unit tests\nuv run pytest tests/test_tools.py       # Run a single test file\nmake unit-tests                         # Run unit tests that don't require cloud accounts\n```\n\n#### Test categories\n\nEvery test module declares exactly one category via a module-level marker, and\neach category has a matching `--<category>` selection flag. Selection happens\n*before* import, so a category run never imports (or fails on) modules outside\nit.\n\n| Marker | Flag | Meaning |\n|--------|------|---------|\n| `pytest.mark.unit` | `--unit` | fast, hermetic, no external providers/credentials/network |\n| `pytest.mark.audio_eot` | `--audio_eot` | hermetic audio end-of-turn / turn-detection suite |\n| `pytest.mark.plugin(\"name\")` | `--plugin [name]` | provider integration test (needs that provider's deps/keys) |\n| `pytest.mark.stt` | `--stt` | cross-provider speech-to-text suite (`tests/test_stt.py`) |\n| `pytest.mark.tts` | `--tts` | cross-provider text-to-speech suite (`tests/test_tts.py`) |\n| `pytest.mark.realtime(\"name\")` | `--realtime [name]` | realtime-model test |\n| `pytest.mark.evals` | `--evals` | behavioral evals against the LiveKit inference gateway |\n| `pytest.mark.docs` | `--docs` | tests for the docs-build tooling under `.github/` |\n\n```bash\nuv run pytest --unit                    # the CI unit gate (no cloud accounts)\nuv run pytest --plugin openai           # only the openai provider tests\nuv run pytest --list-categories         # list every module grouped by category, then exit\n```\n\n**Adding a test:** give the new module a category marker (`pytestmark =\npytest.mark.unit`, etc.) — collection fails with a hint if it lacks one. Run\npytest with the `--allow-uncategorized` option to temporarily disable this rule\n(CI keeps it on by default).\n\n### Running Agents\n```bash\npython myagent.py console   # Terminal mode with local audio I/O (no server needed)\npython myagent.py dev       # Development mode with hot reload (connects to LiveKit)\npython myagent.py start     # Production mode\npython myagent.py connect --room <room> --identity <id>  # Connect to existing room\n```\n\n### Linking Local python-rtc (for SDK development)\n```bash\nmake link-rtc         # Link to local python-rtc with downloaded FFI artifacts\nmake link-rtc-local   # Build and link local rust SDK from source (requires cargo)\nmake unlink-rtc       # Restore PyPI version\nmake status           # Show current linking status\nmake doctor           # Check development environment health\n```\n\n## Architecture Overview\n\n### Core Concepts\n- **AgentServer** (formerly known as **Worker**) (`worker.py`): Main process coordinating job scheduling, launches agents for user sessions\n- **JobContext** (`job.py`): Context provided to entrypoint functions for connecting to LiveKit rooms\n- **Agent** (`voice/agent.py`): LLM-based application with instructions, tools, and model integrations\n- **AgentSession** (`voice/agent_session.py`): Container managing interactions between agents and end users\n\n### Key Directories\n```\nlivekit-agents/livekit/agents/\n├── voice/              # Core voice agent: AgentSession, Agent, room I/O, transcription\n├── llm/                # LLM integration: chat context, tool definitions, MCP support\n├── stt/                # Speech-to-text with fallback and stream adapters\n├── tts/                # Text-to-speech with fallback and stream pacing\n├── ipc/                # Inter-process communication for distributed job execution\n├── cli/                # CLI commands (console, dev, start, connect)\n├── inference/          # Remote model inference (LLM, STT, TTS)\n├── telemetry/          # OpenTelemetry traces and Prometheus metrics\n└── utils/              # Audio processing, codecs, HTTP, async utilities\n\nlivekit-plugins/        # 50+ provider plugins (openai, anthropic, google, deepgram, etc.)\ntests/                  # Test suite with mock implementations (fake_stt.py, fake_vad.py)\nexamples/               # Example agents and use cases\n```\n\n### Plugin System\nPlugins in `livekit-plugins/` provide STT, TTS, LLM, and specialized services. Each plugin is a separate package following the pattern `livekit-plugins-<provider>`. Plugins register via the `Plugin` base class in `plugin.py`.\n\n### Model Interface Pattern\nSTT, TTS, LLM, Realtime models have provider-agnostic interfaces with:\n- Base classes defining the interface (`stt/stt.py`, `tts/tts.py`, `llm/llm.py`, `llm/realtime.py`)\n- Fallback adapters for resilience\n- Stream adapters for different streaming patterns\n\n### Job Execution Flow\n1. Worker receives job request from LiveKit server\n2. Job is dispatched to process/thread pool (`ipc/proc_pool.py`)\n3. Entrypoint function receives `JobContext`\n4. Agent connects to room via `ctx.connect()`\n5. `AgentSession` manages the conversation lifecycle\n\n## Environment Variables\n- `LIVEKIT_URL`: WebSocket URL of LiveKit server\n- `LIVEKIT_API_KEY`: API key for authentication\n- `LIVEKIT_API_SECRET`: API secret for authentication\n- `LIVEKIT_AGENT_NAME`: Agent name for explicit dispatch (optional)\n- Provider-specific keys: `OPENAI_API_KEY`, `DEEPGRAM_API_KEY`, `ANTHROPIC_API_KEY`, etc.\n\n## Code Style\n- Line length: 100 characters\n- Python 3.10+ compatibility required\n- Google-style docstrings\n- Strict mypy type checking enabled\n- Use `make check` and `make fix` before committing\n"},"items":[{"name":"CLAUDE.md","path":"CLAUDE.md","title":"CLAUDE.md","content":"# CLAUDE.md\n\n@AGENTS.md\n","category":"root","tokens":6},{"name":"AGENTS.md","path":"AGENTS.md","title":"AGENTS.md","content":"# AGENTS.md\n\n## Build and Development Commands\n\nThis project uses **uv** as the package manager. All commands run from the repository root.\n\n### Installation\n```bash\nmake install          # Install all dependencies with dev extras (uv sync --all-extras --dev)\n```\n\n### Versioning\n\n- Use a `patch` version bump by default.\n- Do not use a `minor` or `major` version bump unless a human explicitly confirms the bump level.\n\n### Code Quality\n```bash\nmake format           # Format code with ruff\nmake lint             # Run ruff linter\nmake lint-fix         # Run ruff linter and auto-fix issues\nmake type-check       # Run mypy type checker (strict mode)\nmake check            # Run all checks (format-check, lint, type-check)\n```\n\n### Testing\n```bash\nuv run pytest --unit                    # Run all unit tests\nuv run pytest tests/test_tools.py       # Run a single test file\nmake unit-tests                         # Run unit tests that don't require cloud accounts\n```\n\n#### Test categories\n\nEvery test module declares exactly one category via a module-level marker, and\neach category has a matching `--<category>` selection flag. Selection happens\n*before* import, so a category run never imports (or fails on) modules outside\nit.\n\n| Marker | Flag | Meaning |\n|--------|------|---------|\n| `pytest.mark.unit` | `--unit` | fast, hermetic, no external providers/credentials/network |\n| `pytest.mark.audio_eot` | `--audio_eot` | hermetic audio end-of-turn / turn-detection suite |\n| `pytest.mark.plugin(\"name\")` | `--plugin [name]` | provider integration test (needs that provider's deps/keys) |\n| `pytest.mark.stt` | `--stt` | cross-provider speech-to-text suite (`tests/test_stt.py`) |\n| `pytest.mark.tts` | `--tts` | cross-provider text-to-speech suite (`tests/test_tts.py`) |\n| `pytest.mark.realtime(\"name\")` | `--realtime [name]` | realtime-model test |\n| `pytest.mark.evals` | `--evals` | behavioral evals against the LiveKit inference gateway |\n| `pytest.mark.docs` | `--docs` | tests for the docs-build tooling under `.github/` |\n\n```bash\nuv run pytest --unit                    # the CI unit gate (no cloud accounts)\nuv run pytest --plugin openai           # only the openai provider tests\nuv run pytest --list-categories         # list every module grouped by category, then exit\n```\n\n**Adding a test:** give the new module a category marker (`pytestmark =\npytest.mark.unit`, etc.) — collection fails with a hint if it lacks one. Run\npytest with the `--allow-uncategorized` option to temporarily disable this rule\n(CI keeps it on by default).\n\n### Running Agents\n```bash\npython myagent.py console   # Terminal mode with local audio I/O (no server needed)\npython myagent.py dev       # Development mode with hot reload (connects to LiveKit)\npython myagent.py start     # Production mode\npython myagent.py connect --room <room> --identity <id>  # Connect to existing room\n```\n\n### Linking Local python-rtc (for SDK development)\n```bash\nmake link-rtc         # Link to local python-rtc with downloaded FFI artifacts\nmake link-rtc-local   # Build and link local rust SDK from source (requires cargo)\nmake unlink-rtc       # Restore PyPI version\nmake status           # Show current linking status\nmake doctor           # Check development environment health\n```\n\n## Architecture Overview\n\n### Core Concepts\n- **AgentServer** (formerly known as **Worker**) (`worker.py`): Main process coordinating job scheduling, launches agents for user sessions\n- **JobContext** (`job.py`): Context provided to entrypoint functions for connecting to LiveKit rooms\n- **Agent** (`voice/agent.py`): LLM-based application with instructions, tools, and model integrations\n- **AgentSession** (`voice/agent_session.py`): Container managing interactions between agents and end users\n\n### Key Directories\n```\nlivekit-agents/livekit/agents/\n├── voice/              # Core voice agent: AgentSession, Agent, room I/O, transcription\n├── llm/                # LLM integration: chat context, tool definitions, MCP support\n├── stt/                # Speech-to-text with fallback and stream adapters\n├── tts/                # Text-to-speech with fallback and stream pacing\n├── ipc/                # Inter-process communication for distributed job execution\n├── cli/                # CLI commands (console, dev, start, connect)\n├── inference/          # Remote model inference (LLM, STT, TTS)\n├── telemetry/          # OpenTelemetry traces and Prometheus metrics\n└── utils/              # Audio processing, codecs, HTTP, async utilities\n\nlivekit-plugins/        # 50+ provider plugins (openai, anthropic, google, deepgram, etc.)\ntests/                  # Test suite with mock implementations (fake_stt.py, fake_vad.py)\nexamples/               # Example agents and use cases\n```\n\n### Plugin System\nPlugins in `livekit-plugins/` provide STT, TTS, LLM, and specialized services. Each plugin is a separate package following the pattern `livekit-plugins-<provider>`. Plugins register via the `Plugin` base class in `plugin.py`.\n\n### Model Interface Pattern\nSTT, TTS, LLM, Realtime models have provider-agnostic interfaces with:\n- Base classes defining the interface (`stt/stt.py`, `tts/tts.py`, `llm/llm.py`, `llm/realtime.py`)\n- Fallback adapters for resilience\n- Stream adapters for different streaming patterns\n\n### Job Execution Flow\n1. Worker receives job request from LiveKit server\n2. Job is dispatched to process/thread pool (`ipc/proc_pool.py`)\n3. Entrypoint function receives `JobContext`\n4. Agent connects to room via `ctx.connect()`\n5. `AgentSession` manages the conversation lifecycle\n\n## Environment Variables\n- `LIVEKIT_URL`: WebSocket URL of LiveKit server\n- `LIVEKIT_API_KEY`: API key for authentication\n- `LIVEKIT_API_SECRET`: API secret for authentication\n- `LIVEKIT_AGENT_NAME`: Agent name for explicit dispatch (optional)\n- Provider-specific keys: `OPENAI_API_KEY`, `DEEPGRAM_API_KEY`, `ANTHROPIC_API_KEY`, etc.\n\n## Code Style\n- Line length: 100 characters\n- Python 3.10+ compatibility required\n- Google-style docstrings\n- Strict mypy type checking enabled\n- Use `make check` and `make fix` before committing\n","category":"root","tokens":1524}]}