<?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: es617</title>
    <description>The latest articles on DEV Community by es617 (@es617).</description>
    <link>https://dev.to/es617</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%2F3815222%2F7d72c1e4-7572-4328-b3bd-3befc0e43eff.png</url>
      <title>DEV Community: es617</title>
      <link>https://dev.to/es617</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/es617"/>
    <language>en</language>
    <item>
      <title>Turning Claude Code Sessions into HTML Replays</title>
      <dc:creator>es617</dc:creator>
      <pubDate>Mon, 09 Mar 2026 18:17:51 +0000</pubDate>
      <link>https://dev.to/es617/turning-claude-code-sessions-into-html-replays-4amo</link>
      <guid>https://dev.to/es617/turning-claude-code-sessions-into-html-replays-4amo</guid>
      <description>&lt;p&gt;Claude Code sessions are great for development, but hard to share.&lt;/p&gt;

&lt;p&gt;Screen recordings are bulky, static, and you can't search or skip ahead. Copy-pasting raw transcripts is noisy — tool calls, thinking blocks, and responses all run together. The most interesting part of a session isn't just the final output — it's the &lt;em&gt;reasoning&lt;/em&gt;: which tools the agent called, in what order, and why.&lt;/p&gt;

&lt;p&gt;I've been writing a &lt;a href="https://es617.github.io/let-the-ai-out/" rel="noopener noreferrer"&gt;series of posts&lt;/a&gt; about giving AI agents direct access to hardware through MCP, and every article includes demos of the agent interacting with real devices. I wanted to show the full sessions — not just cherry-picked screenshots — but there wasn't a good way to do that.&lt;/p&gt;

&lt;h2&gt;
  
  
  The logs are already there
&lt;/h2&gt;

&lt;p&gt;Claude Code stores complete session transcripts as JSONL files in &lt;code&gt;~/.claude/projects/&lt;/code&gt;. These logs already contain everything needed to reconstruct a session:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User prompts&lt;/li&gt;
&lt;li&gt;Assistant responses (with markdown formatting)&lt;/li&gt;
&lt;li&gt;Tool calls and their results&lt;/li&gt;
&lt;li&gt;Thinking blocks&lt;/li&gt;
&lt;li&gt;Timestamps for every interaction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The data is all there. It just needs a player.&lt;/p&gt;

&lt;h2&gt;
  
  
  So I built one
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/es617/claude-replay" rel="noopener noreferrer"&gt;&lt;strong&gt;claude-replay&lt;/strong&gt;&lt;/a&gt; is a small CLI tool that converts these logs into interactive HTML replays. It works with sessions from Claude Code — both the terminal CLI and the VS Code extension — and also supports Cursor transcripts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx claude-replay session.jsonl &lt;span class="nt"&gt;-o&lt;/span&gt; replay.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output is a single self-contained HTML file — no external dependencies, no framework, no server. You can email it, host it on GitHub Pages, or embed it in a blog post, or link to it. For platforms that don't support iframes (like dev.to or Medium), you can host the replay and embed it via CodePen.&lt;/p&gt;

&lt;p&gt;Here's what that looks like:&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/es617/embed/azmmVEd?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Hit play, step through with arrow keys, or click the progress bar to jump around. Expand tool calls to see inputs and results. Collapse thinking blocks if you want to focus only on the conversation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use cases
&lt;/h2&gt;

&lt;p&gt;The obvious one is &lt;strong&gt;blog posts and documentation&lt;/strong&gt; — embed a session instead of stitching together screenshots. But the use case I didn't expect was &lt;strong&gt;knowledge sharing in teams&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When you're working with AI agents, the interesting artifact isn't just the code that got written — it's the session that produced it. How did the agent approach the problem? What tools did it reach for? Where did it struggle? A replay captures all of that in a format someone else can actually step through.&lt;/p&gt;

&lt;p&gt;Instead of "hey, look at this cool thing the agent did" in Slack followed by a wall of text, you send a replay.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Interactive playback with speed control (0.5x to 5x)&lt;/li&gt;
&lt;li&gt;Collapse/expand tool calls and thinking blocks&lt;/li&gt;
&lt;li&gt;Bookmarks and chapters for long sessions&lt;/li&gt;
&lt;li&gt;Keyboard shortcuts (space, arrow keys)&lt;/li&gt;
&lt;li&gt;Multiple themes (dracula, monokai, github-light, and more)&lt;/li&gt;
&lt;li&gt;Automatic secret redaction&lt;/li&gt;
&lt;li&gt;Self-contained — zero external dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install globally&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; claude-replay

&lt;span class="c"&gt;# Or run directly with npx&lt;/span&gt;
npx claude-replay session.jsonl &lt;span class="nt"&gt;-o&lt;/span&gt; replay.html

&lt;span class="c"&gt;# Find your session logs&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; ~/.claude/projects/&lt;span class="k"&gt;*&lt;/span&gt;/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few useful options:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Only include turns 5-15, start at 2x speed&lt;/span&gt;
claude-replay session.jsonl &lt;span class="nt"&gt;--turns&lt;/span&gt; 5-15 &lt;span class="nt"&gt;--speed&lt;/span&gt; 2.0 &lt;span class="nt"&gt;-o&lt;/span&gt; replay.html

&lt;span class="c"&gt;# Add chapter markers&lt;/span&gt;
claude-replay session.jsonl &lt;span class="nt"&gt;--mark&lt;/span&gt; &lt;span class="s2"&gt;"3:Flash firmware"&lt;/span&gt; &lt;span class="nt"&gt;--mark&lt;/span&gt; &lt;span class="s2"&gt;"7:BLE scan"&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; replay.html

&lt;span class="c"&gt;# Use a different theme&lt;/span&gt;
claude-replay session.jsonl &lt;span class="nt"&gt;--theme&lt;/span&gt; dracula &lt;span class="nt"&gt;-o&lt;/span&gt; replay.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Links
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;claude-replay (source): &lt;a href="https://github.com/es617/claude-replay" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;claude-replay (package): &lt;a href="https://www.npmjs.com/package/claude-replay" rel="noopener noreferrer"&gt;npm&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>showdev</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
