<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Generative AI - Medium]]></title>
        <description><![CDATA[Stay updated with the latest news, research, and developments in the world of generative AI. We cover everything from AI model updates, comprehensive tutorials, and real-world applications to the broader impact of AI on society. Work with us: jimclydegm@gmail.com - Medium]]></description>
        <link>https://generativeai.pub?source=rss----440100e76000---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Generative AI - Medium</title>
            <link>https://generativeai.pub?source=rss----440100e76000---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 13 Nov 2026 21:01:18 GMT</lastBuildDate>
        <atom:link href="https://generativeai.pub/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[AI Character Expression Sheets: One Sheet or One Expression at a Time?]]></title>
            <link>https://generativeai.pub/ai-character-expression-sheets-one-sheet-or-one-expression-at-a-time-0e92362fd224?source=rss----440100e76000---4</link>
            <guid isPermaLink="false">https://medium.com/p/0e92362fd224</guid>
            <category><![CDATA[character-sheet]]></category>
            <category><![CDATA[anime]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[expression]]></category>
            <category><![CDATA[pixai]]></category>
            <dc:creator><![CDATA[Jim Clyde Monge]]></dc:creator>
            <pubDate>Fri, 13 Nov 2026 13:13:35 GMT</pubDate>
            <atom:updated>2026-11-13T13:13:37.018Z</atom:updated>
            <content:encoded><![CDATA[<h4>Here’s a detailed guide to creating recognizable expressions for the same character and choosing a workflow that makes individual mistakes easy to correct.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yrovtyfoSdPhlWAPDI7kbA.png" /><figcaption>AI character expression sheets example</figcaption></figure><p>Generating an anime-style character is one thing. Getting their facial expressions right is another thing.</p><p>You see, AI image generators have become powerful enough to create whatever image we can think of with just a single prompt. But one thing many image models still struggle with is generating the correct facial expressions of a character.</p><p>Ask for “angry,” and you often get the same blank face with slightly lowered eyebrows. Ask for six emotions and two of them are likely to come out looking like twins.</p><p>That’s what a character expression sheet is for.</p><p>It’s a single reference that shows how one character looks across different emotions, and it’s something you’ll keep coming back to if you’re making a manga, a visual novel, or a storybook.</p><p>In this guide, I experimented with <a href="https://eap.pixai.art/go/jim">PixAI</a> to create a facial expression sheet of a character.</p><p>There are two ways to do this.</p><ol><li>You can generate all the expressions on one sheet in a single run</li><li>You can create them one expression at a time from the same reference image</li></ol><p>I tried both with the same character and the same six emotions, and then I tested what happens when one of the faces needs fixing.</p><p>If you want to know where I landed before reading the details, the sheet gave me livelier, more expressive faces for a fraction of the credits. Separate images are the better pick when you need individual files you can fix one at a time, but you’ll have to push the prompts harder to get strong emotions out of them.</p><p>I ran these tests on November 12, using Tsubaki.3 at XL resolution with High Priority mode on. At those settings, every generation cost 5,300 credits, whether it was a full sheet or a single face.</p><p>Let me share the results.</p><h4>Start by generating a character in PixAI</h4><p>Both methods depend on one thing, which is a clear reference image of your character. If the reference is messy, every expression you make from it will be messy too.</p><p>So before thinking about emotions, I made a neutral portrait. Head over to PixAI, open the Generate page, and pick Tsubaki.3 from Quick Select. It’s their current flagship model, and it’s the one that can take a reference image and follow editing instructions written in plain English.</p><p>Here’s the prompt I used for my character:</p><blockquote>Anime-style portrait of a girl, a 20-year-old woman with a short teal bob cut, straight bangs, large amber eyes, and a small mole under her left eye. She wears a yellow star-shaped hair clip on the right side of her hair and a plain cream hoodie. Front-facing view from the chest up, neutral expression with a relaxed, closed mouth, eyebrows fully visible under the bangs. Plain light gray background. Clear facial features</blockquote><figure><img alt="Example character generated with PixAI" src="https://cdn-images-1.medium.com/max/1024/1*0ZsLY8mLv_uc-UlgdjyeUg.png" /><figcaption>Example character generated with PixAI</figcaption></figure><p>A few things in that prompt are there on purpose.</p><p>The face is front-facing, and the eyes, eyebrows, and mouth are all fully visible. Those three are the parts that move when an emotion changes, so the model needs to see them clearly in the reference.</p><p>The character has two details that are easy to check at a glance: the star hair clip and the mole under her left eye. I call these anchor details. If the clip changes shape or the mole disappears in one of the expressions, I know right away that the character drifted.</p><p>Before moving on, write down what should never change. For this example, that’s the teal bob, amber eyes, the mole, the star clip, and the cream hoodie. Everything else on her face is allowed to move.</p><p>If you already have a character you like, you can skip the generation and upload your own image as the reference instead.</p><h4>Make your first expression in PixAI</h4><p>Before going for all six faces, I’d recommend trying just one. It’s the quickest way to see how Tsubaki.3 handles your character, and it only costs a single generation.</p><p>I started with happy because it’s the easiest emotion to judge at a glance.</p><ol><li>Open the Generate page and pick Tsubaki.3 from Quick Select.</li><li>Attach your neutral portrait as the reference image. Once it’s attached, you can call it @image1 in the prompt.</li><li>Turn off Prompt Helper so the model follows your wording exactly.</li><li>Set the resolution to XL. I left High Priority on, which gets your image back faster but costs more credits. You can turn it off if you don’t mind waiting in the standard queue.</li><li>Paste the prompt below and hit Generate.</li></ol><figure><img alt="Tsubaki.3 selected, the neutral portrait attached as the reference, and the XL and High Priority settings" src="https://cdn-images-1.medium.com/max/1024/1*s2CPlw1HttNCrbJyL2qZMQ.png" /><figcaption><em>Tsubaki.3 selected, the neutral portrait attached as the reference, and the XL and High Priority settings</em></figcaption></figure><blockquote><strong>Prompt: </strong>Change only the facial expression of the @image1 character. Keep the face shape, teal bob cut, amber eyes, mole under the left eye, yellow star hair clip, cream hoodie, pose, framing, art style, and light gray background exactly the same. New expression: a big open-mouth smile showing her upper teeth, cheeks raised, eyes slightly squinted into curved shapes, eyebrows relaxed and lifted.</blockquote><figure><img alt="Same character but different facial expression" src="https://cdn-images-1.medium.com/max/1024/1*84z_B5SxHs3slZkpjKjOSg.png" /><figcaption>Same character but different facial expression</figcaption></figure><p>I got the result on the first attempt, and it cost 5,300 credits. The hair clip, the mole, and the hoodie all stayed the same, and only her face changed. The smile is on the gentle side, which I’ll talk more about in Method 2.</p><p>To try this with your own character, swap two things in the prompt. Replace the features in the keep list with your character’s details, and replace the last sentence with the emotion you want, written as what the eyebrows, eyes, and mouth are doing.</p><p>If you have an OC of your own, <a href="https://eap.pixai.art/go/jim">upload them to PixAI</a> and try one new expression before reading further. A new account comes with enough starter credits to cover this first test.</p><h4>Method 1: Generate all six expressions on one sheet</h4><p>The first method is the fast one. You attach the reference image, describe the whole sheet in one prompt, and get all six faces back in a single image.</p><p>Attach the character’s portrait as a reference image so you can call it @image1 in the prompt. I also turned off Prompt Helper for this, because I wanted the model to follow my wording exactly instead of a rewritten version of it.</p><p>This is what your <a href="https://eap.pixai.art/go/jim">PixAI</a> image generation dashboard is going to look like:</p><figure><img alt="Image generation prompt in PixAI" src="https://cdn-images-1.medium.com/max/1024/1*ec1NyGFP6flzm6gilM1yHQ.png" /><figcaption>Image generation prompt in PixAI</figcaption></figure><p>Here’s the prompt:</p><blockquote>Create a character expression sheet of the @image1 character. Arrange six head-and-shoulders portraits in a clean grid with 2 rows and 3 columns, each in its own equal-sized cell with a thin white gap between cells. Keep the same face shape, teal bob cut, amber eyes, mole under the left eye, yellow star hair clip, and cream hoodie in every cell. Same front-facing framing, same art style, same plain light gray background. No text or labels.</blockquote><blockquote>Row 1: neutral with a relaxed closed mouth; happy with a wide open smile, raised cheeks, and slightly squinted eyes; angry with eyebrows pulled down and together, narrowed eyes, and clenched teeth.</blockquote><blockquote>Row 2: sad with inner eyebrows raised, glossy downcast eyes, and a small frown; surprised with eyebrows raised high, wide round eyes, and a small open mouth; shy with eyes looking away to the side, a strong blush across the cheeks, and a small wavy closed mouth.</blockquote><figure><img alt="Example expression sheet in a single image" src="https://cdn-images-1.medium.com/max/1024/1*kZvKMyDtUfUYy5k6daLDQg.png" /><figcaption>Example expression sheet in a single image</figcaption></figure><p>Looking at the final output, I have to say, the results are awesome. I love how animated the expressions turned out. They still resemble the original character, yet each varied face successfully captures the exact emotion I was aiming for.</p><p>It also came out right on the first attempt, so the whole sheet cost me 5,300 credits. That’s six faces for the price of one image.</p><p>The prompt has four parts, and you can reuse the same order for your own character.</p><ol><li>It starts with what to make and how the grid is laid out.</li><li>Then it lists the features that must stay the same.</li><li>Then the framing and background.</li><li>The emotions come last, grouped by row.</li></ol><p>Notice that I didn’t just write “happy, angry, sad.”</p><p>Each emotion comes with what the eyebrows, eyes, and mouth are doing. This matters more than anything else in the prompt. A single emotion word leaves the model to guess, and its guess is usually a small change to the mouth while the rest of the face stays frozen.</p><p>I also asked for no text. Generated labels can come out misspelled or land on the wrong cell, so it’s easier to add them yourself afterward in any image editor. That’s how I added the labels on the sheet above.</p><h4>What to check on the sheet</h4><p>Once the sheet is done, go through it cell by cell.</p><ul><li>Count the emotions first. All six should be there, and each one should appear only once.</li><li>Look for twins. Happy and shy are the pair most likely to end up looking alike, because both involve a smile and a blush. Sad and neutral are the other pair to watch.</li><li>Check the anchor details in every cell. For my example, that means the mole is still under the left eye and the star clip is still on the same side.</li><li>Check the framing. Every head should be about the same size and none of them should be cut off at the edge of a cell.</li></ul><p>What I like about this method is that you see the character’s whole emotional range in one image. It’s the quickest way to find out if a design can carry different moods before you commit to it.</p><p>And if you want to go beyond expressions and build a full reference package with a turnaround, outfit details, and a color palette, PixAI has a <a href="https://blog.pixai.art/en/oc-vtuber-character-sheet-generation-guide-building-a-consistent-ai-character-with-pixai/">guide to OC and VTuber character sheets</a> that takes the same idea further.</p><h4>Method 2: Edit one expression at a time</h4><p>The second method takes a bit longer, but you get more control over each face.</p><p>Instead of asking for a grid, you go back to the original neutral portrait and ask Tsubaki.3 to change only the expression. You do this once per emotion, and each result is its own full-size image. If you followed the walkthrough above, you’ve already done the first one.</p><p>The important rule is to always start from the original reference. Don’t edit the happy image to make the angry one. Every edit moves the character a tiny bit away from the original, and if you chain edits together, those small changes pile up.</p><p>The neutral portrait already counts as your neutral expression, so you only need five edits.</p><p>I used one shared instruction for all of them and only swapped the last sentence:</p><blockquote><strong>Prompt: </strong>Change only the facial expression of the @image1 character. Keep the face shape, teal bob cut, amber eyes, mole under the left eye, yellow star hair clip, cream hoodie, pose, framing, art style, and light gray background exactly the same. New expression: [EXPRESSION]</blockquote><p>And here’s what I put in place of [EXPRESSION] for each one:</p><ul><li><strong>Happy:</strong> a big open-mouth smile showing her upper teeth, cheeks raised, eyes slightly squinted into curved shapes, eyebrows relaxed and lifted.</li><li><strong>Angry:</strong> eyebrows pulled down and together, narrowed eyes glaring straight at the viewer, clenched teeth, a tense jaw.</li><li><strong>Sad:</strong> inner ends of the eyebrows raised, glossy eyes looking down with tears starting to form, lips pressed into a small trembling frown.</li><li><strong>Surprised:</strong> eyebrows raised high above the bangs line, eyes wide open and round with small pupils, mouth open in a small “o” shape.</li><li><strong>Shy:</strong> head tilted slightly down, eyes looking away to the lower right, a heavy pink blush across both cheeks and the nose, a small wavy closed mouth.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0ZsLY8mLv_uc-UlgdjyeUg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QeIudbdtylS36KaEbOCRsw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*PcejBL0dJsbD5O96QJNBMg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*f-gVrjKlDd0SVwRgSM3WCg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*G2Ebyg1Io-lghSpDFugxsg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tPh3tR3dtnkCkL_RPDuNtA.png" /><figcaption>Example expression sheet in a multiple image</figcaption></figure><p>Each edit worked on the first attempt at 5,300 credits, so the five edits came to 26,500 credits.</p><p>To use this for your own character, replace the character’s features in the keep list with your own, and leave the rest as it is.</p><p>The fun part about this method is that you can control how strong an emotion is. “Angry” could mean mildly annoyed or completely furious, and on a sheet you mostly get whatever the model decides.</p><p>Here, you can write “slightly annoyed, one eyebrow lowered, mouth pulled to one side” and get that specific version.</p><p>You also end up with six separate files at the same size and the same framing. If you plan to use the faces in a visual novel or as reaction images, that’s the format you need anyway.</p><p>However, looking at the individual results and comparing them back to the single expression sheet above, I found the level of expression here to be way lower. There’s barely any noticeable change on her face.</p><p>Yes, you can technically detect the intended emotion, but the variation is minimal. I really wish there had been more dramatic head tilting, skin color changes, eyebrow movement, and overall facial dynamism to give each portrait more life.</p><h4>What happens when one expression needs fixing?</h4><p>No matter which method you use, one face will probably come out wrong. The shy one could look too much like the happy one, or the angry one could look more bored than angry. How easy it is to fix that one face is the biggest difference between the two methods.</p><p>On a sheet, all six faces are part of the same image. You can’t just regenerate one of them.</p><p>You have two options.</p><ol><li>The first is to run the whole sheet again with a better description for the weak emotion. That works, but you’re also rolling the dice on the five faces that were already fine.</li><li>The second option is to edit only the bad cell. The model only repaints what’s inside a mask and leaves everything else alone.</li></ol><p>I went with the second option and used it on the shy face in the bottom-right cell. Here’s how:</p><ol><li>Upload the finished sheet to PixAI’s image editor. Uploading an image puts you straight into edit mode.</li><li>Switch to mask mode and paint over the shy face. Paint the mask a little larger than the face and turn on feathering so the new face blends into the cell.</li><li>Type a prompt that describes only the new expression, then click Generate.</li></ol><p>This is the prompt I used:</p><blockquote>Eyes looking away to the lower right</blockquote><figure><img alt="Repainting an image in PixAI" src="https://cdn-images-1.medium.com/max/1024/1*1Kl7tpPLghWFJGji7agiSQ.png" /><figcaption>Repainting an image in PixAI</figcaption></figure><p>After the fix, check the cells next to it and make sure the mole and the star clip are still in the right place on the repainted face.</p><figure><img alt="Sample result after repainting a portion of an image in PixAI" src="https://cdn-images-1.medium.com/max/1024/1*Du94Lwmx5zQntWJb6Lqs9g.png" /><figcaption>Sample result after repainting a portion of an image in PixAI</figcaption></figure><p>With separate images, the fix is simpler. You go back to the original reference, rewrite the expression, and generate that one image again. The other five files aren’t touched at all.</p><p>Since the shy face from Method 2 was one of the flattest results, I regenerated it using the same shy description from the sheet fix above.</p><p>Here’s the before-and-after edit of the shy expression:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tPh3tR3dtnkCkL_RPDuNtA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8vveDA0Kd_AOGnViyfh1ow.png" /><figcaption>Comparing an expression with a single word and a descriptive prompt</figcaption></figure><h4>One more thing about cropping</h4><p>You might be tempted to generate the sheet and then crop the six faces into separate files. You can do that for quick previews, but keep your expectations low.</p><p>Each cropped face is only a fraction of the sheet’s resolution. The crops won’t line up perfectly with each other, and you won’t get transparent backgrounds.</p><p>If you need separate images that are ready to use, make them separately.</p><h4>Which workflow should you choose?</h4><p>Here’s how the two methods compared in my test. Both used the same neutral reference, which cost one 5,300-credit generation and isn’t counted in the totals below.</p><figure><img alt="Comparison between generating expression sheet as one image vs multiple images" src="https://cdn-images-1.medium.com/max/1024/1*pY366I_H7ESiPNXwB94lfQ.png" /><figcaption>Comparison between generating expression sheet as one image vs multiple images</figcaption></figure><p>The sheet wins on cost and, in my test, on how expressive the faces looked. The individual images cost about six times more, but you get files you can fix and use one by one.</p><p>Keep in mind that neither method gives you transparent backgrounds or sprites that a visual novel engine can use right away. You’ll still need to remove the background and line the images up yourself.</p><p>If you’re new to PixAI, you can sign up through <a href="https://pixai.art/referral?refCode=VKWS68AC&amp;utm_source=referral&amp;ref_entry=bonus_quest&amp;ref_platform=web&amp;share_copy_id=SC-EN-LINK-T2">this link</a> to get 50,000 extra credits. You don’t need the bonus to get started, though. Your first expression costs 5,300 credits at the settings I used, and the starter credits on a new account already cover that.</p><h4>Frequently asked questions</h4><p><strong>How do I make an expression sheet from an existing character?</strong></p><p>Attach a clear, front-facing image of your character as a reference in Tsubaki.3, then describe the grid and each emotion in one prompt. List the features that must stay the same, like hair, eye color, and accessories, so the model keeps them in every cell.</p><p><strong>Why do several expressions look almost identical?</strong></p><p>Usually because the prompt only names the emotions. Words like “happy” and “shy” leave the model to guess, and it often changes just the mouth. Describe what the eyebrows, eyes, and mouth are doing for each emotion, and the faces will be much easier to tell apart.</p><p><strong>How do I fix only one expression?</strong></p><p>On a sheet, open it in PixAI’s image editor, mask the face you want to redo, and describe the new expression. For separate images, go back to the original reference and generate that one expression again with a more specific description.</p><h4>Final Thoughts</h4><p>If you’re making a character for a storybook, a manga, an anime series, or anything else where the same face shows up again and again, an expression sheet is one of the most useful things you can prepare.</p><p>It’s your proof that the character still looks like themselves when they’re laughing, crying, or furious, and it saves you from finding out halfway through a project that your hero has no convincing sad face.</p><p>Personally, I’d make the full sheet first to see what the character can do, and then switch to one expression at a time for anything I actually plan to use.</p><p>Both methods have their own place. A full expression sheet is great for exploring your character’s wide range of emotions, while separate images give you more control and suit individual assets better.</p><p>Whichever you choose, start with a clear and accurate reference and describe each expression in detail. Tell the model what the eyebrows, eyes, and mouth are doing instead of just naming the emotion.</p><p>If you want to take your character further, I also wrote a guide on <a href="https://jimclydemonge.medium.com/how-to-make-manga-pages-with-ai-using-tsubaki-3-32a415c0af8a">how to make manga pages with Tsubaki.3</a>, and an expression sheet like this one is a good thing to have ready before you start on panels.</p><p>Let me know your thoughts in the comments!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*w9sW_DbTNI7mhxNr.png" /></figure><p>This story is published under the <a href="https://generativeai.pub/">Generative AI</a> publication. Connect with us on <a href="https://www.linkedin.com/company/generative-ai-publication">LinkedIn</a> and follow <a href="https://www.zeniteq.com/">Zeniteq</a> to stay in the loop with the latest AI stories. Let’s shape the future of AI together!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*XaZiuALUZclC9tIw.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=0e92362fd224" width="1" height="1" alt=""><hr><p><a href="https://generativeai.pub/ai-character-expression-sheets-one-sheet-or-one-expression-at-a-time-0e92362fd224">AI Character Expression Sheets: One Sheet or One Expression at a Time?</a> was originally published in <a href="https://generativeai.pub">Generative AI</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[I Built a RAG System With No AI. It Broke in the Same Places Yours Does.]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://generativeai.pub/i-built-a-rag-system-with-no-ai-it-broke-in-the-same-places-yours-does-62af1e65fdac?source=rss----440100e76000---4"><img src="https://cdn-images-1.medium.com/max/2600/0*9KxCHoNZbpFAeeAi" width="9504"></a></p><p class="medium-feed-snippet">Most RAG bugs happen before the language model ever sees the question. A 60-line retriever in plain Python shows exactly where, and what&#x2026;</p><p class="medium-feed-link"><a href="https://generativeai.pub/i-built-a-rag-system-with-no-ai-it-broke-in-the-same-places-yours-does-62af1e65fdac?source=rss----440100e76000---4">Continue reading on Generative AI »</a></p></div>]]></description>
            <link>https://generativeai.pub/i-built-a-rag-system-with-no-ai-it-broke-in-the-same-places-yours-does-62af1e65fdac?source=rss----440100e76000---4</link>
            <guid isPermaLink="false">https://medium.com/p/62af1e65fdac</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[llm]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[retrieval-augmented-gen]]></category>
            <category><![CDATA[machine-learning]]></category>
            <dc:creator><![CDATA[Muhammad Mujtaba Raza]]></dc:creator>
            <pubDate>Fri, 13 Nov 2026 11:11:08 GMT</pubDate>
            <atom:updated>2026-11-13T11:11:07.277Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Can Decision Models Speed Up AgenticRAG? An End-to-End Evaluation]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://generativeai.pub/corpus2skill-decisionrag-boost-your-agentic-rag-62dd11be4643?source=rss----440100e76000---4"><img src="https://cdn-images-1.medium.com/max/2016/1*hyRT2AVjvH3eGF5GrYEn7Q.png" width="2016"></a></p><p class="medium-feed-snippet">This article covers the implementation of Jev-based search over a Corpus2Skill index.</p><p class="medium-feed-link"><a href="https://generativeai.pub/corpus2skill-decisionrag-boost-your-agentic-rag-62dd11be4643?source=rss----440100e76000---4">Continue reading on Generative AI »</a></p></div>]]></description>
            <link>https://generativeai.pub/corpus2skill-decisionrag-boost-your-agentic-rag-62dd11be4643?source=rss----440100e76000---4</link>
            <guid isPermaLink="false">https://medium.com/p/62dd11be4643</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[llm]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[rags]]></category>
            <category><![CDATA[knowledge-management]]></category>
            <dc:creator><![CDATA[Band M.]]></dc:creator>
            <pubDate>Fri, 13 Nov 2026 11:09:04 GMT</pubDate>
            <atom:updated>2026-11-13T11:09:03.644Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Plus AI vs Gamma AI: Which Tool Is Better for AI Presentations?]]></title>
            <link>https://generativeai.pub/plus-ai-vs-gamma-ai-which-tool-is-better-for-ai-presentations-ce9781051660?source=rss----440100e76000---4</link>
            <guid isPermaLink="false">https://medium.com/p/ce9781051660</guid>
            <category><![CDATA[ai-plus]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[ai-presentation]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[gamma-ai]]></category>
            <dc:creator><![CDATA[Jim Clyde Monge]]></dc:creator>
            <pubDate>Fri, 13 Nov 2026 09:18:13 GMT</pubDate>
            <atom:updated>2026-11-13T09:18:12.168Z</atom:updated>
            <content:encoded><![CDATA[<h4>I tested two of the best tools for generating slide decks with AI.</h4><figure><img alt="Plus AI vs Gamma AI: Which Tool Is Better for AI Presentations?" src="https://cdn-images-1.medium.com/max/1024/1*eI-7rm00moqB4Ex57PYmqg.jpeg" /><figcaption>Plus AI vs Gamma AI: Which Tool Is Better for AI Presentations?</figcaption></figure><p>As a dev and solopreneur, I make presentations regularly for client updates, content strategy pitches, and monthly growth reports. These reports usually start as a messy Google Doc and end up in Google Slides or PowerPoint. Before all these AI tools came out and became popular, I often did things manually.</p><p>Today, AI presentation generators like <a href="https://plusai.com/">Plus AI</a> and Gamma App make my life easier. I just dump the data or link, and the agent takes care of all the heavy lifting.</p><p>But which tool is better?</p><p>In this article, I’ll explain how each tool works, what it’s like to use them day to day, and which one I’d recommend for different kinds of work.</p><p>Let’s get started.</p><h4>Plus AI vs Gamma: What’s the Difference?</h4><p>The biggest difference is where each tool lives.</p><p><a href="https://plusai.com/"><strong>Plus AI</strong></a> is an add-on that runs inside PowerPoint and Google Slides. You open a regular deck, click the Plus AI panel on the side, and it builds or edits slides right there in your file.</p><figure><img alt="Plus AI landing page" src="https://cdn-images-1.medium.com/max/1024/1*bDKzXfixBjmT7E-uR3eIyw.png" /><figcaption>Plus AI landing page</figcaption></figure><p>You don’t need to keep on switching tabs when working with a presentation. This is perhaps the biggest reason why you should pick it. The dashboard is already familiar, so there is almost no learning curve at all.</p><p>Gamma is its own web app. You create, edit, and present everything inside the Gamma website, then share a link or export to PowerPoint, PDF, or Google Slides when you need a file.</p><figure><img alt="Gamma landing page" src="https://cdn-images-1.medium.com/max/1024/1*i64ZBXA5CfkamEDloPOcBQ.png" /><figcaption>Gamma landing page</figcaption></figure><p>So, choose Plus AI if your team works in PowerPoint or Google Slides and needs decks that stay fully editable in those apps.</p><p>You can switch to Gamma if you prefer a more ChatGPT-style interface and you want the output to be in HTML format.</p><h4>Plus AI: Features and Highlights</h4><p><a href="https://plusai.com/">Plus AI</a> was built by a team of former management consultants, designers, and engineers, and you can tell. The whole tool is designed around the way people already make work presentations.</p><p>You can install it by adding it as an add-on in Google Slides.</p><figure><img alt="Plus AI download page" src="https://cdn-images-1.medium.com/max/1024/1*vKB8PSX5yw8IdHxyAKTQ_Q.png" /><figcaption>Plus AI download page</figcaption></figure><p>After you install the add-on, a side panel opens next to your slides. When you create a new presentation, just open the Extensions tab, then under the Plus AI for Google Slides menu, select New presentation with Plus AI.</p><figure><img alt="Making new presentation using Plus AI in Google Slides" src="https://cdn-images-1.medium.com/max/1024/1*0-ZBd9WO-fCUcPWZz_7QyQ.png" /><figcaption>Making new presentation using Plus AI in Google Slides</figcaption></figure><p>In the presentation generator dashboard, you will see a bunch of parameters. You can start from scratch or choose from templates.</p><figure><img alt="Plus AI presentation generator dashboard. Image by Jim Clyde Monge" src="https://cdn-images-1.medium.com/max/1024/1*Rvo6phjwIbQszaK3RNwjCg.png" /><figcaption>Plus AI presentation generator dashboard. Image by <a href="https://medium.com/u/819323b399ac">Jim Clyde Monge</a></figcaption></figure><p>For example, you could ask for a presentation of a monthly financial report. Click on the “use a prompt” button to add the financial data. You can also upload a document if it’s in PDF or Doc format.</p><figure><img alt="Plus AI presentation generator dashboard. Image by Jim Clyde Monge" src="https://cdn-images-1.medium.com/max/1024/1*DVBr092mq8bmfG-fvvAyIg.png" /><figcaption>Plus AI presentation generator dashboard. Image by <a href="https://medium.com/u/819323b399ac">Jim Clyde Monge</a></figcaption></figure><p>Here’s the full prompt:</p><pre>MONTHLY FINANCIAL REPORT – March 2026<br>Company: Horizon Tech Solutions<br>Reporting Period: March 2026<br>Currency: USD<br>Financial Overview<br>The company recorded a net profit this month, supported by strong revenue growth and controlled operating expenses. Overall financial performance remained stable and aligned with quarterly targets.<br>Income Summary<br>Total revenue for the month was $1,480,000, representing an 11% increase compared to the previous month. Cost of goods sold totaled $620,000, resulting in a gross profit of $860,000 and a gross margin of 58%.<br>Operating Expenses<br>Operating expenses amounted to $610,000.<br>Key expense drivers included employee salaries, cloud infrastructure costs, and marketing spend tied to customer acquisition campaigns.<br>Net Result<br>After operating expenses, the company achieved an operating income of $250,000.<br>Taxes and miscellaneous expenses totaled $70,000, leading to a net income of $180,000 for the month.<br>Cash Flow<br>Operating cash flow remained positive at $210,000.<br>Capital expenditures were limited to routine software and hardware upgrades, ensuring healthy cash reserves.<br>Balance Sheet Highlights<br> • Cash and cash equivalents: $2.3M<br> • Accounts receivable: $420,000<br> • Total assets: $4.8M<br> • Total liabilities: $2.1M<br>Key Financial Insights<br> • Profit margins improved due to better cost control<br> • Marketing spend showed a positive return on investment<br> • Cash position remains strong, supporting near-term growth initiatives<br>Outlook for Next Month<br>Revenue is expected to grow moderately, with expenses remaining stable. Focus will remain on maintaining profitability while supporting strategic investments.</pre><p>Adjust some parameters to customize the output. You can change the length, the design of the template, and the writing tone. Click on the generate button and wait for the final deck to be displayed.</p><p>Here’s what the sample output looks like:</p><figure><img alt="Plus AI presentation outline example. Image by Jim Clyde Monge" src="https://cdn-images-1.medium.com/max/1024/1*H_Quxyoj1ZfqvEAWKz4Fkw.png" /><figcaption>Plus AI presentation outline example. Image by <a href="https://medium.com/u/819323b399ac">Jim Clyde Monge</a></figcaption></figure><p>Before it generates the final slides it creates an outline for you. This is a crucial step because it allows you to see the structure of the presentation. You can edit the headers and rearrange the flow to make sure it tells the right story. Once you approve the outline the AI builds the slides right on your existing canvas.</p><p>Here’s what the final slides look like:</p><figure><img alt="Plus AI presentation output example. Image by Jim Clyde Monge" src="https://cdn-images-1.medium.com/max/1024/1*WYhvgZjziFB2K1wunQxDnQ.png" /><figcaption>Plus AI presentation output example. Image by <a href="https://medium.com/u/819323b399ac">Jim Clyde Monge</a></figcaption></figure><p>Because Plus AI works natively inside Google Slides and PowerPoint the final output is just a standard presentation file. Every text box and image is fully editable. You can share the file with a colleague and they can edit it even if they do not have Plus AI installed.</p><p>Plus builds its own PPTX files with an in-house Open XML renderer, so when you open the deck in PowerPoint, nothing looks broken or flattened into an image.</p><p>On the Team plan, you can add your logo, colors, and fonts. Enterprise customers can go further and import their company’s actual slide masters, so the AI builds slides using the same templates the design team already approved.</p><h4>Gamma: Features and Highlights</h4><p><a href="https://gamma.app/products/presentations">Gamma</a> takes a different approach. Instead of classic slides, it builds presentations out of <strong>cards</strong>, which work like flexible slides that stretch to fit their content. Gamma says people have used it to create more than 250 million presentations, websites, social posts, and documents.</p><p>Getting started takes about a minute. You type a prompt, paste an outline, or upload a Word doc, PDF, or Google Doc. Then you pick a theme, and Gamma writes the copy, chooses layouts, and adds images automatically.</p><p>The editor feels more like Notion than PowerPoint. You add content in blocks, drag them around, and ask the built-in AI assistant to rewrite a card, change its layout, or generate a new image. Switching the whole deck to a different theme takes one click.</p><p>When you’re done, you can present straight from Gamma, share a live link, or export to PowerPoint, PDF, PNG, or Google Slides. Gamma can also turn the same content into a website, a document, or social media graphics, which Plus AI doesn’t try to do.</p><p>Higher plans add custom branding, detailed analytics on who viewed your deck, custom domains, and API access.</p><h4>Plus AI vs Gamma</h4><p>Here’s a quick comparison of the two platforms:</p><figure><img alt="Plus AI vs Gamma summary" src="https://cdn-images-1.medium.com/max/1024/1*DHXM59QM_l_NBkIvrRvcLw.png" /><figcaption>Plus AI vs Gamma summary</figcaption></figure><p>Feature lists only tell you so much. What matters in practice is how each tool feels when you’re actually building a deck under a deadline.</p><h4>Generating a Deck From a Prompt</h4><p>Gamma is the faster of the two. You type a prompt, pick a theme, and in under a minute you have a full deck with photos, icons, and a different layout on almost every card.</p><p>The first time I tried it, I was honestly impressed by how finished it looked.</p><p>Here’s an example:</p><figure><img alt="Gamma presentation generation screen. Image by Jim Clyde Monge" src="https://cdn-images-1.medium.com/max/1024/0*wf-xtJ_K3d6B1oZV.png" /><figcaption>Gamma presentation generation screen. Image by <a href="https://medium.com/u/819323b399ac">Jim Clyde Monge</a></figcaption></figure><p>The AI generates content in fluid blocks that auto-resize to fit the text. You don’t have to worry about font sizes or text overflowing a box because the “Smart Slides” handle all of that for you.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*LNXWxwGD3At0v8le.png" /><figcaption>Gamma presentation example result. Image by <a href="https://medium.com/u/819323b399ac">Jim Clyde Monge</a></figcaption></figure><p>The catch is the writing. Gamma tends to be wordy, and since cards stretch to fit their content, it doesn’t force itself to cut anything. Some cards end up with two or three paragraphs where a real slide would have a headline and a few short lines.</p><p>It can also fill gaps with numbers you never gave it, so you have to read every card before you present.</p><p>Plus AI takes a bit longer, usually a minute or two. Before building anything, it shows you an outline of every slide, and you can reorder, rename, or delete slides at that stage. I like this step a lot, because it’s much easier to fix the structure of a deck before the slides exist.</p><p>The finished deck looks more corporate. Plus uses its own designer templates with consistent fonts, tidy spacing, and icons next to the bullet points. The slides are tighter than Gamma’s, with short headlines and three or four points each. They can feel a little plain, especially if you don’t turn on image generation.</p><h4>Editing After the First Draft</h4><p>No AI tool gives you a perfect deck on the first try, so editing is where you’ll spend most of your time.</p><p>Plus AI’s Remix and Rewrite tools are the best part of the product for me. You select one slide, pick a new layout, and Plus rebuilds it in a few seconds while leaving the rest of your deck alone.</p><p>If a slide is just a wall of text, Remix can turn it into a timeline or a set of columns with icons, and Rewrite can tighten the wording without touching the layout.</p><p>Gamma’s AI assistant is more flexible. You can ask it for almost anything in plain English, like “make this more concise” or “turn this into a timeline,” and it usually gets it right. Changing the look of the entire deck with one click is also something PowerPoint can’t match.</p><p>Where Gamma gets frustrating is fine control. Its block-based editor doesn’t let you drag elements anywhere you want the way PowerPoint does. If you want to nudge one icon slightly to the left or shrink a single image, you’ll often end up trying different layout presets until one is close enough.</p><h3>Plus AI vs Gamma: Feature-by-Feature Comparison</h3><h4>Design Quality</h4><p>First impressions count, especially if you’re presenting to clients or investors.</p><ul><li><strong>Plus AI:</strong> The designer templates are clean and professional, with consistent fonts and spacing. They look like something a consulting firm would use. They’re also a little safe, and without images, some slides feel plain.</li><li><strong>Gamma:</strong> Gamma’s themes are modern and bold, and it adds images and varied layouts without being asked. Most people would look at a Gamma deck and assume a designer made it.</li></ul><p><strong>Winner: Gamma.</strong> Its first drafts look noticeably better with no extra effort from you.</p><h4>Editability and File Compatibility</h4><p>This category decides what happens after the AI is done, when you or your coworkers need to keep working on the deck.</p><ul><li><strong>Plus AI:</strong> Everything is native to PowerPoint and Google Slides. Charts are real charts, text boxes are real text boxes, and your deck works with any template or add-on you already use.</li><li><strong>Gamma:</strong> You can export to PowerPoint and Google Slides, but the export is a conversion from Gamma’s card format. Text boxes can shift, fonts can get replaced, and long cards sometimes split in odd places. It’s fine if you present from Gamma, but it adds cleanup if your team works in PowerPoint.</li></ul><p><strong>Winner: Plus AI.</strong> If your deck needs to live in PowerPoint or Google Slides, working inside the file itself saves a lot of fixing later.</p><h4>AI Editing Tools</h4><p>Generating a deck is only half the job. Most of my time goes into fixing slides after the first draft.</p><ul><li><strong>Plus AI:</strong> Remix and Rewrite are fast and precise. You pick exactly which slide or text to change, and Plus leaves the rest alone. Custom instructions and saved presets (on the Team plan) also help if you make similar decks every week.</li><li><strong>Gamma:</strong> The AI assistant handles almost any request in plain English, and changing the entire theme takes one click. Fine control over positioning is harder, though.</li></ul><p><strong>Winner: Tie.</strong> Plus AI is better for precise edits, and Gamma is better for big changes across the whole deck.</p><h4>Branding and Templates</h4><p>If you work for a company with brand guidelines, this might be the most important category for you.</p><ul><li><strong>Plus AI:</strong> The Team plan lets you set your logo, colors, and fonts. On Enterprise, Plus can build slides directly from your company’s own slide masters and asset libraries.</li><li><strong>Gamma:</strong> Pro users can create a custom branded theme with their colors, fonts, and logo. It works well for Gamma decks, but it’s a Gamma theme, separate from your company’s official PowerPoint template.</li></ul><p><strong>Winner: Plus AI.</strong> Being able to use your company’s real templates saves a lot of back-and-forth with the design team.</p><h4>How to Make Your Choice</h4><p>Overall, I’d pick Plus AI for most work presentations, because most work decks end up in PowerPoint or Google Slides anyway. Gamma is the better choice when looks and speed matter most and you control how the deck gets presented.</p><p><strong>Plus AI Is Better For:</strong></p><ul><li><strong>Consultants and agencies:</strong> Client decks need to open cleanly in PowerPoint and match the client’s template.</li><li><strong>Corporate teams:</strong> The deck gets passed between several people who all edit it in Google Slides or PowerPoint.</li><li><strong>Data-heavy updates:</strong> You need charts your team can click into and update next quarter.</li></ul><p><strong>Gamma Is Better For:</strong></p><ul><li><strong>Founders and freelancers:</strong> You want a sharp pitch or proposal fast, and you’re fine sharing it as a link.</li><li><strong>Content creators and educators:</strong> You want the same material as slides, a web page, and social posts.</li><li><strong>Occasional users:</strong> You make a few decks a month and want a free or low-cost option.</li></ul><h4>Final Thoughts</h4><p>Alright, I’ve just laid out the differences between <a href="https://plusai.com/">Plus AI</a> and Gamma and shared the key points you should know when choosing between the two.</p><p>I’ve been using both tools for over a year now, so you can trust me in this review.</p><p>For my own personal projects and client work, I prefer Plus AI. I’ve always been a PPT and Google Slides user since I was in college, so having an agent built into these platforms is a huge help and time saver for me.</p><p>Its Remix and Rewrite tools let me fix one slide without touching the rest, and I never have to rebuild a deck after exporting it.</p><p>In times when I need graphic heavy presentations, I switch to Gamma. The agentic interface also helps me easily perform deep research and link to some sort of database when dealing with reports.</p><p>If you’re deciding between them, think about three things.</p><ol><li>First, where will the deck live after you’re done: in PowerPoint and Google Slides, or as a shared link?</li><li>Second, how much do you care about the first draft looking polished versus being easy to edit?</li><li>Third, how often will you use it? If it’s just a few decks a month, Gamma’s free plan might be all you need.</li></ol><p>It’s also worth saying how much these tools have changed the way I work. A year ago, turning a 10-page report into a clean deck took me hours of work. Now I can get a really good output in a few minutes and spend my time on the parts that actually need a human, like the story and the numbers.</p><p>What do you think? Have you tried Plus AI or Gamma, or do you use a different AI presentation tool?</p><p>Let me know your thoughts in the comments.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*w9sW_DbTNI7mhxNr.png" /></figure><p>This story is published under the <a href="https://generativeai.pub/">Generative AI</a> publication. Connect with us on <a href="https://www.linkedin.com/company/generative-ai-publication">LinkedIn</a> and follow <a href="https://www.zeniteq.com/">Zeniteq</a> to stay in the loop with the latest AI stories. Let’s shape the future of AI together!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*XaZiuALUZclC9tIw.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ce9781051660" width="1" height="1" alt=""><hr><p><a href="https://generativeai.pub/plus-ai-vs-gamma-ai-which-tool-is-better-for-ai-presentations-ce9781051660">Plus AI vs Gamma AI: Which Tool Is Better for AI Presentations?</a> was originally published in <a href="https://generativeai.pub">Generative AI</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Harness Engineering for Swift: Making AI Coding Agents Follow Your Engineering Standards]]></title>
            <link>https://generativeai.pub/harness-engineering-ios-swift-ai-agents-9aefbf1f6ede?source=rss----440100e76000---4</link>
            <guid isPermaLink="false">https://medium.com/p/9aefbf1f6ede</guid>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[swift]]></category>
            <category><![CDATA[harness-engineering]]></category>
            <dc:creator><![CDATA[Ravi Rawal]]></dc:creator>
            <pubDate>Thu, 12 Nov 2026 10:58:07 GMT</pubDate>
            <atom:updated>2026-11-12T10:58:06.386Z</atom:updated>
            <content:encoded><![CDATA[<h4>How to engineer repository instructions, Swift-specific rules, development tools, and automated verification so AI coding agents produce code that fits your architecture rather than merely compiling.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*w2JoZAIAqf-4UArjcKIhTA.png" /><figcaption>Harness Engineering for Swift: Making AI Coding Agents Follow Your Engineering Standards</figcaption></figure><p>An AI coding agent can generate a screen in SwiftUI, implement a repository, create a ViewModel, or integrate an API in seconds. The resulting code may pass compilation but be completely wrong for your project.</p><p>It might introduce a new networking abstraction when the application already has one. It might put business logic inside a View, ignore an existing dependency injection mechanism, use an outdated API, or introduce a third-party dependency for something the project already implements.</p><p>This is not necessarily an issue with the model intelligence. This can be attributed to the lack of context, constraints, and verification.</p><p>A coding agent cannot tell from the prompt why you need a certain architecture, which abstractions are required, which APIs are forbidden, and which style of coding you and your team prefer.</p><p>You can mention all that in every prompt, but this won’t be a scalable solution.</p><p><strong>Harness engineering addresses this problem by engineering the environment around the coding agent so that it consistently produces code aligned with the project’s engineering standards.</strong></p><blockquote>Mitchell Hashimoto discussed this approach in his February 2026 article, <em>My AI Adoption Journey</em>. His practical recommendation is straightforward: when an agent makes a recurring mistake, improve its instructions or build a tool that prevents the mistake from happening again.</blockquote><p>For Swift development, this opens up an interesting engineering discipline: building a coding harness that understands your repository, enforces your architecture, and verifies generated code.</p><h4>1. Give the agent persistent knowledge of the repository</h4><p>The first problem is context.</p><p>The coding agent can review the source files, but reviewing the files does not mean that the agent understands the engineering choices made while creating them.</p><p>Take, for example, an iOS app that uses:</p><ul><li>SwiftUI for the user interface.</li><li>MVVM architecture with a separate domain layer.</li><li>Repository pattern for accessing data.</li><li>Protocol-based dependency injection.</li><li>Swift Concurrency for asynchronous work.</li><li>SwiftData for local persistence.</li></ul><p>Without instructions, the coding agent may use another design pattern while building the feature. The solution is the file with instructions at the repository level, usually AGENTS.md or any other extension allowed by your coding agent.</p><p>It should explain how the project is expected to be developed.</p><p>For example:</p><pre># Swift Engineering Guidelines<br><br>## Architecture<br>- Follow the existing architectural boundaries.<br>- Views must not access repositories directly.<br>- Business logic belongs in domain use cases.<br>- ViewModels coordinate presentation state.<br>- Repositories own data access.<br>- Do not introduce new architectural patterns<br>  without explicit approval.<br>## Swift<br>- Follow Swift API Design Guidelines.<br>- Prefer value types where appropriate.<br>- Use protocols at meaningful abstraction boundaries.<br>- Avoid force unwrapping.<br>- Handle errors explicitly.<br>- Respect Sendable and actor isolation requirements.<br>- Never use Task.detached without justification.<br>## SwiftUI<br>- Keep View bodies focused on composition.<br>- Extract reusable components when appropriate.<br>- Avoid business logic inside View implementations.<br>- Follow existing navigation and state-management patterns.<br>## Dependencies<br>- Prefer existing project dependencies.<br>- Do not introduce third-party packages<br>  without approval.<br>## Before completing a task<br>- Build the affected target.<br>- Run relevant unit tests.<br>- Run SwiftLint and formatting checks.<br>- Verify architectural constraints.<br>- Report any checks that could not be executed.</pre><p>The key here is that the rules should be relevant.</p><p>Do not write a 500-line document with generic Swift guidelines. Document decisions specific to your repository.</p><p>For example, if your project uses a custom AppRouter, explicitly tell the agent to use it instead of introducing NavigationStack independently throughout the application.</p><p>Repository guidelines must also inform the agent on where they can find more comprehensive documentation, how to execute the build, and which files define the project’s architectural conventions.</p><h4>2. Turn engineering principles into enforceable rules</h4><p>Instruction sets the expectations, but does not ensure compliance.</p><p>The agent may read a rule that says the presentation modules must not be dependent on the data modules and still create this dependency.</p><p>This is where harness engineering needs to move beyond prompting.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4pQO9WIPNYu1cswbchHnNw.png" /></figure><p>Consider three categories of engineering standards.</p><p><strong>Coding standards: </strong>Naming, formatting, access control, error handling, documentation, and Swift conventions.</p><p>Tools such as SwiftLint and Apple’s swift-format can enforce many of these automatically.</p><p><strong>Architectural standards: </strong>These cover module dependencies, layering, dependency injection, separation of concerns, and allowed framework usage.</p><p>For example:</p><ul><li>SwiftUI presentation modules cannot import database implementation modules.</li><li>ViewModels cannot instantiate concrete repositories.</li><li>Networking implementations cannot be accessed directly from presentation code.</li><li>Domain models cannot depend on SwiftUI.</li></ul><p>Some constraints can be checked using SwiftLint custom rules, SwiftSyntax-based checks, or dedicated architecture tests.</p><p><strong>Design principles: </strong>Avoid unnecessary abstractions, keep types simple and focused, make good use of protocol abstractions and reuse existing components.</p><p>Whilst not everything can be enforced using static analysis, by providing concrete examples and enforcing rules that can be done using automation, we are trying to make it as deterministic as possible.</p><p>The objective is to move rules out of the agent’s memory and into the development environment.</p><h4>3. Give the agent tools to understand the Xcode project</h4><p>The coding agent requires more than mere access to the source code files.</p><p>It also requires knowledge of the project structure, build targets, build settings, dependencies, and test frameworks.</p><p>For an Xcode project, this means providing reliable access to:</p><ul><li>Project and workspace structure.</li><li>Build schemes and destinations.</li><li>Swift Package dependencies.</li><li>Build settings.</li><li>Test targets.</li><li>Compiler diagnostics.</li><li>Test results.</li></ul><p>Apple provides command-line tools such as xcodebuild, simctl, and xcresulttool for automating these workflows.</p><p>A useful harness should wrap commonly required operations into predictable commands.</p><p>For example:</p><pre>./scripts/agent/project-info.sh<br><br>./scripts/agent/build.sh \<br>    --scheme MyApp<br><br>./scripts/agent/test.sh \<br>    --scheme MyApp \<br>    --filter UserRepositoryTests<br><br>./scripts/agent/lint.sh<br><br>./scripts/agent/architecture-check.sh</pre><p>These would be project-specific scripts, rather than built-in Xcode commands.</p><p>This allows the agent to avoid constantly figuring out how your team builds and tests the application from scratch.</p><p>The project-info script can provide information about available schemes, targets, deployment settings, and dependencies. The build script can select the correct simulator destination and provide compiler diagnostics in a consistent manner.</p><p>This also avoids any errors arising from agents creating their own commands or choosing incorrect build configurations.</p><p>The tools should be documented in AGENTS.md so the agent can know when and how to run them.</p><h4>4. Make verification part of code generation</h4><p>This is arguably the most important stage in the harness.</p><p>The coding agent must not treat a job as completed simply because it has generated the required files. It should verify that the implementation satisfies the project’s requirements.</p><p>Here is how a verification pipeline can work for Swift development:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5RgWh2ig9VJdUt3EmpSaag.png" /><figcaption><strong>Generate → Format → Lint → Build → Test → Architecture Check → Review</strong></figcaption></figure><p>Every phase addresses a specific question.</p><ul><li>Formatting inspects code consistency.</li><li>Linting identifies prohibited patterns and coding-standard violations.</li><li>Building discovers compilation problems, wrong API calls, and type errors.</li><li>Unit tests validate business logic.</li><li>Integration tests verify interactions between components.</li><li>Architecture checks detect forbidden dependencies and structural violations.</li><li>Review checks whether the implementation actually matches the requested behavior.</li></ul><p>For example, a feature may pass a compilation test by having a ViewModel that directly accesses the database implementation. This will not have been picked up by the compiler, but should be picked up by a specific architecture test.</p><p>SwiftLint will also be able to pick up on issues we have set up to fail on but cannot tell us if something is overcomplicated or if the agent has duplicated an existing business rule.</p><p>Different verification mechanisms must cover different classes of mistakes. A good harness will make these easy to run and give the agent helpful feedback on why they have failed.</p><p>Apple provides testing support within Xcode, which allows for Swift Testing, XCTest, and XCUIAutomation for unit and integration tests and UI tests.</p><h4>5. Build a feedback loop from recurring mistakes</h4><p>What makes harness engineering valuable is the fact that it becomes better with experience.</p><p>Suppose an agent keeps on using try! in implementing repositories. The first reaction could be to tell the agent not to do it again. The next time, however, it would make the same mistake.</p><p>A better solution is to fix the harness.</p><ol><li>Add a specific error-handling rule to your repository instructions.</li><li>Create a lint rule/static check where possible.</li><li>Add a relevant test if the behavior affects application correctness.</li><li>Have your verification script run this.</li><li>Update your documentation to describe how the agent should act.</li></ol><p>This means that your next agent session will have guidance and a mechanism to detect this violation. This can be applied to architectural errors too.</p><p>If agents keep creating duplicate network clients, document the network entry point and add validation that stops unauthorized implementations.</p><p>If agents are using outdated APIs, add a quick reference guide to help them migrate and add validation if possible.</p><p>If agents are continually editing generated files, clearly mark the generated folders in the project and add protections to stop them editing.</p><p>This creates a continuous improvement loop:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bFjQUFsB-XY9kFbBa39EXw.png" /><figcaption><strong>Agent mistake → Identify root cause → Improve instructions or tools → Verify the fix → Reuse the improved harness</strong></figcaption></figure><p>The important distinction is that you’re not accumulating prompt instructions indefinitely. You’re converting recurring failures into permanent engineering controls.</p><h4>6. What a practical Swift coding harness looks like</h4><p>A repository can organize these components without depending on a particular coding agent.</p><p>For example:</p><pre>MyApplication/<br>│<br>├── AGENTS.md<br>│<br>├── .agent/<br>│   ├── instructions/<br>│   │   ├── swift.md<br>│   │   ├── swiftui.md<br>│   │   ├── architecture.md<br>│   │   └── testing.md<br>│   │<br>│   ├── skills/<br>│   │   ├── implement-feature/<br>│   │   ├── add-unit-tests/<br>│   │   └── review-swift-code/<br>│   │<br>│   └── references/<br>│       ├── architecture.md<br>│       └── dependency-rules.md<br>│<br>├── scripts/<br>│   └── agent/<br>│       ├── project-info.sh<br>│       ├── build.sh<br>│       ├── test.sh<br>│       ├── lint.sh<br>│       └── architecture-check.sh<br>│<br>├── Sources/<br>├── Tests/<br>└── MyApplication.xcodeproj</pre><p>This is an illustrative structure. The actual instructions and skills should be structured according to your chosen coding agent.</p><p>The responsibilities are deliberately separated:</p><ul><li>AGENTS.md establishes repository-wide expectations.</li><li>Instructions describe language, framework, and architecture rules.</li><li>Skills provide repeatable workflows for specific engineering tasks.</li><li>References explain decisions that require more context.</li><li>Scripts provide deterministic development and verification capabilities.</li><li>Tests enforce requirements independently of the agent.</li></ul><p>A feature implementation skill, for example, could instruct the agent to inspect existing implementations, identify the correct architectural layer, prepare a change plan, implement the feature, add tests, and execute the verification pipeline.</p><p>The workflow should also require the agent to report what changed, which checks passed, and which checks remain incomplete.</p><h4>7. Don’t confuse more instructions with a better harness</h4><p>There is a temptation to address every agent mistake by putting yet another paragraph into AGENTS.md.</p><p>Eventually, this method will work against you.</p><p>Instructive language will become repetitive, self-contradictory, and hard to manage. Even worse, the agent will be bombarded with context until it is difficult to understand the project-specific instructions.</p><p>Use the right mechanism for each problem.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nAttdElD-oU6BA-kq3BnIA.png" /></figure><p>Not every problem needs a custom tool. Not every coding standard needs another instruction file.</p><p>The goal is to make the correct engineering path easier for the agent to discover and follow than the incorrect one.</p><h4>The harness should become part of the engineering system</h4><p>A good Swift coding harness will change how teams approach AI-assisted development.</p><p>Decisions around your architecture will be captured in your repo, instead of developers having to explain them every time.</p><p>Rules will be captured and checked automatically, instead of agents having to remember them.</p><p>Code will be created, tested, and validated, instead of just being trusted because it looks correct.</p><p>If the agent is making the same mistake regularly, this will improve the environment for all future tasks.</p><blockquote>The real measure of harness engineering isn’t how detailed your instructions are or how many tools your agent can access. It’s whether the same class of mistake becomes progressively harder to introduce.</blockquote><p>That’s how an AI coding agent moves from generating plausible Swift code to contributing code that actually belongs in your application.</p><h4>Sources</h4><ul><li><a href="https://mitchellh.com/writing/my-ai-adoption-journey">My AI Adoption Journey — Mitchell Hashimoto</a>. The original discussion of improving agent instructions and verification tools.</li><li><a href="https://www.swift.org/documentation/api-design-guidelines/">Swift API Design Guidelines — Swift.org</a>. Official conventions for designing clear Swift APIs.</li><li><a href="https://developer.apple.com/documentation/xcode/xcode-command-line-tool-reference">Xcode Command-Line Tool Reference — Apple</a>. Xcode build, simulator, and result inspection tooling.</li><li><a href="https://developer.apple.com/documentation/xcode/testing">Testing in Xcode — Apple</a>. Swift Testing, XCTest, and UI testing guidance.</li><li><a href="https://github.com/swiftlang/swift-format/blob/main/Documentation/Configuration.md">swift-format Configuration — Swift</a>. Configurable Swift formatting and linting.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*Yvdmuoji5cr9bphy.png" /></figure><p>This story is published under the <a href="https://generativeai.pub/">Generative AI</a> publication. Connect with us on <a href="https://www.linkedin.com/company/generative-ai-publication">LinkedIn</a> and follow <a href="https://www.zeniteq.com/">Zeniteq</a> to stay in the loop with the latest AI stories. Let’s shape the future of AI together!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*YXgJ4QoZB0Wjqwul.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9aefbf1f6ede" width="1" height="1" alt=""><hr><p><a href="https://generativeai.pub/harness-engineering-ios-swift-ai-agents-9aefbf1f6ede">Harness Engineering for Swift: Making AI Coding Agents Follow Your Engineering Standards</a> was originally published in <a href="https://generativeai.pub">Generative AI</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Beyond Prompting: Harness Engineering for AI-Generated Maestro Tests]]></title>
            <link>https://generativeai.pub/harness-engineering-ai-agents-maestro-ui-automation-94f46eebbf96?source=rss----440100e76000---4</link>
            <guid isPermaLink="false">https://medium.com/p/94f46eebbf96</guid>
            <category><![CDATA[software-testing]]></category>
            <category><![CDATA[mobile-development]]></category>
            <category><![CDATA[harness-engineering]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[test-automation]]></category>
            <dc:creator><![CDATA[Ravi Rawal]]></dc:creator>
            <pubDate>Thu, 12 Nov 2026 06:47:53 GMT</pubDate>
            <atom:updated>2026-11-12T06:47:51.776Z</atom:updated>
            <content:encoded><![CDATA[<h4>How to equip coding agents with application context, UI inspection tools, repository knowledge, execution feedback, and verification loops to generate reliable mobile UI automation tests.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XWC6zT8UokWQpgP0LXA00g.png" /></figure><p>Whilst an AI coding agent can produce a Maestro YAML flow in seconds, this does not necessarily mean that it will be a good test.</p><p>It may guess at accessibility identifiers, get confused with the navigation of the application, interact with the wrong element or just assert that the screen is displayed without checking if the business process has been successful. The YAML may be syntactically correct but offer little testing value.</p><p>The typical solution to this would be to improve the prompt given to the agent. Provide more instructions, a second screenshot, explain what the flow should do and ask the agent to try again.</p><p>That approach has a ceiling.</p><p>The issue isn’t necessarily the model&#39;s ability to create YAML; the agent simply does not have the environment and feedback to understand how the application works, investigate, inspect its behavior, and validate its outputs.</p><p>This is where harness engineering comes into play.</p><blockquote>Mitchell Hashimoto introduced the term <em>harness engineering</em> in his February 5, 2026 essay, <a href="https://mitchellh.com/writing/my-ai-adoption-journey">My AI Adoption Journey</a>. His underlying idea is particularly useful for software engineering: when an agent repeatedly makes a mistake, don’t just correct that output. Engineer a mechanism that prevents the same mistake from recurring.</blockquote><p>An elegant way to represent this would be: <strong>Agent = Model + Harness</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0TvQKLNoTccxKkPdNtDRyA.png" /></figure><p>The model gives us reasoning and flow generation ability. The harness gives us all that makes reasoning and flow generation work effectively in a specific engineering context.</p><p>When it comes to automating mobile UIs, this would mean creating an engineering context that would allow an agent to analyze an app, discover its UI, generate Maestro flows, execute them on a real build, analyze any failures, and improve its design based on hard facts.</p><p>The goal isn’t to make an agent better at writing YAML. It’s to make the agent better at engineering tests.</p><h4>First, understand what the agent needs to do</h4><p>Consider a requirement:</p><blockquote>Verify that a user can sign in, search for a product, add it to the basket, and see the updated basket total.</blockquote><p>A basic AI workflow could be:</p><ol><li>Give the requirement to an LLM.</li><li>Ask it to create a Maestro flow.</li><li>Save the YAML file.</li><li>Run the test.</li></ol><p>This assumes that the model understands the application structure, test data, correct accessibility identifiers, and expected behaviour of every screen.</p><p>However, this is rarely the case in an existing application.</p><p>A capable test-generation agent needs to perform several distinct activities:</p><ul><li>Understand the requirement and identify the expected behavior.</li><li>Explore the repository to discover existing test conventions.</li><li>Inspect the application to understand the currently rendered UI.</li><li>Identify appropriate selectors and interaction sequences.</li><li>Generate a Maestro Flow following repository conventions.</li><li>Execute the Flow against the actual application.</li><li>Inspect screenshots, UI hierarchy, and execution logs.</li><li>Correct failures without weakening the original test intent.</li></ul><p>These activities require more than a system prompt. They require a coordinated set of guides, tools, data sources, sensors, and execution controls.</p><h4>1. Guides: Teach the agent how to work in the repository</h4><p>The first component of the harness is guidance.</p><p>You should not have to guess how to conform to the guidelines of the repository each time you create a test.</p><p>The root folder should have an AGENTS.md file which explains the structure of the repository, testing guidelines, limitations, and available tools.</p><p>For example:</p><pre># AGENTS.md<br><br>## UI Automation<br>- Use Maestro for mobile UI automation.<br>- All new flows belong under .maestro/flows/.<br>- Reuse existing subflows where appropriate.<br>- Follow the existing naming and tagging conventions.<br><br>## Before Writing Tests<br>- Read the relevant application feature implementation.<br>- Inspect existing Maestro flows.<br>- Inspect the running application before selecting elements.<br>- Verify selectors using the actual UI hierarchy.<br>- Identify required test data and application state.<br><br>## Selector Strategy<br>- Prefer stable accessibility identifiers.<br>- Use visible text when it represents a stable<br>  user-facing contract.<br>- Avoid coordinate-based selectors unless<br>  no reliable semantic selector exists.<br>- Never invent identifiers.<br><br>## Test Quality<br>- Assert meaningful user-visible outcomes.<br>- Do not replace assertions with weaker checks<br>  merely to make a flow pass.<br>- Do not add arbitrary delays to compensate<br>  for synchronization problems.<br>- Keep flows focused on one scenario.<br><br>## Validation<br>- Execute every newly generated flow.<br>- Inspect failure artifacts before modifying<br>  a failing test.<br>- Report tests that could not be executed.</pre><p>It’s a starting point, not a full harness.</p><p>The directions set up expectations, but they can’t provide the agent with anything more than what is available in the repository and the application.</p><p>For example, telling the agent to inspect accessibility identifiers is useful only when it has an actual mechanism to retrieve the UI hierarchy.</p><p>That’s why directions and tools must be created at the same time.</p><p>And I wouldn’t try to include all test conventions into one giant direction file. Keep the repository-level rules small and use a separate skill for Maestro authoring.</p><p>A possible structure is:</p><pre>project/<br>│<br>├── AGENTS.md<br>│<br>├── .agents/<br>│   └── skills/<br>│       └── maestro-test-authoring/<br>│           └── SKILL.md<br>│<br>├── .maestro/<br>│   ├── config.yaml<br>│   ├── flows/<br>│   └── subflows/<br>│<br>├── tools/<br>│   ├── build-app<br>│   ├── install-app<br>│   ├── inspect-screen<br>│   ├── run-maestro<br>│   └── collect-diagnostics<br>│<br>└── docs/<br>    ├── app-architecture.md<br>    └── test-data.md</pre><p>This skill contains the actual steps required to investigate a requirement, explore the screen, select elements, create flows and validate.</p><p>The agent will understand the general rules in AGENTS.md and follow these detailed steps when undertaking a Maestro authoring task.</p><p>This approach also makes the harness reusable across different coding agents.</p><h4>2. Context pipelines: Give the agent the right application knowledge</h4><p>Test generation agents require application context from more than one source.<br>A screenshot, source code and existing test files are not enough.</p><p>The harness should assemble relevant information from:</p><p><strong>Application source code: </strong>The agent must be able to analyze the implementations of screens, navigation paths, ViewModels, UI state models, and accessibility ids.</p><p>This helps it understand the intended application structure and how different screens are connected.</p><p><strong>Existing Maestro flows: </strong>They show real examples of repository conventions, reusable subflows, selectors, and assertions.<br>The existing automation becomes very helpful since it shows decisions made by the team.</p><p><strong>Runtime application information: </strong>The agent must be able to analyze the application when it runs on an emulator, simulator, or device.<br>At that point, it becomes important to be able to analyze UI hierarchy and take screenshots.</p><p><strong>Requirements and test specifications: </strong>The agent should receive the expected preconditions, user actions, and postconditions rather than being asked to infer the complete test from a loosely worded feature description.</p><p><strong>Test data and environment information: </strong>The agent needs to understand which test accounts, backend fixtures, API environments, and configuration parameters are available.</p><p>None of the above sources needs to be fed into the context of the model at one time.</p><p>Proceed with progressive discovery. Begin with the feature and test structure, followed by retrieving the information on how the screen is implemented and navigated. It is important that the quality of the assembled context takes precedence over its quantity.</p><h4>3. Sensors: Let the agent observe the actual application</h4><p>This is arguably the most important part of a Maestro-based agent harness.</p><p>An agent generating UI automation must be able to observe what actually happens on the device. Otherwise, it is writing tests against its assumptions about the application.</p><p>Maestro already provides useful inspection capabilities.</p><p>The maestro hierarchy command prints the current application&#39;s view hierarchy. Maestro Studio also provides visual element selection and an interactive command runner.</p><p>These capabilities can become part of the agent’s toolset.</p><p>For example, expose a small set of tools through an MCP server or equivalent coding-agent integration:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-90W86KG92Ktbv8Pgb7NNQ.png" /></figure><p>These are proposed harness tools, not a claim that Maestro ships all of them as native MCP endpoints. They can be implemented as thin wrappers around Maestro CLI, ADB, simulator tooling, and repository scripts.</p><p>A useful tool response should contain structured information rather than only returning a large unfiltered terminal output.</p><p>For example, inspect_screen could return:</p><pre>{<br>  &quot;screen&quot;: &quot;Login&quot;,<br>  &quot;platform&quot;: &quot;Android&quot;,<br>  &quot;elements&quot;: [<br>    {<br>      &quot;text&quot;: &quot;Email&quot;,<br>      &quot;id&quot;: &quot;login_email&quot;,<br>      &quot;type&quot;: &quot;EditText&quot;<br>    },<br>    {<br>      &quot;text&quot;: &quot;Password&quot;,<br>      &quot;id&quot;: &quot;login_password&quot;,<br>      &quot;type&quot;: &quot;EditText&quot;<br>    },<br>    {<br>      &quot;text&quot;: &quot;Sign in&quot;,<br>      &quot;id&quot;: &quot;login_button&quot;,<br>      &quot;type&quot;: &quot;Button&quot;<br>    }<br>  ]<br>}</pre><p>An illustrative response format for your custom inspection tool.</p><p>The agent can now identify actual elements instead of inventing selectors. It is important to note that the screenshot and accessibility tree are different.</p><p>The screenshot gives you information about what the page looks like. The accessibility hierarchy provides machine-readable information about interactive elements.</p><p>Both are helpful. The screenshot lets the agent know how the page is laid out, and the accessibility tree helps create reliable Maestro selectors.</p><p><a href="https://docs.maestro.dev/reference/selectors/core-selectors">Maestro’s selector</a> system supports text and accessibility identifiers, among other selector types.</p><p>For native <a href="https://docs.maestro.dev/get-started/supported-platform/android/jetpack">Android Compose applications</a>, test tags can be exposed as resource IDs using<br>Modifier.semantics { testTagsAsResourceId = true }. <br>On <a href="https://docs.maestro.dev/get-started/supported-platform/ios/swiftui">SwiftUI</a>, <br>.accessibilityIdentifier() provides a stable identifier.</p><p>The harness should also detect when an element is not exposed through accessibility metadata. That is an application observability gap, not an invitation for the agent to guess coordinates.</p><h4>4. Tools: Give the agent the ability to act and verify</h4><p>Observation alone doesn’t complete the workflow. The agent needs tools to build, install, launch, interact with, and test the application.</p><p>A practical toolset should expose a small number of well-defined operations:</p><p><strong>Build and device operations</strong></p><ul><li>Build the required application variant.</li><li>Install the generated APK or application bundle.</li><li>Launch or restart the application.</li><li>Reset application state.</li><li>Select or identify the target device.</li></ul><p><strong>Inspection operations</strong></p><ul><li>Capture screenshots.</li><li>Retrieve the current UI hierarchy.</li><li>Read application logs.</li><li>Inspect the device and application state.</li></ul><p><strong>Automation operations</strong></p><ul><li>Execute a specific Maestro flow.</li><li>Execute a filtered test suite.</li><li>Retrieve execution artifacts.</li><li>Generate a structured test report.</li></ul><p>The operations should be exposed through MCP, shell wrappers or native tools supported by the coding agent. The key thing here is that you are exposing functionality, instead of providing the agent an unrestricted environment.</p><p>For example, a run_maestro_flow tool should accept a flow path, target device, and approved parameters. It should return the execution status and artifact locations.</p><p>You shouldn’t need to build complex shell commands each time. Or try to figure out how to call it.</p><p>Limit what the agent can do and keep the permissions bounded. For example, if they are writing UI tests, they should generally only be able to read the application code, create/modify Maestro flows, and run approved test commands.</p><p>They shouldn’t be able to change how the application behaves in production without being aware, turn off existing tests, or change the expected results to make the outcome green. Secrets should be injected through the execution environment, not committed into generated YAML.</p><h4>5. Orchestration: Build a closed-loop test-generation workflow</h4><p>The previous components become useful when they operate as one workflow.</p><p>A test-generation agent should follow a repeatable sequence:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_kmw3vVyxIEFpkM9SYH-lA.png" /><figcaption><strong>Understand → Explore → Plan → Generate → Execute → Diagnose → Refine</strong></figcaption></figure><p>Consider a login test.</p><p>The task description is:</p><blockquote>Generate a Maestro test that verifies successful login with valid credentials.</blockquote><p>The harness should guide the agent through the following process.</p><p><strong>Step 1: Understand the requirement</strong></p><p>Find out the starting state of the application, a valid test account, the destination screen after authentication, any relevant constraints, etc.</p><p><strong>Step 2: Explore the Application</strong></p><p>Explore the source code for the login flow and already present flows.<br>Run the app and obtain its current UI hierarchy.<br>Find out the email ID field, password field, login button, and destination screen.</p><p><strong>Step 3: Create the Test Plan</strong></p><p>Find out what actions need to be performed and what assertions need to be made in order to prove the outcome.<br>The plan must differentiate between the action and the outcome. Pressing on Sign in is an action, while landing on the authenticated home screen is the outcome.</p><p><strong>Step 4: Create the Flow</strong></p><p>Create the Maestro YAML using the discovered identifiers.</p><p>For example:</p><pre>appId: com.example.shop<br>name: Login with valid credentials<br><br>tags:<br>  - smoke<br>  - authentication<br>---<br>- launchApp:<br>    clearState: true<br>- tapOn:<br>    id: &quot;login_email&quot;<br>- inputText: ${USERNAME}<br>- tapOn:<br>    id: &quot;login_password&quot;<br>- inputText: ${PASSWORD}<br>- tapOn:<br>    id: &quot;login_button&quot;<br>- assertVisible:<br>    id: &quot;home_screen&quot;</pre><p>These identifiers serve only as examples. The real agent has to determine them based on the accessibility hierarchy of the application or repository-supported UI contract.</p><p>Credentials should be supplied externally:</p><pre>maestro test \<br>  -e USERNAME=&quot;$TEST_USERNAME&quot; \<br>  -e PASSWORD=&quot;$TEST_PASSWORD&quot; \<br>  .maestro/flows/auth/login.yaml</pre><p>Maestro allows external parameters through the CLI -e option. It prevents hardcoding environment-specific credentials in the Flow. For more information, see <a href="https://docs.maestro.dev/maestro-flows/flow-control-and-logic/parameters-and-constants">Parameters and Constants</a>.</p><p><strong>Step 5: Execute and inspect</strong></p><p>The agent executes the generated Flow against the target application.</p><p>A successful YAML parse is not sufficient. The actual interaction must run, and the expected authenticated state must appear.</p><p><strong>Step 6: Identify the reason for failure</strong></p><p>Suppose assertVisible fails.</p><p>The agent should look at the screenshot, the hierarchy, and the application logs rather than changing the selector or the interaction itself.</p><p>The failure could indicate:</p><ul><li>Incorrect selector.</li><li>Unexpected state of the application.</li><li>Failed authentication attempt.</li><li>Backend issue.</li><li>Application bug.</li></ul><p>Different situations call for different actions.</p><p>An agent that simply changes the assertion or adds a delay until the test passes is not performing meaningful verification.</p><p>It is optimizing for a green result.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*f-q16gjT2ilhvE13iUph1g.png" /></figure><h4>6. Sensors and verification: Make correctness measurable</h4><p>A major mistake in AI-generated test automation is treating successful execution as proof of test quality.</p><p>The Flow can pass without checking for the critical behavior.</p><p>For example:</p><pre>- tapOn: &quot;Place order&quot;<br>- assertVisible: &quot;Order&quot;</pre><p>This test assertion can pass since there was a label for the order information already visible on the screen.</p><p>A better test assertion would check for a meaningful postcondition, like an order confirmation ID or confirmation status, if the application provides this feature.</p><p>The harness should thus verify the generated tests on two levels.</p><p><strong>Structural validation</strong></p><p>Check whether the generated Flow follows the repository’s conventions.</p><p>Useful checks include:</p><ul><li>Valid YAML structure.</li><li>Correct application identifier.</li><li>Approved directory and naming convention.</li><li>No hardcoded credentials.</li><li>No unapproved coordinate selectors.</li><li>Meaningful assertions for the requested behavior.</li><li>Reuse of existing subflows where appropriate.</li></ul><p>These can be implemented as deterministic scripts or custom validators.</p><p><strong>Runtime validation</strong></p><p>Execute the Flow using the actual Maestro CLI and collect the resulting evidence.</p><p>For example:</p><pre>maestro test \<br>  --format junit \<br>  --output build/maestro/report.xml \<br>  --test-output-dir build/maestro/artifacts \<br>  .maestro/flows/auth/login.yaml</pre><p>Maestro supports JUnit reports, screenshots, recordings, command execution data, and other debugging artifacts. These can be consumed by the agent during its refinement loop.</p><p>Maestro supports JUnit reports, screenshots, recordings, command execution data, and other debugging artifacts. These can be consumed by the agent during its refinement loop.</p><p>See <a href="https://docs.maestro.dev/maestro-flows/workspace-management/test-reports-and-artifacts">Maestro Test Reports and Artifacts</a>.</p><p>I would also recommend adding a quality check that poses the following hard question:</p><blockquote><em>Would the test fail if the expected application behavior were broken?</em></blockquote><p>For critical scenarios, answer this question based on an intentionally wrong application state or a negative test fixture.</p><p>Just because a test reaches a screen does not mean that it is validating the expected business behavior.</p><h4>7. Turn agent mistakes into permanent harness improvements</h4><p>This is where harness engineering moves beyond an individual test-generation workflow.</p><p>Consider several recurring failures:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rX3sXu49Fb1p_mvwpm08gQ.png" /></figure><p>A repeated mistake should lead to a change in the instructions, tool capabilities, validation scripts, repository documentation, or orchestration workflow.</p><p>For example, telling an agent not to use coordinates might reduce the problem temporarily. A static validation rule that rejects unapproved point selectors provides a stronger and repeatable control.</p><p>Similarly, telling an agent to inspect the hierarchy is useful. Providing a dedicated tool that retrieves and filters the actual hierarchy makes that instruction actionable.</p><p>This is the engineering feedback loop.</p><h4>8. Evaluate the harness, not just the generated tests</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wjUdy0rmp-s3tvQbVS8sEQ.png" /></figure><p>A good way to evaluate your agent is to look at more than just the number of YAML files created.</p><p>Define a set of authoring tasks that your agent will complete:</p><ul><li>Create a login flow</li><li>Add to an existing checkout flow</li><li>Create a negative auth scenario</li><li>Deal with a platform specific selector</li><li>Debug a failing assertion</li><li>Reuse a subflow without duplicating interactions</li></ul><p>Test these tasks against known application builds and test data.</p><p>Evaluate whether the agent:</p><ol><li>Understand what behaviour is expected</li><li>Uses actual UI identifiers rather than guesses</li><li>Create valid Maestro flows</li><li>Successfully run the tests created</li><li>Detects failures when something is broken intentionally</li><li>Respect any existing test standards and assertions</li><li>Create a clear summary showing evidence of execution</li></ol><blockquote>Look at how well the agent performed on the first attempt. <br>How many times did it need to fix itself? <br>How many unnecessary changes were made to the application? <br>Did it use fragile selectors? <br>How many manual changes were made?</blockquote><p>This helps you understand if your model, instructions, inspection tool or validation are actually improving the system.</p><p>A better model may improve the reasoning, but if your inspection tool is not giving full information about the UI or your validation accepts meaningless assertions.</p><h4>The agent is only as capable as the environment it can observe</h4><p>Maestro has made UI automation accessible through Flows, which capture the interactions and assertions in human-readable YAML. This readability also makes it fairly simple for an AI coding agent to author test files.</p><p>The much harder question is determining if the test files created by the agent are capturing real application behavior.</p><p>This will require an engineering framework around the modeling approach: repository guidance, application context, UI interrogation, controlled tooling, execution feedback, and deterministic validation.</p><p>I would approach this framework as an ever-evolving component of the test automation platform and not simply as a set of prompts.</p><p>Every time the agent invents a selector, misunderstands or misinterprets a screen, dilutes an assertion, or fails to detect a runtime error, there is an opportunity to improve the system that surrounds it.</p><blockquote>The goal is not to generate more Maestro tests with AI. It is to build an agent that can engineer, execute, and verify meaningful UI tests with progressively less intervention from engineers.</blockquote><h4>Sources</h4><ul><li><a href="https://mitchellh.com/writing/my-ai-adoption-journey">My AI Adoption Journey (February 5, 2026), Mitchell Hashimoto</a></li><li><a href="https://www.thoughtworks.com/insights/blog/architecture/engineering-the-harness-a-practical-pattern-for-reliable-coding-agents">Engineering the Harness: A Practical Pattern for Reliable Coding Agents, Thoughtworks</a></li><li><a href="https://docs.maestro.dev/maestro-flows">Maestro Flows Overview</a></li><li><a href="https://docs.maestro.dev/reference/selectors/core-selectors">Core Selectors</a></li><li><a href="https://docs.maestro.dev/maestro-flows/flow-control-and-logic/parameters-and-constants">Parameters and Constants</a></li><li><a href="https://docs.maestro.dev/maestro-flows/workspace-management/test-reports-and-artifacts">Test Reports and Artifacts</a></li><li><a href="https://docs.maestro.dev/get-started/supported-platform/android/jetpack">Jetpack Compose</a></li><li><a href="https://docs.maestro.dev/get-started/supported-platform/ios/swiftui">SwiftUI</a></li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*8O175MRuJQBpoVw5.png" /></figure><p>This story is published under the <a href="https://generativeai.pub/">Generative AI</a> publication. Connect with us on <a href="https://www.linkedin.com/company/generative-ai-publication">LinkedIn</a> and follow <a href="https://www.zeniteq.com/">Zeniteq</a> to stay in the loop with the latest AI stories. Let’s shape the future of AI together!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*C35DsN4rTPOIEGcb.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=94f46eebbf96" width="1" height="1" alt=""><hr><p><a href="https://generativeai.pub/harness-engineering-ai-agents-maestro-ui-automation-94f46eebbf96">Beyond Prompting: Harness Engineering for AI-Generated Maestro Tests</a> was originally published in <a href="https://generativeai.pub">Generative AI</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[I Gave an AI Bot My WooCommerce Store. Here’s What It Got Right and Wrong]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://generativeai.pub/i-gave-an-ai-bot-my-woocommerce-store-heres-what-it-got-right-and-wrong-647a5053b819?source=rss----440100e76000---4"><img src="https://cdn-images-1.medium.com/max/2600/1*_6g-5AUXsa6piUpMYMbDtg.png" width="2760"></a></p><p class="medium-feed-snippet">The bot is the easy part. The store data is where it goes wrong.</p><p class="medium-feed-link"><a href="https://generativeai.pub/i-gave-an-ai-bot-my-woocommerce-store-heres-what-it-got-right-and-wrong-647a5053b819?source=rss----440100e76000---4">Continue reading on Generative AI »</a></p></div>]]></description>
            <link>https://generativeai.pub/i-gave-an-ai-bot-my-woocommerce-store-heres-what-it-got-right-and-wrong-647a5053b819?source=rss----440100e76000---4</link>
            <guid isPermaLink="false">https://medium.com/p/647a5053b819</guid>
            <category><![CDATA[woocommerce]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[ecommerce]]></category>
            <category><![CDATA[openai]]></category>
            <dc:creator><![CDATA[Abhisake Jain]]></dc:creator>
            <pubDate>Thu, 12 Nov 2026 06:36:02 GMT</pubDate>
            <atom:updated>2026-11-12T06:36:01.660Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Does AI Make You Dumber? What the Studies Actually Measured]]></title>
            <link>https://generativeai.pub/does-ai-make-you-dumber-what-the-studies-actually-measured-46a31d864bac?source=rss----440100e76000---4</link>
            <guid isPermaLink="false">https://medium.com/p/46a31d864bac</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[learning]]></category>
            <category><![CDATA[psychology]]></category>
            <category><![CDATA[education]]></category>
            <category><![CDATA[chatgpt]]></category>
            <dc:creator><![CDATA[Zoost]]></dc:creator>
            <pubDate>Thu, 12 Nov 2026 06:30:55 GMT</pubDate>
            <atom:updated>2026-11-12T06:30:54.579Z</atom:updated>
            <content:encoded><![CDATA[<h4>The research on AI and learning says less about the tool than about the order you use it in. Here’s what that means if you learn from AI summaries.</h4><figure><img alt="person writing notes by hand in a notebook next to a laptop" src="https://cdn-images-1.medium.com/max/1024/1*G1JtQeESbAypVvVw0flxhg.jpeg" /><figcaption>Photo by Yan Krukau on Pexels</figcaption></figure><p>Does AI make you dumber? The honest answer from the research so far is no, not in general. But one specific way of using it does make you worse at the task once the AI is gone: asking it for the finished answer before you’ve done any thinking of your own.</p><p>Several randomized experiments now point the same way, and the gap between people who use AI well and badly is often bigger than the gap between AI users and non-users.</p><p>I’ve long suspected that people keep much less of what they hear in long podcasts than they think they do. AI summaries promise a shortcut around that problem. So I wanted to know what the evidence says about learning from AI, and where exactly the cost comes from.</p><h4>The study everyone quotes</h4><p>The one that made the headlines came from the MIT Media Lab in 2025. Nataliya Kosmyna and colleagues had 54 people write essays with ChatGPT, with a search engine, or with no tools, while EEG recorded their brain activity.</p><p>The ChatGPT group showed the weakest neural connectivity. And when asked to quote a sentence from an essay they had written minutes earlier, <a href="https://arxiv.org/abs/2506.08872">15 of the 18 ChatGPT users couldn’t do it accurately</a>. In each of the other groups, only 2 of 18 had that trouble.</p><p>That last detail is striking, but the study is small, it’s a preprint, and it tested one task: writing an essay you didn’t really have to write. It’s a warning sign, not a verdict. The more convincing evidence came later, from larger trials.</p><h4>What the bigger experiments found</h4><p>In a field experiment in a Turkish high school, Hamsa Bastani and colleagues gave nearly 1,000 students access to GPT-4 during math practice. One group got a plain ChatGPT-style interface. Another got a version prompted to act as a tutor and give hints rather than answers.</p><p>During practice, the plain version improved scores by 48% and the tutor by 127%. Then came an exam without AI. Students who had practised with the plain version <a href="https://doi.org/10.1073/pnas.2422633122">scored 17% lower than students who had never had AI</a>. The tutor group showed no such drop.</p><p>A 2026 paper presented at the Conference on Language Modeling took the same question into a lab, across 1,222 people. Grace Liu, Brian Christian, and colleagues gave participants fraction problems or SAT reading questions, with GPT-5 in a sidebar for some of them, then took the AI away without warning.</p><p>In the first experiment, people who’d had AI solved <a href="https://arxiv.org/abs/2604.04721">57% of the final problems, compared with 74% for people who never had it</a>, and they skipped problems almost twice as often. The AI session lasted only 10 to 15 minutes.</p><p>The detail that matters most is in the second experiment. When the researchers split AI users by how they had used it, the drop was concentrated among the 61% who used it mainly to get answers. People who used it for hints or clarifications did about as well as people with no AI at all.</p><p>Coding shows the same split. In a randomized study by Anthropic researchers Judy Hanwen Shen and Alex Tamkin, 52 developers learned a Python library they hadn’t used before, with or without an AI assistant.</p><p>The AI group <a href="https://arxiv.org/abs/2601.20245">scored 17% lower on a quiz</a> about the library and wasn’t significantly faster. But the AI users weren’t all alike. Those who asked conceptual questions, or asked for explanations alongside generated code, scored far higher than those who handed the task over.</p><h4>What about summaries?</h4><p>Most of those studies are about solving problems. If you use AI the way I’m interested in, to digest long content, the most relevant paper is by Shiri Melumad and Jin Ho Yun at the University of Pennsylvania.</p><p>Across seven experiments with more than 10,000 participants, people learned about a topic, such as how to grow a vegetable garden, either from an LLM or from ordinary Google results, and then wrote advice for a friend.</p><p>The LLM learners felt they’d learned less, put in less effort, and <a href="https://doi.org/10.1093/pnasnexus/pgaf316">wrote advice that was shorter, less factual, and more generic</a>. Independent readers, who didn’t know which tool had been used, found it less helpful.</p><p>This held even when both groups saw the same set of facts. And when the researchers gave people a version that showed source links next to its summary, it didn’t help, because once people had the summary, <a href="https://theconversation.com/learning-with-ai-falls-short-compared-to-old-fashioned-web-search-269760">they weren’t motivated to dig into the sources</a>. The summary felt like the end of the job.</p><p>Retention follows the same line. In a 2025 trial with 120 business students, André Barcaui had half learn a topic with ChatGPT and half with traditional methods, then gave everyone a surprise test 45 days later. The ChatGPT group <a href="https://doi.org/10.1016/j.ssaho.2025.102287">scored 57.5% against 68.5%</a>. They had also studied for less time, but the gap remained after accounting for that.</p><h4>The evidence on the other side</h4><p>It would be easy to stop there and conclude that AI is bad for learning. The research doesn’t support that either.</p><p>At Harvard, Gregory Kestin and colleagues ran a randomized trial with 194 physics students. An AI tutor, built to guide students through problems step by step, produced <a href="https://doi.org/10.1038/s41598-025-97652-6">learning gains more than double</a> those of an in-class active-learning lesson, in less time.</p><p>And a 2026 experiment in Frontiers in Psychology, with 659 participants in its main analysis, tested the order of use directly. One group wrote down their own position on an essay topic first and only then questioned the AI. Another group adopted what the AI gave them. Then everyone wrote a second essay with no AI.</p><p>The direct adopters <a href="https://doi.org/10.3389/fpsyg.2026.1910545">reasoned worse than people who had never used AI</a>. The think-first group did not fall below that baseline. The effect was small, but in the authors’ words, “What separated the arms was not access to the model but the order in which the interaction required the user to produce something.”</p><h4>The pattern underneath</h4><p>Put these side by side and a fairly consistent picture appears. The cost shows up when AI does the part of the work that produces learning: retrieving, struggling, connecting, and putting things in your own words. It largely disappears when the AI is set up, by its designers or by you, to make you do that part.</p><p>That fits older findings that have nothing to do with AI. In a classic 2006 study, Henry Roediger and Jeffrey Karpicke showed that <a href="https://doi.org/10.1111/j.1467-9280.2006.01693.x">trying to recall material beat rereading it</a> on tests days later, even though rereading felt more productive. A polished AI summary is the ultimate rereading. It feels like understanding and asks nothing of you.</p><p>A Microsoft Research survey of 319 knowledge workers adds a self-reported angle. The more <a href="https://doi.org/10.1145/3706598.3713778">confidence people had in generative AI</a>, the less critical thinking they reported putting into tasks. The more confidence they had in themselves, the more they reported.</p><h4>How to use AI summaries without paying for it</h4><p>None of this means giving up summaries. It means changing what you ask for and when.</p><p>Decide whether you’re looking something up or learning it. For a quick fact, a summary is the right tool. Melumad’s own advice is that the cost appears when the goal is deeper knowledge you’ll use later.</p><p>Think first, then ask. Before you open a summary of an episode or article you’ve consumed, write two sentences on what you think the main point was. Then compare. This is the think-first order from the Frontiers study, and it takes a minute.</p><p>Ask for questions, not answers. The tutor-style setups in the Bastani and Liu studies worked because they held the answer back. You can do that yourself:</p><pre>I just listened to a podcast episode on [topic]. Don&#39;t summarize it.<br>Ask me five questions, one at a time, about its main ideas.<br>After each of my answers, tell me what I got right, what I missed,<br>and point me to the part of the transcript I should reread.</pre><p>Use the summary as a map, not the destination. Let it tell you which 10 minutes of a two-hour episode are worth your attention, then go and listen to or read those 10 minutes yourself.</p><p>Close it and recall. After reading a summary, close the tab and write down the three points you’d act on. If you can’t, you’ve read it, but you haven’t kept it.</p><h4>Where the evidence runs out</h4><p>Most of these studies are short. Sessions lasted minutes or a few hours, and most tests came right afterwards. Only Barcaui’s waited weeks. Nobody yet knows what years of daily use do, in either direction.</p><p>The tasks are also narrow: fractions, SAT passages, essays, one coding library, gardening advice. The MIT study is small and not yet peer-reviewed. The Microsoft survey is self-reported and correlational. And participants in lab studies use AI the way an experiment allows, not the way they’d choose to.</p><p>What does hold across very different studies is the narrow claim. AI doesn’t make you dumber by being there. Letting it do your thinking before you’ve tried makes you worse at thinking without it, and that’s something you control every time you open a chat.</p><h4>One thing to try</h4><p>Next time you’re about to ask for a summary of something you want to remember, stop and write two sentences first. Then ask the AI what you missed.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*JQ-0UOMy7zEnmCzJ.png" /></figure><p>This story is published under the <a href="https://generativeai.pub/">Generative AI</a> publication. Connect with us on <a href="https://www.linkedin.com/company/generative-ai-publication">LinkedIn</a> and follow <a href="https://www.zeniteq.com/">Zeniteq</a> to stay in the loop with the latest AI stories. Let’s shape the future of AI together!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*LFWGS4RFVzvFQ8dq.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=46a31d864bac" width="1" height="1" alt=""><hr><p><a href="https://generativeai.pub/does-ai-make-you-dumber-what-the-studies-actually-measured-46a31d864bac">Does AI Make You Dumber? What the Studies Actually Measured</a> was originally published in <a href="https://generativeai.pub">Generative AI</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Jensen Huang Admitted an Affair, and Nvidia Opened a Spy Inquiry, Exposing How Much of AI Runs…]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://generativeai.pub/jensen-huang-admitted-an-affair-and-nvidia-opened-a-spy-inquiry-exposing-how-much-of-ai-runs-e91df158643a?source=rss----440100e76000---4"><img src="https://cdn-images-1.medium.com/max/1024/1*qcN8H6ValRg4OJl2tdqytg.png" width="1024"></a></p><p class="medium-feed-snippet">Nvidia&#x2019;s board says its founder was the target of a foreign intelligence effort and sees no sign that secrets were compromised. Congress&#x2026;</p><p class="medium-feed-link"><a href="https://generativeai.pub/jensen-huang-admitted-an-affair-and-nvidia-opened-a-spy-inquiry-exposing-how-much-of-ai-runs-e91df158643a?source=rss----440100e76000---4">Continue reading on Generative AI »</a></p></div>]]></description>
            <link>https://generativeai.pub/jensen-huang-admitted-an-affair-and-nvidia-opened-a-spy-inquiry-exposing-how-much-of-ai-runs-e91df158643a?source=rss----440100e76000---4</link>
            <guid isPermaLink="false">https://medium.com/p/e91df158643a</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[news]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[business]]></category>
            <dc:creator><![CDATA[Aya Mahmoud]]></dc:creator>
            <pubDate>Thu, 12 Nov 2026 06:20:40 GMT</pubDate>
            <atom:updated>2026-11-12T06:20:38.178Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[How to Summarize a Podcast Transcript With ChatGPT Without Losing the Middle]]></title>
            <link>https://generativeai.pub/how-to-summarize-a-podcast-transcript-with-chatgpt-without-losing-the-middle-5ca0685bbe67?source=rss----440100e76000---4</link>
            <guid isPermaLink="false">https://medium.com/p/5ca0685bbe67</guid>
            <category><![CDATA[chatgpt]]></category>
            <category><![CDATA[podcast]]></category>
            <category><![CDATA[prompt-engineering]]></category>
            <category><![CDATA[productivity]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[Zoost]]></dc:creator>
            <pubDate>Thu, 12 Nov 2026 06:17:22 GMT</pubDate>
            <atom:updated>2026-11-12T06:17:21.053Z</atom:updated>
            <content:encoded><![CDATA[<h4>Long transcripts fail in two predictable ways. Here’s a four-prompt workflow that works around both, and a five-minute check before you trust the result.</h4><figure><img alt="podcast microphone and a pair of headphones on a desk" src="https://cdn-images-1.medium.com/max/1024/1*_CMDVTQDyYEOqhnW-3SuOA.jpeg" /><figcaption>Photo by cottonbro studio on Pexels</figcaption></figure><p>The fastest way to summarize a podcast transcript with ChatGPT, Claude or Gemini is to paste the whole thing in and type “summarize this.” For a 20-minute episode, that’s usually fine.</p><p>For a two-hour interview, it tends to go wrong in two quiet ways: the middle of the conversation thins out, and some of the quotes come back smoother than anything the guest actually said.</p><p>Neither problem is a bug in one model. Both show up in published research on how language models handle long inputs, and both are easy to work around once you know where they come from.</p><p>Below is the workflow I’d use: split the transcript, extract before you summarize, and check the output against the source before you rely on it.</p><h4>How long a two-hour transcript actually is</h4><p>It helps to see the size of the job. The published transcript of Lex Fridman’s <a href="https://lexfridman.com/sam-altman-2-transcript/">March 2024 conversation with Sam Altman</a> runs just under two hours and comes to about 20,000 words, with roughly 500 timestamps. That fits comfortably inside the context window of every major chatbot today.</p><p>Fitting isn’t the problem. Using all of it evenly is.</p><h4>Failure one: the middle goes missing</h4><p>In 2023, Nelson Liu and colleagues at Stanford tested how well language models find information placed at different points in a long input. Performance was highest when the relevant passage sat near the beginning or end, and <a href="https://doi.org/10.1162/tacl_a_00638">dropped significantly when it sat in the middle</a>, even for models built for long contexts. They called it “lost in the middle.”</p><p>That study used question answering. A year later, Mathieu Ravaut and colleagues checked whether summaries have the same weakness. Across 6 models and 10 datasets, they found that <a href="https://aclanthology.org/2024.acl-long.153/">the same U-shape holds for summarization</a>: models lean on the start and end of the input and largely ignore what’s in between. When they built a test set where the important content sat in the middle, the models did noticeably worse.</p><p>A related study of book-length summaries, called FABLES, found that models <a href="https://arxiv.org/abs/2404.01261">systematically over-emphasized events near the end of the book</a> and omitted important earlier material.</p><p>For a podcast, that’s a real loss. Hosts open with small talk and close with “where can people find you.” The part where the guest explains how they actually did the thing is usually somewhere around minute 40 to 80.</p><p>Ravaut’s team tested two fixes. One was summarizing the input in blocks and then summarizing the summaries. The other was building the summary up block by block. Both helped, especially for smaller models. They also tried simply asking the model to pay attention to the middle.</p><p>That worked reasonably well for GPT-3.5 but did little to change how the open models leaned on the start of the input. So asking nicely isn’t a strategy. Changing the shape of the input is.</p><h4>Failure two: quotes that were never said</h4><p>The second problem is faithfulness. The FABLES researchers had people who had read each book check 3,158 claims made in AI-written summaries. Most of the unfaithful claims concerned events and the state of characters, and they usually took some reasoning over the story to spot. A sentence could sound right and still be wrong.</p><p>The finding that matters most for this workflow: when the researchers asked language models to judge faithfulness, none of the AI raters agreed strongly with the human annotators, especially at catching the unfaithful claims. Asking the same chatbot “is this accurate?” is a weak check.</p><p>Outside the lab, the picture is similar. In a 2025 study <a href="https://www.bbc.com/mediacentre/2025/new-ebu-research-ai-assistants-news-content">coordinated by the EBU and led by the BBC</a>, journalists reviewed more than 3,000 answers from ChatGPT, Copilot, Gemini and Perplexity about news stories.</p><p>31% had serious sourcing problems, meaning missing, misleading or wrong attributions. That’s news, not transcripts, but attribution is exactly what goes wrong when a summary puts a sentence in a guest’s mouth.</p><h4>The workflow</h4><h4>Step 0: Get a transcript with timestamps and names</h4><p>On YouTube, open the video description and click “Show transcript.” Many shows also publish their own transcripts, which are usually cleaner than auto-captions. Keep the timestamps and speaker names. They’re what make the later checks possible.</p><h4>Step 1: Split it into chunks of 20 to 30 minutes</h4><p>Use the timestamps to cut the transcript into four to six pieces, ideally at natural topic breaks. This is the “summarize in blocks” fix from the Ravaut paper, done by hand. It also means each chunk gets the model’s full attention, rather than competing with an hour of text on either side.</p><h4>Step 2: Extract from each chunk, don’t summarize yet</h4><p>Paste one chunk at a time with this prompt:</p><pre>Below is one section of a podcast transcript (timestamps [START] to [END]).<br>Work only from this section.</pre><pre>List every distinct claim, recommendation, story or number the guest gives.<br>For each one:<br>- one plain sentence describing it<br>- the timestamp where it starts<br>- a short verbatim quote (8 to 20 words) copied exactly from the text</pre><pre>Rules:<br>- Copy quotes character for character. Do not tidy grammar or fill gaps.<br>- If you can&#39;t find an exact quote for a point, write NO QUOTE.<br>- If it&#39;s unclear who is speaking, write SPEAKER UNCLEAR.<br>- Leave out ads, intros and small talk.</pre><pre>[PASTE CHUNK]</pre><p>Extraction is a narrower job than summarizing, so there’s less room to drift. The NO QUOTE and SPEAKER UNCLEAR options matter. They give the model a permitted way to say “I don’t know” instead of inventing something to fill the slot.</p><h4>Step 3: Summarize the notes, not the transcript</h4><p>Once every chunk is done, start a fresh chat and paste only the extracted notes:</p><pre>These are notes extracted from a podcast, in order, with timestamps.<br>Write a summary of the main ideas.</pre><pre>- Keep the timestamp next to every point.<br>- Use only what is in the notes. Add nothing from outside knowledge.<br>- Give each section of the episode fair weight. Don&#39;t let the<br>  final section dominate.<br>- End with a short list of anything that looks contradictory<br>  or that the guest said with low confidence.</pre><p>Because the model is now working from a few hundred lines rather than 20,000 words, the middle of the episode is no longer buried in the middle of a giant input.</p><h4>Step 4: Turn it into actions, and label who said what</h4><p>Summaries are good for remembering what was said. If you listened to learn something, you want the next step:</p><pre>From these notes, list up to five concrete actions a listener could<br>take this week. Mark each one:<br>- GUEST: the guest recommended this directly (give the timestamp)<br>- INFERRED: you derived it from what they said</pre><pre>Don&#39;t present an INFERRED action as the guest&#39;s advice.</pre><p>The GUEST/INFERRED label is the single most useful line in the whole workflow. Language models are good at turning a vague remark into a crisp instruction, and the crisp version is easy to misremember later as something the guest told you to do.</p><h4>The five-minute check</h4><p>Don’t skip this, because the research above says the model can’t reliably do it for you.</p><ol><li>Search the quotes. Pick every quote you plan to reuse, copy four or five distinctive words, and Ctrl+F the transcript. If the phrase isn’t there, the quote isn’t real, however plausible it sounds.</li><li>Count by chunk. Look at how many points came from each section. If the second hour produced two points and the first 20 minutes produced eight, something was skimmed.</li><li>Spot-check one timestamp at random. Jump to it in the transcript or the video and read 30 seconds either side. Does the point match what’s there, including who said it?</li><li>Read the INFERRED list with suspicion. These are the model’s ideas, which can be useful, but they belong to the model, not the guest.</li></ol><h4>Which tool to use</h4><p>The workflow works the same in ChatGPT, Claude, and Gemini, because it doesn’t depend on any one model’s features. NotebookLM takes a different route: you upload the transcript as a source, and its answers come with citations you can click back to the passage, which makes step 3 of the check faster. It still runs on a language model, so the same rules about quotes apply.</p><h4>What this doesn’t fix</h4><p>If the transcript is wrong, the summary will be too. Auto-captions mishear names, numbers, and jargon, so treat any figure in a summary as a pointer to go and listen to that moment, not as a fact.</p><p>It’s also slower. One prompt takes a minute; this takes ten to fifteen. For an episode you’ll never think about again, the one-prompt version is fine. The longer workflow is for the episodes where you want to act on what you heard or repeat it to someone else.</p><p>Models will keep improving, and some of these problems may shrink. But the habit of keeping timestamps, separating what was said from what was inferred, and checking quotes against the source will stay useful whatever model you use next year.</p><h4>One thing to try</h4><p>Take the last long episode you meant to learn from. Run step 2 on just the middle chunk and compare it with what you remember. If the notes surprise you, the middle was exactly the part you, and a one-shot summary, would have lost.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*9S3LubFZLWe6yDcx.png" /></figure><p>This story is published under the <a href="https://generativeai.pub/">Generative AI</a> publication. Connect with us on <a href="https://www.linkedin.com/company/generative-ai-publication">LinkedIn</a> and follow <a href="https://www.zeniteq.com/">Zeniteq</a> to stay in the loop with the latest AI stories. Let’s shape the future of AI together!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*X4I99x1yiVgov8wb.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5ca0685bbe67" width="1" height="1" alt=""><hr><p><a href="https://generativeai.pub/how-to-summarize-a-podcast-transcript-with-chatgpt-without-losing-the-middle-5ca0685bbe67">How to Summarize a Podcast Transcript With ChatGPT Without Losing the Middle</a> was originally published in <a href="https://generativeai.pub">Generative AI</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>