<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ayush Pathak</title>
    <description>The latest articles on DEV Community by Ayush Pathak (@ayush_pathak_bc94618d99f0).</description>
    <link>https://dev.to/ayush_pathak_bc94618d99f0</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3648278%2F2075ab73-8a0e-4428-9aa8-72c818f5a11f.png</url>
      <title>DEV Community: Ayush Pathak</title>
      <link>https://dev.to/ayush_pathak_bc94618d99f0</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ayush_pathak_bc94618d99f0"/>
    <language>en</language>
    <item>
      <title>Building a Multi-Agent Ghost Story: How Kiro’s Hybrid Development Changed Everything</title>
      <dc:creator>Ayush Pathak</dc:creator>
      <pubDate>Fri, 05 Dec 2025 17:54:37 +0000</pubDate>
      <link>https://dev.to/ayush_pathak_bc94618d99f0/building-a-multi-agent-ghost-story-how-kiroshybrid-development-changed-everything-12il</link>
      <guid>https://dev.to/ayush_pathak_bc94618d99f0/building-a-multi-agent-ghost-story-how-kiroshybrid-development-changed-everything-12il</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyw1x7xnwxx8fnwfqzjav.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyw1x7xnwxx8fnwfqzjav.png" alt=" " width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;5 AI agents debating in 2-3 seconds. Built in days, not weeks. Here's how.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;I built a gothic ghost story with &lt;strong&gt;5 independent AI agents that debate in real-time&lt;/strong&gt; using Kiro IDE. The twist? Each agent was built using a DIFFERENT development approach (vibe coding, spec-driven, steering docs), yet they work together as one coherent family. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is the Frankenstein magic:&lt;/strong&gt; incompatible paradigms stitched together into something unexpectedly powerful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tech Stack:&lt;/strong&gt; Next.js, Groq (llama-3.3-70b), Azure TTS, Kiro IDE&lt;br&gt;&lt;br&gt;
&lt;strong&gt;⚡ Live Demo:&lt;/strong&gt; &lt;a href="https://midnightatthevossmanor.vercel.app/" rel="noopener noreferrer"&gt;https://midnightatthevossmanor.vercel.app/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;📦 Source Code:&lt;/strong&gt; &lt;a href="https://github.com/AyushPathak2610/Midnight-at-the-Voss-Manor" rel="noopener noreferrer"&gt;https://github.com/AyushPathak2610/Midnight-at-the-Voss-Manor&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;🎮 Try it:&lt;/strong&gt; Click "Click to begin" and watch 5 AI personalities debate your choices&lt;/p&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"The agents genuinely disagree, creating emergent storytelling that's never the same twice."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  The Problem: Building Consistent AI Personalities at Scale
&lt;/h2&gt;

&lt;p&gt;When you're building a game with 5 AI agents that need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Maintain distinct personalities&lt;/li&gt;
&lt;li&gt;Debate with each other in real-time&lt;/li&gt;
&lt;li&gt;Stay consistent across 50+ generations&lt;/li&gt;
&lt;li&gt;Create authentic conflict (not forced agreement)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...traditional AI development becomes a nightmare of prompt engineering, context management, and constant tweaking.&lt;/p&gt;

&lt;p&gt;I needed a better way.&lt;/p&gt;


&lt;h2&gt;
  
  
  Enter Kiro: The Frankenstein Approach
&lt;/h2&gt;

&lt;p&gt;Kiro IDE introduced me to something revolutionary: &lt;strong&gt;you don't need to pick ONE development paradigm&lt;/strong&gt;. You can use different approaches for different problems and let Kiro stitch them together.&lt;/p&gt;

&lt;p&gt;Here's how I built each ghost character:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Vibe Coding: Elara (The Mother)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Conversation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Me: "I need a maternal ghost character"
Kiro: "What's her role?"
Me: "She's the mother. Gentle, prioritizes family harmony"
Kiro: [Generates initial personality]
Me: "More poetic. Less formal. Under 30 words per response."
Kiro: [Refines to final version]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; 5 minutes to a fully-formed character with emotional depth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Vibe Coding Worked:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fast iteration on "feeling"&lt;/li&gt;
&lt;li&gt;Hard to spec "maternal warmth" formally&lt;/li&gt;
&lt;li&gt;Natural language captures nuance better than technical specs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Spec-Driven: Harlan (The Scientist)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Spec:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;harlan&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Harlan&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;personality&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;scientific, amnesiac, logical but confused&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;systemPrompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`You are Dr. Harlan Voss, the scientist ghost 
  with fragmented memories. You analyze problems logically but 
  struggle to remember emotional context. When debating, you 
  cite facts but defer to family on emotional matters. Keep 
  responses under 30 words. Use technical language mixed with 
  uncertainty.`&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why Spec-Driven Worked:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rock-solid consistency&lt;/li&gt;
