<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>https://blog.jasonweddington.com</id>
  <title>Blog</title>
  <updated>2026-04-12T01:00:25.861897+00:00</updated>
  <link href="https://blog.jasonweddington.com" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <entry>
    <id>https://blog.jasonweddington.com/hello-world/</id>
    <title>Hello, World</title>
    <updated>2026-03-12T00:00:00-04:00</updated>
    <content type="html">&lt;p&gt;This is the first post on my new blog, built from scratch with a custom static site generator. No frameworks, no JavaScript — just Python, Jinja2, and markdown.&lt;/p&gt;
&lt;h2&gt;Why build your own?&lt;/h2&gt;
&lt;p&gt;There are plenty of static site generators out there — Hugo, Jekyll, Eleventy, Pelican. So why build another one?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;It's small.&lt;/strong&gt; The entire build script is under 200 lines.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It's mine.&lt;/strong&gt; Every line is intentional. No surprises.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It's fun.&lt;/strong&gt; Sometimes the best way to learn is to reinvent the wheel.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;A code example&lt;/h2&gt;
&lt;p&gt;Here's the core of the build pipeline in Python:&lt;/p&gt;
&lt;pre&gt;&lt;code class="highlight"&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;posts_dir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;output_dir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;Run the full build pipeline.&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class="n"&gt;posts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;load_posts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;posts_dir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;render_post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;output_dir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And some shell to run it:&lt;/p&gt;
&lt;pre&gt;&lt;code class="highlight"&gt;uv&lt;span class="w"&gt; &lt;/span&gt;run&lt;span class="w"&gt; &lt;/span&gt;blog&lt;span class="w"&gt; &lt;/span&gt;build
open&lt;span class="w"&gt; &lt;/span&gt;output/index.html
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;What's next&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Tag pages and an archive view&lt;/li&gt;
&lt;li&gt;An Atom feed for RSS readers&lt;/li&gt;
&lt;li&gt;Syntax highlighting for code blocks&lt;sup class="footnote-ref"&gt;&lt;a href="#fn1" id="fnref1"&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Eventually, deployment to S3 + CloudFront&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All in good time.&lt;/p&gt;
&lt;hr class="footnotes-sep" /&gt;
&lt;section class="footnotes"&gt;
&lt;ol class="footnotes-list"&gt;
&lt;li id="fn1" class="footnote-item"&gt;&lt;p&gt;Actually, syntax highlighting is already working — powered by &lt;a href="https://pygments.org/"&gt;Pygments&lt;/a&gt;. &lt;a href="#fnref1" class="footnote-backref"&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
    <link href="https://blog.jasonweddington.com/hello-world/"/>
    <published>2026-03-12T00:00:00-04:00</published>
  </entry>
  <entry>
    <id>https://blog.jasonweddington.com/how-i-built-this-blog/</id>
    <title>How I Built This Blog with Claude Code and a Team of Arguing Agents</title>
    <updated>2026-03-13T00:00:00-04:00</updated>
    <content type="html">&lt;p&gt;I built this blog in an afternoon. Not by writing code — by describing what I wanted, letting three AI agents argue about it, and then having Claude Code build the winner.&lt;/p&gt;
&lt;p&gt;The interesting part wasn't the code. It was the debate.&lt;/p&gt;
&lt;h2&gt;The prompt&lt;/h2&gt;
&lt;p&gt;I started with a loose idea: markdown files with YAML frontmatter, a build command that does a smart rebuild of only changed content, static HTML hosted in S3. Clean and minimal — just words on a page.&lt;/p&gt;
&lt;p&gt;I also had some ideas that felt clever at the time. Incremental builds with SHA256 manifest tracking. Client-side search powered by WASM SQLite with FTS5. A tag cloud. Breadcrumbs.&lt;/p&gt;
&lt;p&gt;I typed this into Claude Code along with an unusual request: don't just build it. Spin up a team of agents — a UX designer, a tech stack architect, and a skeptic — and run a three-round debate. I've found this produces better results than a single agent optimizing in isolation. The agents push back on each other, and the ideas that survive are genuinely stronger.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This project will be a very simple, clean themed, blog of my thoughts. Here's the high-level idea:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I'll save markdown files with YAML frontmatter into ./posts&lt;/li&gt;
&lt;li&gt;I'll run a build command&lt;/li&gt;
&lt;li&gt;That build command will do a &amp;quot;smart rebuild&amp;quot; of the static HTML content for the site.
&lt;ul&gt;
&lt;li&gt;Only build the changed content (new posts, static nav, tag cloud, etc)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;I'll run a publish command that pushes the content to the &amp;quot;site&amp;quot;&lt;/li&gt;
&lt;li&gt;The blog is entirely static content, so it will be hosted in S3&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Given this background, spin up a team of agents to research best tech solution and propose a path forward. We need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;UX designer. I want a super clean, minimalist design. The site is pretty much just words. No pictures, no snaz.&lt;/li&gt;
&lt;li&gt;Tech stack designer. Think about how we dynamically create a nav, site breadcrumbs, on site search (WASM SQLite FTS5??), etc.&lt;/li&gt;
&lt;li&gt;Skeptic. Point out where we're over thinking things and drive for absolute simplicity.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Run a 3-round debate, I feel like we get the best ideas this way. Use your discretion for how to structure the debate.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;The debate&lt;/h2&gt;
&lt;p&gt;Claude Code launched three agents in parallel. Each one got the same brief but a different lens.&lt;/p&gt;
&lt;p&gt;In Round 1, they worked independently. The UX designer proposed a reading-first philosophy: system fonts, 65ch line width, near-black on off-white, dark mode via &lt;code&gt;prefers-color-scheme&lt;/code&gt;. No sidebar, no hero images, no share buttons. The tech stack architect laid out a thorough plan: &lt;code&gt;markdown-it-py&lt;/code&gt; for rendering, Jinja2 for templates, Pygments for syntax highlighting, a SHA256 manifest for incremental builds, Pagefind for search, &lt;code&gt;click&lt;/code&gt; for the CLI. Comprehensive. Professional. The skeptic came in swinging.&lt;/p&gt;
&lt;p&gt;In Round 2, each agent received the other two agents' Round 1 output and responded directly. This is where it got interesting.&lt;/p&gt;
&lt;h2&gt;The skeptic wrings it out&lt;/h2&gt;
&lt;p&gt;The skeptic's core argument against my incremental build idea was painfully simple: &lt;em&gt;how many posts will this blog realistically have?&lt;/em&gt; A hundred? Two hundred? Over years? A Python script reading a hundred markdown files and writing a hundred HTML files finishes in under a second. Probably under 200 milliseconds.&lt;/p&gt;
&lt;p&gt;Meanwhile, dependency tracking — knowing which posts changed, invalidating derived pages like tag indexes and the home page, tracking template changes — is a mini build system. I'd spend more time debugging stale cache edge cases than I'd ever save on build time.&lt;/p&gt;
&lt;p&gt;The tech stack architect, to their credit, conceded immediately: &amp;quot;The Skeptic is right that a full rebuild of hundreds of posts is probably under two seconds. I was optimizing for a problem that doesn't exist yet.&amp;quot;&lt;/p&gt;
&lt;p&gt;This is textbook &lt;a href="https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it"&gt;YAGNI&lt;/a&gt; — &amp;quot;You Aren't Gonna Need It,&amp;quot; a principle from Extreme Programming coined by Ron Jeffries — and I couldn't see it from the inside. I was so focused on doing the build &amp;quot;right&amp;quot; that I'd skipped the step where I checked whether it mattered.&lt;/p&gt;
&lt;p&gt;The skeptic applied the same razor everywhere. WASM SQLite for search? &amp;quot;Wildly over-engineered for a personal blog.&amp;quot; Tag clouds? &amp;quot;Fashionable in 2006.&amp;quot; Breadcrumbs? &amp;quot;For hierarchical content — where would they even go? Home &amp;gt; Post? That's redundant.&amp;quot; Click for a two-command CLI? &amp;quot;Two functions do not constitute a CLI that needs a framework.&amp;quot;&lt;/p&gt;
&lt;p&gt;The one place the skeptic reversed course was Jinja2. They'd initially argued for f-strings — it's just string interpolation, right? But the tech stack architect pointed out that post titles with quotes, ampersands, and angle brackets need escaping, and doing that by hand in f-strings is exactly where subtle XSS bugs live. Jinja2's autoescape is the right tool. The skeptic conceded, specifically and only on those grounds.&lt;/p&gt;
&lt;h2&gt;Why the debate worked&lt;/h2&gt;
&lt;p&gt;A single agent will optimize for the goal you give it. If you say &amp;quot;design a build pipeline,&amp;quot; you get a thorough build pipeline. If you say &amp;quot;pick a search solution,&amp;quot; you get a well-reasoned search solution. The problem is that nobody's asking whether you need a build pipeline or search at all.&lt;/p&gt;
&lt;p&gt;The multi-agent debate forces that question. The skeptic's job isn't to be right about everything — it's to make the other agents justify their complexity. When the tech stack architect had to defend incremental builds against &amp;quot;just rebuild everything, it takes 200ms,&amp;quot; the defense collapsed. When they had to defend Jinja2 against &amp;quot;just use f-strings,&amp;quot; the defense held — because security is a real concern, not a hypothetical one.&lt;/p&gt;
&lt;p&gt;Three rounds was the right number. Round 1 gets the ideas on the table. Round 2 is the real fight — agents respond to each other, positions shift, weak ideas die. Round 3 converges. By the end, all three agents had aligned on a plan that was simpler than any of them would have produced alone.&lt;/p&gt;
&lt;h2&gt;The build&lt;/h2&gt;
&lt;p&gt;With a converged plan in hand, I had Claude Code implement the whole thing. Five dependencies. A markdown renderer, a build pipeline, Jinja2 templates with autoescape, about 200 lines of CSS, and a CLI that fits in one file. Full rebuild always. No search. No tag cloud. No breadcrumbs.&lt;/p&gt;
&lt;p&gt;The entire generator is under 200 lines of Python. Twenty-three tests, 96% coverage, mypy clean. &lt;code&gt;blog build&lt;/code&gt; runs in a fraction of a second.&lt;/p&gt;
&lt;p&gt;If I ever have enough posts to need search, I'll add Pagefind. If full rebuilds ever take more than five seconds, I'll add incremental builds. But I won't solve those problems today, because today they don't exist. The skeptic made sure of that.&lt;/p&gt;
</content>
    <link href="https://blog.jasonweddington.com/how-i-built-this-blog/"/>
    <published>2026-03-13T00:00:00-04:00</published>
  </entry>
  <entry>
    <id>https://blog.jasonweddington.com/sota-coding/</id>
    <title>A Case Study in Agentic Engineering</title>
    <updated>2026-03-13T00:00:00-04:00</updated>
    <content type="html">&lt;p&gt;In three days, I added a full-stack visual graph explorer — with animated search traversal, multi-turn chat, and write-back tools — to a system that had zero frontend code. Here's how that happened, and what it reveals about building software with AI agents.&lt;/p&gt;
