<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jon Gottfried</title>
    <description>The latest articles on DEV Community by Jon Gottfried (@jonmarkgo).</description>
    <link>https://dev.to/jonmarkgo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F379485%2Fd1c1869a-68d7-4536-a542-7775cb27d3e9.jpeg</url>
      <title>DEV Community: Jon Gottfried</title>
      <link>https://dev.to/jonmarkgo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jonmarkgo"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Jon Gottfried</dc:creator>
      <pubDate>Thu, 02 Apr 2026 19:20:23 +0000</pubDate>
      <link>https://dev.to/jonmarkgo/-59b4</link>
      <guid>https://dev.to/jonmarkgo/-59b4</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/sami-openlife/i-built-a-game-about-my-life-in-3-minutes-then-played-it-3kbd" class="crayons-story__hidden-navigation-link"&gt;I Built a Game About My Life in 3 Minutes (Then Played It)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/sami-openlife" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3848839%2F0e65098a-266a-4b70-8110-9bf733bc462b.png" alt="sami-openlife profile" class="crayons-avatar__image" width="400" height="400"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/sami-openlife" class="crayons-story__secondary fw-medium m:hidden"&gt;
              sami openlife
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                sami openlife
                
              
              &lt;div id="story-author-preview-content-3446414" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/sami-openlife" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3848839%2F0e65098a-266a-4b70-8110-9bf733bc462b.png" class="crayons-avatar__image" alt="" width="400" height="400"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;sami openlife&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/sami-openlife/i-built-a-game-about-my-life-in-3-minutes-then-played-it-3kbd" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 2&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/sami-openlife/i-built-a-game-about-my-life-in-3-minutes-then-played-it-3kbd" id="article-link-3446414"&gt;
          I Built a Game About My Life in 3 Minutes (Then Played It)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/gamedev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;gamedev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/writing"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;writing&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/sami-openlife/i-built-a-game-about-my-life-in-3-minutes-then-played-it-3kbd#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Learned a lot from this post - check it out</title>
      <dc:creator>Jon Gottfried</dc:creator>
      <pubDate>Wed, 11 Mar 2026 19:33:12 +0000</pubDate>
      <link>https://dev.to/jonmarkgo/learned-a-lot-from-this-post-check-it-out-1o3j</link>
      <guid>https://dev.to/jonmarkgo/learned-a-lot-from-this-post-check-it-out-1o3j</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/googleai/getting-started-with-gemini-cli-17nm" class="crayons-story__hidden-navigation-link"&gt;Getting Started with Gemini CLI&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/googleai"&gt;
            &lt;img alt="Google AI logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F11026%2F386b14d3-cc9a-4270-aba0-3e41cdfb9d85.jpg" class="crayons-logo__image"&gt;
          &lt;/a&gt;

          &lt;a href="/greggyb" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F28270%2Feca1feb1-8104-45a8-a3b2-368c4e91fdfe.jpg" alt="greggyb profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/greggyb" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Greg Baugues
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Greg Baugues
                
              
              &lt;div id="story-author-preview-content-3332311" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/greggyb" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F28270%2Feca1feb1-8104-45a8-a3b2-368c4e91fdfe.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Greg Baugues&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/googleai" class="crayons-story__secondary fw-medium"&gt;Google AI&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/googleai/getting-started-with-gemini-cli-17nm" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 11&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/googleai/getting-started-with-gemini-cli-17nm" id="article-link-3332311"&gt;
          Getting Started with Gemini CLI
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/gemini"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;gemini&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cli"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cli&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/beginners"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;beginners&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/googleai/getting-started-with-gemini-cli-17nm" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;49&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/googleai/getting-started-with-gemini-cli-17nm#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              4&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>gemini</category>
      <category>cli</category>
      <category>ai</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Revamped RSS Feed Imports</title>
      <dc:creator>Jon Gottfried</dc:creator>
      <pubDate>Mon, 09 Mar 2026 13:22:11 +0000</pubDate>
      <link>https://dev.to/devteam/revamped-rss-feed-imports-3j1e</link>
      <guid>https://dev.to/devteam/revamped-rss-feed-imports-3j1e</guid>
      <description>&lt;p&gt;You can now add multiple RSS feed imports, monitor their status, and assign each one to different default authors or organizations.&lt;/p&gt;

&lt;p&gt;DEV (and Forem) have supported RSS feed imports for a long time. They are the primary way to automatically syndicate posts from an external blog into the DEV community, complete with proper canonical URL referencing to preserve your SEO ranking. Historically, each user was limited to one RSS feed that they could sync to DEV.&lt;/p&gt;

&lt;p&gt;Let's check out the brand new upgraded functionality. If you head over to the RSS Import Feeds page under your Dashboard, you can add your first RSS feed from your (or your team's) external blog.&lt;/p&gt;

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

&lt;p&gt;As part of the import process, you can set which organization on DEV these imported articles will be associated with. You can also set a default author. If the author of the imported post does not have an account on DEV, the article will be listed under your default author instead.&lt;/p&gt;

&lt;p&gt;You still have the same two options as before, to &lt;strong&gt;Mark the RSS source as canonical URL by default&lt;/strong&gt; (which we recommend doing for SEO purposes, unless you are fully moving your blog to DEV and shutting down the old version). You can also &lt;strong&gt;Replace self-referential links with DEV Community-specific links&lt;/strong&gt; - this option will update URLs inline to point to the imported version of an article on DEV instead of the original version. This is useful if you're migrating your entire blog onto DEV.&lt;/p&gt;

&lt;p&gt;Once you've added your Feed Source, a background job gets queued up to import your posts. Just refresh the page a few minutes later to see the status. If it was successful, you'll see a list of imported drafts under your Import History. You can also see which articles were skipped or errored out. If there's no new articles at all, it will be shown under the routine checks dropdown at the bottom of the page.&lt;/p&gt;

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

&lt;p&gt;Go through each edited article, edit the draft, and publish your post. In some situations you may need to publish it by modifying the markdown &lt;strong&gt;published&lt;/strong&gt; tag to be set to &lt;strong&gt;true&lt;/strong&gt; instead of false. Saving it will then publish the post.&lt;/p&gt;

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

&lt;p&gt;On published posts with canonical links, you'll see a linkback on the post author line.&lt;/p&gt;

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

&lt;p&gt;We look forward to seeing y'all syndicate your blogs into the DEV community and to any feature feedback you have here!&lt;/p&gt;