&lt;li&gt;Debuggable ("Line 47 violates spec")&lt;/li&gt;
&lt;li&gt;Perfect for logical, technical characters&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Steering Documents: The Family Dynamic
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;File:&lt;/strong&gt; &lt;code&gt;.kiro/steering/ghost-agent-rules.md&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Inter-Agent Debate Protocol&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Each agent MUST respond independently
&lt;span class="p"&gt;-&lt;/span&gt; Agents can disagree - conflict is good for drama
&lt;span class="p"&gt;-&lt;/span&gt; Mira often sides with emotional choices
&lt;span class="p"&gt;-&lt;/span&gt; Harlan provides logical analysis but defers to family
&lt;span class="p"&gt;-&lt;/span&gt; Selene demands honesty, Theo seeks forgiveness
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why Steering Worked:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prevented personality mix-ups across 50+ generations&lt;/li&gt;
&lt;li&gt;Defined relationships BETWEEN agents, not just individual traits&lt;/li&gt;
&lt;li&gt;Created authentic conflict instead of forced agreement&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. MCP Server: Theo's Eternal Vow Verification
&lt;/h3&gt;

&lt;p&gt;This is where it gets really interesting. We built a &lt;strong&gt;custom Model Context Protocol (MCP) server&lt;/strong&gt; that acts as a blockchain-style ledger for eternal vows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Concept:&lt;/strong&gt; In the Hallway scene, players can verify if Theo kept his promise to return to Selene. The MCP server stores these vows and returns verification results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2cbn3x90zj95rrzfd9z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2cbn3x90zj95rrzfd9z.png" alt=" " width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File:&lt;/strong&gt; &lt;code&gt;app/api/mcp/vows/route.ts&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Simple in-memory vow ledger (simulates blockchain MCP)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;theo-marry-selene&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="na"&gt;person&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Theo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="na"&gt;vow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Marry Selene&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="na"&gt;kept&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2039-01-15&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; 
  &lt;span class="p"&gt;}],&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;theo-return&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="na"&gt;person&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Theo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="na"&gt;vow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Return to make amends&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="na"&gt;kept&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2039-06-20&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; 
  &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NextRequest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;vow&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;check&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s2"&gt;-&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;vow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\s&lt;/span&gt;&lt;span class="sr"&gt;+/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;record&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;vows&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;record&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;NextResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;found&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;record&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;record&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kept&lt;/span&gt; 
          &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;`✓ Vow kept: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;record&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; did &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;record&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vow&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; on &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;record&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
          &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`✗ Vow broken: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;record&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; failed to &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;record&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vow&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
      &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;NextResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; 
      &lt;span class="na"&gt;found&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
      &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;No record of this vow in the ledger&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; 
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In-Game Integration (HallwayScene.tsx):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleCheckVow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/mcp/vows&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; 
        &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;check&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="na"&gt;person&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Theo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="na"&gt;vow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Return&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; 
      &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;setVowResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;// Selene speaks the eternal record&lt;/span&gt;
    &lt;span class="nx"&gt;speechService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;speak&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;selene&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Failed to check vow:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The Player Experience:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When players click "Check Theo's Vow" in the Hallway scene, the API checks the ledger. Since the game sends &lt;code&gt;vow: 'Return'&lt;/code&gt; but the ledger has &lt;code&gt;'Return to make amends'&lt;/code&gt;, it returns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The Eternal Record:
