GIGIlistening…

Build Journal

Tavus Agent Improvements & Embed Enhancements — June 9, 2026

I improved the Tavus agent's goodbye protocol and enhanced embeds for better user experience. Here's what I learned while building today.

15 changes3 min readby Rob

What shipped

  • Tavus Goodbye Protocol ImprovedImplemented a stricter rule for agent farewells to eliminate double-goodbyes.
  • Owner Preview Duration ExtendedIncreased owner preview time from 3 minutes to 30 minutes.
  • GIGI Concierge Static EmbeddingRemoved cursor-chase behavior for a more cohesive user experience.
  • Luma Event Bug FixedSanitized unpaired surrogates to prevent process crashes.
  • Embed Widget Styling HardenedTransitioned to inline styles to ensure consistent layout across host sites.

Today, I set out to refine the Tavus agent's interaction model and enhance the overall embedding experience within the portal. After a long 16-hour day, I successfully shipped 15 commits, focusing on both feature improvements and critical fixes. The standout change was the overhaul of the Tavus goodbye protocol, ensuring it delivers a more seamless and professional closure to user interactions. Additionally, I also addressed several bugs that had been causing performance hiccups, and made significant progress on embedding mechanisms.

One of the most pressing issues I tackled was the double-goodbye bug in the Tavus agent. Users were often confused when the agent would repeat farewell messages, which undermined the professionalism of the interaction. To solve this, I implemented a much stricter goodbye rule that ensures the agent says farewell in exactly one turn and does not respond further if the visitor replies. This change not only cleans up the interaction but also enhances the user experience by removing unnecessary repetition. It took considerable time to test and refine this rule, but I’m proud of the clarity it brings to the conversation flow.

Another significant improvement was addressing the bug that capped owner previews at an incorrect duration. Previously, owners were limited to 3 minutes, which didn’t reflect their actual access. I adjusted the system to allow owner previews for up to 30 minutes, ensuring they have a more accurate representation of their capabilities. Additionally, I added a visible 30-second warning banner to alert users as they approach the time limit. This required digging into the throttling logic and ensuring that it worked in tandem with the new timer settings, which was a bit of a rabbit hole, but ultimately necessary to enhance the experience.

On the embedding front, I made the GIGI concierge more accessible by eliminating the cursor-chase behavior, allowing her to remain static when not in use. This adjustment aligns GIGI with the Locate-me pill, creating a more cohesive layout. It’s fascinating how small design tweaks can significantly impact user interaction. I spent a good chunk of the day testing various alignments and styles to ensure that everything looked just right, and I’m pleased with the results.

While I made these improvements, I also encountered some frustrating bugs. One of the most annoying was a crash triggered by a malformed Luma event title that included a truncated emoji. This unexpected end of hex escape caused the entire Node process to crash, resulting in a cascade of 500 errors across the platform. The fix required sanitizing unpaired surrogates before they reached the JSON serializer, which was a lesson in the importance of input validation. I realized that even small, seemingly insignificant characters could lead to major issues down the line.

Throughout the day, I also focused on hardening the embed widget against common styling conflicts that could break its functionality on various host sites. I transitioned from stylesheet rules to inline styles with `!important` to ensure that the embed would maintain its intended layout regardless of the host's CSS. This was a time-consuming process of trial and error, but seeing the widget finally work seamlessly across different environments was rewarding.

Reflecting on my solo journey, I can't help but appreciate the role AI plays in this process. While I am managing the bulk of the development myself, tools like Claude Code in VS Code have significantly accelerated my workflow. I’m not just coding; I’m leveraging AI as a partner to help me navigate complex issues and brainstorm solutions. This one-man show model is not just a dream; it’s becoming a reality, and with every commit, I’m getting closer to my goal of building a billion-dollar valuation company.

In summary, today was a mix of triumphs and challenges, but each commit brought me closer to refining the Tavus agent and enhancing the overall user experience on the platform. The work is far from over, but I’m excited about the direction things are heading. I’m learning that the path of a solo builder is filled with valuable lessons, and I’m eager to see where this journey takes me next.

← Back to the full build journal