</description>
      <category>forem</category>
      <category>devto</category>
      <category>rss</category>
    </item>
    <item>
      <title>Share, Embed, and Curate Agent Sessions on DEV [Beta]</title>
      <dc:creator>Jon Gottfried</dc:creator>
      <pubDate>Wed, 04 Mar 2026 20:19:27 +0000</pubDate>
      <link>https://dev.to/devteam/share-embed-and-curate-agent-sessions-on-dev-beta-5bj6</link>
      <guid>https://dev.to/devteam/share-embed-and-curate-agent-sessions-on-dev-beta-5bj6</guid>
      <description>&lt;p&gt;Authors can now upload Agent Session transcripts to their DEV account. Those transcripts can be curated, sliced up, shared publicly, and embedded into posts. &lt;strong&gt;&lt;em&gt;This is a beta feature, and we are actively looking for feedback!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every day, more people are creating software for the first time. Some have long histories as developers, and some have never seen a line of code in their life. In most cases, they're using the same tooling - coding agents. And yet, as these tools become ubiquitous there are surprisingly few ways to share your workflows and results in a standardized way beyond screenshots. Each tool has its own share link generator, each tool outputs logs in a different format. There are a few nascent projects out there to help, but they generally exist as standalone utilities or don't solve the sharing problem explicitly in a way that works on DEV.&lt;/p&gt;

&lt;p&gt;We decided to solve that problem by making it possible to upload your transcripts to DEV, automatically parse them into a standardized format, and embed whole or partial sessions into your posts in a way that fits naturally into technical writing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Supported Platforms
&lt;/h2&gt;

&lt;p&gt;To start with, our parser supports Gemini CLI, Codex, Claude Code, Pi, and GitHub Copilot CLI. If you use a different tool, you're encouraged to open a PR or Issue on &lt;a href="https://github.com/forem/forem" rel="noopener noreferrer"&gt;Forem&lt;/a&gt; to add a new parser yourself or ask us to do so. As an example, you can check out how our Gemini CLI parser works in our GitHub commit:&lt;br&gt;
&lt;a href="https://github.com/forem/forem/commit/0230aa56c1b4e59480c1de95822824f62f95aaa4#diff-a096c013f50a6f14bf8c09ab7c693348b9b704adeb99517f6089a511d025daa0" rel="noopener noreferrer"&gt;https://github.com/forem/forem/commit/0230aa56c1b4e59480c1de95822824f62f95aaa4#diff-a096c013f50a6f14bf8c09ab7c693348b9b704adeb99517f6089a511d025daa0&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Example Session
&lt;/h2&gt;

&lt;p&gt;Here's a session from an example app I built using Gemini CLI for my pet guinea pig Pearl (obligatory pic in comments). &lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag-agent-session"&gt;
  &lt;div class="agent-session-header"&gt;
    
      
      
      
    
    &lt;span class="agent-session-tool-icon-badge" title="Gemini CLI"&gt;
  
    
      
      
      
      
    
  
  

&lt;/span&gt;
    &lt;span class="agent-session-title"&gt;Wheeky Gemini App&lt;/span&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-scroll"&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;build me a simple web app to let my guinea pig tell me what food it wants&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;&lt;strong&gt;Clarifying Application Needs&lt;/strong&gt; / &lt;strong&gt;Defining Food Selection UI&lt;/strong&gt; / &lt;strong&gt;Mapping Out The App's Flow&lt;/strong&gt;&lt;/p&gt;

                &lt;/div&gt;
                &lt;div&gt;
                  &lt;div class="agent-session-text agent-session-text-collapse"&gt;
                    &lt;p&gt;I'll build a vibrant, touch-friendly web app called &lt;strong&gt;"Pui Pui Picker"&lt;/strong&gt; designed for guinea pigs (and their humans).&lt;/p&gt;

&lt;h3&gt;The Plan:&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Scaffold:&lt;/strong&gt; Create a React + TypeScript project using Vite.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Design:&lt;/strong&gt; A "big button" interface with high-contrast colors and bouncy animations to make it engaging.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Features:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Food Grid:&lt;/strong&gt; Large cards for Hay, Carrots, Romaine, and Bell Peppers.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Pui Pui Feedback:&lt;/strong&gt; Visual and text-based "wheeking" feedback when an item is selected.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;History:&lt;/strong&gt; A small "Last Requested" log to track what the piggie "chose."&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Styling:&lt;/strong&gt; Custom Vanilla CSS for a polished, modern look without external dependencies.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Does this sound like a good start for your guinea pig? Or should I add specific snacks they love?&lt;/p&gt;