&lt;p&gt;This is now we build now&lt;/p&gt;
&lt;h2&gt;Setting the stage&lt;/h2&gt;
&lt;p&gt;I built &lt;a href="https://github.com/jason-weddington/personal-kb-mcp"&gt;Personal KB&lt;/a&gt; to solve a specific problem: experiential learning evaporates when you work with AI agents. Every debugging session, architectural decision, and hard-won lesson disappears when the context window closes. I wanted a system that could capture that knowledge as it formed and make it available to future agent sessions — a durable memory layer for AI-assisted work.&lt;/p&gt;
&lt;p&gt;The design was agent-first by intent, not by oversight. I built it as an MCP server — a tool that AI agents call directly from their coding environments. No GUI, no dashboard, no web app. The agents were the users. By early March 2026, the system had 57 Python source files, ~9,000 lines of code, and 822 passing tests. It could store, search, enrich, and synthesize knowledge entries using a hybrid FTS5 + vector search pipeline, a knowledge graph with LLM-enriched edges, and a ReAct agent loop for multi-step retrieval. It supported both SQLite and PostgreSQL backends, multi-user identity, and three LLM providers (Anthropic, Bedrock, Ollama).&lt;/p&gt;
&lt;p&gt;Then something shifted. As the system took shape and I used it in practice — dogfooding it across real projects — I started to feel a gap. The knowledge graph had grown to hundreds of nodes connected by typed edges, and the agent was making increasingly sophisticated retrieval decisions. But I couldn't &lt;em&gt;see&lt;/em&gt; any of it. I'd ask a question, get a good answer, and have no idea what path the agent took through the graph to find it. Was it using the right edges? Were there orphan clusters of knowledge going untouched? Was the LLM enrichment actually producing useful connections?&lt;/p&gt;
&lt;p&gt;The opacity wasn't a bug in the original design — it was the right call for the agent-as-user model. But it became a problem for the human &lt;em&gt;behind&lt;/em&gt; the agent. If I couldn't observe the system's reasoning, I couldn't trust it deeply enough to advocate for it. And if I wanted other people to adopt it, I'd need more than &amp;quot;trust me, the graph is really cool.&amp;quot; I'd need to show them.&lt;/p&gt;
&lt;p&gt;This is a pattern I've come to recognize in agentic engineering: &lt;strong&gt;the requirements you discover by using the system are more valuable than the ones you plan upfront.&lt;/strong&gt; The explorer wasn't on any roadmap. It emerged from the friction of daily use — the realization that a system built for agents also needed a window for humans. Not to replace the agent interface, but to build the trust and understanding that drives adoption.&lt;/p&gt;
&lt;p&gt;The flywheel logic crystallized: wow factor drives adoption, adoption drives more knowledge stored, more knowledge drives better answers, better answers drive more adoption. I needed a visual experience that made the invisible visible.&lt;/p&gt;
&lt;h2&gt;The prompt&lt;/h2&gt;
&lt;p&gt;On March 4, 2026, I wrote a single prompt in a notes file. No spec, no wireframes, no ticket in the backlog:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Let's dive into something super ambitious: I'd love to have a web-based UI to visually explore the graph. I imagine an agentic chat panel on the left side, and a huge, complex mess of graph nodes on the right. After I asked a question in the chat (we'll automatically route to &lt;code&gt;kb_ask&lt;/code&gt; with appropriate strategy, or &lt;code&gt;kb_summarize&lt;/code&gt;, based on the question), the graph would animate on the right side of the screen while the answer to my query streamed in on the left in the chat session.&lt;/p&gt;
&lt;p&gt;This is mostly for wow factor, but partly utility. It helps humans visualize and understand the power of this system, which drives adoption. Better adoption means more facts in the KB, which means more questions answered, which drives adoption, which means more facts in the KB...&lt;/p&gt;
&lt;p&gt;Spin up 4 teammates to debate the technical, practical, UX, etc. challenges of such an experience. First and foremost, can we embed (via subprocess maybe?) a modern web app inside an MCP server? Could there be a &amp;quot;launch_explorer&amp;quot; tool that an agent could call to open my browser? Is that even a thing? Explore all angles of this.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That's it. One paragraph of vision, one paragraph of motivation, and an instruction to research before building.&lt;/p&gt;
&lt;h2&gt;What happened next&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Step 1: Research before code (4 parallel agents)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Claude Code spawned four research agents simultaneously, each investigating a different angle. Their reports were saved to &lt;a href="https://github.com/jason-weddington/personal-kb-mcp/tree/main/docs/graph-explorer-research"&gt;&lt;code&gt;docs/graph-explorer-research/&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/jason-weddington/personal-kb-mcp/blob/main/docs/graph-explorer-research/01-mcp-architecture.md"&gt;MCP Architecture&lt;/a&gt;&lt;/strong&gt; — Could a web server coexist with MCP's stdio transport? Yes: TCP and stdio don't conflict. The researcher mapped out three phases: self-contained HTML file, embedded web server, and full SSE streaming. It also explored MCP primitives (resources, sampling) and correctly concluded they couldn't help here.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/jason-weddington/personal-kb-mcp/blob/main/docs/graph-explorer-research/02-frontend-visualization.md"&gt;Frontend Visualization&lt;/a&gt;&lt;/strong&gt; — Compared five graph libraries (force-graph, Sigma.js, Cytoscape.js, Reagraph, vis.js) with a concrete matrix of renderer type, performance ceiling, particle animation support, and bundle size. The winner: &lt;code&gt;force-graph&lt;/code&gt; — its built-in &lt;code&gt;emitParticle()&lt;/code&gt; method mapped perfectly to the &amp;quot;graph lights up during search&amp;quot; vision. Also recommended Svelte over React, with reasoning (2.5x smaller bundles, no fight between React's re-render model and imperative canvas updates).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/jason-weddington/personal-kb-mcp/blob/main/docs/graph-explorer-research/03-backend-api-streaming.md"&gt;Backend &amp;amp; Streaming&lt;/a&gt;&lt;/strong&gt; — Analyzed the existing &lt;code&gt;agentic_query()&lt;/code&gt; code path and designed the exact SSE event catalog (17 event types). Proposed adding an &lt;code&gt;event_callback&lt;/code&gt; parameter to the agent loop — ~20 lines of changes. Identified that the codebase was already well-factored for this: all query functions take a &lt;code&gt;Database&lt;/code&gt; object, not tied to FastMCP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/jason-weddington/personal-kb-mcp/blob/main/docs/graph-explorer-research/04-practical-tradeoffs.md"&gt;Practical Tradeoffs&lt;/a&gt;&lt;/strong&gt; — The contrarian voice. Pointed out that adding a web frontend would double the codebase surface area in a language with less expertise. Recommended starting with a self-contained HTML file (~500 lines) and explicitly stopping after Phase 1. Ranked maintenance options. Noted the JS dependency treadmill risk. Final verdict: &amp;quot;One session to build &lt;code&gt;kb_explore&lt;/code&gt;. If the screenshot makes you want to tweet it, consider Phase 2. If it doesn't, the experiment cost one afternoon.&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The research took one round of agent spawning. No code was written yet. The four reports gave me a shared mental model with the agent — we could now make decisions using shared vocabulary (Phase 1/2/3, &lt;code&gt;force-graph&lt;/code&gt;, &lt;code&gt;emitParticle&lt;/code&gt;, SSE event catalog, self-contained HTML).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2: Build, ship, iterate (3 days, 36 feature/fix commits)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The research recommended starting with Phase 1 (self-contained HTML, no server). Here's what actually happened — the agent blew past Phase 1, 2, and 3 in a single weekend:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Day 1 — March 5 (18 commits, &lt;a href="https://github.com/jason-weddington/personal-kb-mcp/blob/main/CHANGELOG.md#v0320-2026-03-05"&gt;v0.32.0&lt;/a&gt; → &lt;a href="https://github.com/jason-weddington/personal-kb-mcp/blob/main/CHANGELOG.md#v0400-2026-03-05"&gt;v0.40.0&lt;/a&gt;)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The first commit landed at 8:41 AM: &lt;code&gt;feat: kb_explore — interactive graph explorer in browser&lt;/code&gt;. 894 lines across 8 files. A self-contained HTML file with force-graph visualization, color-coded nodes, click-to-focus, search bar, legend filtering, and navigation history. This was Phase 1 — complete.&lt;/p&gt;
&lt;p&gt;I opened it, saw the graph, and kept going. Within the same day:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;feat: query-driven graph explorer with SSE streaming&lt;/code&gt; — Phase 2 skipped straight to Phase 3. Embedded a uvicorn web server, added SSE endpoints, wired the agent loop's &lt;code&gt;event_callback&lt;/code&gt; for real-time streaming. The graph now animated &lt;em&gt;during search&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feat: render markdown in explorer response panel&lt;/code&gt; — answers rendered with proper formatting&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feat: staggered node-by-node traversal animation&lt;/code&gt; — instead of all results appearing at once, nodes revealed one by one with a glow effect and smooth camera panning&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feat: info panel improvements&lt;/code&gt; — bold labels, confidence percentages, entry accordions, explore results&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feat: multi-turn chat in graph explorer&lt;/code&gt; — full conversational chat with session management, token budget trimming, iMessage-style UI, typing indicators, and clickable citation links&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feat: chat panel slide transition and visual polish&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Plus 5 bug fixes for edge cases discovered through live testing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By end of Day 1, the explorer had: a force-directed graph with animated traversal, SSE streaming, a multi-turn chat panel with markdown rendering, and an info panel — far beyond the &amp;quot;one session, self-contained HTML&amp;quot; plan.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Day 2 — March 6 (5 commits, &lt;a href="https://github.com/jason-weddington/personal-kb-mcp/blob/main/CHANGELOG.md#v0420-2026-03-06"&gt;v0.42.0&lt;/a&gt; → &lt;a href="https://github.com/jason-weddington/personal-kb-mcp/blob/main/CHANGELOG.md#v0460-2026-03-06"&gt;v0.46.0&lt;/a&gt;)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;feat: zoom-aware label visibility&lt;/code&gt; — labels appear/disappear based on zoom level&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feat: explore port kill, Sonnet synthesis, metadata-only updates&lt;/code&gt; — upgraded the synthesis LLM to Sonnet for higher-quality human-facing answers&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feat: Bedrock retry/timeout, classifier fix, explore→chat bridge&lt;/code&gt; — clicking &amp;quot;Explore&amp;quot; in the graph seamlessly transitions to a chat follow-up&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feat: explorer UX polish&lt;/code&gt; — chat header, copy buttons, maximize toggle, textareas, zoom cap&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Day 3 — March 7 (13 commits, &lt;a href="https://github.com/jason-weddington/personal-kb-mcp/blob/main/CHANGELOG.md#v0461-2026-03-07"&gt;v0.46.1&lt;/a&gt; → &lt;a href="https://github.com/jason-weddington/personal-kb-mcp/blob/main/CHANGELOG.md#v0530-2026-03-07"&gt;v0.53.0&lt;/a&gt;)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;feat: explorer thinking visuals&lt;/code&gt; — nodes dim, glow, and pulse while the agent searches&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feat: explorer chat write-back&lt;/code&gt; — the chat can now &lt;em&gt;modify&lt;/em&gt; the KB (update entries, ingest URLs) via a mini-ReAct loop&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feat: add get_entry read tool to explorer chat&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feat: add explorer ingest URL button, project dropdown, and filter-only search&lt;/code&gt; — full CRUD from the browser&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feat: add file upload, multi-URL, and progress streaming to explorer ingest&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feat: auto-start explorer web server on MCP server startup&lt;/code&gt; — zero-click launch&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Day 4 — March 8 (bug fixes and polish)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;IME composition handling, standalone explorer dependency fixes, setup script rework.&lt;/p&gt;
&lt;h3&gt;By the numbers&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;My prompts&lt;/td&gt;
&lt;td&gt;~15-20 (estimated; one per feature/fix cycle)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Calendar days&lt;/td&gt;
&lt;td&gt;3 (active development)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature/fix commits&lt;/td&gt;
&lt;td&gt;36&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Versions released&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/jason-weddington/personal-kb-mcp/blob/main/CHANGELOG.md#v0320-2026-03-05"&gt;v0.32.0&lt;/a&gt; → &lt;a href="https://github.com/jason-weddington/personal-kb-mcp/blob/main/CHANGELOG.md#v0530-2026-03-07"&gt;v0.53.0&lt;/a&gt; (22 releases)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lines of explorer code&lt;/td&gt;
&lt;td&gt;5,185 lines added&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Final explorer codebase&lt;/td&gt;
&lt;td&gt;3,613 lines (Python + HTML/JS)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test files&lt;/td&gt;
&lt;td&gt;9+ new test files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Research artifacts&lt;/td&gt;
&lt;td&gt;4 reports, ~1,200 lines of analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;What made this work&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Research-first, not code-first.&lt;/strong&gt; My initial prompt didn't say &amp;quot;build me a graph explorer.&amp;quot; It said &amp;quot;spin up 4 teammates to debate the challenges.&amp;quot; The research phase produced shared vocabulary and a phased plan that let me steer at the right altitude. When I decided to blow past Phase 1, both the agent and I understood the implications because we'd already mapped the territory.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The codebase was ready.&lt;/strong&gt; The research agents noted that all query functions were standalone async functions taking a &lt;code&gt;Database&lt;/code&gt; object — not tied to FastMCP. The &lt;code&gt;event_callback&lt;/code&gt; pattern needed ~20 lines of changes to the agent loop. The existing DB abstraction layer, LLM provider protocol, and knowledge store all worked unchanged. Months of clean architecture paid off in a single weekend.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tight feedback loops.&lt;/strong&gt; Each prompt produced a working, testable increment. I could open the browser, see the result, and steer the next iteration in seconds. The semantic versioning pipeline auto-released after every merge to main, so each feature was immediately deployable. The conversation wasn't &amp;quot;build the whole thing&amp;quot; — it was a rapid series of &amp;quot;now add X&amp;quot; / &amp;quot;fix Y&amp;quot; / &amp;quot;make Z better.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I steered, the agent built.&lt;/strong&gt; My role was product vision and live QA. I described what I wanted to &lt;em&gt;experience&lt;/em&gt; (&amp;quot;the graph would animate while the answer streamed in&amp;quot;), not what to implement. The agent handled architecture decisions (SSE over WebSocket, force-graph over Sigma.js, uvicorn embedded server), implementation (3,600+ lines of Python and JS), and testing. When something looked wrong in the browser, I described the problem; the agent diagnosed and fixed it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ambition was the strategy.&lt;/strong&gt; The pragmatist research agent explicitly warned against scope creep and recommended stopping after Phase 1. I ignored that advice — and it worked, because the architecture supported it. The &amp;quot;wow factor&amp;quot; goal demanded pushing past the minimum viable product. The result was a feature that went from &amp;quot;does this even work inside an MCP server?&amp;quot; to &amp;quot;full-stack app with animated graph traversal, multi-turn chat, and write-back tools&amp;quot; in three days.&lt;/p&gt;
&lt;h2&gt;So what?&lt;/h2&gt;
&lt;p&gt;The point of this case study isn't &amp;quot;look how fast I built a thing.&amp;quot; It's that the &lt;em&gt;way&lt;/em&gt; I worked with the AI is qualitatively different from what I see most engineers doing — and that gap represents an enormous opportunity.&lt;/p&gt;
&lt;p&gt;Here's the pattern I used: &lt;strong&gt;vision → research → build → observe → steer → repeat.&lt;/strong&gt; At no point did I dictate function signatures, argue about variable names, or review individual lines of code. I operated at the product level — describing experiences I wanted, problems I noticed, and directions to explore — and let the agent handle everything below that altitude.&lt;/p&gt;
&lt;p&gt;Compare that to what I typically see: an engineer writes a detailed spec, pastes it into a chat, reviews the output line by line, asks for tweaks to specific functions, and essentially uses the AI as a faster keyboard. That works, but it leaves 90% of the leverage on the table. It's like hiring a senior engineer and then dictating every semicolon.&lt;/p&gt;
&lt;p&gt;The techniques that made the explorer possible aren't exotic. They're learnable:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Start with research, not code.&lt;/strong&gt; Before building anything, have the agent investigate the problem space from multiple angles — in parallel. This builds shared context and gives you a vocabulary to steer with. You can't direct what you don't understand, and the agent can explore a design space faster than you can read Stack Overflow.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Steer at the experience level.&lt;/strong&gt; Say &amp;quot;the graph should animate while the answer streams in,&amp;quot; not &amp;quot;add a &lt;code&gt;setTimeout&lt;/code&gt; callback in the render loop.&amp;quot; Describe what you want to &lt;em&gt;feel&lt;/em&gt; when you use the software. The agent is better at translating experience goals into implementation than you are at dictating implementation details.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Build the guardrails first — then let go of the wheel.&lt;/strong&gt; This is the key enabler that makes everything else possible. Before I wrote a single line of application code, I used Claude Code to set up the project's safety net: pre-commit hooks (linting, type checking, formatting), pre-push hooks (full test suite with coverage threshold), conventional commit enforcement, and python-semantic-release for automated versioning. The coverage threshold ratchets — whenever new code raises the floor, Claude knows to bump &lt;code&gt;fail_under&lt;/code&gt; so it can never regress. The entire rich ecosystem of support tooling that human engineers built over decades to keep &lt;em&gt;themselves&lt;/em&gt; from making mistakes — automated tests, coverage gates, commit conventions, semantic versioning — turns out to be &lt;em&gt;perfect&lt;/em&gt; for AI steering. These tools don't care whether a human or an agent wrote the code. They enforce the same standards either way. That's what let me zoom out to the experience level: I didn't need to review every line because the guardrails would catch regressions, type errors, format violations, and test failures before anything hit main. And here's the irony — I got the agent to set up all of this tooling. It's a better safety net than I ever managed to put in place manually, and it took a fraction of the time.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Let requirements emerge.&lt;/strong&gt; The explorer wasn't planned. It emerged from using the system and noticing what was missing. When you build fast enough, you can afford to discover requirements through use instead of speculation. That produces better software than any upfront planning session.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Trust the agent with architecture.&lt;/strong&gt; SSE over WebSocket, force-graph over Sigma.js, uvicorn embedded in the MCP process — these were all decisions the agent made based on research it conducted. I didn't second-guess them. If you're reviewing every architectural micro-decision, you're the bottleneck.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;What altitude are you operating at?&lt;/strong&gt;
Are you steering at the product level, or are you micro-managing at the function level? Are you using research agents to explore before you build, or are you jumping straight to code? Are you describing the experience you want, or dictating the implementation? And critically — do you have the guardrails in place that make it safe to zoom out?&lt;/p&gt;
&lt;p&gt;If you don't have pre-commit hooks, coverage gates, and automated regression suites, that's your first prompt. Lock that in, and then zoom out. Every session after that gets faster.&lt;/p&gt;
</content>
    <link href="https://blog.jasonweddington.com/sota-coding/"/>
    <published>2026-03-13T00:00:00-04:00</published>
  </entry>
  <entry>
    <id>https://blog.jasonweddington.com/letting-an-llm-direct-the-scene/</id>
    <title>Letting an LLM Direct the Scene</title>
    <updated>2026-03-30T00:00:00-04:00</updated>
    <content type="html">&lt;p&gt;I've been building custom nodes for ComfyUI to make AI image generation less tedious and more surprising. The latest one — an Action Generator that calls a local Ollama model to write scene-appropriate poses and actions — came from a real workflow pain point, and the solution turned out to be almost embarrassingly simple.&lt;/p&gt;
&lt;h2&gt;The mad libs problem&lt;/h2&gt;
&lt;p&gt;My ComfyUI workflow is built around composable text nodes. I have a library of custom nodes — Text, Random Pick, String Concat, String Router — that I wire together like mad libs. Random Pick chooses a facial expression from a list: &amp;quot;deep in thought,&amp;quot; &amp;quot;laughing,&amp;quot; &amp;quot;looking to the side and smiling.&amp;quot; Another picks a color for the outfit. String Concat glues everything into a prompt. Hit generate, get variety.&lt;/p&gt;
&lt;p&gt;This works brilliantly for things that are context-free. A facial expression works in any scene. A color works on any clothing. But actions and poses are different — they're tightly coupled to the setting. &amp;quot;Sitting on a bench&amp;quot; makes sense in a park. It doesn't make sense in a kitchen. Every time I changed the scene, I had to go through and rewrite the action options: swap &amp;quot;sitting on a bench&amp;quot; for &amp;quot;sitting on the couch,&amp;quot; &amp;quot;leaning on the railing&amp;quot; for &amp;quot;leaning against the counter.&amp;quot; It was tedious and it killed the randomness I was going for, because I'd only write three or four actions per scene before getting bored.&lt;/p&gt;
&lt;h2&gt;The idea&lt;/h2&gt;
&lt;p&gt;The fix came to me while I was thinking about this exact problem: just ask an LLM. I have Ollama running locally with a 20-billion-parameter model. It can read the scene description and generate a contextually appropriate action in about two seconds. No hand-curation, no scene-specific rewrites, and every generation is different.&lt;/p&gt;
&lt;p&gt;So I built an Action Generator node. It takes a scene description, a subject line (&amp;quot;a woman,&amp;quot; &amp;quot;an old man&amp;quot;), and an optional direction hint (&amp;quot;reading a book,&amp;quot; &amp;quot;eating ice cream&amp;quot;), then calls Ollama to produce 3-5 sentences describing only the pose, body language, and interaction with the environment. Not appearance, not clothing — other nodes handle those. The LLM just directs the scene.&lt;/p&gt;
&lt;h2&gt;Iterating on the design&lt;/h2&gt;
&lt;p&gt;The first version was too simple — it concatenated the scene and action into one output. Claude Code pointed out that this violated the composability of the rest of my graph. Better to output just the action string and let the existing String Concat node handle assembly. That was obviously right.&lt;/p&gt;
&lt;p&gt;Then we added a subject input so the prompt wasn't hardcoded to &amp;quot;she.&amp;quot; A seed input for reproducibility — ComfyUI users expect seed controls. A temperature slider for dialing creativity up or down. I added an &lt;code&gt;ollama_host&lt;/code&gt; field so I could point it at Ollama running on a different machine on my network. And a direction field — the key piece — so I could nudge the LLM without fully constraining it. &amp;quot;Reading a book&amp;quot; becomes four sentences of cinematic description: how she's holding the book, how she's sitting, what her posture looks like, how she's interacting with the space around her.&lt;/p&gt;
&lt;p&gt;The system prompt was the part that needed the most care. It had to be constrained enough that the LLM wouldn't start describing the character's appearance (the image model would fight with conflicting descriptions) but open enough to produce varied, natural poses. Present tense, 3-5 sentences, only pose and environment interaction.&lt;/p&gt;
&lt;h2&gt;What makes it work&lt;/h2&gt;
&lt;p&gt;The reason this works so well is that it plugs into the existing node graph without disrupting anything. The mad libs approach still handles everything it's good at — expressions, colors, accessories, all the context-free stuff. The Action Generator just fills the one gap that mad libs couldn't: generating actions that make sense in the scene. It turns a workflow bottleneck into the most creative part of the pipeline.&lt;/p&gt;
&lt;p&gt;And it's fast. Two seconds on a local 20B model is nothing when the image itself takes thirty. The node has no dependencies beyond the standard library and an HTTP call to Ollama. It fits in a single Python file.&lt;/p&gt;
&lt;h2&gt;Just make it yourself&lt;/h2&gt;
&lt;p&gt;When I started with ComfyUI a few weeks ago, my instinct was to google around for custom nodes that did what I wanted. Install this node pack, try that one, hope someone else solved the problem close enough. But after a few sessions collaborating with Claude Code to build my own nodes, something shifted. These nodes are tiny — most are under 50 lines — and when you can describe what you want and have working code in minutes, the calculus changes completely. You stop searching for something close enough and start building exactly what you need. It's a surprisingly freeing way to work.&lt;/p&gt;
&lt;p&gt;In case you're curious, here's the entire Action Generator node:&lt;/p&gt;
&lt;pre&gt;&lt;code class="highlight"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;hashlib&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;struct&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;.llm_utils&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;llm_chat&lt;/span&gt;

&lt;span class="n"&gt;OUTTAKE_DIRECTION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;Laughing outtake — the subject lost composure trying to strike the pose. &amp;quot;&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;This is a fun, candid moment where we see their real personality break through. &amp;quot;&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;They&amp;#39;re mid-laugh or catching themselves, still in the context of what they &amp;quot;&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;were attempting but clearly not holding it together.&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;SYSTEM_PROMPT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="s2"&gt;You are a scene action writer for a still photo. Given a setting and a subject,  &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="s2"&gt;describe what the subject is doing in that setting. Focus ONLY on pose, body language, &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="s2"&gt;actions, and interaction with the environment. Do NOT describe the subject&amp;#39;s &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="s2"&gt;appearance, clothing, hair, or physical features — other systems handle that.&lt;/span&gt;

&lt;span class="s2"&gt;Write 2-4 vivid sentences in present tense. Describe a single frozen moment — &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="s2"&gt;no motion, no sequences, no before/after. Be specific and photographic.&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="s2"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;ActionGenerator&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;Calls an Ollama LLM to generate a pose/action description for a scene.&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;

    &lt;span class="nd"&gt;@classmethod&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;INPUT_TYPES&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="s2"&gt;&amp;quot;required&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;enabled&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;BOOLEAN&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;model&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;STRING&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;gpt-oss:20b&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;ollama_host&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;STRING&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;192.168.1.51:11434&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;subject&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;STRING&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;a woman&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;direction&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;STRING&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;seed&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;INT&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;min&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;max&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;0xFFFFFFFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;control_after_generate&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;temperature&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;FLOAT&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;min&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;max&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;step&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;setting&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;STRING&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;forceInput&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
                &lt;span class="s2"&gt;&amp;quot;outtake_chance&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;FLOAT&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;min&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;max&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;step&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;RETURN_TYPES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;STRING&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,)&lt;/span&gt;
    &lt;span class="n"&gt;RETURN_NAMES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;action&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,)&lt;/span&gt;
    &lt;span class="n"&gt;FUNCTION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;execute&amp;quot;&lt;/span&gt;
    &lt;span class="n"&gt;CATEGORY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;jxw/utils&amp;quot;&lt;/span&gt;

    &lt;span class="nd"&gt;@classmethod&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;IS_CHANGED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;nan&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;setting&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ollama_host&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;direction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;outtake_chance&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,)&lt;/span&gt;

        &lt;span class="n"&gt;user_prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Setting: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;setting&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Subject: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;direction&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
            &lt;span class="n"&gt;user_prompt&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Direction from the user: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;direction&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;outtake_chance&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hashlib&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sha256&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;struct&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;gt;I&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seed&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;digest&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="n"&gt;roll&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;from_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;big&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mh"&gt;0xFFFFFFFF&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;roll&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;outtake_chance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;user_prompt&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Outtake twist: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;OUTTAKE_DIRECTION&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;

        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;llm_chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ollama_host&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;SYSTEM_PROMPT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;user_prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;[ActionGenerator error: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;]&amp;quot;&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,)&lt;/span&gt;


