diff --git a/README.md b/README.md
index 2a09aac241..68f4b8c92c 100644
--- a/README.md
+++ b/README.md
@@ -1,375 +1,55 @@
-
+# Intelligent Interruption Handler
-
-
-
-
-
+## Project Overview
-
-
+Advanced interruption handling for voice agents that distinguishes between genuine interruptions and conversational backchanneling.
-
-[](https://pepy.tech/projects/livekit-agents)
-[](https://livekit.io/join-slack)
-[](https://twitter.com/livekit)
-[](https://deepwiki.com/livekit/agents)
-[](https://github.com/livekit/livekit/blob/master/LICENSE)
+## Key Features
-
+- **Smart Backchanneling Detection**: Ignores acknowledgments like "yeah", "okay", "uh-huh"
+- **No Audio Breaks**: Agent continues uninterrupted during verification
+- **Intelligent Logic**: Handles repeated words, commands, and mixed content
+- **State-Aware**: Works correctly whether agent is speaking or silent
-Looking for the JS/TS library? Check out [AgentsJS](https://github.com/livekit/agents-js)
+## Files Modified
-## What is Agents?
+### 1. `agent_activity.py`
+Updated `on_final_transcript()` with intelligent filtering:
+- Checks backchanneling first before calling interruption logic
+- Prevents audio breaks during verification
+- Immediate return for pure backchanneling
-
+### 2. `interruption_handler.py`
+Enhanced `should_interrupt()` with smart logic:
+- Repeated words detection (emphasis vs backchanneling)
+- Command words prioritization
+- Mixed content ratio analysis
-The Agent Framework is designed for building realtime, programmable participants
-that run on servers. Use it to create conversational, multi-modal voice
-agents that can see, hear, and understand.
+### 3. `interrupt_config.py`
+Comprehensive word lists:
+- **Ignore words**: "yeah", "ok", "okay", "hmm", "uh-huh", "right", "sure", etc.
+- **Command words**: "stop", "wait", "help", "pause", "hold"
-
+### 4. `basic_agent.py`
+Updated agent instructions to ignore backchanneling responses.
-## Features
+## How It Works
-- **Flexible integrations**: A comprehensive ecosystem to mix and match the right STT, LLM, TTS, and Realtime API to suit your use case.
-- **Integrated job scheduling**: Built-in task scheduling and distribution with [dispatch APIs](https://docs.livekit.io/agents/build/dispatch/) to connect end users to agents.
-- **Extensive WebRTC clients**: Build client applications using LiveKit's open-source SDK ecosystem, supporting all major platforms.
-- **Telephony integration**: Works seamlessly with LiveKit's [telephony stack](https://docs.livekit.io/sip/), allowing your agent to make calls to or receive calls from phones.
-- **Exchange data with clients**: Use [RPCs](https://docs.livekit.io/home/client/data/rpc/) and other [Data APIs](https://docs.livekit.io/home/client/data/) to seamlessly exchange data with clients.
-- **Semantic turn detection**: Uses a transformer model to detect when a user is done with their turn, helps to reduce interruptions.
-- **MCP support**: Native support for MCP. Integrate tools provided by MCP servers with one loc.
-- **Builtin test framework**: Write tests and use judges to ensure your agent is performing as expected.
-- **Open-source**: Fully open-source, allowing you to run the entire stack on your own servers, including [LiveKit server](https://github.com/livekit/livekit), one of the most widely used WebRTC media servers.
+1. **Backchanneling Detection**: When agent speaking, check if input is pure acknowledgment
+2. **Interruption Decision**: If not backchanneling, determine if interruption needed
+3. **Action Execution**: Interrupt immediately or process without interruption
-## Installation
+## Test Scenarios
-To install the core Agents library, along with plugins for popular model providers:
+โ **Agent ignoring "yeah" while talking**
+- Agent continues speaking uninterrupted
-```bash
-pip install "livekit-agents[openai,silero,deepgram,cartesia,turn-detector]~=1.0"
-```
+โ **Agent responding to "yeah" when silent**
+- Agent processes as acknowledgment
-## Docs and guides
+โ **Agent stopping for "stop"**
+- Agent stops immediately for commands
-Documentation on the framework and how to use it can be found [here](https://docs.livekit.io/agents/)
+## Technical Achievement
-## Core concepts
-
-- Agent: An LLM-based application with defined instructions.
-- AgentSession: A container for agents that manages interactions with end users.
-- entrypoint: The starting point for an interactive session, similar to a request handler in a web server.
-- Worker: The main process that coordinates job scheduling and launches agents for user sessions.
-
-## Usage
-
-### Simple voice agent
-
----
-
-```python
-from livekit.agents import (
- Agent,
- AgentSession,
- JobContext,
- RunContext,
- WorkerOptions,
- cli,
- function_tool,
-)
-from livekit.plugins import deepgram, elevenlabs, openai, silero
-
-@function_tool
-async def lookup_weather(
- context: RunContext,
- location: str,
-):
- """Used to look up weather information."""
-
- return {"weather": "sunny", "temperature": 70}
-
-
-async def entrypoint(ctx: JobContext):
- await ctx.connect()
-
- agent = Agent(
- instructions="You are a friendly voice assistant built by LiveKit.",
- tools=[lookup_weather],
- )
- session = AgentSession(
- vad=silero.VAD.load(),
- # any combination of STT, LLM, TTS, or realtime API can be used
- stt=deepgram.STT(model="nova-3"),
- llm=openai.LLM(model="gpt-4o-mini"),
- tts=elevenlabs.TTS(),
- )
-
- await session.start(agent=agent, room=ctx.room)
- await session.generate_reply(instructions="greet the user and ask about their day")
-
-
-if __name__ == "__main__":
- cli.run_app(WorkerOptions(entrypoint_fnc=entrypoint))
-```
-
-You'll need the following environment variables for this example:
-
-- DEEPGRAM_API_KEY
-- OPENAI_API_KEY
-- ELEVEN_API_KEY
-
-### Multi-agent handoff
-
----
-
-This code snippet is abbreviated. For the full example, see [multi_agent.py](examples/voice_agents/multi_agent.py)
-
-```python
-...
-class IntroAgent(Agent):
- def __init__(self) -> None:
- super().__init__(
- instructions=f"You are a story teller. Your goal is to gather a few pieces of information from the user to make the story personalized and engaging."
- "Ask the user for their name and where they are from"
- )
-
- async def on_enter(self):
- self.session.generate_reply(instructions="greet the user and gather information")
-
- @function_tool
- async def information_gathered(
- self,
- context: RunContext,
- name: str,
- location: str,
- ):
- """Called when the user has provided the information needed to make the story personalized and engaging.
-
- Args:
- name: The name of the user
- location: The location of the user
- """
-
- context.userdata.name = name
- context.userdata.location = location
-
- story_agent = StoryAgent(name, location)
- return story_agent, "Let's start the story!"
-
-
-class StoryAgent(Agent):
- def __init__(self, name: str, location: str) -> None:
- super().__init__(
- instructions=f"You are a storyteller. Use the user's information in order to make the story personalized."
- f"The user's name is {name}, from {location}"
- # override the default model, switching to Realtime API from standard LLMs
- llm=openai.realtime.RealtimeModel(voice="echo"),
- chat_ctx=chat_ctx,
- )
-
- async def on_enter(self):
- self.session.generate_reply()
-
-
-async def entrypoint(ctx: JobContext):
- await ctx.connect()
-
- userdata = StoryData()
- session = AgentSession[StoryData](
- vad=silero.VAD.load(),
- stt=deepgram.STT(model="nova-3"),
- llm=openai.LLM(model="gpt-4o-mini"),
- tts=openai.TTS(voice="echo"),
- userdata=userdata,
- )
-
- await session.start(
- agent=IntroAgent(),
- room=ctx.room,
- )
-...
-```
-
-### Testing
-
-Automated tests are essential for building reliable agents, especially with the non-deterministic behavior of LLMs. LiveKit Agents include native test integration to help you create dependable agents.
-
-```python
-@pytest.mark.asyncio
-async def test_no_availability() -> None:
- llm = google.LLM()
- async AgentSession(llm=llm) as sess:
- await sess.start(MyAgent())
- result = await sess.run(
- user_input="Hello, I need to place an order."
- )
- result.expect.skip_next_event_if(type="message", role="assistant")
- result.expect.next_event().is_function_call(name="start_order")
- result.expect.next_event().is_function_call_output()
- await (
- result.expect.next_event()
- .is_message(role="assistant")
- .judge(llm, intent="assistant should be asking the user what they would like")
- )
-
-```
-
-## Examples
-
-
-
-
-
๐๏ธ Starter Agent
-
A starter agent optimized for voice conversations.
-
-## Running your agent
-
-### Testing in terminal
-
-```shell
-python myagent.py console
-```
-
-Runs your agent in terminal mode, enabling local audio input and output for testing.
-This mode doesn't require external servers or dependencies and is useful for quickly validating behavior.
-
-### Developing with LiveKit clients
-
-```shell
-python myagent.py dev
-```
-
-Starts the agent server and enables hot reloading when files change. This mode allows each process to host multiple concurrent agents efficiently.
-
-The agent connects to LiveKit Cloud or your self-hosted server. Set the following environment variables:
-- LIVEKIT_URL
-- LIVEKIT_API_KEY
-- LIVEKIT_API_SECRET
-
-You can connect using any LiveKit client SDK or telephony integration.
-To get started quickly, try the [Agents Playground](https://agents-playground.livekit.io/).
-
-### Running for production
-
-```shell
-python myagent.py start
-```
-
-Runs the agent with production-ready optimizations.
-
-## Contributing
-
-The Agents framework is under active development in a rapidly evolving field. We welcome and appreciate contributions of any kind, be it feedback, bugfixes, features, new plugins and tools, or better documentation. You can file issues under this repo, open a PR, or chat with us in LiveKit's [Slack community](https://livekit.io/join-slack).
-
-
-