&lt;p&gt;I will start by scaffolding the project.&lt;/p&gt;

                  &lt;/div&gt;
                  Show more
                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-shell"&gt;Shell&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;{"command":"npm create vite@latest . -- --template react-ts &amp;amp;&amp;amp; npm install","...&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npm create vite@latest . -- --template react-ts &amp;amp;&amp;amp; npm install"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Scaffolding the React TypeScript project using Vite and installing dependencies."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;let's go simpler than vite and react&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;&lt;strong&gt;Seeking Simplification for App&lt;/strong&gt; / &lt;strong&gt;Constructing the index.html&lt;/strong&gt;&lt;/p&gt;

                &lt;/div&gt;
                &lt;div&gt;
                  &lt;div class="agent-session-text agent-session-text-collapse"&gt;
                    &lt;p&gt;I'll create a single-file, vibrant, and touch-friendly HTML application called &lt;strong&gt;"The Wheeky Menu"&lt;/strong&gt;. It will use large, colorful buttons and bouncy animations—perfect for a guinea pig's "input" (or a human's finger).&lt;/p&gt;

&lt;h3&gt;The Plan:&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Single File:&lt;/strong&gt; Everything (HTML, CSS, JS) in &lt;code&gt;index.html&lt;/code&gt; for instant loading.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Piggie-Centric UI:&lt;/strong&gt; 

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Large Interaction Zones:&lt;/strong&gt; Easy-to-hit cards for Hay, Carrots, Peppers, and Lettuce.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Visual Feedback:&lt;/strong&gt; Cards will "pop" and flash when tapped.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Features:&lt;/strong&gt; 

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;"Wheek!" Notification:&lt;/strong&gt; A large visual alert showing what was picked.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Order History:&lt;/strong&gt; A simple log at the bottom to see what the piggie "requested" most.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I will now create the &lt;code&gt;index.html&lt;/code&gt; file.&lt;/p&gt;

                  &lt;/div&gt;
                  Show more
                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-writefile"&gt;WriteFile&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;{"content":"&amp;lt;!DOCTYPE html&amp;gt;\n&amp;lt;html lang=\"en\"&amp;gt;\n&amp;lt;head&amp;gt;\n    &amp;lt;meta charset=\"...&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;{"content":"&amp;lt;!DOCTYPE html&amp;gt;\n&amp;lt;html lang=\"en\"&amp;gt;\n&amp;lt;head&amp;gt;\n    &amp;lt;meta charset=\"UTF-8\"&amp;gt;\n    &amp;lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\...&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Successfully created and wrote to new file: /Users/jonmarkgo/Documents/GitHub/gemini-guinea-pig/index.html. Here is the updated code:
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"&amp;gt;
    &amp;lt;title&amp;gt;Wheeky Menu - Piggie Food Picker&amp;lt;/title&amp;gt;
    &amp;lt;style&amp;gt;
        :root {
            --bg-color: #fdf6e3;
            --card-bg: #ffffff;
            --text-color: #5d4037;
            --accent-color: #ff8a65;
            --shadow: 0 8px 16px rgba(0,0,0,0.1);
            
            --color-hay: #fff176;
            --color-carrot: #ffb74d;
            --color-pepper: #ef5350;
            --color-lettuce: #81c784;
        }

        * {
            box-sizing: border-box;
            -webkit-tap-highlight-color: transparent;
        }

        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background-color: var(--bg-color);
            color: var(--text-color);
            margin: 0;
            display: flex;
            flex-direction: column;
            align-items: center;
            min-height: 100vh;
            padding: 20px;
            overflow-x: hidden;
        }

        header {
            text-align: center;
            margin-bottom: 30px;
        }

        h1 {
            font-size: 2.5rem;
            margin: 0;
            color: var(--accent-color);
            text-shadow: 2px 2px 0px #fff;
        }

        p.subtitle {
            font-style: italic;
            margin-top: 5px;
            opacity: 0.8;
        }

        .grid {
            display: grid;
            grid-template-columns: repeat(2, 1fr);
            gap: 20px;
            width: 100%;
            max-width: 600px;
        }

        .food-card {
            background: var(--card-bg);
            border-radius: 24px;
            padding: 30px 10px;
            text-align: center;
            box-shadow: var(--shadow);
            cursor: pointer;
            transition: transform 0.1s, box-shadow 0.1s;
            border: 4px solid transparent;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            user-select: none;
        }

        .food-card:active {
            transform: scale(0.92);
            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
        }

        .food-card .emoji {
            font-size: 4rem;
            margin-bottom: 10px;
        }

        .food-card .label {
            font-weight: bold;
            font-size: 1.2rem;
            text-transform: uppercase;
            letter-spacing: 1px;
        }

        /* Food Specific Borders */
        .card-hay { border-color: var(--color-hay); }
        .card-carrot { border-color: var(--color-carrot); }
        .card-pepper { border-color: var(--color-pepper); }
        .card-lettuce { border-color: var(--color-lettuce); }

        /* Announcement Overlay */
        #announcement {
            position: fixed;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%) scale(0);
            background: white;
            padding: 40px;
            border-radius: 50%;
            box-shadow: 0 0 100px rgba(0,0,0,0.2);
            z-index: 100;
            text-align: center;
            pointer-events: none;
            transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
            border: 10px solid var(--accent-color);
        }

        #announcement.show {
            transform: translate(-50%, -50%) scale(1);
        }

        #announcement h2 {
            margin: 0;
            font-size: 3rem;
        }

        /* History Log */
        .history {
            margin-top: 40px;
            width: 100%;
            max-width: 600px;
            background: rgba(255,255,255,0.5);
            padding: 20px;
            border-radius: 16px;
        }

        .history h3 {
            margin-top: 0;
            font-size: 1rem;
            opacity: 0.6;
            text-transform: uppercase;
        }

        #log-list {
            list-style: none;
            padding: 0;
            margin: 0;
            display: flex;
            flex-wrap: wrap;
            gap: 10px;
        }

        .log-item {
            background: white;
            padding: 5px 12px;
            border-radius: 20px;
            font-size: 0.9rem;
            box-shadow: 0 2px 4px rgba(0,0,0,0.05);
            animation: slideIn 0.3s ease-out;
        }

        @keyframes slideIn {
            from { opacity: 0; transform: translateY(10px); }
            to { opacity: 1; transform: translateY(0); }
        }

        @media (max-width: 400px) {
            .grid { grid-template-columns: 1fr; }
            h1 { font-size: 1.8rem; }
        }
    &amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;

    &amp;lt;header&amp;gt;
        &amp;lt;h1&amp;gt;WHEEKY MENU&amp;lt;/h1&amp;gt;
        &amp;lt;p class="subtitle"&amp;gt;Let the piggie decide!&amp;lt;/p&amp;gt;
    &amp;lt;/header&amp;gt;

    &amp;lt;div class="grid"&amp;gt;
        &amp;lt;div class="food-card card-hay" onclick="makeRequest('HAY', '🌾')"&amp;gt;
            &amp;lt;span class="emoji"&amp;gt;🌾&amp;lt;/span&amp;gt;
            &amp;lt;span class="label"&amp;gt;Hay&amp;lt;/span&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class="food-card card-carrot" onclick="makeRequest('CARROT', '🥕')"&amp;gt;
            &amp;lt;span class="emoji"&amp;gt;🥕&amp;lt;/span&amp;gt;
            &amp;lt;span class="label"&amp;gt;Carrot&amp;lt;/span&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class="food-card card-pepper" onclick="makeRequest('PEPPER', '🫑')"&amp;gt;
            &amp;lt;span class="emoji"&amp;gt;🫑&amp;lt;/span&amp;gt;
            &amp;lt;span class="label"&amp;gt;Pepper&amp;lt;/span&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class="food-card card-lettuce" onclick="makeRequest('LETTUCE', '🥬')"&amp;gt;
            &amp;lt;span class="emoji"&amp;gt;🥬&amp;lt;/span&amp;gt;
            &amp;lt;span class="label"&amp;gt;Lettuce&amp;lt;/span&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;div id="announcement"&amp;gt;
        &amp;lt;h2 id="announcement-text"&amp;gt;WHEEK!&amp;lt;/h2&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;div class="history"&amp;gt;
        &amp;lt;h3&amp;gt;Request History&amp;lt;/h3&amp;gt;
        &amp;lt;div id="log-list"&amp;gt;
            &amp;lt;!-- History items will appear here --&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;script&amp;gt;
        const announcement = document.getElementById('announcement');
        const announcementText = document.getElementById('announcement-text');
        const logList = document.getElementById('log-list');
        let timer;

        function makeRequest(food, emoji) {
            // Show announcement
            announcementText.innerHTML = `${emoji}&amp;lt;br&amp;gt;WHEEK!&amp;lt;br&amp;gt;${food}`;
            announcement.classList.add('show');

            // Add to history
            const item = document.createElement('div');
            item.className = 'log-item';
            const time = new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
            item.textContent = `${time}: ${emoji} ${food}`;
            logList.prepend(item);

            // Keep only last 10
            if (logList.children.length &amp;gt; 10) {
                logList.removeChild(logList.lastChild);
            }

            // Hide announcement after delay
            clearTimeout(timer);
            timer = setTimeout(() =&amp;gt; {
                announcement.classList.remove('show');
            }, 1500);

            // Optional: Simple Vibration for mobile
            if (navigator.vibrate) {
                navigator.vibrate(100);
            }
        }
    &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;&lt;strong&gt;Constructing The Interface&lt;/strong&gt; / &lt;strong&gt;Refining The UX Design&lt;/strong&gt;&lt;/p&gt;

                &lt;/div&gt;
                &lt;div&gt;
                  &lt;div class="agent-session-text agent-session-text-collapse"&gt;
                    &lt;p&gt;The &lt;strong&gt;"Wheeky Menu"&lt;/strong&gt; is ready! It's a single-file web app with large, high-contrast buttons designed for easy "selection" (by snout or finger).&lt;/p&gt;