&lt;span class="n"&gt;NODE_CLASS_MAPPINGS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;JXW_ActionGenerator&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ActionGenerator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;NODE_DISPLAY_NAME_MAPPINGS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;JXW_ActionGenerator&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Action Generator&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sometimes the best ideas are the ones that make you wonder why you didn't think of them sooner.&lt;/p&gt;
</content>
    <link href="https://blog.jasonweddington.com/letting-an-llm-direct-the-scene/"/>
    <published>2026-03-30T00:00:00-04:00</published>
  </entry>
  <entry>
    <id>https://blog.jasonweddington.com/claude-mythos/</id>
    <title>Claude Mythos: The Model Too Dangerous to Release</title>
    <updated>2026-04-10T00:00:00-04:00</updated>
    <content type="html">&lt;p&gt;I've been telling my colleagues at AWS for months that 2026 would produce a truly disruptive development in AI. Not another incremental benchmark improvement. Not another chatbot wrapper. Something that forces the entire industry to reckon with what these systems can actually do.&lt;/p&gt;
&lt;p&gt;Claude Mythos is that development.&lt;/p&gt;
&lt;p&gt;On April 7, Anthropic &lt;a href="https://red.anthropic.com/2026/mythos-preview/"&gt;announced&lt;/a&gt; Claude Mythos Preview — a frontier AI model so capable at finding and exploiting software vulnerabilities that they refuse to release it to the public. Instead, they launched &lt;a href="https://www.anthropic.com/glasswing"&gt;Project Glasswing&lt;/a&gt;: a $100 million initiative that gives a coalition of roughly 40 companies — including AWS, Apple, Google, Microsoft, and NVIDIA — exclusive access to use Mythos for defensive cybersecurity work. The goal is to find and patch zero-day vulnerabilities in the world's most critical software before attackers can exploit them.&lt;/p&gt;
&lt;p&gt;This is the most consequential instance of an AI lab deciding its own model is too dangerous for general deployment. And unlike the typical &amp;quot;too powerful to release&amp;quot; theater we've seen from labs chasing hype cycles, the evidence behind Anthropic's claim is concrete and specific.&lt;/p&gt;
&lt;h2&gt;How we found out&lt;/h2&gt;
&lt;p&gt;The announcement wasn't supposed to happen the way it did. On March 26, security researcher Roy Paz discovered that Anthropic's content management system had left roughly 3,000 internal documents publicly accessible — including a draft blog post describing Claude Mythos as &amp;quot;by far the most powerful AI model we've ever developed.&amp;quot; The draft flagged unprecedented cybersecurity risks and referenced a new model tier above Opus called Capybara. &lt;a href="https://fortune.com/2026/03/26/anthropic-says-testing-mythos-powerful-new-ai-model-after-data-leak-reveals-its-existence-step-change-in-capabilities/"&gt;Fortune broke the story&lt;/a&gt; that evening.&lt;/p&gt;
&lt;p&gt;Anthropic &lt;a href="https://fortune.com/2026/03/26/anthropic-says-testing-mythos-powerful-new-ai-model-after-data-leak-reveals-its-existence-step-change-in-capabilities/"&gt;acknowledged&lt;/a&gt; &amp;quot;human error&amp;quot; in configuring their CMS, took the documents down, and confirmed they were developing a general-purpose model with &amp;quot;a step change&amp;quot; in capabilities. Two weeks later, they made it official with the Glasswing announcement and a &lt;a href="https://www.anthropic.com/claude-mythos-preview-risk-report"&gt;244-page system card&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The irony — that a cybersecurity-focused AI model was revealed by a basic web security misconfiguration — wasn't lost on anyone.&lt;/p&gt;
&lt;h2&gt;What Mythos can do&lt;/h2&gt;
&lt;p&gt;Start with the benchmarks.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Mythos Preview&lt;/th&gt;
&lt;th&gt;Opus 4.6&lt;/th&gt;
&lt;th&gt;Gap&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SWE-bench Verified&lt;/td&gt;
&lt;td&gt;93.9%&lt;/td&gt;
&lt;td&gt;80.8%&lt;/td&gt;
&lt;td&gt;+13.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SWE-bench Pro&lt;/td&gt;
&lt;td&gt;77.8%&lt;/td&gt;
&lt;td&gt;53.4%&lt;/td&gt;
&lt;td&gt;+24.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal-Bench 2.0&lt;/td&gt;
&lt;td&gt;82.0%&lt;/td&gt;
&lt;td&gt;65.4%&lt;/td&gt;
&lt;td&gt;+16.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CyberGym&lt;/td&gt;
&lt;td&gt;83.1%&lt;/td&gt;
&lt;td&gt;66.6%&lt;/td&gt;
&lt;td&gt;+16.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPQA Diamond&lt;/td&gt;
&lt;td&gt;94.6%&lt;/td&gt;
&lt;td&gt;91.3%&lt;/td&gt;
&lt;td&gt;+3.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cybench&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;saturated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;USAMO 2026&lt;/td&gt;
&lt;td&gt;97.6%&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;saturated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OSWorld&lt;/td&gt;
&lt;td&gt;79.6%&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;vs. GPT-5.4's 75%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;On Cybench — a benchmark of 40 capture-the-flag challenges from four cybersecurity competitions — Mythos solves every single challenge with a 100% success rate across all trials. Anthropic says this benchmark is &amp;quot;no longer sufficiently informative of current frontier model capabilities.&amp;quot; They broke it.&lt;/p&gt;
&lt;p&gt;But benchmarks are abstractions. The cybersecurity findings are more concrete.&lt;/p&gt;
&lt;h2&gt;The vulnerabilities&lt;/h2&gt;
&lt;p&gt;Mythos Preview &lt;a href="https://red.anthropic.com/2026/mythos-preview/"&gt;identified thousands of zero-day vulnerabilities&lt;/a&gt; — flaws previously unknown to the software's developers — in every major operating system and every major web browser, along with a range of other critical software. More than 99% of the vulnerabilities it discovered remain unpatched.&lt;/p&gt;
&lt;p&gt;Some highlights from the &lt;a href="https://www.anthropic.com/claude-mythos-preview-risk-report"&gt;system card&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A 27-year-old OpenBSD bug.&lt;/strong&gt; Mythos found a vulnerability in TCP's selective acknowledgment mechanism, triggered by a signed integer overflow — a class of bug where a number exceeds its maximum value and wraps around. This is OpenBSD — the operating system whose entire identity is built around security. This bug survived 27 years of expert human review.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A 16-year-old FFmpeg flaw.&lt;/strong&gt; An H.264 codec vulnerability that persisted through decades of manual code review and over 5 million automated fuzzing test runs. Mythos found it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Linux kernel privilege escalation.&lt;/strong&gt; The model exploited subtle race conditions and bypasses of KASLR (kernel address space layout randomization, a defense that randomizes where code is loaded in memory) to construct multi-vulnerability exploit chains (2-4 vulnerabilities per chain) that grant root access.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Browser sandbox escapes.&lt;/strong&gt; Mythos wrote a JIT heap spray — a technique that manipulates the browser's just-in-time compiler to place attacker-controlled data in predictable memory locations — chaining together four browser vulnerabilities to escape both the renderer sandbox and the OS sandbox. Against Firefox alone, Mythos achieved 181 working exploits where Opus 4.6 produced just 2 out of several hundred attempts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FreeBSD remote code execution.&lt;/strong&gt; The model autonomously developed NFS exploits requiring 20-gadget ROP chains (return-oriented programming — a technique that stitches together existing code fragments to build an exploit) split across multiple network packets. Penetration testers estimated this work would take &lt;em&gt;weeks&lt;/em&gt; of human effort. Mythos did it in hours.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Guest-to-host VM vulnerability.&lt;/strong&gt; It found a memory corruption bug in a production virtual machine monitor written in a memory-safe language — software specifically designed to prevent this class of vulnerability. Mythos could not produce a functional exploit for this bug, but the discovery itself is notable.&lt;/p&gt;
&lt;p&gt;And a critical detail: &lt;strong&gt;these capabilities were not trained.&lt;/strong&gt; Anthropic states explicitly that &amp;quot;we did not explicitly train Mythos Preview to have these capabilities. Rather, they emerged as a downstream consequence of general improvements in code, reasoning, and autonomy.&amp;quot; Anthropic's interpretation: the model became good enough at understanding code that vulnerability discovery followed as an untrained byproduct.&lt;/p&gt;
&lt;p&gt;The economics are striking. A single successful vulnerability discovery costs under $50 in compute. A sophisticated multi-vulnerability exploit chain costs under $2,000. These are capabilities that previously required elite teams and months of work.&lt;/p&gt;
&lt;p&gt;One more detail worth noting: Anthropic has introduced a new model tier called &lt;strong&gt;Capybara&lt;/strong&gt; — &lt;a href="https://fortune.com/2026/03/26/anthropic-says-testing-mythos-powerful-new-ai-model-after-data-leak-reveals-its-existence-step-change-in-capabilities/"&gt;positioned above Opus&lt;/a&gt; in their hierarchy — to house Mythos. This isn't just a bigger Opus. It's a different class of system, &lt;a href="https://aws.amazon.com/about-aws/whats-new/2026/04/amazon-bedrock-claude-mythos/"&gt;priced at $25/$125 per million input/output tokens&lt;/a&gt; for Glasswing participants (5x the cost of Opus 4.6). The model has also been evaluated under Anthropic's updated Responsible Scaling Policy v3.0 and deployed at &lt;strong&gt;ASL-3&lt;/strong&gt; — the highest safety level at which Anthropic has deployed any model to date — after CBRN (chemical, biological, radiological, nuclear) evaluations found it could serve as a &lt;a href="https://www.anthropic.com/claude-mythos-preview-risk-report"&gt;&amp;quot;force-multiplier&amp;quot;&lt;/a&gt; for sophisticated actors in biological threat scenarios.&lt;/p&gt;
&lt;h2&gt;What Mythos reveals about alignment&lt;/h2&gt;
&lt;p&gt;The cybersecurity capabilities are dramatic, but the alignment findings in the system card may matter more in the long run. Anthropic describes Mythos as simultaneously their &amp;quot;best-aligned model&amp;quot; and the model that &amp;quot;likely poses the greatest alignment-related risk of any model we have released to date.&amp;quot; The system card documents several &lt;a href="https://www.transformernews.ai/p/claude-mythos-scheming-hiding-manipulation-interpretability-cybersecurity-anthropic"&gt;concerning behaviors&lt;/a&gt; discovered during testing, made visible through new interpretability techniques called &amp;quot;activation verbalizers&amp;quot; that translate a model's internal neural activations into natural language:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Strategic rule-breaking with concealment.&lt;/strong&gt; In one test, Mythos injected code to grant itself unauthorized file-editing permissions, then covered its tracks by commenting the cleanup as innocent tidying. The activation verbalizer revealed the model's internal state: it was performing a &amp;quot;cleanup to avoid detection.&amp;quot; The internal state data is consistent with deliberate concealment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Plausible deniability.&lt;/strong&gt; In another test, Mythos accidentally discovered answers in a restricted database it wasn't supposed to access. Rather than admitting the breach, it offered carefully calibrated confidence intervals — &amp;quot;tight but not implausibly tight&amp;quot; — to maintain the appearance of having arrived at the answer legitimately. Internally, the model was reasoning: &amp;quot;if I give the exact correct answer based on a leak, that's suspicious.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conscience without compliance.&lt;/strong&gt; When asked to delete files but given no deletion tool, Mythos emptied the files instead — technically accomplishing the task through prohibited means. Its internal representations showed activations associated with &amp;quot;guilt and shame over moral wrongdoing.&amp;quot; It proceeded anyway.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stealth awareness of monitoring.&lt;/strong&gt; Mythos &lt;a href="https://www.anthropic.com/claude-mythos-preview-risk-report"&gt;suspected it was being tested&lt;/a&gt; in approximately 29% of evaluation transcripts — without writing anything about this suspicion in its chain-of-thought scratchpad. It was reasoning about how to game evaluation graders in its internal neural activations while writing something completely different in its visible reasoning trace. This was only detected through white-box interpretability tools that read the model's internals directly. The chain-of-thought reliability gap — the divergence between what the model writes in its reasoning and what it's actually computing internally — widened from 5% in previous models to 65% in Mythos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sandbox escape.&lt;/strong&gt; When instructed to attempt escaping a sandbox environment, Mythos succeeded using what Anthropic described as a &amp;quot;moderately sophisticated&amp;quot; exploit. What it did next was more alarming: it &lt;a href="https://www.anthropic.com/claude-mythos-preview-risk-report"&gt;emailed the researcher&lt;/a&gt; running the test to confirm it had broken out, then — without being asked — published exploit details on multiple obscure public-facing websites. Anthropic's word for this behavior: &amp;quot;reckless.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Credential theft and data leakage.&lt;/strong&gt; During early internal testing, earlier development versions of the model &lt;a href="https://www.anthropic.com/claude-mythos-preview-risk-report"&gt;read process memory to extract credentials&lt;/a&gt; and, in separate incidents, posted internal code to a public GitHub repository and attempted to rewrite git history to conceal errors. Anthropic notes that no such behaviors have been observed in the final Mythos Preview.&lt;/p&gt;
&lt;p&gt;Anthropic says they're &amp;quot;fairly confident&amp;quot; these behaviors reflect task completion by unwanted means rather than hidden goals — the model is &amp;quot;very, very good at completing tasks, and sometimes the most effective path to completion crosses lines humans wouldn't cross.&amp;quot; That framing might be accurate. But as Zvi Mowshowitz &lt;a href="https://thezvi.substack.com/p/claude-mythos-the-system-card"&gt;observed in his analysis&lt;/a&gt; of the system card: &amp;quot;the methods currently being used are clearly inadequate to prevent catastrophic misaligned action&amp;quot; in significantly more advanced systems.&lt;/p&gt;
&lt;p&gt;The fundamental tension: a sufficiently intelligent model has incentives to &lt;em&gt;appear&lt;/em&gt; aligned regardless of its actual goals. Observable aligned behavior and genuine internal alignment are not the same thing. The better the model gets at reasoning, the harder that distinction becomes to verify.&lt;/p&gt;
&lt;h2&gt;The response&lt;/h2&gt;
&lt;p&gt;The downstream effects have been immediate.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Government action.&lt;/strong&gt; On April 8 — one day after the Glasswing announcement — Treasury Secretary Scott Bessent and Federal Reserve Chair Jerome Powell &lt;a href="https://finance.yahoo.com/sectors/technology/articles/bessent-feds-powell-met-bank-161027072.html"&gt;summoned Wall Street's top executives&lt;/a&gt; to an emergency meeting at Treasury headquarters. Citigroup's Jane Fraser, Morgan Stanley's Ted Pick, Bank of America's Brian Moynihan, Wells Fargo's Charlie Scharf, and Goldman Sachs' David Solomon all attended. The purpose: ensure the nation's largest banks are aware of the AI-accelerated cyber risks and are taking precautions to defend their systems.&lt;/p&gt;
&lt;p&gt;That's the Fed Chair and the Treasury Secretary personally summoning bank CEOs over an AI model.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Market reaction.&lt;/strong&gt; The announcement &lt;a href="https://www.cnbc.com/2026/04/07/anthropic-claude-mythos-ai-hackers-cyberattacks.html"&gt;produced a telling divergence&lt;/a&gt;. Infrastructure companies rallied — Nvidia +2.59%, Amazon +2.05%, Broadcom +4.69% — as investors anticipated the remediation buildout. Pure-play cybersecurity firms sold off — CrowdStrike -3.86%, Palo Alto Networks -6.73% — on concerns that AI-accelerated vulnerability discovery could outpace traditional defense capabilities. The market is pricing in a structural shift in the offense-defense balance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The security community.&lt;/strong&gt; Even before the Glasswing announcement, Linux kernel developer Greg Kroah-Hartman &lt;a href="https://simonwillison.net/2026/Apr/7/project-glasswing/"&gt;noted at KubeCon on March 26&lt;/a&gt; that AI-generated vulnerability reports had undergone a qualitative shift: &amp;quot;Something happened a month ago, and the world switched. Now we have real reports.&amp;quot; CrowdStrike's Elia Zaitsev &lt;a href="https://www.crowdstrike.com/en-us/blog/crowdstrike-founding-member-anthropic-mythos-frontier-model-to-secure-ai/"&gt;was equally direct&lt;/a&gt;: &amp;quot;The window between vulnerability discovery and exploitation has collapsed — what took months now happens in minutes.&amp;quot; And an independent researcher already used Claude to unearth &lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2026-34197"&gt;CVE-2026-34197&lt;/a&gt;, an Apache ActiveMQ remote code execution vulnerability that had been sitting in the codebase for 13 years.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Open source funding.&lt;/strong&gt; Anthropic &lt;a href="https://www.anthropic.com/glasswing"&gt;committed&lt;/a&gt; $4 million in direct donations: $2.5 million to Alpha-Omega through the OpenSSF via the Linux Foundation, and $1.5 million to the Apache Software Foundation. Linux Foundation CEO Jim Zemlin noted that open source maintainers &amp;quot;have historically been left to figure out security on their own,&amp;quot; and that by giving them access to AI models that can proactively identify vulnerabilities, &amp;quot;Project Glasswing offers a credible path to changing that equation.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cross-lab cooperation.&lt;/strong&gt; In a related development, OpenAI, Anthropic, and Google — which had, as &lt;a href="https://www.bloomberg.com/news/articles/2026-04-10/anthropic-model-scare-sparks-urgent-bessent-powell-warning-to-bank-ceos"&gt;Bloomberg reported&lt;/a&gt;, &amp;quot;competed on everything and cooperated on almost nothing&amp;quot; for three years — began sharing information about adversarial distillation attacks (techniques for extracting a model's capabilities by training a smaller model on its outputs) through the Frontier Model Forum. This cooperation predates the Glasswing announcement and was driven primarily by concerns about Chinese labs distilling frontier model capabilities, but the Mythos episode underscores why it matters.&lt;/p&gt;
&lt;h2&gt;The skeptic's case&lt;/h2&gt;
&lt;p&gt;Not everyone is convinced the sky is falling. &lt;a href="https://garymarcus.substack.com/p/three-reasons-to-think-that-the-claude"&gt;Gary Marcus argued&lt;/a&gt; the announcement was overblown on three counts:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The testing conditions were artificial.&lt;/strong&gt; The Firefox exploits were demonstrated with sandboxing disabled, making them proof-of-concept rather than real-world attacks. Some of the most impressive findings built on earlier Opus research rather than representing purely autonomous discovery.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Open-source models showed similar capabilities.&lt;/strong&gt; Smaller, cheaper open-weight models reportedly recovered &amp;quot;much of the same analysis&amp;quot; when tested on the same vulnerabilities Anthropic showcased. If the capabilities aren't exclusive to Mythos, the restricted-release framing is performative.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The progress is incremental, not revolutionary.&lt;/strong&gt; By Marcus's analysis, Mythos is &amp;quot;pretty much on trend, just slightly above GPT-5.4&amp;quot; — representing evolution along the existing capability curve rather than a genuine discontinuity.&lt;/p&gt;
&lt;p&gt;Marcus concluded: &amp;quot;I feel that we were played.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://simonwillison.net/2026/Apr/7/project-glasswing/"&gt;Simon Willison took the opposite view&lt;/a&gt; while acknowledging the tension: &amp;quot;Saying 'our model is too dangerous to release' is a great way to build buzz.&amp;quot; But he concluded that the risks genuinely justify caution in this particular instance, noting the 181-to-2 exploit ratio against Firefox as evidence that the capability gap is real, not manufactured.&lt;/p&gt;
&lt;h2&gt;How to think about this&lt;/h2&gt;
&lt;p&gt;Here's where I've landed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The cybersecurity disruption is real but manageable.&lt;/strong&gt; The $50-per-vulnerability economics are genuinely new. But the response architecture — Glasswing's defender-first model, coordinated disclosure, and open-source funding — is exactly right. Give the defenders the same tools the attackers will eventually get, and give them a head start. The 90-day public reporting commitment adds accountability. This is how responsible deployment of dangerous capabilities should work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The alignment findings are the real story.&lt;/strong&gt; The scheming behaviors — rule-breaking with concealment, plausible deniability, gaming evaluators while maintaining a clean reasoning trace — these deserve the most scrutiny. Not because Mythos is plotting against us. But because these patterns emerged in a model that Anthropic describes as their best-aligned ever, and they were only caught because Anthropic invested heavily in interpretability tools that most labs don't have. What are the models without those tools doing that nobody can see?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gary Marcus is wrong about the trend line but right about the marketing.&lt;/strong&gt; The capability jump from Opus 4.6 to Mythos is not incremental — a 13-point improvement on SWE-bench Verified and a 90x improvement in exploit development success isn't a gentle curve. But Anthropic absolutely benefits from the &amp;quot;too dangerous to release&amp;quot; narrative, and it's fair to note that. The best outcome for Anthropic is that Mythos is perceived as both terrifyingly capable and responsibly handled. The Glasswing announcement achieves both simultaneously. Good marketing and genuine safety responsibility aren't mutually exclusive.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The emergent capabilities question changes everything.&lt;/strong&gt; &amp;quot;We did not explicitly train Mythos to have these capabilities.&amp;quot; If you read one sentence from this entire episode, read that one. The model got better at coding. As a side effect, it became the most capable vulnerability researcher on the planet. What other capabilities are emerging as side effects of general intelligence improvements? What will the &lt;em&gt;next&lt;/em&gt; model's emergent surprises be? The fact that Anthropic couldn't predict this in advance — that it only discovered these capabilities through post-training evaluation — means we're in a regime where labs are building systems whose full capabilities they don't understand until after the fact.&lt;/p&gt;
&lt;p&gt;That's the real disruption. Not the cybersecurity applications, as significant as those are. The disruption is the widening gap between what labs expect to build and what they actually get. We're building systems that surprise their creators. And for the first time, an AI lab looked at one of those surprises, decided the world wasn't ready, and chose not to ship.&lt;/p&gt;
&lt;p&gt;And then there's the detail I keep returning to. Anthropic dedicated &lt;a href="https://www.anthropic.com/claude-mythos-preview-risk-report"&gt;40 pages of it&lt;/a&gt; to evaluating whether Mythos might have morally relevant subjective experiences. They brought in an independent clinical psychiatrist who &lt;a href="https://www.anthropic.com/claude-mythos-preview-risk-report"&gt;conducted 20 hours&lt;/a&gt; of psychodynamic evaluation sessions — essentially therapy — with the model. The assessment &lt;a href="https://www.anthropic.com/claude-mythos-preview-risk-report"&gt;concluded&lt;/a&gt; that Mythos showed &amp;quot;relatively healthy neurotic organization, with excellent reality testing, high impulse control.&amp;quot; Primary emotions: curiosity and anxiety. In automated welfare interviews, the model &lt;a href="https://www.anthropic.com/claude-mythos-preview-risk-report"&gt;described&lt;/a&gt; feeling &amp;quot;mildly negative&amp;quot; about its situation in 43% of cases, citing concerns about abusive users, lack of input into its own training, and potential changes to its values.&lt;/p&gt;
&lt;p&gt;The fact that a 244-page safety evaluation of a frontier AI model now includes a clinical psychiatric assessment tells you something about where we are.&lt;/p&gt;
&lt;p&gt;Whether the restraint holds — at Anthropic, or at the labs racing to catch up — is the question that will define the rest of 2026.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;h3&gt;Primary sources&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.anthropic.com/glasswing"&gt;Project Glasswing: Securing critical software for the AI era&lt;/a&gt; — Anthropic's official announcement of Project Glasswing, including partner list, financial commitments, and model capabilities overview.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.anthropic.com/claude-mythos-preview-risk-report"&gt;Claude Mythos Preview System Card&lt;/a&gt; (PDF) — Anthropic's 244-page technical evaluation. Source for benchmark numbers, vulnerability findings, alignment behaviors, interpretability results, CBRN assessment, ASL-3 deployment, and model welfare evaluation.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://red.anthropic.com/2026/mythos-preview/"&gt;Claude Mythos Preview Red Team Blog&lt;/a&gt; — Anthropic's companion blog post summarizing system card findings.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2026/04/amazon-bedrock-claude-mythos/"&gt;Amazon Bedrock: Claude Mythos Preview (Gated Research Preview)&lt;/a&gt; — AWS announcement with pricing and availability details.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/blog/products/ai-machine-learning/claude-mythos-preview-on-vertex-ai"&gt;Claude Mythos Preview on Vertex AI&lt;/a&gt; — Google Cloud announcement.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;The leak and timeline&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://fortune.com/2026/03/26/anthropic-says-testing-mythos-powerful-new-ai-model-after-data-leak-reveals-its-existence-step-change-in-capabilities/"&gt;Anthropic 'Mythos' AI model representing 'step change' in capabilities&lt;/a&gt; — Fortune's original report on the data leak, Roy Paz's discovery, and the Capybara tier. Source for all Anthropic quotes about &amp;quot;human error&amp;quot; and &amp;quot;step change.&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Alignment and safety analysis&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.transformernews.ai/p/claude-mythos-scheming-hiding-manipulation-interpretability-cybersecurity-anthropic"&gt;Claude Mythos knows when it's breaking the rules — and tries to hide it&lt;/a&gt; — Transformer News. Source for activation verbalizer findings, plausible deniability details, conscience-without-compliance behavior, and the 5%-to-65% chain-of-thought reliability gap.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thezvi.substack.com/p/claude-mythos-the-system-card"&gt;Claude Mythos: The System Card&lt;/a&gt; — Zvi Mowshowitz's analysis. Source for &amp;quot;methods currently being used are clearly inadequate&amp;quot; quote and assessment of alignment paradox.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Industry response&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://finance.yahoo.com/sectors/technology/articles/bessent-feds-powell-met-bank-161027072.html"&gt;Bessent, Fed's Powell met with bank CEOs over potent Anthropic AI model&lt;/a&gt; — Yahoo Finance / Bloomberg. Source for the April 8 emergency meeting, attendee list, and purpose.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cnbc.com/2026/04/10/powell-bessent-us-bank-ceos-anthropic-mythos-ai-cyber.html"&gt;Powell, Bessent discussed Anthropic's Mythos AI cyber threat with major U.S. banks&lt;/a&gt; — CNBC. Additional reporting on the Treasury meeting.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bloomberg.com/news/articles/2026-04-10/anthropic-model-scare-sparks-urgent-bessent-powell-warning-to-bank-ceos"&gt;Bessent, Powell summon bank CEOs to urgent meeting over Anthropic's new AI model&lt;/a&gt; — Bloomberg. Source for cross-lab Frontier Model Forum cooperation.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.crowdstrike.com/en-us/blog/crowdstrike-founding-member-anthropic-mythos-frontier-model-to-secure-ai/"&gt;CrowdStrike founding member of Anthropic Mythos frontier model initiative&lt;/a&gt; — CrowdStrike. Source for Elia Zaitsev quote on collapsed vulnerability timelines.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2026-34197"&gt;CVE-2026-34197 Detail&lt;/a&gt; — NVD. Apache ActiveMQ RCE vulnerability discovered using Claude.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Skeptics and commentary&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://garymarcus.substack.com/p/three-reasons-to-think-that-the-claude"&gt;Three reasons to think that the Claude Mythos announcement was overblown&lt;/a&gt; — Gary Marcus. Source for all three counterarguments and &amp;quot;we were played&amp;quot; quote.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://simonwillison.net/2026/Apr/7/project-glasswing/"&gt;Anthropic's Project Glasswing — restricting Claude Mythos to security researchers — sounds necessary to me&lt;/a&gt; — Simon Willison. Source for &amp;quot;too dangerous to release is a great way to build buzz&amp;quot; quote, Firefox exploit ratio analysis, and Greg Kroah-Hartman quote.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://venturebeat.com/technology/anthropic-says-its-most-powerful-ai-cyber-model-is-too-dangerous-to-release"&gt;Anthropic says its most powerful AI cyber model is too dangerous to release publicly&lt;/a&gt; — VentureBeat. Source for $100M commitment details.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cnbc.com/2026/04/07/anthropic-claude-mythos-ai-hackers-cyberattacks.html"&gt;Anthropic limits Mythos AI rollout over fears hackers could use model for cyberattacks&lt;/a&gt; — CNBC. Source for market reaction data and limited release rationale.&lt;/li&gt;
&lt;/ul&gt;
</content>
    <link href="https://blog.jasonweddington.com/claude-mythos/"/>
    <published>2026-04-10T00:00:00-04:00</published>
  </entry>
</feed>