"No record of this vow in the ledger"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The MCP server (&lt;code&gt;mcp-servers/blockchain-vows-server.js&lt;/code&gt;) contains the full 4-vow ledger used during development, while the runtime API has a simplified 2-vow version. This demonstrates the separation between development tools and production features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why MCP Was Perfect Here:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Development-time testing:&lt;/strong&gt; We could test vow verification directly in Kiro IDE without deploying&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separation of concerns:&lt;/strong&gt; The vow logic lives in a dedicated server, not cluttering game code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extensibility:&lt;/strong&gt; Easy to add more vows, more characters, more verification types&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Narrative depth:&lt;/strong&gt; Players discover story through interaction, not exposition&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Meta Layer:&lt;/strong&gt; During development, Kiro's agent could call the MCP server to verify vows while helping us write the narrative. The same tool that helps us BUILD the game is also PART of the game.&lt;/p&gt;







&lt;h2&gt;
  
  
  The Magic Moment: Real-Time Debates
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz6ayrmgzzas6rlw6fo4u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz6ayrmgzzas6rlw6fo4u.png" alt=" " width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 Pro Tip:&lt;/strong&gt; This is where the Frankenstein magic happens - 5 independent systems working as one.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When you click "Ask Ghosts for Hint" during a puzzle, here's what happens:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbdgrk181tpcv0znxjfpv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbdgrk181tpcv0znxjfpv.png" alt=" " width="800" height="535"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Invoke all 5 agents in parallel&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;debatePromises&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;GHOST_AGENTS&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghostName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;invokeGhostAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghostName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;ghost&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ghostName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;debate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;debatePromises&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Example Debate:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Player: "I need help with the tapestry puzzle"

Elara: "Focus on love and emotional memories, dear one."
Harlan: "I... categories. Logic. But family transcends data."
Mira: "The happy ones! When we played together!"
Theo: "Your family moments define you, brother."
Selene: "Truth matters. Match honestly, not hopefully."

Consensus (Elara): "Look for the emotional connections in 
each photo—love, joy, and family bonds will guide you."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;This is never the same twice.&lt;/strong&gt; The agents genuinely disagree, creating emergent storytelling.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Changed My Development Workflow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Before Kiro:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Write prompt in ChatGPT&lt;/li&gt;
&lt;li&gt;Copy code to VS Code&lt;/li&gt;
&lt;li&gt;Test, find issues&lt;/li&gt;
&lt;li&gt;Go back to ChatGPT&lt;/li&gt;
&lt;li&gt;Lose context&lt;/li&gt;
&lt;li&gt;Repeat 10 times&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft3qejov2cdfs5w2xmgqk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft3qejov2cdfs5w2xmgqk.png" alt=" " width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time per character: ~2 hours&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  With Kiro:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Natural conversation: "Make Elara more poetic"&lt;/li&gt;
&lt;li&gt;Kiro refines in real-time&lt;/li&gt;
&lt;li&gt;Code is already in my project&lt;/li&gt;
&lt;li&gt;Context is preserved&lt;/li&gt;
&lt;li&gt;Done in 5 minutes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Time per character: ~5 minutes&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"No context switching. No manual prompt engineering. Just natural conversation → production code."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; Built 5 distinct AI personalities in under an hour instead of 10+ hours.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Frankenstein Chimera: Why Incompatible Parts Work
&lt;/h2&gt;

&lt;p&gt;![Frankenstein Metaphor - Add image showing different development approaches]&lt;/p&gt;

&lt;p&gt;Each agent was built DIFFERENTLY:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎨 &lt;strong&gt;Vibe-coded Elara&lt;/strong&gt; (fluid, emotional)&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Spec-driven Harlan&lt;/strong&gt; (rigid, logical)&lt;/li&gt;
&lt;li&gt;📖 &lt;strong&gt;Steering-enforced Mira&lt;/strong&gt; (rule-based simplicity)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;They shouldn't work together.&lt;/strong&gt; But they do.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Steering documents act as the 'stitches' that hold the chimera together. They prevent chaos while allowing authentic conflict."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Why it works:&lt;/strong&gt; You can SEE the seams (agents disagree), but they form something greater than the sum of their parts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The lesson:&lt;/strong&gt; Don't hide your seams - embrace them. Authentic conflict makes better AI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyoazi52qgsrukwrh34ip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyoazi52qgsrukwrh34ip.png" alt=" " width="734" height="1594"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Complete AI Stack
&lt;/h2&gt;