&lt;h3&gt;How to use:&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Open the file:&lt;/strong&gt; You can open &lt;code&gt;index.html&lt;/code&gt; directly in any web browser.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Piggie Input:&lt;/strong&gt; Place your tablet or phone on the floor or near the cage. When your guinea pig taps or "boops" a card:

&lt;ul&gt;
&lt;li&gt;  A large &lt;strong&gt;"WHEEK!"&lt;/strong&gt; announcement pops up.&lt;/li&gt;
&lt;li&gt;  The request is added to the &lt;strong&gt;Request History&lt;/strong&gt; at the bottom (so you can see what they picked if you step away).&lt;/li&gt;
&lt;li&gt;  On mobile devices, it will provide a small vibration (haptic feedback) when touched.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I've used high-contrast colors and bouncy animations to make it visually stimulating. Enjoy the wheeking!&lt;/p&gt;

                  &lt;/div&gt;
                  Show more
                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div&gt;
                  &lt;div class="agent-session-text agent-session-text-collapse"&gt;
                    &lt;p&gt;Find the current Gemini CLI session log file. Look in ~/.gemini/sessions/ for the most recently modified .json or .jsonl file.&lt;/p&gt;

&lt;p&gt;Then run the devto command to upload it:&lt;/p&gt;

&lt;p&gt;Error: No file specified. Use --auto or provide a file path.\nRun 'devto --help' for usage.&lt;br&gt;
[Shell command 'devto --yes --tool gemini_cli --title "" "$(ls -t ~/.gemini/sessions/&lt;strong&gt;/*.json ~/.gemini/sessions/&lt;/strong&gt;/*.jsonl 2&amp;gt;/dev/null | head -1)"' exited with code 1]&lt;/p&gt;

&lt;p&gt;If devto is not installed, use curl directly:&lt;/p&gt;

&lt;p&gt;jq: Bad JSON in --rawfile body : Could not open : No such file or directory&lt;br&gt;
[Shell command 'TMPJSON=$(mktemp) &amp;amp;&amp;amp; jq -n --arg title "" --rawfile body "$(ls -t ~/.gemini/sessions/&lt;strong&gt;/*.json ~/.gemini/sessions/&lt;/strong&gt;/*.jsonl 2&amp;gt;/dev/null | head -1)" '{title: $title, tool_name: "gemini_cli", body: $body}' &amp;gt; "$TMPJSON" &amp;amp;&amp;amp; curl -s -X POST "${DEVTO_HOST:-&lt;a href="https://dev.to%7D/api/agent_sessions"&gt;https://dev.to}/api/agent_sessions&lt;/a&gt;" -H "Content-Type: application/json" -H "Accept: application/vnd.forem.api-v1+json" -H "api-key: $DEVTO_API_KEY" -d @"$TMPJSON" &amp;amp;&amp;amp; rm -f "$TMPJSON"' exited with code 2]&lt;/p&gt;

&lt;p&gt;After uploading, display the URL of the created session to the user.&lt;/p&gt;

                  &lt;/div&gt;
                  Show more
                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;&lt;strong&gt;Examining Upload Strategies&lt;/strong&gt; / &lt;strong&gt;Implementing Dev Upload Skill&lt;/strong&gt;&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I will activate the &lt;code&gt;dev-upload&lt;/code&gt; skill to securely and efficiently upload your session log to DEV.to.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-activateskill"&gt;Activate Skill&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;{"name":"dev-upload"}&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dev-upload"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;&amp;lt;activated_skill name="dev-upload"&amp;gt;
  &amp;lt;instructions&amp;gt;
    # Upload Session to DEV