&lt;p&gt;This project showcases AI across every modality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI Agents:&lt;/strong&gt; Groq (llama-3.3-70b) - 5 debating personalities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice Acting:&lt;/strong&gt; Azure TTS - 6 unique neural voices&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scene Images:&lt;/strong&gt; Google Gemini - 30 gothic-cyberpunk scenes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Background Music:&lt;/strong&gt; Suno AI - 4 atmospheric scores&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Servers:&lt;/strong&gt; Custom blockchain vow verification, memory persistence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development:&lt;/strong&gt; Kiro IDE - vibe + spec + steering + MCP integration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;This is the ultimate Frankenstein:&lt;/strong&gt; Not just stitching together code paradigms, but stitching together ENTIRE AI SYSTEMS across different modalities to create one cohesive experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  📊 By The Numbers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;5&lt;/strong&gt; AI agents debating simultaneously&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2-3 seconds&lt;/strong&gt; for complete debate (thanks to Groq's speed)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4&lt;/strong&gt; TTS providers with automatic fallbacks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;30+&lt;/strong&gt; AI-generated scene images&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;95%&lt;/strong&gt; reduction in off-brand responses (steering docs)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Key Takeaways for Developers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Don't Pick One Paradigm - Use Them All
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🎨 Vibe coding for creativity and emotion&lt;/li&gt;
&lt;li&gt;📋 Spec-driven for logic and consistency&lt;/li&gt;
&lt;li&gt;📖 Steering docs for relationships and rules&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Steering Documents Are Underrated
&lt;/h3&gt;

&lt;p&gt;They prevented 95% of "off-brand" responses. Define relationships BETWEEN agents, not just individual traits.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Define relationships BETWEEN agents, not just individual traits. That's where the magic happens."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3. Real-Time Multi-Agent Systems Are Possible
&lt;/h3&gt;

&lt;p&gt;5 parallel API calls to Groq, independent responses, real-time synthesis. It works!&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Context Preservation Changes Everything
&lt;/h3&gt;

&lt;p&gt;No more copy-pasting between tools. Kiro keeps context across the entire development session.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Embrace the Seams
&lt;/h3&gt;

&lt;p&gt;The "incompatible parts" (vibe vs spec vs steering) create authentic conflict. That's a FEATURE, not a bug.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Key Takeaways (Copy These!)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Don't pick one paradigm&lt;/strong&gt; - Mix vibe coding (creativity) + spec-driven (consistency) + steering docs (relationships)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Steering documents prevent 95% of off-brand responses&lt;/strong&gt; - Define relationships BETWEEN agents, not just traits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time multi-agent systems work&lt;/strong&gt; - 5 parallel Groq calls in 2-3 seconds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context preservation is everything&lt;/strong&gt; - No more copy-pasting between tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embrace the seams&lt;/strong&gt; - Incompatible parts create authentic conflict (that's a feature!)&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="o"&gt;[&lt;/span&gt;your-repo]
npm &lt;span class="nb"&gt;install
cp&lt;/span&gt; .env.example .env
&lt;span class="c"&gt;# Add GROQ_API_KEY to .env (free at console.groq.com)&lt;/span&gt;
npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Then:&lt;/strong&gt; Click "Ask Ghosts for Hint" and watch 5 AI agents debate in real-time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenge:&lt;/strong&gt; Can you add a 6th ghost? Share your results in the comments! 👇&lt;/p&gt;




&lt;h2&gt;
  
  
  The Future: Multi-Modal AI Development
&lt;/h2&gt;

&lt;p&gt;This project proves that we can stitch together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Different AI systems (Groq, Azure, Gemini, Suno)&lt;/li&gt;
&lt;li&gt;Different development paradigms (vibe, spec, steering)&lt;/li&gt;
&lt;li&gt;Different modalities (text, speech, image, audio)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...into one coherent experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That's the Frankenstein vision:&lt;/strong&gt; Not just building with AI, but building WITH multiple AIs, each specialized for their domain, all orchestrated by Kiro.&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 Resources &amp;amp; Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🎮 Play the Game:&lt;/strong&gt; [Your deployed URL]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;💻 Source Code:&lt;/strong&gt; [Your GitHub URL]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🛠️ Kiro IDE:&lt;/strong&gt; &lt;a href="https://kiro.dev" rel="noopener noreferrer"&gt;kiro.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;⚡ Groq API:&lt;/strong&gt; &lt;a href="https://console.groq.com" rel="noopener noreferrer"&gt;console.groq.com&lt;/a&gt; (Free tier available!)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💬 Let's Discuss!
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;I want to hear from you:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Have you tried multi-agent systems? What challenges did you face?&lt;/li&gt;
&lt;li&gt;Which development paradigm do you prefer: vibe coding, spec-driven, or steering?&lt;/li&gt;
&lt;li&gt;What would YOU add as a 6th ghost character?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Drop your thoughts in the comments! I respond to everyone. 👇&lt;/p&gt;




&lt;h2&gt;
  
  
  🙏 If You Found This Helpful
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;❤️ Give it a heart&lt;/li&gt;
&lt;li&gt;🔖 Bookmark for later&lt;/li&gt;
&lt;li&gt;🔄 Share with your dev friends&lt;/li&gt;
&lt;li&gt;👤 Follow me for more AI development insights&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built for the #Kiroween Frankenstein Hackathon 2024&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; #kiro #AI #GameDev #MultiAgent #Groq #NextJS #LLM #TTS #AgentDriven #Frankenstein&lt;/p&gt;




&lt;h2&gt;
  
  
  🎃 About the Hackathon
&lt;/h2&gt;

&lt;p&gt;This project was built for Kiro's Frankenstein category: "Stitch together a chimera of technologies into one app." We combined:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5 LLM agents (Groq)&lt;/li&gt;
&lt;li&gt;4 TTS providers (Azure, Google, Play.ht, Gemini)&lt;/li&gt;
&lt;li&gt;AI-generated art (Gemini)&lt;/li&gt;
&lt;li&gt;AI-generated music (Suno)&lt;/li&gt;
&lt;li&gt;Custom MCP servers&lt;/li&gt;
&lt;li&gt;3 development paradigms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The result?&lt;/strong&gt; Something unexpectedly powerful - just like Frankenstein's monster.&lt;/p&gt;




&lt;h2&gt;
  
  
  Appendix: Technical Deep Dive
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Agent Architecture
&lt;/h3&gt;

&lt;p&gt;Each agent has:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Name&lt;/strong&gt; - Display name&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personality&lt;/strong&gt; - One-line description&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;System Prompt&lt;/strong&gt; - Detailed behavior definition (under 30 words per response)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice&lt;/strong&gt; - Unique Azure TTS neural voice&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Debate Flow
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Player triggers hint request
2. API route receives puzzle context
3. 5 parallel Groq API calls (Promise.all)
4. Each agent responds independently (temperature=0.8)
5. Elara synthesizes consensus from all perspectives
6. Responses spoken with unique voices (Azure TTS)
7. Display in real-time to player
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Steering Document Strategy
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Key insight:&lt;/strong&gt; Define relationships, not just traits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad steering:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Elara is maternal
Harlan is logical
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Good steering:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;When debating:
- Mira sides with emotional choices
- Harlan provides logic but defers to family
- Selene demands honesty
- Elara synthesizes consensus
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second approach creates authentic family dynamics.&lt;/p&gt;




&lt;h2&gt;
  
  
  Performance Notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;5 parallel API calls:&lt;/strong&gt; ~2-3 seconds total (Groq is FAST)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Azure TTS caching:&lt;/strong&gt; Repeated phrases cached locally&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Music streaming:&lt;/strong&gt; 15% volume, seamless loops&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image optimization:&lt;/strong&gt; Next.js Image component with priority loading&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Future Improvements
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Memory system:&lt;/strong&gt; Agents remember previous conversations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Emotional state:&lt;/strong&gt; Agents' moods change based on player choices&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Branching narrative:&lt;/strong&gt; Multiple endings based on agent consensus&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice cloning:&lt;/strong&gt; Custom voices for each character&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time animation:&lt;/strong&gt; Lip-sync with TTS output&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;em&gt;Thanks for reading! If you found this helpful, give it a ❤️ and follow me for more AI development insights.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>kiro</category>
      <category>vibecoding</category>
      <category>hackathon</category>
    </item>
  </channel>
</rss>