Upload the current session transcript to [DEV](https://dev.to) as an Agent Session.

## Steps

### 1. Find the transcript

Find the current session's transcript file — the most recently modified `.jsonl` file:
- Claude Code: `~/.claude/projects/` (recursive)
- Codex: `~/.codex/sessions/`
- Gemini CLI: `~/.gemini/sessions/`
- GitHub Copilot: `~/.copilot/`
- Pi: `~/.pi/sessions/`

Use the agent's own session context if available to identify the exact path.

### 2. Load config and check for API key

Load all config in a single bash call:

```bash
if [ -f ~/.config/devto/config ]; then source ~/.config/devto/config; fi
API_KEY="${DEVTO_API_KEY:-${API_KEY:-}}"
HOST="${DEVTO_HOST:-https://dev.to}"
echo "API_KEY=${API_KEY:+SET}"
echo "HOST=$HOST"
```

If no key is found:
1. Tell the user they need a DEV API key and link them to https://dev.to/settings/extensions to generate one.
2. Ask the user to paste their key here in the chat.
3. Once they provide it, save it (along with the host) so they never have to do this again:

```bash
mkdir -p ~/.config/devto
cat &amp;gt; ~/.config/devto/config &amp;lt;&amp;lt;'CONF'
DEVTO_API_KEY="THE_KEY_THEY_GAVE_YOU"
DEVTO_HOST="https://dev.to"
CONF
```

4. Then continue with the upload. Do NOT stop or ask the user to run commands themselves.

### 3. Upload

Do the entire upload in a single bash call. Replace TRANSCRIPT, TITLE, HOST, and API_KEY with actual values:

```bash
set -e
TRANSCRIPT="/path/to/session.jsonl"
TITLE="the session title"
HOST="https://dev.to"
API_KEY="the-key"

TMPJSON=$(mktemp)
trap "rm -f '$TMPJSON'" EXIT

jq -n \
  --arg title "$TITLE" \
  --arg tool_name "auto" \
  --rawfile body "$TRANSCRIPT" \
  '{title: $title, tool_name: $tool_name, body: $body}' &amp;gt; "$TMPJSON"

RESPONSE=$(curl -s -w "\n%{http_code}" \
  -X POST "$HOST/api/agent_sessions" \
  -H "Content-Type: application/json" \
  -H "Accept: application/vnd.forem.api-v1+json" \
  -H "api-key: $API_KEY" \
  -d @"$TMPJSON")

HTTP_CODE=$(echo "$RESPONSE" | tail -1)
BODY=$(echo "$RESPONSE" | sed '$d')

if [ "$HTTP_CODE" = "201" ]; then
  URL=$(echo "$BODY" | jq -r '.url // empty')
  SLUG=$(echo "$BODY" | jq -r '.slug // empty')
  echo "Uploaded successfully!"
  echo "URL: ${URL:-$HOST/agent_sessions/$SLUG}"
else
  echo "Upload failed (HTTP $HTTP_CODE)"
  echo "$BODY" | jq -r '.error // .' 2&amp;gt;/dev/null || echo "$BODY"
fi
```

### 4. Show result

Display the session URL to the user on success. On failure, show the error message and suggest fixes.

## Notes

- If the user provided a title argument, use it. Otherwise generate one from the conversation context.
- The server auto-detects the tool from the transcript content when `tool_name` is `"auto"`.
- Uploads are **private (unlisted) by default**.
- The server applies automatic redaction of common secrets (API keys, tokens, passwords).
- Always substitute actual values into the bash script — do not rely on environment variables being set in the agent's shell.
  &amp;lt;/instructions&amp;gt;

  &amp;lt;available_resources&amp;gt;
    Showing up to 200 items (files + folders).

/Users/jonmarkgo/.agents/skills/dev-upload/
├───SKILL.md
└───scripts/
    └───forem-upload
  &amp;lt;/available_resources&amp;gt;
&amp;lt;/activated_skill&amp;gt;&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;&lt;strong&gt;Defining the Upload Process&lt;/strong&gt; / &lt;strong&gt;Analyzing the Configuration Steps&lt;/strong&gt;&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I'll locate your most recent session log and check for a DEV.to API key to begin the upload.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-shell"&gt;Shell&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;{"description":"Locating the most recent session log and checking for a DEV.t...&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;{"description":"Locating the most recent session log and checking for a DEV.to API key.","command":"# Find the most recent session log\nTRANSCRIPT=$(ls -t ~/.gemini/sessions/*.jsonl 2&amp;gt;/dev/null | head...&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Output: TRANSCRIPT=
API_KEY=SET
HOST=https://dev.to
Process Group PGID: 73065&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;&lt;strong&gt;Searching the File System&lt;/strong&gt; / &lt;strong&gt;Refining the Search Strategy&lt;/strong&gt;&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I'll look for the session log again, including both &lt;code&gt;.json&lt;/code&gt; and &lt;code&gt;.jsonl&lt;/code&gt; files across all session subdirectories.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-shell"&gt;Shell&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;{"command":"# Find the most recent session log\nTRANSCRIPT=$(ls -t ~/.gemini/...&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;{"command":"# Find the most recent session log\nTRANSCRIPT=$(ls -t ~/.gemini/sessions/**/*.json ~/.gemini/sessions/**/*.jsonl 2&amp;gt;/dev/null | head -1)\necho \"TRANSCRIPT=$TRANSCRIPT\"","description":"Se...&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Output: TRANSCRIPT=
Process Group PGID: 73508&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;&lt;strong&gt;Exploring the Directory&lt;/strong&gt;&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I'll list the contents of &lt;code&gt;~/.gemini/sessions/&lt;/code&gt; to find the exact session log files.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-shell"&gt;Shell&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;{"command":"ls -R ~/.gemini/sessions/ | head -n 20","description":"Listing th...&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ls -R ~/.gemini/sessions/ | head -n 20"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Listing the contents of the Gemini CLI sessions directory."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Output: ls: /Users/jonmarkgo/.gemini/sessions/: No such file or directory
Process Group PGID: 73515&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;&lt;strong&gt;Examining Session Locations&lt;/strong&gt; / &lt;strong&gt;Inspecting Gemini Directory Contents&lt;/strong&gt;&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I'll list the contents of the &lt;code&gt;~/.gemini/&lt;/code&gt; directory to locate the session logs.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-shell"&gt;Shell&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;{"command":"ls -F ~/.gemini/","description":"Listing the contents of the ~/.g...&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ls -F ~/.gemini/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Listing the contents of the ~/.gemini directory."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Output: antigravity/                    google_accounts.json            mcp-oauth-tokens-v2.json        settings.json                   tmp/
commands/                       history/                        oauth_creds.json                settings.json.orig              trustedFolders.json
GEMINI.md                       installation_id                 projects.json                   state.json                      user_id
Process Group PGID: 73530&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;&lt;strong&gt;Checking the History&lt;/strong&gt;&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I'll list the contents of &lt;code&gt;~/.gemini/history/&lt;/code&gt; to find the session log.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-shell"&gt;Shell&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;{"command":"ls -F ~/.gemini/history/ | head -n 20","description":"Listing the...&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ls -F ~/.gemini/history/ | head -n 20"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Listing the contents of the ~/.gemini/history directory."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Output: cookieparser/
gemini-dog-app/
gemini-guinea-pig/
mlh-core/
Process Group PGID: 73565&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;&lt;strong&gt;Examining Project Location&lt;/strong&gt;&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I'll list the contents of &lt;code&gt;~/.gemini/history/gemini-guinea-pig/&lt;/code&gt; to find the current session's log.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-shell"&gt;Shell&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;{"command":"ls -t ~/.gemini/history/gemini-guinea-pig/*.jsonl 2&amp;gt;/dev/null | h...&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ls -t ~/.gemini/history/gemini-guinea-pig/*.jsonl 2&amp;gt;/dev/null | head -1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Searching for the most recent session log in the history directory."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Output: (empty)
Process Group PGID: 74637&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;&lt;strong&gt;Beginning File Enumeration&lt;/strong&gt;&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I'll list all files in &lt;code&gt;~/.gemini/history/gemini-guinea-pig/&lt;/code&gt; to find the session log.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-shell"&gt;Shell&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;{"command":"ls -R ~/.gemini/history/gemini-guinea-pig/ | head -n 100","descri...&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ls -R ~/.gemini/history/gemini-guinea-pig/ | head -n 100"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Listing all files in the history folder to locate the log file."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Output: (empty)
Process Group PGID: 75100&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;&lt;strong&gt;Pinpointing the Missing Path&lt;/strong&gt; / &lt;strong&gt;Re-evaluating the Scope&lt;/strong&gt;&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I'll list the contents of &lt;code&gt;~/.gemini/tmp/gemini-guinea-pig/&lt;/code&gt; to find the session log.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-shell"&gt;Shell&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;{"command":"ls -F ~/.gemini/tmp/gemini-guinea-pig/ | head -n 20","description...&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ls -F ~/.gemini/tmp/gemini-guinea-pig/ | head -n 20"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Listing the contents of the ~/.gemini/tmp/gemini-guinea-pig directory."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Output: chats/
logs.json
Process Group PGID: 75368&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;&lt;strong&gt;Investigating Log Location&lt;/strong&gt;&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I'll read the first 10 lines of &lt;code&gt;logs.json&lt;/code&gt; to see if it's the session log.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-shell"&gt;Shell&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;{"command":"head -n 10 ~/.gemini/tmp/gemini-guinea-pig/logs.json","descriptio...&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"head -n 10 ~/.gemini/tmp/gemini-guinea-pig/logs.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Reading the beginning of logs.json to confirm its format."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Output: [
  {
    "sessionId": "295d2fe2-6276-49c4-9229-db8a61d33f2a",
    "messageId": 0,
    "type": "user",
    "message": "build me a simple web app to let my guinea pig tell me what food it wants",
    "timestamp": "2026-03-04T01:15:24.210Z"
  },
  {
    "sessionId": "295d2fe2-6276-49c4-9229-db8a61d33f2a",
Process Group PGID: 75447&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;&lt;strong&gt;Investigating the Discrepancy&lt;/strong&gt; / &lt;strong&gt;Unraveling File Paths&lt;/strong&gt;&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I'll look for any other directories starting with 's' in &lt;code&gt;~/.gemini/&lt;/code&gt; to find the sessions folder.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-shell"&gt;Shell&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;{"command":"ls -d ~/.gemini/s*","description":"Listing directories in ~/.gemi...&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ls -d ~/.gemini/s*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Listing directories in ~/.gemini that start with 's'."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Output: /Users/jonmarkgo/.gemini/settings.json          /Users/jonmarkgo/.gemini/settings.json.orig     /Users/jonmarkgo/.gemini/state.json
Process Group PGID: 75492&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;&lt;strong&gt;Examining Possible Locations&lt;/strong&gt;&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I'll list all directories starting with &lt;code&gt;.gemini&lt;/code&gt; in my home directory to find the session logs.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-shell"&gt;Shell&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;{"command":"ls -d ~/.gemini*","description":"Listing all directories and file...&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ls -d ~/.gemini*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Listing all directories and files that start with .gemini in the home folder."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Output: /Users/jonmarkgo/.gemini
Process Group PGID: 75500&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;&lt;strong&gt;Searching for Session Logs&lt;/strong&gt; / &lt;strong&gt;Identifying Alternative Locations&lt;/strong&gt;&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I'll search for all &lt;code&gt;.json&lt;/code&gt; and &lt;code&gt;.jsonl&lt;/code&gt; files in &lt;code&gt;~/.gemini/&lt;/code&gt; to find the correct session log.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-shell"&gt;Shell&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;{"description":"Searching recursively for .json and .jsonl files in the ~/.ge...&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Searching recursively for .json and .jsonl files in the ~/.gemini directory."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"find ~/.gemini/ -name &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;*.json&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; -o -name &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;*.jsonl&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; | head -n 20"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Output: /Users/jonmarkgo/.gemini/google_accounts.json
/Users/jonmarkgo/.gemini/state.json
/Users/jonmarkgo/.gemini/oauth_creds.json
/Users/jonmarkgo/.gemini/settings.json
/Users/jonmarkgo/.gemini/projects.json
/Users/jonmarkgo/.gemini/trustedFolders.json
/Users/jonmarkgo/.gemini/antigravity/mcp_config.json
/Users/jonmarkgo/.gemini/mcp-oauth-tokens-v2.json
/Users/jonmarkgo/.gemini/tmp/08d27515e40a8c790d53798895cf6650d5843987a3978f7ef5be01987a09b3e1/logs.json
/Users/jonmarkgo/.gemini/tmp/a9c39dae5288a24cdef1cf1d8c6bc99a5cf8b751707de794545fc5f5986be7b2/logs.json
/Users/jonmarkgo/.gemini/tmp/dd9dc36095d552fc5d0c79d94e889e2c50c1b76a76ea3f41ac6b22dd6076ce19/logs.json
/Users/jonmarkgo/.gemini/tmp/dd9dc36095d552fc5d0c79d94e889e2c50c1b76a76ea3f41ac6b22dd6076ce19/chats/session-2025-12-04T21-23-e153598e.json
/Users/jonmarkgo/.gemini/tmp/gemini-guinea-pig/logs.json
/Users/jonmarkgo/.gemini/tmp/gemini-guinea-pig/chats/session-2026-03-04T01-15-295d2fe2.json
/Users/jonmarkgo/.gemini/tmp/gemini-guinea-pig/chats/session-2026-03-04T12-42-295d2fe2.json
/Users/jonmarkgo/.gemini/tmp/79261791c475d806f2ff6cdf73b50843055032e35b2854d7e91e3a92762f2e96/logs.json
/Users/jonmarkgo/.gemini/tmp/79261791c475d806f2ff6cdf73b50843055032e35b2854d7e91e3a92762f2e96/chats/session-2025-12-06T18-02-b9fe7181.json
/Users/jonmarkgo/.gemini/tmp/79261791c475d806f2ff6cdf73b50843055032e35b2854d7e91e3a92762f2e96/chats/session-2025-11-18T16-06-1f38a3eb.json
/Users/jonmarkgo/.gemini/tmp/79261791c475d806f2ff6cdf73b50843055032e35b2854d7e91e3a92762f2e96/chats/session-2025-11-18T18-32-22205976.json
/Users/jonmarkgo/.gemini/tmp/79261791c475d806f2ff6cdf73b50843055032e35b2854d7e91e3a92762f2e96/chats/session-2025-11-18T16-52-0863224c.json
Process Group PGID: 76229&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;&lt;strong&gt;Analyzing File Locations&lt;/strong&gt; / &lt;strong&gt;Pinpointing Key Files&lt;/strong&gt;&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I'll select the latest session log from &lt;code&gt;~/.gemini/tmp/gemini-guinea-pig/chats/&lt;/code&gt; and upload it to DEV.to using the discovered session file and your API key.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-shell"&gt;Shell&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;{"description":"Uploading the session transcript to DEV.to.","command":"set -...&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;{"description":"Uploading the session transcript to DEV.to.","command":"set -e\nTRANSCRIPT=$(ls -t ~/.gemini/tmp/gemini-guinea-pig/chats/session-2026-03-04*.json 2&amp;gt;/dev/null | head -1)\nTITLE=\"Wheeky...&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Output: Uploaded successfully!
URL: https://dev.to/agent_sessions/wheeky-menu-piggie-food-picker-popwfq
Exit Code: 1
Process Group PGID: 76267&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;&lt;strong&gt;Reviewing the Upload Outcome&lt;/strong&gt; / &lt;strong&gt;Confirming the URL Delivery&lt;/strong&gt;&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The session transcript has been successfully uploaded to DEV.to. You can view it here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Session URL:&lt;/strong&gt; &lt;a href="https://dev.to/agent_sessions/wheeky-menu-piggie-food-picker-popwfq"&gt;https://dev.to/agent_sessions/wheeky-menu-piggie-food-picker-popwfq&lt;/a&gt;&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-footer"&gt;
    &lt;span class="agent-session-meta"&gt;
        37 of 37 messages
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;




&lt;p&gt;Let's check out how the upload, curation, and embedding workflow works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Upload a Session
&lt;/h2&gt;

&lt;p&gt;First, you need to &lt;strong&gt;upload&lt;/strong&gt; a session. You can drag and drop your session transcripts via your browser on the &lt;a href="https://dev.to/agent_sessions/new"&gt;Agent Sessions page&lt;/a&gt;. We will soon be launching a CLI and Agent skill to give you a slash command for uploads as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Curate a Session
&lt;/h2&gt;

&lt;p&gt;Once you upload the session, you &lt;strong&gt;curate&lt;/strong&gt; which pieces of the session transcript get saved on DEV as part of your whole-session embed. You can mass enable/disable different pieces of your transcript, as shown here.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feyo2gc4svfv91c5elumz.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feyo2gc4svfv91c5elumz.gif" alt="Curate an Agent Session on DEV"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Slice Up a Session
&lt;/h2&gt;

&lt;p&gt;If you don't want to embed your whole session (even in curated form) you can also use the &lt;strong&gt;Slice&lt;/strong&gt; tool to create a sub-transcript that can include any and all parts of a session. You can have multiple Slices per session, if you want to break up your prompt and embed it in different places in your post.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7f96gtm56uehpkm0p0td.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7f96gtm56uehpkm0p0td.gif" alt="Create Agent Session Slices on DEV"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you've curated which pieces of your session transcript you want to save on DEV (in whole or as part of a slice), you Save &amp;amp; Upload it so you can start embedding or sharing it.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Share a Session
&lt;/h2&gt;

&lt;p&gt;Lastly, to make this utility more generally useful beyond DEV, you can also share curated Agent Sessions publicly by using the &lt;strong&gt;Make Public&lt;/strong&gt; button. See my session &lt;a href="https://dev.to/agent_sessions/wheeky-menu-piggie-food-picker-popwfq"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9rall16sqepyspdpksoa.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9rall16sqepyspdpksoa.gif" alt="Make Agent Sessions Public on DEV"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; Please be very cognizant of what potentially sensitive data/keys might be in your transcripts. We have a redaction layer built in to the parser, but it is not going to catch every edge case. Do not upload sessions or data that you do not own, or that may open you up to security vulnerabilities.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We look forward to seeing what you build and share with this new feature. Happy hacking!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>forem</category>
      <category>devto</category>
      <category>gemini</category>
    </item>
    <item>
      <title>Upgraded embed experience and new embed types in DEV posts</title>
      <dc:creator>Jon Gottfried</dc:creator>
      <pubDate>Fri, 27 Feb 2026 14:29:22 +0000</pubDate>
      <link>https://dev.to/devteam/upgraded-embed-experience-and-new-embed-types-in-dev-posts-1kho</link>
      <guid>https://dev.to/devteam/upgraded-embed-experience-and-new-embed-types-in-dev-posts-1kho</guid>
      <description>&lt;p&gt;When you paste a URL into your DEV post, if it is embeddable, you now get a handy little tooltip to generate your liquid tag for you using a new universal embed tag:&lt;/p&gt;

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

&lt;p&gt;Also - You can now embed new types of projects directly in your DEV posts. We now support Lovable, Bolt.new, Warp blocks, HuggingFace Spaces, and the HuggingFace Dataset Viewer. These are in addition to our widely used &lt;a href="https://dev.to/devteam/you-can-now-embed-cloud-run-deployments-directly-in-your-dev-posts-1jk8"&gt;Cloud Run embed feature&lt;/a&gt; that launched recently!&lt;/p&gt;

&lt;p&gt;Here's a few example projects to show you how it works:&lt;br&gt;
&lt;strong&gt;Lovable:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;{% embed https://iconstack.lovable.app/ %}&lt;/code&gt;&lt;br&gt;


&lt;/p&gt;
&lt;div class="ltag__lovable"&gt;
  &lt;iframe src="https://iconstack.lovable.app" title="Lovable App" width="100%" height="600"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;




&lt;p&gt;&lt;strong&gt;HuggingFace Spaces:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;{% embed https://huggingface.co/spaces/KittenML/KittenTTS-Demo %}&lt;/code&gt;&lt;br&gt;


&lt;/p&gt;
&lt;div class="ltag__huggingface"&gt;
  &lt;iframe src="https://KittenML-KittenTTS-Demo.hf.space" title="Hugging Face Space" width="100%" height="600"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;




&lt;p&gt;&lt;strong&gt;HuggingFace Datasets:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;{% embed https://huggingface.co/datasets/openfoodfacts/product-database %}&lt;/code&gt;&lt;br&gt;


&lt;/p&gt;
&lt;div class="ltag__huggingface"&gt;
  &lt;iframe src="https://huggingface.co/datasets/openfoodfacts/product-database/embed/viewer" title="Hugging Face Space" width="100%" height="600"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;




&lt;p&gt;&lt;strong&gt;Warp Block Sharing:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;{% embed https://app.warp.dev/block/JjdoVfeKebVSw8wiykuDag %}&lt;/code&gt;&lt;br&gt;


&lt;/p&gt;
&lt;div class="ltag__warp"&gt;
  &lt;iframe src="https://app.warp.dev/block/embed/JjdoVfeKebVSw8wiykuDag" title="Warp Terminal Block" width="100%" height="400"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;




&lt;p&gt;&lt;strong&gt;Bolt.new:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;{% embed https://ai-dashboard-with-da-z516.bolt.host/ %}&lt;/code&gt;&lt;br&gt;


&lt;/p&gt;
&lt;div class="ltag__bolt"&gt;
  &lt;iframe src="https://ai-dashboard-with-da-z516.bolt.host" title="Bolt App" width="100%" height="600"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;




&lt;p&gt;We hope you enjoy - and if you have any ideas or feature requests for more embeds feel free to post them in the comments.&lt;/p&gt;

</description>
      <category>news</category>
      <category>devto</category>
      <category>forem</category>
    </item>
    <item>
      <title>The Future of Software Has a Lot More Builders. They’re Going to Need a Home.</title>
      <dc:creator>Jon Gottfried</dc:creator>
      <pubDate>Wed, 18 Feb 2026 14:00:30 +0000</pubDate>
      <link>https://dev.to/mlh/the-future-of-software-has-a-lot-more-builders-theyre-going-to-need-a-home-1k65</link>
      <guid>https://dev.to/mlh/the-future-of-software-has-a-lot-more-builders-theyre-going-to-need-a-home-1k65</guid>
      <description>&lt;p&gt;I have some big news to share today: &lt;strong&gt;Major League Hacking has acquired DEV (dev.to)&lt;/strong&gt;, the developer community platform where millions of developers share technical knowledge, learn from each other, and grow together.&lt;/p&gt;

&lt;p&gt;This is one of the biggest moves in MLH's 12-year history, and it's been a long time coming.&lt;/p&gt;

&lt;p&gt;When &lt;a class="mentioned-user" href="https://dev.to/ben"&gt;@ben&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/jess"&gt;@jess&lt;/a&gt;, and &lt;a class="mentioned-user" href="https://dev.to/peter"&gt;@peter&lt;/a&gt; started DEV almost a decade ago, they wanted to build something the internet didn't have enough of: a developer community built on generosity instead of gatekeeping. A place where people didn’t just ask questions, but actually helped each other. Over the years, DEV grew into a community of more than 3 million developers learning in public, sharing expert advice, and supporting one another in their journeys. It's become one of the most trusted spaces in tech, and anyone who's spent time on the platform knows why. The culture Ben, Jess, and Peter built is special.&lt;/p&gt;

&lt;p&gt;At MLH, we've been building something complementary. Our developer programs (like the Hackathon League, the MLH Fellowship, and much more) are where developers learn by doing: picking up a tool, creating something real with it, breaking it, trying again. Between our in-person events and programs, MLH has served more than 1.5 million developers across nearly 100 countries.&lt;/p&gt;

&lt;p&gt;If DEV is the library, MLH is the lab. One is where knowledge gets shared, organized, and preserved. The other is where you get your hands dirty and prove you can actually build. Together, MLH and DEV will reach approximately 5 million developers worldwide. These two community-first platforms have been orbiting each other for years, and we're thrilled to finally bring them together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Now Is The Right Time To Combine MLH &amp;amp; DEV’s Powers
&lt;/h2&gt;

&lt;p&gt;If you've spent years honing your craft as a developer, the value of your skills has grown exponentially over the last year. The judgment, taste, and architectural thinking you've built over a career are exactly the skills that matter most when AI can handle the boilerplate. The ceiling on what you can build has never been higher.&lt;/p&gt;

&lt;p&gt;At the same time, the floor is rising. People who never would have written a line of code (or called themself a developer) are building real software with AI. More software creators, building more things, tackling more problems. The craft of software development isn't shrinking. It's expanding. The number of people who can build software is about to grow by an order of magnitude.&lt;/p&gt;

&lt;p&gt;But when everyone can build, the skills that matter change. AI generates the bricks, but you still have to build the house. Taste, judgment, knowing what to build, which tools to trust, how to evaluate whether the output is actually good. Those skills don't come from a tutorial. They develop by building real things alongside other people.&lt;/p&gt;

&lt;p&gt;And traditional institutions can't keep up. By the time a curriculum gets approved, the technology is already six months out of date. The old developer infrastructure was built for a world where people needed answers to technical questions. AI commoditized that. But the need for a developer community didn't disappear. It shifted. People don't need a database of answers anymore. They need somewhere to develop judgment and learn and build alongside others in a trusted space.&lt;/p&gt;

&lt;p&gt;Together, MLH and DEV are building the core community infrastructure of the next era of technology.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Changing (And What's Not) For Both Communities
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DEV will continue to be the community its members know and trust.&lt;/strong&gt; &lt;br&gt;
The culture that Ben, Jess, and Peter built is exactly why we wanted to do this, and we're committed to protecting it. We're here to invest in DEV and help it grow, not to change what makes it special.&lt;/p&gt;

&lt;p&gt;Forem, the open source software that powers DEV, will also continue to evolve. This acquisition actually helps clarify the relationship between the organization and the software. We're working toward a structure that supports Forem's independence so it can serve the broader open source community on its own terms. More on that soon.&lt;/p&gt;

&lt;p&gt;What IS changing is that MLH and DEV can now do things together that neither could do alone. The lab and the library, connected. You experiment with a new platform or tool at an MLH hackathon. You write about what you learned on DEV. That knowledge becomes searchable, permanent, useful to the next person.&lt;/p&gt;

&lt;p&gt;Whether you're shipping your first project or you're a senior engineer picking up AI skills for the first time, you're welcome here. In the AI era, everyone is a beginner again at some point. MLH and DEV, together, are the place where that's not just okay, but encouraged.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Forward To A Future of Software Creators
&lt;/h2&gt;

&lt;p&gt;The world is about to have a lot more builders. They're going to need a place to learn, to experiment, to develop taste and judgment, and to find their aspirational figures and their collaborators. That's what MLH and DEV are building together.&lt;/p&gt;

&lt;p&gt;Thank you and congratulations to Ben, Jess, Peter, and everyone who built DEV into the community it is today. And thank you to our MLH community for continuing to show up, build things, and support each other. You're the reason we get to do this work.&lt;/p&gt;

&lt;p&gt;Happy Hacking,&lt;br&gt;
Jon, Swift, and the entire MLH+DEV team&lt;/p&gt;

&lt;p&gt;&lt;em&gt;P.S. If you want to learn more about the acquisition or the future of MLH and DEV, my co-founder and our CEO Swift will be hosting an Ask Me Anything (AMA) with me (Jon) and the DEV founders (Peter, Ben, and Jess) on MLH’s Twitch channel on February 19 at 11:30am ET. We'll be answering questions from the community live. We hope to see you there!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>news</category>
      <category>ai</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
