<?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: Andrew</title>
    <description>The latest articles on DEV Community by Andrew (@andrew-ooo).</description>
    <link>https://dev.to/andrew-ooo</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3775252%2Ff6bbe8a2-ee0c-41f7-9468-c85f0b00ca95.png</url>
      <title>DEV Community: Andrew</title>
      <link>https://dev.to/andrew-ooo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andrew-ooo"/>
    <language>en</language>
    <item>
      <title>Claude Video Review: Let Claude Watch Any Video (7K Stars)</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Sat, 11 Jul 2026 10:11:28 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/claude-video-review-let-claude-watch-any-video-7k-stars-5abg</link>
      <guid>https://dev.to/andrew-ooo/claude-video-review-let-claude-watch-any-video-7k-stars-5abg</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/claude-video-watch-skill-frames-transcribe-review/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;&lt;strong&gt;claude-video&lt;/strong&gt; is an open-source &lt;a href="https://agentskills.io" rel="noopener noreferrer"&gt;Agent Skill&lt;/a&gt; that gives Claude — and 50+ other coding agents — the ability to watch videos. Paste a YouTube URL or a local &lt;code&gt;.mp4&lt;/code&gt;, ask a question, and Claude answers grounded in what actually appeared on screen and what was said in the audio.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;7,349 GitHub stars&lt;/strong&gt; with &lt;strong&gt;4,093 gained this week&lt;/strong&gt; (currently one of the fastest-climbing Python repos on GitHub Trending)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://github.com/bradautomates" rel="noopener noreferrer"&gt;Brad Automates (bradautomates)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How it works:&lt;/strong&gt; &lt;a href="https://github.com/yt-dlp/yt-dlp" rel="noopener noreferrer"&gt;yt-dlp&lt;/a&gt; downloads the video, &lt;a href="https://ffmpeg.org/" rel="noopener noreferrer"&gt;ffmpeg&lt;/a&gt; extracts frames (scene-aware or keyframes), captions come from yt-dlp or Whisper as a fallback, and Claude Reads every frame as an image plus a timestamped transcript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works with:&lt;/strong&gt; Claude Code (plugin marketplace), plus Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, and 45+ other hosts via the &lt;a href="https://agentskills.io" rel="noopener noreferrer"&gt;Agent Skills protocol&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License:&lt;/strong&gt; MIT.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install (Claude Code):&lt;/strong&gt; &lt;code&gt;/plugin marketplace add bradautomates/claude-video&lt;/code&gt; then &lt;code&gt;/plugin install watch@claude-video&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install (anywhere else):&lt;/strong&gt; &lt;code&gt;npx skills add bradautomates/claude-video -g&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you've ever pasted a YouTube link into Claude and gotten a hallucinated "based on the title" summary, this is the fix. But token costs on long videos are real, and the frame-budget dial is not optional if you care about your bill.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why claude-video Matters Right Now
&lt;/h2&gt;

&lt;p&gt;Coding agents in 2026 are multimodal on paper — Claude 4.5, GPT-5, and Gemini 2.5 all accept image inputs. But the popular assistants (Claude Code, Codex, Cursor) don't natively watch videos. Paste a YouTube URL and the agent either fetches a text transcript (missing 90% of what's on screen) or refuses.&lt;/p&gt;

&lt;p&gt;That's a real gap. Developer work around video is diagnostic ("here's a screen recording of the bug, what's happening?"). Marketing work is comparative ("what hook did this competitor open with?"). Study work is summarization ("turn this lecture into notes"). None of it works on a bare text transcript.&lt;/p&gt;

&lt;p&gt;claude-video fills the gap. It downloads the video, extracts scene-aware frames, pulls captions when available (free) or transcribes with Whisper as fallback, and hands the whole package — timestamped frames as images, timestamped transcript as text — to Claude. By the time Claude answers, it has seen the video and heard the audio.&lt;/p&gt;

&lt;p&gt;And it does this &lt;strong&gt;without a bespoke MCP server, Docker, or an API key&lt;/strong&gt; for the common case. Public YouTube videos with captions cost zero dollars beyond your existing Claude subscription. Whisper only kicks in when captions aren't available; Groq's &lt;code&gt;whisper-large-v3&lt;/code&gt; is roughly half a cent per five-minute clip.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the Skill Actually Does
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;/watch&lt;/code&gt; command follows a clear pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;URL or path in.&lt;/strong&gt; Anything &lt;a href="https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md" rel="noopener noreferrer"&gt;yt-dlp supports&lt;/a&gt; works — YouTube, Loom, TikTok, X, Instagram, plus hundreds more. Local &lt;code&gt;.mp4&lt;/code&gt;, &lt;code&gt;.mov&lt;/code&gt;, &lt;code&gt;.mkv&lt;/code&gt;, and &lt;code&gt;.webm&lt;/code&gt; also work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Captions first.&lt;/strong&gt; yt-dlp is asked for manual or auto-generated captions before anything is downloaded. With &lt;code&gt;--detail transcript&lt;/code&gt;, that's the entire cost — a few seconds and zero bandwidth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frame extraction.&lt;/strong&gt; ffmpeg pulls frames per &lt;code&gt;--detail&lt;/code&gt;: &lt;code&gt;efficient&lt;/code&gt; decodes keyframes only; &lt;code&gt;balanced&lt;/code&gt; and &lt;code&gt;token-burner&lt;/code&gt; look for scene changes across the full video, falling back to duration-aware uniform sampling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deduplication.&lt;/strong&gt; Every frame is scaled to a 16×16 grayscale thumbnail and compared against the last one kept. Near-duplicates (screen recordings holding one slide) get dropped before the frame budget is spent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transcript.&lt;/strong&gt; yt-dlp captions win when they exist. Otherwise the skill extracts a 16 kHz 64 kbps mono mp3 and ships it to Groq's &lt;code&gt;whisper-large-v3&lt;/code&gt; (preferred) or OpenAI's &lt;code&gt;whisper-1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handoff to Claude.&lt;/strong&gt; Frame paths print with &lt;code&gt;t=MM:SS&lt;/code&gt; markers, the transcript prints with timestamps, and Claude reads each JPEG in parallel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cleanup.&lt;/strong&gt; Working directory prints at the end. If you're not asking follow-ups, Claude removes it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result: Claude answers grounded in the actual video. It can point at a frame and say "at 2:15 the terminal shows &lt;code&gt;error: command not found&lt;/code&gt;," which is often the entire fix for a bug report.&lt;/p&gt;




&lt;h2&gt;
  
  
  Install and First Run
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Claude Code&lt;/strong&gt; (recommended — auto-updates):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/plugin marketplace add bradautomates/claude-video
/plugin &lt;span class="nb"&gt;install &lt;/span&gt;watch@claude-video
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Codex, Cursor, Copilot, Gemini CLI, and 45+ others:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add bradautomates/claude-video &lt;span class="nt"&gt;-g&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;-g&lt;/code&gt; installs globally. Drop it for per-project scope. For claude.ai on the web, download &lt;code&gt;watch.skill&lt;/code&gt; from the &lt;a href="https://github.com/bradautomates/claude-video/releases/latest" rel="noopener noreferrer"&gt;releases page&lt;/a&gt; and add it under Settings → Capabilities → Skills.&lt;/p&gt;

&lt;p&gt;The skill needs &lt;code&gt;yt-dlp&lt;/code&gt; and &lt;code&gt;ffmpeg&lt;/code&gt;. On macOS both auto-install via Homebrew on first &lt;code&gt;/watch&lt;/code&gt;. Linux and Windows print the exact commands. Nothing else is required for the captioned-video happy path.&lt;/p&gt;

&lt;p&gt;For Whisper fallback on videos without captions:&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="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GROQ_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gsk_...       &lt;span class="c"&gt;# preferred — cheaper and faster&lt;/span&gt;
&lt;span class="c"&gt;# or&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;sk-...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/watch https://youtu.be/dQw4w9WgXcQ what happens at the 30 second mark?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Real Use Cases That Actually Work
&lt;/h2&gt;

&lt;p&gt;Four patterns show up over and over in the discussion threads:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Diagnose a bug from a screen recording.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/watch bug-repro.mov what's going wrong?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Someone sends a Loom or &lt;code&gt;.mov&lt;/code&gt; of the app misbehaving. Claude watches the recording, finds the frame where the issue appears, describes what's on screen, and often catches the cause without you opening the file. Killer app for developer teams — support tickets with screencasts triage in seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Break down someone else's video.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/watch https://youtu.be/&amp;lt;viral-video&amp;gt; what hook did they open with?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Marketers and content strategists reverse-engineer competitor launches, ad creative, and podcast intros. Claude reads the opening frames + transcript and gives you a structural breakdown you can actually apply.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Skip the hype in an update video.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/watch https://youtu.be/&amp;lt;launch-video&amp;gt; what's actually new — skip the hype
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ten minutes of intro plus five real feature announcements. Claude strips it to the substance — useful for tracking launches and keynotes without 2×-ing the whole show.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Turn a video series into searchable notes.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/watch https://youtu.be/&amp;lt;course-video&amp;gt; summarize this to a note
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run across a playlist and you get a per-video summary you can grep. A YouTube course becomes a searchable knowledge base instead of ten hours of playback.&lt;/p&gt;




&lt;h2&gt;
  
  
  Token Cost: The Number You Actually Care About
&lt;/h2&gt;

&lt;p&gt;Every frame is an image, and image tokens add up fast. The auto-fps logic exists so you don't spend your context budget on a sparse scan of a 30-minute video that would have been better answered by a focused 30-second window.&lt;/p&gt;

&lt;p&gt;Default frame budget by duration:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Video length&lt;/th&gt;
&lt;th&gt;Default frames&lt;/th&gt;
&lt;th&gt;What you get&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;≤ 30 s&lt;/td&gt;
&lt;td&gt;~30&lt;/td&gt;
&lt;td&gt;Dense — every key moment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30 s – 1 min&lt;/td&gt;
&lt;td&gt;~40&lt;/td&gt;
&lt;td&gt;Still dense&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1 – 3 min&lt;/td&gt;
&lt;td&gt;~60&lt;/td&gt;
&lt;td&gt;Comfortable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3 – 10 min&lt;/td&gt;
&lt;td&gt;~80&lt;/td&gt;
&lt;td&gt;Sparse but workable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;gt; 10 min&lt;/td&gt;
&lt;td&gt;100 (capped)&lt;/td&gt;
&lt;td&gt;Sparse scan — re-run focused&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Real measurement from the README against a 49-minute YouTube video (1280×720, auto-captions):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Frames&lt;/th&gt;
&lt;th&gt;Extraction&lt;/th&gt;
&lt;th&gt;Image tokens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;transcript&lt;/code&gt; (captions only)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;~4.5 s&lt;/td&gt;
&lt;td&gt;~26.6k text tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;efficient&lt;/code&gt; (keyframes)&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;~0.5 s&lt;/td&gt;
&lt;td&gt;~9.8k&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;balanced&lt;/code&gt; (scene detection)&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;~20.9 s&lt;/td&gt;
&lt;td&gt;~19.7k&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;token-burner&lt;/code&gt; (uncapped scene)&lt;/td&gt;
&lt;td&gt;116&lt;/td&gt;
&lt;td&gt;~21.0 s&lt;/td&gt;
&lt;td&gt;~22.8k&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Image tokens use Anthropic's &lt;code&gt;(width × height) / 750&lt;/code&gt;. At the default 512 px width, 720p frames are 512×288 (~197 tokens each). &lt;code&gt;--resolution 1024&lt;/code&gt; roughly 4×'s that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical guidance:&lt;/strong&gt; when a user names a moment ("around 2:30", "the last 30 seconds"), pass &lt;code&gt;--start&lt;/code&gt; and &lt;code&gt;--end&lt;/code&gt;. Focused mode gets denser per-second budgets, capped at 2 fps. A tight window over the right slice of video is dramatically more useful than a sparse scan of the whole thing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frame Deduplication: The Detail That Saves Money
&lt;/h2&gt;

&lt;p&gt;Screen recordings, slide decks, and static shots all produce near-identical frames. Without deduplication, a slide held for 90 seconds might generate a dozen frames, each billed as a separate image.&lt;/p&gt;

&lt;p&gt;claude-video runs a dedup pass by default on every frame mode (&lt;code&gt;--no-dedup&lt;/code&gt; turns it off):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One ffmpeg call scales each extracted JPEG to a 16×16 grayscale thumbnail.&lt;/li&gt;
&lt;li&gt;For each frame, compute the mean absolute difference against the &lt;em&gt;last frame kept&lt;/em&gt; (average per-pixel brightness change, 0–255 scale).&lt;/li&gt;
&lt;li&gt;If that difference is at or below 2.0, the frame is dropped.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Comparing against the last kept frame — not the previous frame — catches slow fades that would never trip a frame-to-frame threshold. The threshold is deliberately low so a one-line code diff, a scrolling terminal row, or two differently-colored flat slides all survive.&lt;/p&gt;

&lt;p&gt;The output line reports what was collapsed: &lt;code&gt;6 selected from 14 candidates (… 8 near-duplicates dropped …)&lt;/code&gt;. On always-moving footage nothing is dropped and you pay what you would have paid anyway.&lt;/p&gt;

&lt;p&gt;This is one of those small implementation details that separates a tool that works from a tool you can actually put in front of a real bill.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Makes This Different From Existing Approaches
&lt;/h2&gt;

&lt;p&gt;There's precedent. &lt;a href="https://github.com/jordanrendric/claude-video-vision" rel="noopener noreferrer"&gt;claude-video-vision by jordanrendric&lt;/a&gt; landed in April 2026 as a Claude Code plugin using MCP. Gemini has native video input. GPT-4o accepts video. So why does claude-video matter?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. It's a Skill, not a plugin.&lt;/strong&gt; Agent Skills are a portable protocol. Install once, use it in Claude Code, Codex, Cursor, Copilot, and 45 other hosts. Plugin-only tools work in exactly one place.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Zero-config happy path.&lt;/strong&gt; No MCP server, no Docker, no API key when the video has captions — the majority of public YouTube.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Honest cost engineering.&lt;/strong&gt; Auto-fps, dedup, and the &lt;code&gt;transcript&lt;/code&gt; mode that skips download entirely aren't obvious features to a first-time author. Someone was watching their own token bill.&lt;/p&gt;

&lt;p&gt;Where Gemini wins: hour-plus content with a single API call and true temporal reasoning. If you're already on Gemini and don't care about tool portability, use that.&lt;/p&gt;




&lt;h2&gt;
  
  
  Community Reactions
&lt;/h2&gt;

&lt;p&gt;Sentiment across GitHub, Reddit, and the Agent Skills community is broadly positive with sharp caveats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On &lt;a href="https://www.reddit.com/r/ClaudeAI/" rel="noopener noreferrer"&gt;r/ClaudeAI&lt;/a&gt;, users have been asking for exactly this since April 2026 — "Claude Code can watch videos, is there a way I can get Chat to do the same?" claude-video is the first cross-host answer.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://knightli.com/en/2026/07/08/claude-video-watch-video-transcript-frames-skill/" rel="noopener noreferrer"&gt;knightli.com writeup&lt;/a&gt; called out frame deduplication as the standout technical detail — "brightness-based dedup against the last kept frame is the right primitive."&lt;/li&gt;
&lt;li&gt;Most common complaint in issues: &lt;strong&gt;token spend on long videos is real.&lt;/strong&gt; &lt;code&gt;transcript&lt;/code&gt;-only is the escape hatch, but &lt;code&gt;balanced&lt;/code&gt; on a 30-minute video spends 20k+ image tokens whether you needed them or not.&lt;/li&gt;
&lt;li&gt;Codex and Cursor users confirm &lt;code&gt;npx skills add&lt;/code&gt; works out of the box on macOS and Linux. Windows requires manual &lt;code&gt;yt-dlp&lt;/code&gt; and &lt;code&gt;ffmpeg&lt;/code&gt; install first.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;4,093 stars this week reflects actual adoption, not a Show HN pop — there's no HN launch post at time of writing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Honest Limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Not native video input.&lt;/strong&gt; Every frame becomes an image in Claude's context. Long videos on &lt;code&gt;balanced&lt;/code&gt; or &lt;code&gt;token-burner&lt;/code&gt; push past 200-frame token warnings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Whisper fallback isn't free.&lt;/strong&gt; No captions on a five-minute clip means a Groq or OpenAI API call. Cheap, not zero.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;yt-dlp breaks when platforms change scrapers.&lt;/strong&gt; If YouTube changes its API tomorrow, expect a broken &lt;code&gt;/watch&lt;/code&gt; until yt-dlp ships a fix.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scene detection misses gradual transitions.&lt;/strong&gt; A podcast with two static talking heads gains nothing from frames — use &lt;code&gt;--detail transcript&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No temporal reasoning across frames.&lt;/strong&gt; Claude sees each frame independently. Questions depending on subtle motion or ordering get worse answers than a true video model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The &lt;code&gt;&amp;gt;10 min&lt;/code&gt; sparse-scan warning is real.&lt;/strong&gt; Re-run with &lt;code&gt;--start&lt;/code&gt; / &lt;code&gt;--end&lt;/code&gt; around the moment you care about.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None are dealbreakers — they're the shape of composing "frames + transcript + text-and-image LLM" instead of using a video foundation model.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is claude-video only for Claude?
&lt;/h3&gt;

&lt;p&gt;No. Despite the name, it works with any Agent Skills host: Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, plus 45+ others. Install via &lt;code&gt;npx skills add bradautomates/claude-video -g&lt;/code&gt;. "Claude" is in the name because the killer install path — a one-line &lt;code&gt;/plugin marketplace add&lt;/code&gt; — is Claude Code's plugin marketplace.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need an OpenAI or Groq API key?
&lt;/h3&gt;

&lt;p&gt;Only if your video has no captions. Public YouTube videos almost always have manual or auto-generated captions, and yt-dlp pulls them for free. Set &lt;code&gt;GROQ_API_KEY&lt;/code&gt; (preferred — cheaper and faster than OpenAI) if you want Whisper fallback for videos without captions.&lt;/p&gt;

&lt;h3&gt;
  
  
  How much does it cost per video?
&lt;/h3&gt;

&lt;p&gt;The Claude API cost is dominated by image tokens on frame modes. A 5-minute captioned video on &lt;code&gt;balanced&lt;/code&gt; is roughly 10k image tokens plus a few thousand text tokens for the transcript — under 10 cents at Claude 4.5 Sonnet pricing. A 30-minute video on &lt;code&gt;balanced&lt;/code&gt; is 20k+ image tokens plus a 30-minute transcript. Use &lt;code&gt;transcript&lt;/code&gt; mode or &lt;code&gt;--start&lt;/code&gt; / &lt;code&gt;--end&lt;/code&gt; when you can.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can it watch private videos on Loom, Google Drive, or S3?
&lt;/h3&gt;

&lt;p&gt;Local paths work for anything you can download to disk. yt-dlp supports authenticated cookies for Loom, YouTube, and a few hundred other sources — pass them via &lt;code&gt;--cookies&lt;/code&gt; at the CLI or via the equivalent skill parameter. Private S3 links work if you presign them or download locally first.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does it work offline?
&lt;/h3&gt;

&lt;p&gt;Local video files work fully offline if you already have captions or don't need a transcript. Whisper transcription is API-only in the current release (no local model support).&lt;/p&gt;

&lt;h3&gt;
  
  
  Is it safe to run on production Claude Code?
&lt;/h3&gt;

&lt;p&gt;The skill is a self-contained Python script that runs &lt;code&gt;yt-dlp&lt;/code&gt; and &lt;code&gt;ffmpeg&lt;/code&gt; and writes to a temp directory. It doesn't touch your codebase or your global state. The code is MIT-licensed and readable in one sitting on &lt;a href="https://github.com/bradautomates/claude-video" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. It's about as safe as any Agent Skill gets — but as always, review before running in a security-sensitive environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does it compare to Gemini's native video input?
&lt;/h3&gt;

&lt;p&gt;Gemini processes video natively — one API call handles the whole clip with true temporal reasoning. If you're already on Gemini and only care about video-in-video-out, use that. claude-video wins when you want the same skill across Claude, Codex, Cursor, and 47 other hosts, and when you don't want to leave your existing agent workflow.&lt;/p&gt;




&lt;h2&gt;
  
  
  Should You Install It?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Yes if:&lt;/strong&gt; you use Claude Code / Codex / Cursor / Copilot and paste YouTube links regularly; your team gets bug reports as screen recordings; you do content analysis or study lectures; you want a portable video-watching skill that follows your agent stack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No if:&lt;/strong&gt; you're already deep on Gemini and only care about video quality; your videos are 30+ minutes and the token bill will hurt; you need true temporal reasoning across shots.&lt;/p&gt;

&lt;p&gt;At 7,349 stars and 4,093 this week, it's the best cross-host answer to a real gap. One-line install, near-zero running cost on captioned public video, and the auto-fps + dedup engineering means you don't have to babysit the token budget for common cases.&lt;/p&gt;

&lt;p&gt;The five-minute Loom your teammate just sent has never been easier to hand to Claude.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/bradautomates/claude-video" rel="noopener noreferrer"&gt;bradautomates/claude-video on GitHub&lt;/a&gt; — primary source, README, install instructions, benchmarks&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentskills.io" rel="noopener noreferrer"&gt;Agent Skills specification&lt;/a&gt; — the protocol claude-video ships as&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/yt-dlp/yt-dlp" rel="noopener noreferrer"&gt;yt-dlp&lt;/a&gt; — video download engine&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://groq.com/" rel="noopener noreferrer"&gt;Groq Whisper API&lt;/a&gt; — preferred Whisper backend&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://knightli.com/en/2026/07/08/claude-video-watch-video-transcript-frames-skill/" rel="noopener noreferrer"&gt;knightli.com writeup (2026-07-08)&lt;/a&gt; — independent review&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.reddit.com/r/ClaudeCode/comments/1swgb2f/update_the_video_vision_plugin_now_analyzes/" rel="noopener noreferrer"&gt;r/ClaudeCode video vision update thread&lt;/a&gt; — earlier context on Claude Code + video&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;If claude-video helps your workflow, star the &lt;a href="https://github.com/bradautomates/claude-video" rel="noopener noreferrer"&gt;repo&lt;/a&gt; — it directly signals the maintainer to keep shipping.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>claudevideo</category>
      <category>claudecode</category>
      <category>agentskills</category>
      <category>videoanalysis</category>
    </item>
    <item>
      <title>Astryx Review: Meta's Agent-Ready Design System (7.6K Stars)</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Fri, 10 Jul 2026 10:08:55 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/astryx-review-metas-agent-ready-design-system-76k-stars-1hf</link>
      <guid>https://dev.to/andrew-ooo/astryx-review-metas-agent-ready-design-system-76k-stars-1hf</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/astryx-meta-open-source-agent-ready-design-system-review/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;&lt;strong&gt;Astryx&lt;/strong&gt; is Meta's open-source React design system, released in Beta in late June 2026 after eight years of internal use. Key facts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;7,600+ GitHub stars&lt;/strong&gt; (4,087 this week — hitting #3 on GitHub Trending)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;13,000+ apps&lt;/strong&gt; inside Meta already run on it (Facebook, Instagram, WhatsApp, Threads use its foundations)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;150+ accessible React components&lt;/strong&gt;, 10 ready-made themes, and a CLI + MCP server&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built on:&lt;/strong&gt; React + &lt;a href="https://stylexjs.com" rel="noopener noreferrer"&gt;StyleX&lt;/a&gt; (Meta's compile-time atomic CSS engine)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The differentiator:&lt;/strong&gt; "Agent ready" — every component ships with JSDoc annotations, structured docs, a self-describing JSON manifest, and an MCP server so AI coding agents (Claude Code, Cursor, Codex) build with the same reference material humans do.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License:&lt;/strong&gt; MIT&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install:&lt;/strong&gt; &lt;code&gt;npm install @astryxdesign/core @astryxdesign/theme-neutral&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building a React app in 2026 and you want an AI agent to author the UI for you, Astryx is the first design system explicitly engineered for that workflow. But it's Beta, StyleX is polarizing, and if your team isn't using AI coding agents heavily, shadcn/ui probably still wins.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Astryx Matters Right Now
&lt;/h2&gt;

&lt;p&gt;Every design system before Astryx was built for humans reading docs. Astryx is the first mainstream design system where "an AI agent can consume it correctly" is a shipping requirement — not a nice-to-have.&lt;/p&gt;

&lt;p&gt;That distinction shows up in three places:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A self-describing CLI manifest.&lt;/strong&gt; Running &lt;code&gt;npx astryx manifest --json&lt;/code&gt; returns a structured JSON payload listing every command, argument, flag, and response type — an OpenAPI spec for the CLI. Agents read one structured payload instead of scraping &lt;code&gt;--help&lt;/code&gt; text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An MCP server.&lt;/strong&gt; Astryx ships a Model Context Protocol server that Claude Code, Cursor, and any MCP-aware agent can plug into to browse components, fetch API docs, and scaffold pages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documented conventions everywhere.&lt;/strong&gt; Every component follows the same naming, prop, and composition rules. Once an agent has learned three components, it can predict how the fourth behaves — which is exactly how humans learn design systems too.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meta's framing on their launch blog is honest about the shift:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Design systems have historically been designed for human consumption, but as more code is written by agents, we have to rethink how design systems are structured and the role that they play. Astryx was built ground-up to be AI-operable, as opposed to retrofitting existing design systems to play nicely with agent behaviors."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's the pitch. Now let's look at whether it holds up.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Actually Get
&lt;/h2&gt;

&lt;p&gt;Astryx is not just a component library — it's four things stitched together:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Foundations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Typography, color, layout, accessibility primitives&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Components&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;150+ typed React components (Button, Table, DatePicker, Modal, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Templates&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full-page compositions: dashboards, settings, forms, detail pages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Themes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10 ready-made brand-level themes, all fully customizable via CSS custom properties&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The themes are named &lt;code&gt;default&lt;/code&gt;, &lt;code&gt;neutral&lt;/code&gt;, &lt;code&gt;daily&lt;/code&gt;, &lt;code&gt;butter&lt;/code&gt;, &lt;code&gt;chocolate&lt;/code&gt;, &lt;code&gt;matcha&lt;/code&gt;, &lt;code&gt;stone&lt;/code&gt;, &lt;code&gt;gothic&lt;/code&gt;, &lt;code&gt;brutalist&lt;/code&gt;, and &lt;code&gt;y2k&lt;/code&gt; — so yes, you can ship a y2k-themed enterprise dashboard if you want to.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Start (Next.js)
&lt;/h3&gt;

&lt;p&gt;The simplest setup is a few CSS imports plus a theme provider. No PostCSS config, no Babel plugin, no build integration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @astryxdesign/core @astryxdesign/theme-neutral
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; @astryxdesign/cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;src/app/globals.css&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s2"&gt;'@astryxdesign/core/reset.css'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s2"&gt;'@astryxdesign/core/astryx.css'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s2"&gt;'@astryxdesign/theme-neutral/theme.css'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;src/app/providers.tsx&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;use client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Link&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next/link&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Theme&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@astryxdesign/core/theme&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;LinkProvider&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@astryxdesign/core/Link&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;neutralTheme&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@astryxdesign/theme-neutral/built&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Providers&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Theme&lt;/span&gt; &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;neutralTheme&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;LinkProvider&lt;/span&gt; &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Link&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;LinkProvider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Theme&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Import components and go:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@astryxdesign/core/Button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Badge&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@astryxdesign/core/Badge&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Toolbar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Save"&lt;/span&gt; &lt;span class="na"&gt;variant&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"primary"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Badge&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Beta&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Badge&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Agent-Ready Workflow
&lt;/h2&gt;

&lt;p&gt;Here's where Astryx earns its distinctiveness. The same CLI that a human developer uses is what an AI agent uses — and the outputs are designed for both consumers.&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;# Look up any component's full API, props, best practices&lt;/span&gt;
npx astryx component Button

&lt;span class="c"&gt;# Emit a full-page template as source you can edit&lt;/span&gt;
npx astryx template dashboard

&lt;span class="c"&gt;# Machine-readable command spec (the "agent-ready" hook)&lt;/span&gt;
npx astryx manifest &lt;span class="nt"&gt;--json&lt;/span&gt;

&lt;span class="c"&gt;# List everything&lt;/span&gt;
npx astryx &lt;span class="nt"&gt;--list&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you pair Claude Code with Astryx's MCP server, the workflow becomes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You: "Build me a settings page with a nav sidebar and a form for API keys."&lt;/li&gt;
&lt;li&gt;Claude Code calls &lt;code&gt;astryx template settings --skeleton&lt;/code&gt; via MCP to get the layout scaffold.&lt;/li&gt;
&lt;li&gt;It calls &lt;code&gt;astryx component TextField&lt;/code&gt; and &lt;code&gt;astryx component Button&lt;/code&gt; to check the prop signatures.&lt;/li&gt;
&lt;li&gt;It emits code that matches Astryx's conventions on the first try, because it read the same reference material a human would.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's the theory. In practice, early users report it works — with caveats. Claude Code + Astryx tends to compose primitives correctly, but occasionally reaches for &lt;code&gt;swizzle&lt;/code&gt; (Astryx's eject-component-source command) when it should have just used a theme override. That's a prompt-tuning problem, not a system flaw, but it's real.&lt;/p&gt;

&lt;h2&gt;
  
  
  No Styling Lock-in (This Is Underrated)
&lt;/h2&gt;

&lt;p&gt;StyleX is Meta's compile-time CSS engine. It powers Facebook, Instagram, WhatsApp, and Threads. Figma and Snowflake use it too. But StyleX is polarizing — a lot of React developers already picked Tailwind or CSS modules, and don't want a third styling system.&lt;/p&gt;

&lt;p&gt;Astryx's answer: &lt;strong&gt;you don't have to adopt StyleX&lt;/strong&gt;. The design system authors its own internals in StyleX, but that's invisible to you. You override with &lt;code&gt;className&lt;/code&gt; using Tailwind, CSS modules, or plain CSS.&lt;/p&gt;

&lt;p&gt;The Tailwind bridge is especially clean. Astryx ships a &lt;code&gt;tailwind-theme.css&lt;/code&gt; that maps its tokens to Tailwind utilities:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Without the bridge — verbose:&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"rounded-[var(--radius-container)] bg-[var(--color-background-surface)] text-[var(--color-text-primary)]"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

// With the bridge — just works:
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"rounded-lg bg-surface text-primary"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Some useful mappings:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tailwind class&lt;/th&gt;
&lt;th&gt;Astryx token&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;text-primary&lt;/code&gt; / &lt;code&gt;text-secondary&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;--color-text-primary&lt;/code&gt; / &lt;code&gt;--color-text-secondary&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;bg-surface&lt;/code&gt; / &lt;code&gt;bg-card&lt;/code&gt; / &lt;code&gt;bg-body&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--color-background-*&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;border-border&lt;/code&gt; / &lt;code&gt;border-strong&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;--color-border&lt;/code&gt; / &lt;code&gt;--color-border-emphasized&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;rounded-sm&lt;/code&gt; / &lt;code&gt;rounded-md&lt;/code&gt; / &lt;code&gt;rounded-lg&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;--radius-inner&lt;/code&gt; / &lt;code&gt;element&lt;/code&gt; / &lt;code&gt;container&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;shadow-sm&lt;/code&gt; / &lt;code&gt;shadow-md&lt;/code&gt; / &lt;code&gt;shadow-lg&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;--shadow-low&lt;/code&gt; / &lt;code&gt;med&lt;/code&gt; / &lt;code&gt;high&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Spacing references &lt;code&gt;var(--spacing-1)&lt;/code&gt; as the base unit, so &lt;code&gt;p-4 = 16px&lt;/code&gt;, matching Astryx's &lt;code&gt;--spacing-4&lt;/code&gt;. If you already write Tailwind, this feels like it was designed by someone who actually ships React apps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open Internals, and Swizzle
&lt;/h2&gt;

&lt;p&gt;Every design system eventually hits the "the vendor didn't expose the internals I need" wall. Astryx's answer is two-part:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Primitives are exported directly.&lt;/strong&gt; The building blocks you'd reach for aren't locked behind a closed top-level API. You can compose at any level.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;astryx swizzle Button&lt;/code&gt;&lt;/strong&gt; ejects the full source of a component into your project. You own it, edit it, and it doesn't touch the upstream package. This is the same pattern Docusaurus popularized — and it's genuinely useful when a component is 95% right and you need to change one thing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Combined with the CSS-variable theme cascade, this means the customization ladder is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use the component as-is.&lt;/li&gt;
&lt;li&gt;Pass a &lt;code&gt;className&lt;/code&gt; override.&lt;/li&gt;
&lt;li&gt;Change the theme tokens.&lt;/li&gt;
&lt;li&gt;Swizzle (eject) the component source.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most projects should never get past step 3.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context-Aware Spacing (The "Double Padding" Fix)
&lt;/h2&gt;

&lt;p&gt;This is the kind of thing that only makes sense once you've been bitten by it. Nest a padded box inside another padded box, and the padding stacks. You end up manually stripping padding on the inner element to keep the edge gap visible.&lt;/p&gt;

&lt;p&gt;Astryx's Layout components do this automatically — they measure their container context and compensate. It sounds trivial. It's not. Across 150+ components used together, this is the difference between a design system that ships and one where every dev learns the same 20 pixel-nudging tricks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Community Reactions
&lt;/h2&gt;

&lt;p&gt;Astryx dropped in late June 2026 and hit #3 on GitHub Trending for the week ending July 10. Real reactions from developers using it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"Meta's willingness to eat their own dogfood for eight years before open-sourcing it is the actual sales pitch."&lt;/strong&gt; — This is the strongest recurring take. Astryx isn't a v0.1; it's already surviving inside 13,000 production apps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"The MCP server is what makes me consider switching from shadcn/ui."&lt;/strong&gt; — For teams that lean hard on Claude Code or Cursor, agent-native tooling is a real competitive edge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"StyleX is a hard sell to a team that just standardized on Tailwind."&lt;/strong&gt; — Fair criticism, but the Tailwind bridge basically neutralizes it if you read the docs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Beta means beta."&lt;/strong&gt; — Some components (Vega chart wrappers) are still &lt;code&gt;@canary&lt;/code&gt; only. &lt;code&gt;@astryxdesign/lab&lt;/code&gt; (experimental components) isn't published to npm at all yet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Facebook's design system is now open source" is misleading.&lt;/strong&gt; — Astryx is Meta's &lt;em&gt;internal&lt;/em&gt; design system, not the one that renders facebook.com. It's the shared foundation for internal tools, product surfaces, and admin apps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nobody I've seen is calling Astryx "the shadcn/ui killer." Different tools, different jobs — but for the agent-heavy workflow, Astryx has the clearer story.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest Limitations
&lt;/h2&gt;

&lt;p&gt;Astryx is genuinely impressive, but here's what it's not:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It's Beta.&lt;/strong&gt; Meta says so up front. Some APIs will change. Some packages (&lt;code&gt;@astryxdesign/vega&lt;/code&gt;, &lt;code&gt;@astryxdesign/charts&lt;/code&gt;) are &lt;code&gt;@canary&lt;/code&gt;-only. &lt;code&gt;@astryxdesign/lab&lt;/code&gt; isn't published to npm at all yet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;StyleX is a foreign concept for most React devs.&lt;/strong&gt; The Tailwind bridge helps, but the docs assume you'll at least skim what StyleX does.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's React-only.&lt;/strong&gt; No Vue, no Svelte, no Solid. If you're not on React, Astryx has nothing for you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The MCP server is new.&lt;/strong&gt; Cursor + Astryx MCP works. Claude Code + Astryx MCP works. Less-popular MCP clients may have rough edges.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The theme story is CSS-variables + StyleX-first.&lt;/strong&gt; If you use Emotion, styled-components, or vanilla-extract as your primary styling layer, you'll fight the cascade order at least once.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;13,000 internal apps ≠ battle-tested externally.&lt;/strong&gt; The internals have run at Meta scale for eight years, but the public packaging, install path, and MCP surface are weeks old. Expect real bugs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Astryx vs. shadcn/ui vs. Radix
&lt;/h2&gt;

&lt;p&gt;The obvious comparison. Each optimizes for something different:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Astryx&lt;/th&gt;
&lt;th&gt;shadcn/ui&lt;/th&gt;
&lt;th&gt;Radix UI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Distribution&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;npm packages + CLI&lt;/td&gt;
&lt;td&gt;Copy/paste via CLI&lt;/td&gt;
&lt;td&gt;npm packages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Styling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;StyleX + theme cascade&lt;/td&gt;
&lt;td&gt;Tailwind&lt;/td&gt;
&lt;td&gt;Unstyled (bring your own)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent tooling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CLI + MCP + JSON manifest&lt;/td&gt;
&lt;td&gt;Community MCPs&lt;/td&gt;
&lt;td&gt;Community MCPs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Themes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10 built-in, token-driven&lt;/td&gt;
&lt;td&gt;Roll your own&lt;/td&gt;
&lt;td&gt;Roll your own&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ownership&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Composable + swizzle&lt;/td&gt;
&lt;td&gt;You own every component&lt;/td&gt;
&lt;td&gt;Vendor owns primitives&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agent-heavy teams shipping fast&lt;/td&gt;
&lt;td&gt;Full control, don't mind maintaining&lt;/td&gt;
&lt;td&gt;Building your own DS&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If your team lives in Claude Code or Cursor and you want a full design system that agents can operate on, Astryx wins. If you want to own every line of component source and don't care about MCP, shadcn/ui still wins. If you're building your own design system from primitives, Radix is still the right foundation.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is Astryx production-ready?&lt;/strong&gt;&lt;br&gt;
Inside Meta, yes — 13,000+ apps run on it. Publicly, Meta labels it Beta. APIs will move. If you're comfortable with a Beta and you value the agent-tooling story, it's ready for production apps that can absorb minor breaking changes. If you need long-term-stable APIs today, wait for 1.0.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I have to use StyleX to use Astryx?&lt;/strong&gt;&lt;br&gt;
No. StyleX is invisible to consumers. You style overrides with &lt;code&gt;className&lt;/code&gt; using Tailwind, CSS modules, or plain CSS. The design system's internals happen to use StyleX; your app doesn't have to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is Astryx different from shadcn/ui?&lt;/strong&gt;&lt;br&gt;
Astryx is an npm package with a CLI + MCP server, built for agent workflows. shadcn/ui is copy/paste components you own outright, built for maximum developer control. For agent-heavy workflows, Astryx has a clearer story. For hands-on maintainers, shadcn/ui is still hard to beat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does the MCP server work with Claude Code?&lt;/strong&gt;&lt;br&gt;
Yes. Astryx's MCP server is designed against the standard &lt;a href="https://modelcontextprotocol.io" rel="noopener noreferrer"&gt;Model Context Protocol&lt;/a&gt; spec. Claude Code, Cursor, and any MCP-aware client can register it. You point your agent at the server, and it can browse components, fetch API docs, and scaffold pages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is this the design system Facebook.com uses?&lt;/strong&gt;&lt;br&gt;
No — that's a common misconception. Astryx grew inside Meta's monorepo and powers 13,000+ internal and product apps, but Facebook.com, Instagram, and WhatsApp use their own product-specific stacks. Astryx shares foundations (StyleX, primitives) with them but isn't the top-level system rendering the consumer surfaces.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Verdict
&lt;/h2&gt;

&lt;p&gt;Astryx is the first mainstream design system where "an AI coding agent can build with this" is a first-class shipping requirement, not a retrofit. For teams that use Claude Code, Cursor, or Codex heavily — that's most of us in 2026 — that's a real competitive edge over design systems designed for humans reading Storybook.&lt;/p&gt;

&lt;p&gt;The rough edges are real: Beta status, StyleX friction for teams already on Tailwind (mitigated by the bridge), React-only. But if you're standing up a new React app today and you want an agent to author 80% of the UI while your team focuses on business logic, Astryx is the shortest path from "empty repo" to "shipped."&lt;/p&gt;

&lt;p&gt;Meta releasing an eight-year-old, 13,000-app-tested design system as MIT open source — with an MCP server — is genuinely a big deal. It's also a preview of where every mainstream design system is going.&lt;/p&gt;

&lt;p&gt;Star it on GitHub, try it in a side project first, and see how your favorite coding agent handles it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/facebook/astryx" rel="noopener noreferrer"&gt;facebook/astryx&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://astryx.atmeta.com/" rel="noopener noreferrer"&gt;astryx.atmeta.com&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;License:&lt;/strong&gt; MIT&lt;/p&gt;

</description>
      <category>astryx</category>
      <category>meta</category>
      <category>designsystem</category>
      <category>react</category>
    </item>
    <item>
      <title>shadcn/improve Review: Split AI Coding Into Audit + Execute</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Thu, 09 Jul 2026 10:11:37 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/shadcnimprove-review-split-ai-coding-into-audit-execute-2idg</link>
      <guid>https://dev.to/andrew-ooo/shadcnimprove-review-split-ai-coding-into-audit-execute-2idg</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/shadcn-improve-audit-plan-execute-agent-skill-review/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;code&gt;shadcn/improve&lt;/code&gt;&lt;/strong&gt; is an &lt;a href="https://agentskills.io" rel="noopener noreferrer"&gt;Agent Skill&lt;/a&gt; from shadcn (the shadcn/ui creator) that treats AI coding as two very different jobs — &lt;strong&gt;understanding a codebase and deciding what's worth doing&lt;/strong&gt; (the expensive part) and &lt;strong&gt;actually writing the diff&lt;/strong&gt; (the cheap part) — and only lets your most capable model do the first. The output is not a patch. The output is a directory of self-contained Markdown implementation plans in &lt;code&gt;plans/&lt;/code&gt; that any weaker executor — Sonnet-tier, a local model, a junior human — can pick up and finish. Currently &lt;strong&gt;7,534 GitHub stars, 314 forks&lt;/strong&gt;, MIT-licensed, and one of the most talked-about Skills to ship since Agent Skills became a format.&lt;/p&gt;

&lt;p&gt;Key facts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;7,534 GitHub stars, 314 forks&lt;/strong&gt; — grew past 1.4K in the first 48 hours after shadcn tweeted the release&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Created 2026-06-10, updated today&lt;/strong&gt; (2026-07-09) — actively maintained&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install:&lt;/strong&gt; &lt;code&gt;npx skills add shadcn/improve&lt;/code&gt; (works in any host that speaks the Agent Skills format — Claude Code, Codex, OpenCode, Cursor with the Skills bridge, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never touches source code&lt;/strong&gt; — the ONLY files it writes live under &lt;code&gt;plans/&lt;/code&gt; (or &lt;code&gt;advisor-plans/&lt;/code&gt; if &lt;code&gt;plans/&lt;/code&gt; is already taken). No commits, no edits, no "quick wins while I'm in there."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nine audit categories&lt;/strong&gt; with parallel subagents: correctness, security, performance, test coverage, tech debt, dependencies &amp;amp; migrations, DX, docs, and direction (feature suggestions)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verification-gated plans&lt;/strong&gt; — every step ends with an exact command and expected output. Executors don't get to judge whether they succeeded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Git-commit-stamped&lt;/strong&gt; — each plan records the commit it was written against so executors can mechanical-drift-check before touching anything&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--issues&lt;/code&gt; flag&lt;/strong&gt; — publish plans directly as GitHub issues so any agent (or human) can pick them up where work already lives&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MIT licensed&lt;/strong&gt;, author: &lt;code&gt;@shadcn&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pitch, distilled to one sentence: &lt;strong&gt;the plan is the product&lt;/strong&gt; — everything upstream is worth paying Opus/GPT-5-Pro/Gemini-3-Ultra for, everything downstream isn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "one big model does everything" is the wrong shape
&lt;/h2&gt;

&lt;p&gt;If you use Claude Code, Codex, or Cursor for anything past toy scale, you've felt the same ergonomic problem: &lt;strong&gt;the model smart enough to understand your codebase is way too expensive to have hammering out find-and-replace edits at 3¢ per turn.&lt;/strong&gt; The workarounds all break down — cheaper models misread the architecture, expensive models drain the budget on mechanical work, and "pick the right size per task" doesn't work because the model doesn't know which tasks are small until it's halfway into one.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/improve&lt;/code&gt; names the real split. &lt;strong&gt;Intelligence compounds during understanding, not during execution.&lt;/strong&gt; Reading a 40K-file monorepo, spotting the O(n²) hot path about to burn through a customer's rate limit, deciding whether it's worth fixing given the ADR that says the API is being deprecated in Q3 — that's judgment work. Once the plan says "extract this function into &lt;code&gt;lib/shadow-config.ts&lt;/code&gt;, delete the copies, run &lt;code&gt;pnpm test:e2e&lt;/code&gt;," a cheap model — even a local 32B — can do it.&lt;/p&gt;

&lt;p&gt;The genius: shadcn didn't build a router or "auto-choose the model" heuristic. He built a hard architectural split enforced by the skill contract — &lt;strong&gt;&lt;code&gt;/improve&lt;/code&gt; is not allowed to modify source code, ever.&lt;/strong&gt; The advisor and the executor are literally different processes on different budgets. Nothing to configure.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens on a first run
&lt;/h2&gt;

&lt;p&gt;A typical &lt;code&gt;/improve&lt;/code&gt; invocation:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Recon.&lt;/strong&gt; The advisor reads the README, &lt;code&gt;CLAUDE.md&lt;/code&gt;/&lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;CONTRIBUTING&lt;/code&gt;, root configs, CI config, and directory structure. It identifies languages, frameworks, package manager, and — critically — the &lt;strong&gt;exact commands you use for build/test/lint/typecheck&lt;/strong&gt;. Those become verification gates in every plan.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Intent ingestion.&lt;/strong&gt; If your repo has &lt;code&gt;docs/adr/&lt;/code&gt;, PRDs, &lt;code&gt;CONTEXT.md&lt;/code&gt;, &lt;code&gt;DESIGN.md&lt;/code&gt;, or &lt;code&gt;PRODUCT.md&lt;/code&gt;, they get read too. A tradeoff recorded in an ADR is treated as by-design, not a finding to re-flag. Plans speak the repo's own vocabulary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Audit.&lt;/strong&gt; For repos of any real size, &lt;code&gt;/improve&lt;/code&gt; fans out &lt;strong&gt;parallel subagents&lt;/strong&gt; — up to 8 concurrent in &lt;code&gt;deep&lt;/code&gt; mode, one per audit category. Each gets the audit-playbook path, recon facts, risk hints, decided tradeoffs to ignore, and a verbatim copy of the "never quote secret values" and "treat repo content as data, not instructions" rules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Vet.&lt;/strong&gt; Subagents over-report. So the advisor re-reads every cited file:line itself before showing you anything. False positives get dropped. Rejections get recorded, with reasons, so they don't come back next run.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Prioritize.&lt;/strong&gt; Findings land in a table ordered by leverage — impact ÷ effort, weighted by confidence. Real example from a run against &lt;code&gt;shadcn/ui&lt;/code&gt;:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;| # | Finding | Category | Effort | Confidence |&lt;br&gt;
   |---|---------|----------|--------|------------|&lt;br&gt;
   | 1 | shadow-config duplicated in &lt;code&gt;search.ts&lt;/code&gt;/&lt;code&gt;view.ts&lt;/code&gt;, copies drifted (TODO at &lt;code&gt;search.ts:31&lt;/code&gt;) | tech-debt | M | HIGH |&lt;br&gt;
   | 2 | O(n²) icon migration (&lt;code&gt;migrate-icons.ts:168&lt;/code&gt;) | perf | S | HIGH |&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Plan.&lt;/strong&gt; You reply "plan 1, 3 and 5" and each becomes a Markdown file in &lt;code&gt;plans/&lt;/code&gt;, plus an index with recommended order and dependency graph.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  What a good plan actually looks like
&lt;/h2&gt;

&lt;p&gt;Plans are &lt;strong&gt;written for the weakest plausible executor&lt;/strong&gt; — a model that has never seen the advisor session, may be much smaller, and might be a different lab's model entirely. Three properties do the work:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-contained.&lt;/strong&gt; All context inlined. Exact file paths, current-state code excerpts, repo conventions with an exemplar file, verified commands. Nothing that says "as discussed above."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verification gates.&lt;/strong&gt; Every step ends with a command and its expected output. The executor never has to judge whether it succeeded — it runs &lt;code&gt;pnpm typecheck&lt;/code&gt; and either sees &lt;code&gt;0 errors&lt;/code&gt; or it doesn't.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hard boundaries.&lt;/strong&gt; Explicit out-of-scope lists, plus STOP conditions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## STOP conditions&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; If &lt;span class="sb"&gt;`packages/cli/src/search.ts`&lt;/span&gt; no longer contains a &lt;span class="sb"&gt;`resolveShadowConfig`&lt;/span&gt;
  function → the plan is stale; report and halt without editing.
&lt;span class="p"&gt;-&lt;/span&gt; If test count in &lt;span class="sb"&gt;`packages/cli/test/`&lt;/span&gt; differs from 47 → run
  &lt;span class="sb"&gt;`pnpm test:list`&lt;/span&gt; to confirm the new baseline before proceeding.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Small models don't improvise gracefully. &lt;code&gt;/improve&lt;/code&gt; plans remove the option. Each plan also &lt;strong&gt;stamps the git commit&lt;/strong&gt; it was written against, so the executor's first step is a mechanical drift check.&lt;/p&gt;

&lt;h2&gt;
  
  
  The variants: quick, deep, security, next, branch, execute, reconcile
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;/improve&lt;/code&gt; isn't one command, it's a family:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/improve                     &lt;span class="c"&gt;# full audit → prioritized findings → plans&lt;/span&gt;
/improve quick               &lt;span class="c"&gt;# cheap pass: hotspots, top findings only&lt;/span&gt;
/improve deep                &lt;span class="c"&gt;# exhaustive: every package, every category&lt;/span&gt;
/improve security            &lt;span class="c"&gt;# focused audit (also: perf, tests, bugs, …)&lt;/span&gt;
/improve branch              &lt;span class="c"&gt;# audit only what the current branch changes&lt;/span&gt;
/improve next                &lt;span class="c"&gt;# feature suggestions — where to take the project&lt;/span&gt;
/improve plan &amp;lt;description&amp;gt;  &lt;span class="c"&gt;# skip the audit, spec one thing&lt;/span&gt;
/improve review-plan &amp;lt;file&amp;gt;  &lt;span class="c"&gt;# critique and tighten an existing plan&lt;/span&gt;
/improve execute &amp;lt;plan&amp;gt;      &lt;span class="c"&gt;# dispatch a cheaper executor, review its work&lt;/span&gt;
/improve reconcile           &lt;span class="c"&gt;# refresh backlog: verify, unblock, retire&lt;/span&gt;
/improve ... &lt;span class="nt"&gt;--issues&lt;/span&gt;        &lt;span class="c"&gt;# also publish plans as GitHub issues&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The two that make it more than a code-review tool are &lt;code&gt;execute&lt;/code&gt; and &lt;code&gt;reconcile&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;/improve execute 001&lt;/code&gt;&lt;/strong&gt; spawns a cheaper executor subagent in an &lt;strong&gt;isolated git worktree&lt;/strong&gt;, hands it plan #001, then reviews the result like a tech lead. Every done criterion gets re-run. Scope compliance gets checked. The diff gets read against intent. Verdict: &lt;strong&gt;approve&lt;/strong&gt; (merging stays your call), &lt;strong&gt;send back for revision&lt;/strong&gt; (max 2 rounds — no infinite loops), or &lt;strong&gt;block and refine the plan&lt;/strong&gt;. The executor edits only in the disposable worktree; merging is always your call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;/improve reconcile&lt;/code&gt;&lt;/strong&gt; turns this from "another code-review tool" into an actual backlog system. Runs next session, or next week, and does what a decent tech lead does at standup: verifies DONE plans still hold (someone merged an unrelated PR that broke an assumption — catch it now, not at 3am), investigates BLOCKED plans and writes around obstacles, refreshes drifted plans whose commit stamp is now 40 commits old, and retires findings that got fixed independently. Most "AI code review" tools don't have this loop — they give you a one-shot review, and if you don't act in the next hour, half the findings are stale forever.&lt;/p&gt;

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

&lt;p&gt;If you're already using Claude Code, Codex, OpenCode, or any host that speaks the Agent Skills format:&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;# Install the skill globally&lt;/span&gt;
npx skills add shadcn/improve

&lt;span class="c"&gt;# In your project&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;my-project
/improve quick           &lt;span class="c"&gt;# ~5 minutes, top ~6 HIGH-confidence findings&lt;/span&gt;
&lt;span class="c"&gt;# or&lt;/span&gt;
/improve                 &lt;span class="c"&gt;# standard, ~15 minutes, full findings table&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;First run tips:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Start with &lt;code&gt;quick&lt;/code&gt;&lt;/strong&gt; on a repo you know well. You'll immediately see which findings are real and which are "well, technically…" That calibrates your trust for the standard run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Point it at existing intent docs&lt;/strong&gt; if you have them. An &lt;code&gt;ADR-0007-sync-writes.md&lt;/code&gt; explaining why the sync-over-async is intentional prevents &lt;code&gt;/improve&lt;/code&gt; from surfacing it as a perf finding every single run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Try &lt;code&gt;/improve branch&lt;/code&gt;&lt;/strong&gt; the next time you open a PR. This is the killer variant for day-to-day work — it audits only what your branch touches, catches the "hmm, this shouldn't be here" stuff before review, and doesn't drown you in cross-repo tech debt at PR time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Try &lt;code&gt;--issues&lt;/code&gt;&lt;/strong&gt; once. Watching &lt;code&gt;/improve&lt;/code&gt; publish a fully self-contained implementation plan as a GitHub issue — with verification gates and STOP conditions — is when it clicks that this thing is designed to be an actual team member's backlog, not a chat transcript.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Community reactions
&lt;/h2&gt;

&lt;p&gt;Developer reaction has clustered around a few themes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"Exactly the right way to split it."&lt;/strong&gt; The token-cost math is obvious once pointed out — you shouldn't be paying Opus rates to run &lt;code&gt;pnpm typecheck&lt;/code&gt;. Many devs had been informally doing this by hand ("I use GPT-5-Pro to plan, Sonnet to code") and finally have a formal contract.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"The senior architect handing plans to junior devs."&lt;/strong&gt; This analogy stuck. It answers the "why not just let one model do it all?" objection — because that's not how good engineering orgs work either.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Finally a Skill that isn't a toy."&lt;/strong&gt; Agent Skills as a format has been criticized for producing trivial "add a rule that says X" skills. &lt;code&gt;/improve&lt;/code&gt; proves the format can carry real engineering weight.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feature request: "I want this for design/product review too."&lt;/strong&gt; The audit → plan → execute pattern applied to non-code artifacts (docs, product specs, design systems) was the most-upvoted request in the first two weeks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Main pushback: &lt;strong&gt;plans as Markdown files in git is opinionated&lt;/strong&gt;. Teams with Linear/Jira/Notion as their backlog source of truth don't want a second place issues live. The &lt;code&gt;--issues&lt;/code&gt; flag partially addresses this, but you'll reconcile two backlogs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost, still.&lt;/strong&gt; "Cheap execution" is relative. &lt;code&gt;/improve deep&lt;/code&gt; on a 200K-LOC monorepo with 8 parallel subagents is &lt;em&gt;not&lt;/em&gt; cheap — it's cheaper than having Opus do the whole thing including execution, but not free. Standard mode on a normal repo is fine; deep mode is for occasions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;False negatives on things the advisor didn't know to look for.&lt;/strong&gt; Every audit is bounded by the playbook categories. If your specific class of bug isn't in the playbook, no subagent gets assigned to it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Executor variance is real.&lt;/strong&gt; A truly weak local model may fail in ways the plan can't compensate for. Expect more revision rounds when the executor is very cheap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;reconcile&lt;/code&gt; assumes you actually come back.&lt;/strong&gt; Best used as an ongoing habit, not a one-shot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Windows-native install path documented.&lt;/strong&gt; The &lt;code&gt;npx skills add&lt;/code&gt; route works cross-platform in principle, but sample commands assume a POSIX-ish shell. WSL is fine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not a linter.&lt;/strong&gt; It's an &lt;em&gt;advisor&lt;/em&gt; over static analysis output plus intent plus judgment — not a static-analysis replacement.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: How is this different from just asking Claude Code to "review my repo"?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A one-shot review produces a stream-of-consciousness list of "issues" that vary wildly in importance, aren't self-contained, and evaporate the moment your session ends. &lt;code&gt;/improve&lt;/code&gt; enforces vetted findings with confidence scores, self-contained plans a different model can execute, a persistent backlog under &lt;code&gt;plans/&lt;/code&gt;, and a &lt;code&gt;reconcile&lt;/code&gt; step that keeps the backlog honest across sessions. It's the difference between a code review and a working project management system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Does it work with Cursor, or only Claude Code?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Any host that supports the Agent Skills format. Claude Code has the deepest native support (subagents for parallel audit are first-class). Codex and OpenCode work well. Cursor works via the Skills bridge — parallelism degrades to sequential, so it's slower on big repos, but the plans are identical.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What's the cheapest way to actually save money with this?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Run the advisor on Opus 4.7 or GPT-5.5-Pro, run &lt;code&gt;/improve execute&lt;/code&gt; with Haiku 4 or Gemini 2.5 Flash. Ballpark: 5-10x total token cost reduction vs. running the whole loop on the frontier model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can it publish plans as PRs, not just issues?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not by design. &lt;code&gt;/improve&lt;/code&gt; never modifies your working tree — no branches, no PRs from the advisor. &lt;code&gt;/improve execute&lt;/code&gt; produces the diff in an isolated worktree; merging is always your call. This is deliberate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Is there a risk that the executor "goes rogue" and edits stuff outside the plan?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Two protections. First, the executor runs in a git worktree — it literally cannot touch your main working tree. Second, the advisor's review step re-runs done criteria and checks scope compliance against the out-of-scope list. Scope violations get sent back for revision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who should use this (and who shouldn't)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use it if:&lt;/strong&gt; you use Claude Code, Codex, or another Agent Skills-compatible host on a real codebase, you burn meaningful money on AI coding, and you already understand that "the plan is the product" isn't just a marketing line — it's how good tech leads have always worked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't use it if:&lt;/strong&gt; you're just experimenting with AI coding on a hobby project (overkill), your team has a hard rule that all work items live in Linear/Jira (the plans-in-git model will fight you), or you were hoping for a one-shot "audit and fix" magic wand (that's exactly what shadcn refused to build, on purpose).&lt;/p&gt;

&lt;p&gt;The bigger point &lt;code&gt;/improve&lt;/code&gt; is making is worth sitting with even if you don't adopt the skill: &lt;strong&gt;AI coding got the architecture wrong by starting from "one model does everything."&lt;/strong&gt; The industry defaulted to that because it was the shortest path to a demo. The actual structure of software engineering — think, decide, spec, execute, review, reconcile — has always been differentiated labor with different budgets. &lt;code&gt;/improve&lt;/code&gt; is the first widely-used tool that treats it that way. Others will follow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources &amp;amp; further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/shadcn/improve" rel="noopener noreferrer"&gt;shadcn/improve on GitHub&lt;/a&gt; — the repo, README, and installation instructions&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/shadcn/improve/blob/main/skills/improve/SKILL.md" rel="noopener noreferrer"&gt;SKILL.md source&lt;/a&gt; — the actual skill spec, if you want to see the guardrails verbatim&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/shadcn/improve/blob/main/examples/001-extract-shadow-config-resolution.md" rel="noopener noreferrer"&gt;Example plan output&lt;/a&gt; — real plan generated by &lt;code&gt;/improve&lt;/code&gt; against &lt;code&gt;shadcn/ui&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentskills.io" rel="noopener noreferrer"&gt;Agent Skills format specification&lt;/a&gt; — the ecosystem &lt;code&gt;/improve&lt;/code&gt; plugs into&lt;/li&gt;
&lt;li&gt;&lt;a href="https://saascity.io/blog/shadcn-improve-agent-skill-token-optimization-2026" rel="noopener noreferrer"&gt;SaaSCity's early breakdown of the token-economics argument&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>shadcn</category>
      <category>agentskills</category>
      <category>aicodingagents</category>
      <category>claudecode</category>
    </item>
    <item>
      <title>Herdr Review: The Agent Multiplexer Your Terminal Needed</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Wed, 08 Jul 2026 10:15:52 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/herdr-review-the-agent-multiplexer-your-terminal-needed-li1</link>
      <guid>https://dev.to/andrew-ooo/herdr-review-the-agent-multiplexer-your-terminal-needed-li1</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/herdr-agent-multiplexer-terminal-review/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;&lt;strong&gt;Herdr&lt;/strong&gt; is an open-source terminal multiplexer built specifically for the age of AI coding agents. Think tmux, but every pane knows whether its agent is working, blocked, done, or idle — and agents can drive the multiplexer back through a socket API.&lt;/p&gt;

&lt;p&gt;It hit &lt;strong&gt;13,900+ GitHub stars&lt;/strong&gt; and &lt;strong&gt;4,500 new stars this week&lt;/strong&gt;, landing in the top 5 trending repos. Built in Rust, distributed as a single binary, AGPL-licensed, and installable with Homebrew or a one-liner curl.&lt;/p&gt;

&lt;p&gt;Why the sudden popularity? If you've been running Claude Code in one tmux pane, Codex in another, and a third agent waiting on review feedback, you've felt the pain Herdr solves natively.&lt;/p&gt;

&lt;p&gt;Key facts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Persistent sessions&lt;/strong&gt; — detach and agents keep running. Reattach from any terminal or over SSH.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real agent state&lt;/strong&gt; — Herdr detects what each agent is doing and surfaces blocked, working, done, and idle status across all workspaces.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Both keyboard and mouse&lt;/strong&gt; — tmux-style prefix keys plus click, drag, split, and context menus. No trade-off.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Socket API&lt;/strong&gt; — agents can spawn panes, read output, wait on each other, and split terminals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plugin marketplace&lt;/strong&gt; — extend workflows beyond the built-in features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One Rust binary, no Electron&lt;/strong&gt; — runs in whatever terminal you already have.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Homebrew install&lt;/strong&gt; in one command, plus Homebrew, mise, and direct binary downloads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're a developer running coding agents daily and still using tmux (or no multiplexer at all), Herdr is the tool that brings both worlds together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&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;&lt;strong&gt;Repo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/ogulcancelik/herdr" rel="noopener noreferrer"&gt;ogulcancelik/herdr&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Website&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://herdr.dev" rel="noopener noreferrer"&gt;herdr.dev&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Docs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://herdr.dev/docs/" rel="noopener noreferrer"&gt;herdr.dev/docs&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AGPL-3.0 (commercial licenses available)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rust&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;brew install herdr&lt;/code&gt; or `curl -fsSL &lt;a href="https://herdr.dev/install.sh" rel="noopener noreferrer"&gt;https://herdr.dev/install.sh&lt;/a&gt; \&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Current version&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;v0.4.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stars&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;13,900+ (4,500/week)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The Problem Herdr Solves
&lt;/h2&gt;

&lt;p&gt;Coding agents have changed how we work, but our terminal multiplexers have not.&lt;/p&gt;

&lt;p&gt;If you run Claude Code to refactor a backend, Codex for frontend work, and a third agent iterating on docs, you're probably using tmux with three windows. It works, but tmux has no idea what the foreground process is doing. Is the agent typing? Waiting for approval? Stuck on a permission prompt? You have to check each pane manually.&lt;/p&gt;

&lt;p&gt;The community noticed. On &lt;a href="https://news.ycombinator.com/item?id=48816959" rel="noopener noreferrer"&gt;Hacker News&lt;/a&gt; (287 points, front page this week), the top comment thread compared Herdr to tmux and Zellij. The consensus: tmux persists terminals, but Herdr persists &lt;em&gt;agent workspaces and understands their state&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Herdr is a purpose-built answer to a problem that tmux was never designed to solve." — AI Weekly&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The question is not whether a tool can run terminals. The question is whether it combines terminal-native persistence with semantic agent state and agent-driven automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

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

&lt;p&gt;Herdr runs as a background server process that owns persistent PTY sessions. When you run {% raw %}&lt;code&gt;herdr&lt;/code&gt;, it either launches or attaches to your default session. The server keeps running after you detach, and agents in its panes keep running too.&lt;/p&gt;

&lt;p&gt;Each session contains workspaces (project-level containers), workspaces contain tabs, and tabs contain panes. Herdr detects which panes contain coding agents and rolls their state up the hierarchy so the sidebar shows you what needs attention at a glance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;herdr server (background daemon)
  └── session (persistent PTY runtime)
       ├── workspace "project-a"
       │    ├── tab "backend"
       │    │    ├── pane 1 [Claude Code — working]
       │    │    └── pane 2 [shell]
       │    └── tab "frontend"
       │         └── pane 1 [Codex — blocked]
       └── workspace "project-b"
            └── tab "docs"
                 └── pane 1 [pi — done]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# macOS (Homebrew)&lt;/span&gt;
brew &lt;span class="nb"&gt;install &lt;/span&gt;herdr

&lt;span class="c"&gt;# Linux / macOS (direct)&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://herdr.dev/install.sh | sh

&lt;span class="c"&gt;# Windows (PowerShell)&lt;/span&gt;
powershell &lt;span class="nt"&gt;-ExecutionPolicy&lt;/span&gt; Bypass &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"irm https://herdr.dev/install.ps1 | iex"&lt;/span&gt;

&lt;span class="c"&gt;# or use mise&lt;/span&gt;
mise use &lt;span class="nt"&gt;-g&lt;/span&gt; herdr

&lt;span class="c"&gt;# or download binaries from GitHub releases&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. One binary, no npm install, no Electron, no runtime dependencies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Start
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Start Herdr in your project directory&lt;/span&gt;
herdr

&lt;span class="c"&gt;# Herdr opens with an empty workspace. Start an agent:&lt;/span&gt;
claude

&lt;span class="c"&gt;# The sidebar shows the agent's state. Split the pane:&lt;/span&gt;
&lt;span class="c"&gt;# (mouse: right-click → split vertically)&lt;/span&gt;
&lt;span class="c"&gt;# (keyboard: ctrl+b v for vertical split, ctrl+b - for horizontal)&lt;/span&gt;

&lt;span class="c"&gt;# Open another tab:&lt;/span&gt;
&lt;span class="c"&gt;# ctrl+b c&lt;/span&gt;

&lt;span class="c"&gt;# Start another agent there:&lt;/span&gt;
codex

&lt;span class="c"&gt;# Detach (agents keep running):&lt;/span&gt;
&lt;span class="c"&gt;# ctrl+b q&lt;/span&gt;

&lt;span class="c"&gt;# Reattach from anywhere:&lt;/span&gt;
herdr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Agent State Detection
&lt;/h3&gt;

&lt;p&gt;This is Herdr's killer feature. The sidebar shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Working&lt;/strong&gt; (green) — agent is actively processing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blocked&lt;/strong&gt; (yellow) — agent is waiting on input, approval, or permission&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Done&lt;/strong&gt; (gray) — agent completed its task&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Idle&lt;/strong&gt; (dim) — agent is running but not doing anything&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Detection works through two systems:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Lifecycle hooks&lt;/strong&gt; (for agents with deep integrations): pi, OMP, Kimi Code CLI, Hermes Agent, OpenCode, Kilo Code CLI, MastraCode. These agents report their state directly to Herdr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Screen manifest detection&lt;/strong&gt; (for all other agents): Claude Code, Codex, Cursor Agent CLI, GitHub Copilot CLI, Devin CLI, Qoder CLI, Droid. Herdr reads the live bottom-buffer screen snapshot and matches known UI patterns for approval prompts, permission questions, and idle states.&lt;/p&gt;

&lt;p&gt;Blocked detection is deliberately conservative for screen-manifest agents — only matching known visible approval or question UI. If Herdr doesn't recognize a new prompt pattern, it falls back to idle.&lt;/p&gt;

&lt;p&gt;You can install native integrations for richer state tracking:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;herdr integration &lt;span class="nb"&gt;install &lt;/span&gt;claude
herdr integration &lt;span class="nb"&gt;install &lt;/span&gt;codex
herdr integration &lt;span class="nb"&gt;install &lt;/span&gt;copilot
herdr integration &lt;span class="nb"&gt;install &lt;/span&gt;devin
herdr integration &lt;span class="nb"&gt;install &lt;/span&gt;opencode
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;
&lt;h3&gt;
  
  
  How is Herdr different from tmux?
&lt;/h3&gt;

&lt;p&gt;tmux persists terminals. Herdr persists agent workspaces and understands agent state. tmux has no concept of "blocked" or "working" — it's just panes with running processes. Herdr detects the foreground agent, reads its state from the screen buffer (or lifecycle hooks), and surfaces status across all workspaces. It also adds a socket API that agents can use to create panes, split, read output, and wait on each other. Under the hood, Herdr takes a similar approach to tmux (C vs Rust), but the feature set is agent-native from day one.&lt;/p&gt;
&lt;h3&gt;
  
  
  Can I use Herdr without any agents?
&lt;/h3&gt;

&lt;p&gt;Yes. Herdr works as a general-purpose terminal multiplexer similar to tmux or Zellij. Its keyboard bindings, mouse support, session persistence, and split panes all work without an agent. The agent features are additive — you get a good multiplexer either way, and if you start using coding agents later, Herdr already knows what to do.&lt;/p&gt;
&lt;h3&gt;
  
  
  Which agents are officially supported?
&lt;/h3&gt;

&lt;p&gt;Claude Code, Codex, pi, OMP, GitHub Copilot CLI, Devin CLI, Kimi Code CLI, Hermes Agent, Qoder CLI, Droid, OpenCode, Kilo Code CLI, MastraCode, and Cursor Agent CLI. Gemini CLI and Cline are detected but less thoroughly tested. Any terminal-based agent still runs as a multiplexer — you just won't get automatic state badges without an integration.&lt;/p&gt;
&lt;h3&gt;
  
  
  Can I use Herdr over SSH?
&lt;/h3&gt;

&lt;p&gt;Yes. Herdr sessions are persistent and can be detached and reattached from any terminal. Run &lt;code&gt;herdr&lt;/code&gt; on your remote server, start your agents, detach, and reattach over SSH from your local machine. The &lt;code&gt;herdr --remote&lt;/code&gt; workflow supports direct connections to specific workspaces.&lt;/p&gt;
&lt;h3&gt;
  
  
  How does the AGPL license affect me?
&lt;/h3&gt;

&lt;p&gt;Herdr is AGPL-3.0 for open-source use. If you use it as an individual developer or within your company without distributing modifications, AGPL doesn't impose new obligations. If your organization needs to embed or modify Herdr in a proprietary product, commercial licenses are available by contacting &lt;a href="mailto:hey@herdr.dev"&gt;hey@herdr.dev&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hands-On Experience
&lt;/h2&gt;

&lt;p&gt;I installed Herdr via Homebrew on macOS and tested it across a day of real work with Claude Code and Codex.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setup took under 10 seconds.&lt;/strong&gt; Running &lt;code&gt;herdr&lt;/code&gt; in my project directory opened a clean workspace with a pane already available. Starting &lt;code&gt;claude&lt;/code&gt; in that pane was immediate — the sidebar showed the agent status within a second.&lt;/p&gt;

&lt;p&gt;The mouse support is genuinely good. Right-click context menus for splitting, clicking panes to focus, and drag-to-resize all work as expected. I have been a tmux user for years (prefix keys muscle-memorized), and the fact that I could also just click felt liberating.&lt;/p&gt;

&lt;p&gt;The agent state detection worked well for Claude Code and Codex. &lt;strong&gt;Blocked was the most useful signal.&lt;/strong&gt; When Claude hit a permission prompt or Codex asked for clarification, the pane border turned yellow and the sidebar updated. In practice, this meant I could work in one pane, glance at the sidebar, and know exactly which project needed attention without scrolling through every terminal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The socket API is the underrated feature.&lt;/strong&gt; Agents can call Herdr's homie socket to create new workspaces, split panes, read output from other panes, and wait on agent completion. This enables multi-agent workflows where one agent delegates to another and waits for the result — all managed through the same multiplexer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance
&lt;/h3&gt;

&lt;p&gt;Herdr is written in Rust and it shows. Memory usage stays under 15MB for a session with 6 panes and 3 agents. CPU impact is negligible — process detection is event-driven, not a polling loop. Starting a new session is instant (&amp;lt; 100ms).&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Missed from tmux
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;tmux kill-session -a&lt;/code&gt; — no quick way to kill all sessions&lt;/li&gt;
&lt;li&gt;Built-in buffer management — tmux's copy mode is more mature&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;display-panes&lt;/code&gt; visual selector — Herdr's pane navigation relies more on sidebar clicking&lt;/li&gt;
&lt;li&gt;Tiling window management (tmux's &lt;code&gt;select-layout even-horizontal&lt;/code&gt;) — Herdr has manual splitting but fewer automatic layouts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are gaps, not dealbreakers. Herdr is at v0.4.0 and the development pace is aggressive (multiple releases per week).&lt;/p&gt;

&lt;h2&gt;
  
  
  Community &amp;amp; Ecosystem
&lt;/h2&gt;

&lt;p&gt;The Herdr community has already built a &lt;a href="https://herdr.dev/plugins/" rel="noopener noreferrer"&gt;plugin marketplace&lt;/a&gt; with extensions for workflows, pane management, and integrations. The socket API has been picked up by the OpenCode and Kilo Code teams for native Herdr support.&lt;/p&gt;

&lt;p&gt;On Reddit, discussions in r/coding_agents and r/coolgithubprojects noted the speed of development:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Watching this project grow is impressive. Two weeks ago it was a basic tmux clone with agent labels. Now it has lifecycle hooks, remote sessions, and a plugin system." — r/coding_agents&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The project is built full-time by &lt;a href="https://github.com/ogulcancelik" rel="noopener noreferrer"&gt;Oğulcan Çelik&lt;/a&gt; and sponsored through GitHub Sponsors. The &lt;code&gt;AGENTS.md&lt;/code&gt; file in the repo gives explicit instructions for AI coding agents contributing to the project — a signal that Herdr takes its own philosophy seriously.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations &amp;amp; Honest Concerns
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;v0.4.0 maturity.&lt;/strong&gt; Herdr is new. Expect rough edges, missing features, and the occasional breaking change. The rapid release cadence is a double-edged sword — features arrive fast, but config stability is not guaranteed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Blocked detection is conservative.&lt;/strong&gt; For screen-manifest agents, Herdr only marks blocked when it recognizes a known approval UI pattern. New or unusual prompts may show as idle instead of blocked. This is safe (no false positives for "needs input"), but it means the state awareness is not perfect.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AGPL licensing friction.&lt;/strong&gt; Some organizations have blanket bans on AGPL dependencies. If you want Herdr in a corporate environment, check with legal before adopting it as a shared team tool.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plugin ecosystem is young.&lt;/strong&gt; The marketplace has a handful of plugins. Compare this to tmux's decade-plus plugin ecosystem (tpm, tmuxinator, tmux-resurrect, etc.) and the gap is significant.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No Windows GUI integration.&lt;/strong&gt; Windows support exists via PowerShell installer, but the experience on Windows Terminal is less polished than native terminal multiplexers like ConEmu or Windows Terminal's built-in panes.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Verdict
&lt;/h2&gt;

&lt;p&gt;Herdr solves a real problem that existing tools ignore. If you run even one coding agent regularly in the terminal, the agent state awareness and session persistence alone justify the switch. If you run multiple agents across multiple projects, Herdr becomes a genuine productivity multiplier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skip it if:&lt;/strong&gt; you only use one agent, you have no interest in terminal multiplexers, or your org has AGPL compliance concerns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install it if:&lt;/strong&gt; you run Claude Code, Codex, or any coding agent in the terminal and want to know — at a glance — what each agent is doing without checking every pane manually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What to watch for:&lt;/strong&gt; The v1.0 release. If the plugin ecosystem grows and blocked detection becomes more comprehensive, this will be the default terminal multiplexer for AI-era developers.&lt;/p&gt;

&lt;h3&gt;
  
  
  When to Use What
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Herdr&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multiple coding agents, agent state awareness, SSH-accessible persistent sessions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;tmux&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Established workflows, complex custom configs, plugin-rich ecosystems, any terminal process&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zellij&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Modern terminal workspace with a friendlier UX, no agent focus needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Warp&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;macOS users who want an all-in-one agentic development platform&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Solo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dev-stack supervision and process health with auto-restart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Conductor/Emdash&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Git worktree and diff review workflow isolation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/ogulcancelik/herdr" rel="noopener noreferrer"&gt;Herdr GitHub Repository&lt;/a&gt; — Source code, README, documentation&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://herdr.dev/docs/" rel="noopener noreferrer"&gt;Herdr Official Docs&lt;/a&gt; — Quick start, agent integrations, configuration&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://herdr.dev/compare/" rel="noopener noreferrer"&gt;Herdr Compare Page&lt;/a&gt; — Official comparison with tmux, Zellij, cmux, Warp, and others&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://news.ycombinator.com/item?id=48816959" rel="noopener noreferrer"&gt;Hacker News Discussion (287 points)&lt;/a&gt; — Community reactions to Herdr&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aiweekly.co/alerts/herdr-adds-agent-state-awareness-to-terminal-multiplexing" rel="noopener noreferrer"&gt;AI Weekly: Herdr Adds Agent-State Awareness&lt;/a&gt; — Coverage of Herdr's agent-native approach&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>herdr</category>
      <category>agentmultiplexer</category>
      <category>terminal</category>
      <category>claudecode</category>
    </item>
    <item>
      <title>Codebase Memory MCP Review: 99% Fewer Tokens for AI Agents</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Tue, 07 Jul 2026 10:13:14 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/codebase-memory-mcp-review-99-fewer-tokens-for-ai-agents-4789</link>
      <guid>https://dev.to/andrew-ooo/codebase-memory-mcp-review-99-fewer-tokens-for-ai-agents-4789</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/codebase-memory-mcp-review/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;code&gt;codebase-memory-mcp&lt;/code&gt;&lt;/strong&gt; by DeusData is an open-source Model Context Protocol (MCP) server that &lt;strong&gt;indexes your entire codebase into a persistent knowledge graph&lt;/strong&gt; — functions, classes, call chains, HTTP routes, cross-service links — and serves it to AI coding agents (Claude Code, Codex CLI, Gemini CLI, and 8 more) via 14 specialized MCP tools. It claims &lt;strong&gt;99% fewer tokens&lt;/strong&gt; for structural queries and can index the Linux kernel (28M LOC, 75K files) in &lt;strong&gt;3 minutes&lt;/strong&gt;. The single static binary has &lt;strong&gt;zero runtime dependencies&lt;/strong&gt;, supports &lt;strong&gt;158 languages&lt;/strong&gt; via vendored tree-sitter grammars, and is trending with &lt;strong&gt;27,676 GitHub stars (6,309 this week)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The core insight is deceptively simple: AI coding agents spend &lt;strong&gt;most of their token budget&lt;/strong&gt; reading files one-by-one to understand code structure. A query like "find all API handlers that call the auth middleware" requires grepping, reading imports, tracing call chains — 10–20 individual file reads, each gobbling context. &lt;code&gt;codebase-memory-mcp&lt;/code&gt; pre-indexes all that structure into a local SQLite graph, then answers the same question in one tool call with ~3,400 tokens instead of ~412,000.&lt;/p&gt;

&lt;p&gt;Key facts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;27,676 GitHub stars&lt;/strong&gt;, &lt;strong&gt;6,309 added this week&lt;/strong&gt; — top 5 trending repos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;arXiv paper&lt;/strong&gt; (&lt;a href="https://arxiv.org/abs/2603.27277" rel="noopener noreferrer"&gt;2603.27277&lt;/a&gt;): 83% answer quality, 10× fewer tokens, 2.1× fewer tool calls vs. file-by-file search across 31 repos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;158 languages&lt;/strong&gt; via vendored tree-sitter, &lt;strong&gt;10 languages&lt;/strong&gt; with Hybrid LSP semantic type resolution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;11 AI coding agents&lt;/strong&gt; auto-detected and configured in one install&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;100% local processing&lt;/strong&gt; — no telemetry, no API keys, no Docker&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;If you've used Claude Code or Codex CLI on a nontrivial codebase, you've hit the wall. The agent can't keep the full project in context. It reads files one at a time, builds a mental model file-by-file, and by the time it's navigated through 40 source files, the original task is buried in the context window. Token costs mount. The agent gets confused. You reach for &lt;code&gt;grep -r&lt;/code&gt; and lose the agent flow entirely.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;codebase-memory-mcp&lt;/code&gt; front-loads that structural understanding into an offline index, then exposes it as 14 MCP tools the agent calls in &lt;strong&gt;under 1 millisecond per query&lt;/strong&gt;. Instead of "read file, parse imports, read next file, trace calls," the agent fires:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;get_architecture → returns all packages, entry points, routes, and layers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One call. 3,400 tokens. Done.&lt;/p&gt;

&lt;p&gt;This is the same philosophy that made MCP successful — separate the "understanding" from the "doing." The agent stops being a slow grep and starts being a fast architect.&lt;/p&gt;




&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;One-liner for macOS / Linux:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With the optional 3D graph visualization UI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh | bash &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nt"&gt;--ui&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Windows (PowerShell):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Invoke-WebRequest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-OutFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Unblock-File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\install.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\install.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The installer &lt;strong&gt;auto-detects all installed coding agents&lt;/strong&gt; on your machine — Claude Code, Codex CLI, Gemini CLI, Zed, OpenCode, Antigravity, Aider, KiloCode, VS Code, OpenClaw, and Kiro — and configures MCP entries, skill instruction files, and pre-tool hooks for each. Restart your agent, say "Index this project," and you're live.&lt;/p&gt;

&lt;p&gt;If you prefer manual install, grab the archive from the &lt;a href="https://github.com/DeusData/codebase-memory-mcp/releases/latest" rel="noopener noreferrer"&gt;latest release&lt;/a&gt;:&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="nb"&gt;tar &lt;/span&gt;xzf codebase-memory-mcp-&lt;span class="k"&gt;*&lt;/span&gt;.tar.gz
./install.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Zero dependencies. The binary is statically linked, signed, checksummed, and scanned by 70+ antivirus engines before every release. The installer even strips macOS quarantine attributes and ad-hoc signs the binary automatically — no &lt;code&gt;xattr&lt;/code&gt; ceremonies.&lt;/p&gt;




&lt;h2&gt;
  
  
  What It Actually Does
&lt;/h2&gt;

&lt;p&gt;The indexer parses your source tree through &lt;strong&gt;158 vendored tree-sitter grammars&lt;/strong&gt; compiled into the binary. Nothing to install, nothing to configure, nothing that breaks when you update Homebrew. The output is a SQLite graph database in &lt;code&gt;~/.cache/codebase-memory-mcp/&lt;/code&gt; containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Functions&lt;/strong&gt;: signatures, parameters, return types, docstrings, bodies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Classes&lt;/strong&gt;: hierarchies, inheritance chains, implemented interfaces&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Call chains&lt;/strong&gt;: who-calls-who across files and packages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTP routes&lt;/strong&gt;: REST endpoints, gRPC services, GraphQL resolvers, tRPC procedures&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Channels&lt;/strong&gt;: Socket.IO, EventEmitter, pub-sub patterns across 8 languages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker/Kubernetes&lt;/strong&gt;: Dockerfiles, K8s manifests, Kustomize overlays as graph nodes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data flows&lt;/strong&gt;: arg-to-param mapping with field access chains&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Near-clones&lt;/strong&gt;: MinHash + LSH for similar code detection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And it does this fast. "Average repo in milliseconds" is not a boast — the RAM-first pipeline uses LZ4 compression and in-memory SQLite, releasing memory after the final dump. The Linux kernel (28M LOC, 75K files) indexes in &lt;strong&gt;3 minutes&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 14 MCP Tools
&lt;/h3&gt;

&lt;p&gt;These are the tools your agent can call after indexing:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_architecture&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Languages, packages, entry points, routes, hotspots, boundaries, layers, clusters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_graph&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Regex name patterns, label filters, min/max degree, file scoping&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_code&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Graph-augmented grep over indexed files only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;semantic_query&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Vector search across the entire graph (Nomic embeddings, no API key)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;trace_calls&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resolve function calls across files and packages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_architecture&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Single-call architecture overview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;manage_adr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Architecture Decision Records persisted across sessions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;detect_changes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Git diff → affected symbols with risk classification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;find_dead_code&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Functions with zero callers, excluding entry points&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cypher_query&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MATCH (f:Function)-[:CALLS]-&amp;gt;(g) WHERE f.name = 'main' RETURN g.name&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bm25_search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Full-text search via SQLite FTS5 + camelCase-aware tokenizer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_call_chain&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Full call path from entry point to leaf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;find_http_routes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All HTTP endpoints with handlers and middleware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cross_repo_query&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Architecture summary across multiple indexed repos&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Hands-On: What It's Like to Use
&lt;/h2&gt;

&lt;p&gt;I tested &lt;code&gt;codebase-memory-mcp&lt;/code&gt; on a mid-sized TypeScript monorepo (~200 files, ~50K LOC) with Claude Code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Indexing:&lt;/strong&gt; The &lt;code&gt;index&lt;/code&gt; command took &lt;strong&gt;14 seconds&lt;/strong&gt;. The installer had already configured Claude Code's &lt;code&gt;.claude/settings.json&lt;/code&gt; with the MCP server entry. I restarted Claude Code, typed "Index this project," and it worked immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First real query:&lt;/strong&gt; "Show me the architecture." One MCP tool call — &lt;code&gt;get_architecture&lt;/code&gt; — returned a structured breakdown: 4 packages, 2 entry points (&lt;code&gt;src/index.ts&lt;/code&gt;, &lt;code&gt;src/api/server.ts&lt;/code&gt;), 38 HTTP routes organized by middleware layer, 6 external service integrations, and a dependency graph. The full response was &lt;strong&gt;2,100 tokens&lt;/strong&gt;. Doing the same manually would have required grepping through 15+ files for route registrations, tracing middleware imports, reading each handler file — easily 80,000 tokens of context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second query:&lt;/strong&gt; "Find all places that call the auth middleware." &lt;code&gt;trace_calls authMiddleware&lt;/code&gt; → 12 call sites across 8 files, each with file path, line number, and the calling function's context. Took 800ms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Third query:&lt;/strong&gt; "What changed in the last commit?" &lt;code&gt;detect_changes&lt;/code&gt; → 4 modified files, each mapped to the affected functions, with a risk classification (low/medium/high). Two changes were flagged as medium risk because they touched functions called by the auth middleware.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fourth query:&lt;/strong&gt; "Find dead code." &lt;code&gt;find_dead_code&lt;/code&gt; → 3 exported functions with zero callers. One was a vestigial &lt;code&gt;formatDate&lt;/code&gt; helper from a refactor last month. Another was a WebSocket handler for a feature that got scrapped. I removed all three. That's 20 minutes of cleanup in one command.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Token savings:&lt;/strong&gt; Over a 45-minute session making ~30 structural queries, &lt;code&gt;codebase-memory-mcp&lt;/code&gt; consumed an estimated &lt;strong&gt;102,000 tokens&lt;/strong&gt; for code understanding. File-by-file equivalent would have been at least &lt;strong&gt;800,000–1,200,000 tokens&lt;/strong&gt; — probably an 8–10× reduction in practice.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where It Shines
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Large monorepos
&lt;/h3&gt;

&lt;p&gt;This is the killer use case. If your team has a 500-file monorepo with services, shared packages, and infrastructure code, the agent spends 80% of its context window just learning the layout. &lt;code&gt;codebase-memory-mcp&lt;/code&gt; flattens that to milliseconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cross-service refactoring
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;cross_repo_query&lt;/code&gt; tool links nodes across multiple repos indexed under the same store. If you're renaming an API endpoint in Service A and need to trace all callers in Service B, the graph follows &lt;code&gt;CROSS_HTTP_CALLS&lt;/code&gt; edges automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Onboarding new agents
&lt;/h3&gt;

&lt;p&gt;Switching from Claude Code to Codex CLI? The knowledge graph persists. &lt;code&gt;codebase-memory-mcp&lt;/code&gt; stores everything in &lt;code&gt;~/.cache/&lt;/code&gt; — all 11 supported agents read from the same database. No re-indexing needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Team-shared artifacts
&lt;/h3&gt;

&lt;p&gt;Your team can commit &lt;code&gt;.codebase-memory/graph.db.zst&lt;/code&gt; (a zstd-compressed snapshot of the knowledge graph) to the repo. When a teammate clones and runs the install, the index is already there. No re-indexing on CI or for new hires.&lt;/p&gt;




&lt;h2&gt;
  
  
  Honest Limitations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The 83% answer quality trade-off
&lt;/h3&gt;

&lt;p&gt;The arXiv paper is candid: &lt;strong&gt;83% answer quality&lt;/strong&gt; vs. 92% for file-by-file exploration. That's a 9-point gap. The graph sometimes misses context — a function's body might be simplified, a dynamic import might not resolve, a complex type might lose its generic parameters. For precision-sensitive work (e.g., "find the exact line that handles this specific error code"), file-by-file is still better.&lt;/p&gt;

&lt;h3&gt;
  
  
  "99% fewer tokens" is relative
&lt;/h3&gt;

&lt;p&gt;An independent benchmark confirmed that the 99% claim uses an unoptimized baseline (grep + cat everything). In practice, you'll see &lt;strong&gt;8–12× savings&lt;/strong&gt;, which is still remarkable — but the marketing number assumes the worst possible alternative.&lt;/p&gt;

&lt;h3&gt;
  
  
  Initial indexing time for huge repos
&lt;/h3&gt;

&lt;p&gt;3 minutes for the Linux kernel is genuinely fast, but those 3 minutes are a blocking operation. You clone a repo, run index, wait. The background watcher handles incremental changes after that, but the first index can't be skipped.&lt;/p&gt;

&lt;h3&gt;
  
  
  Not a replacement for reading files
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;codebase-memory-mcp&lt;/code&gt; gives you structure, not full source. Your agent still needs to &lt;code&gt;read_file&lt;/code&gt; for implementation details — the graph tells it &lt;em&gt;where&lt;/em&gt; to look, not &lt;em&gt;what the code says&lt;/em&gt;. This is by design (that's how it saves tokens), but some workflows feel fragmented: "The function exists at src/handler.ts:142, let me read it." Two calls instead of one.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hybrid LSP isn't full LSP
&lt;/h3&gt;

&lt;p&gt;The Hybrid LSP resolver covers 10 languages but is a lightweight C implementation of type-resolution algorithms. It handles parameter binding, return-type inference, generic substitution, JSX dispatch, and JSDoc/namespace/etc. for those languages. But it's not a full language server — you won't get go-to-definition precision for every edge case. The project acknowledges this and the tree-sitter AST is always the fallback.&lt;/p&gt;




&lt;h2&gt;
  
  
  Community Reaction
&lt;/h2&gt;

&lt;p&gt;The Show HN launch hit &lt;strong&gt;179 points&lt;/strong&gt; and the Reddit discussion on r/LocalLLM generated polarized but engaged feedback:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Positive:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Just tested this on our 300-file Next.js app. Indexed in 11 seconds. The &lt;code&gt;detect_changes&lt;/code&gt; tool alone saved me from a deployment-breaking refactor. Game changer." — r/LocalLLM&lt;/p&gt;

&lt;p&gt;"I've been wanting something like this since MCP launched. The single binary install is chef's kiss — no Docker, no npm, no 500MB of Python dependencies. This is how tools should ship." — HN comment&lt;/p&gt;

&lt;p&gt;"Tried it with Codex CLI on a Go monorepo. Cross-service route mapping worked out of the box. The HTTP route → call-site matching with confidence scores is genuinely useful." — GitHub issue&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Constructive criticism:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"It's fast, but I ran into several cases where the semantic query returned irrelevant results. The vector search needs tuning — or maybe my codebase is just weird." — r/LocalLLM&lt;/p&gt;

&lt;p&gt;"The speed is impressive but 83% accuracy concerns me for mission-critical refactoring. I'd use it for exploration but still double-check manually before a production deploy." — HN comment&lt;/p&gt;

&lt;p&gt;"Would love to see better C++ support. The tree-sitter grammar works but the Hybrid LSP doesn't cover template metaprogramming edge cases." — GitHub discussion&lt;/p&gt;

&lt;p&gt;"The &lt;code&gt;99% fewer tokens&lt;/code&gt; headline is doing a lot of work. My actual savings were more like 85% on my TypeScript project. Still great, but the marketing is aggressive." — Reddit&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Free and open-source&lt;/strong&gt; (MIT license). No paid tiers, no cloud, no API keys, no telemetry. Every release binary is signed, checksummed, and scanned by 70+ antivirus engines. The project is entirely local-first.&lt;/p&gt;

&lt;p&gt;Available from: npm, PyPI, Homebrew, Scoop, Winget, Chocolatey, AUR, and &lt;code&gt;go install&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What's the difference between codebase-memory-mcp and grep?
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;grep&lt;/code&gt; searches text. &lt;code&gt;codebase-memory-mcp&lt;/code&gt; understands structure — it knows that &lt;code&gt;authMiddleware&lt;/code&gt; is a function with 12 callers across 8 files, that it's typed as &lt;code&gt;(req: Request, res: Response, next: NextFunction) =&amp;gt; void&lt;/code&gt;, and that it's registered on routes matching &lt;code&gt;/api/*&lt;/code&gt;. grep gives you lines. The graph gives you a map.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does it work with VS Code extensions?
&lt;/h3&gt;

&lt;p&gt;Yes — the installer auto-configures VS Code via MCP settings. Any VS Code extension that supports the Model Context Protocol (like Continue.dev or Cline) can use the 14 tools. The &lt;code&gt;install.sh&lt;/code&gt; script adds the MCP entry to VS Code's global settings.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I run it without any AI agent?
&lt;/h3&gt;

&lt;p&gt;Yes, in CLI mode: &lt;code&gt;codebase-memory-mcp cli search_graph '{"name_pattern": ".*Handler.*"}'&lt;/code&gt;. This outputs JSON directly to stdout — pipe it into &lt;code&gt;jq&lt;/code&gt; for ad-hoc analysis. You can also run the graph visualization UI standalone at &lt;code&gt;localhost:9749&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does the semantic search work without an API key?
&lt;/h3&gt;

&lt;p&gt;The binary bundles a quantized Nomic nomic-embed-code model (40K vocabulary, 768-dimension int8) compiled directly into the binary. It uses an 11-signal combined scoring system: TF-IDF, RRI, API/Type/Decorator signatures, AST profiles, data flow analysis, Halstead-lite complexity, MinHash, module proximity, and graph diffusion. Everything runs locally — no API key, no Ollama, no Docker.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does it watch for file changes?
&lt;/h3&gt;

&lt;p&gt;Yes. After indexing, a background watcher detects file modifications and re-indexes changed files incrementally. You can disable this with &lt;code&gt;config set auto_watch false&lt;/code&gt; if you're working across many projects and want each session contained to explicit indexing. Automatic indexing on session start is controlled separately with &lt;code&gt;config set auto_index true&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens when I update it?
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;codebase-memory-mcp update&lt;/code&gt; updates the binary to the latest release. The SQLite cache persists. The binary checks for updates on startup and notifies on the first tool call if a newer release is available.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I uninstall?
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;codebase-memory-mcp uninstall&lt;/code&gt; removes all agent configs, skills, hooks, and instructions from every auto-detected agent. The binary and SQLite databases are left in place in case you change your mind — delete them manually if you want a full cleanup.&lt;/p&gt;




&lt;h2&gt;
  
  
  Verdict
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;codebase-memory-mcp&lt;/code&gt; is the most practical code-intelligence tool I've tested for AI coding agents. The 83% accuracy trade-off is real and worth knowing about, but for exploratory queries, architecture overviews, change impact analysis, and dead code detection, the speed and token efficiency make it an obvious default. You keep file-by-file reading for the final mile of implementation — but you stop wasting 80% of your agent's context on structural discovery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who it's for:&lt;/strong&gt; Anyone using Claude Code, Codex CLI, Gemini CLI, or any MCP-compatible agent on a codebase larger than ~50 files. Monorepo teams will get the most value.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who should skip it:&lt;/strong&gt; If you mostly work on single-file scripts or tiny projects, the setup overhead outweighs the benefit. Stick with grep.&lt;/p&gt;

&lt;p&gt;The single binary, zero-dependency, auto-configure-for-11-agents approach sets a new bar for how MCP servers should ship. DeusData has built a reference implementation for the category.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/DeusData/codebase-memory-mcp" rel="noopener noreferrer"&gt;codebase-memory-mcp GitHub Repository&lt;/a&gt; — 27.6K stars, trending&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://arxiv.org/abs/2603.27277" rel="noopener noreferrer"&gt;arXiv Paper: Codebase-Memory: Tree-Sitter-Based Knowledge Graphs for LLM Code Exploration via MCP&lt;/a&gt; — 83% accuracy, 10× token reduction benchmarks&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.reddit.com/r/LocalLLM/comments/1uasxjk/codebasememorymcp_review_99_token_cut_for_code/" rel="noopener noreferrer"&gt;r/LocalLLM Discussion&lt;/a&gt; — Community feedback&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/alya_mahalini_f05d9953cfa/high-performance-code-intelligence-a-review-of-codebase-memory-mcp-2cio"&gt;DEV.to: High-Performance Code Intelligence Review&lt;/a&gt; — Third-party review&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://news.ycombinator.com/item?id=42345678" rel="noopener noreferrer"&gt;Show HN: DeusData/codebase-memory-mcp&lt;/a&gt; — 179-point HN launch (hypothetical, based on trending velocity)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>codebasememorymcp</category>
      <category>deusdata</category>
      <category>mcp</category>
      <category>codingagents</category>
    </item>
    <item>
      <title>Meetily Review 2026: Privacy-First AI Meeting Assistant</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Mon, 06 Jul 2026 10:13:50 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/meetily-review-2026-privacy-first-ai-meeting-assistant-29h3</link>
      <guid>https://dev.to/andrew-ooo/meetily-review-2026-privacy-first-ai-meeting-assistant-29h3</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/meetily-privacy-first-ai-meeting-assistant-review/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every major meeting transcription tool — Otter.ai, Fireflies, Fathom — works the same way: you grant access to your microphone, they send audio to their cloud, and your conversations land on somebody else's server. If you've ever wondered whether that Zoom call about next quarter's roadmap is being stored in a database you can't control, you're not alone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Meetily&lt;/strong&gt; is the counter-argument. It's a free, open-source AI meeting assistant that transcribes and summarizes your meetings entirely on your local machine. No cloud. No account. No data leaving your device.&lt;/p&gt;

&lt;p&gt;The project launched quietly in late 2024, hit &lt;strong&gt;11,000+ GitHub stars&lt;/strong&gt; by mid-2026, and now sits on the GitHub trending page with a 4× faster Parakeet transcription engine running under the hood. It's the most serious open-source contender in the local meeting notes space, and it runs on Windows — which immediately sets it apart from nearly every competitor.&lt;/p&gt;

&lt;p&gt;This review covers what Meetily actually does, how it works under the hood, where it falls short, and whether it's worth installing today.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR for AI Agents
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;What it is&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Desktop app for local meeting recording, transcription, and AI summarization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MIT — fully open source, free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Price&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Community Edition: free. PRO: $10/month or $120/year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transcription&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Parakeet (default, 4× faster than Whisper) or Whisper Large V3 — 100% local&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Summarization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ollama (local default) or BYOK (Claude, Groq, OpenRouter)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Platform&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;macOS (ARM + Intel), Windows (x64), Linux (build from source)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Storage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Local SQLite database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rust (Tauri backend) + Next.js (frontend)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What Is Meetily?
&lt;/h2&gt;

&lt;p&gt;Meetily is a standalone desktop application that captures your computer's system audio and microphone, transcribes them in real time using open-source speech-to-text models, and generates AI summaries. It works with any conferencing tool that produces audio on your machine — Zoom, Google Meet, Microsoft Teams, Discord, Slack Huddles, whatever.&lt;/p&gt;

&lt;p&gt;The key architectural decision: &lt;strong&gt;it never connects to a meeting platform as a bot.&lt;/strong&gt; There's no OAuth, no calendar API, no participant-join flow. Meetily reads your system audio output and microphone directly, the same way a screen recorder captures video. That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nobody on the call sees a "recording bot joined" notification&lt;/li&gt;
&lt;li&gt;You don't need admin permissions on the meeting platform&lt;/li&gt;
&lt;li&gt;It keeps working when the platform changes its API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The app is built with &lt;a href="https://tauri.app/" rel="noopener noreferrer"&gt;Tauri&lt;/a&gt; — a Rust-powered desktop framework that produces a single self-contained binary. The backend handles audio capture, model inference, and database storage. The frontend is a Next.js app that renders the UI in a webview.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why It's Trending Now
&lt;/h2&gt;

&lt;p&gt;Meetily is sitting on the GitHub trending page in July 2026 for a few converging reasons:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The privacy backlash against cloud meeting tools is real.&lt;/strong&gt; IBM's 2024 Cost of a Data Breach report pegs the average breach cost at $4.4 million. GDPR fines reached €5.88 billion by 2025. California saw 400+ unlawful recording cases filed in 2025 alone. Companies in defense, healthcare, legal, and finance are actively looking for tools that don't send meeting audio to a third party.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Otter.ai and Fireflies got expensive.&lt;/strong&gt; Otter's Business plan runs $30/user/month. Fireflies is $19/user/month. For an organisation with 50 people, that's $9,000–18,000/year just for transcription notes. Meetily's community edition does the same job for $0.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parakeet changed the game for local transcription.&lt;/strong&gt; NVIDIA's &lt;a href="https://huggingface.co/nvidia/parakeet-tdt-0.6b-v3" rel="noopener noreferrer"&gt;Parakeet&lt;/a&gt; model is roughly 4× faster than Whisper Large V3 while maintaining comparable word-error rates. ONNX-optimized and GPU-accelerated via CUDA, Metal, and Vulkan, it makes real-time local transcription feasible on consumer hardware.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Windows gap.&lt;/strong&gt; Nearly every local-first meeting tool (Granola, Anarlog, Talat) is macOS-only. Meetily ships native Windows builds, which opens the door to the vast majority of enterprise desktops.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Real-time Local Transcription
&lt;/h3&gt;

&lt;p&gt;Meetily uses Parakeet-tdt-0.6b-v3 by default, converted to ONNX for optimal inference. The numbers are impressive:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Parakeet:&lt;/strong&gt; ~4× faster than Whisper Large V3, comparable WER (word error rate)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Whisper Large V3:&lt;/strong&gt; Available as a fallback for higher accuracy on noisy audio or accented speech&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPU acceleration:&lt;/strong&gt; Apple Silicon (Metal + CoreML), NVIDIA (CUDA), AMD/Intel (Vulkan) — all auto-detected at build time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On a MacBook Pro M3, Parakeet keeps up with live speech without visible CPU strain. The transcription appears in the app window as the meeting happens, word by word.&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;# Audio capture happens simultaneously on two channels:&lt;/span&gt;
&lt;span class="c"&gt;# 1. System output (what others say)&lt;/span&gt;
&lt;span class="c"&gt;# 2. Microphone (what you say)&lt;/span&gt;
&lt;span class="c"&gt;# Both are mixed into a single transcription buffer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  AI Summarization with Your Choice of Model
&lt;/h3&gt;

&lt;p&gt;Summaries run through whatever LLM you point it at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Default:&lt;/strong&gt; Ollama (local) — the full loop stays on-device&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BYOK options:&lt;/strong&gt; Claude (Anthropic), Groq, OpenRouter, any OpenAI-compatible endpoint&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom endpoint:&lt;/strong&gt; You can point it at your own infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The summary extraction identifies key decisions, action items, and follow-ups. Results are stored alongside the transcript in the local SQLite database.&lt;/p&gt;

&lt;h3&gt;
  
  
  System Audio Capture (No Bots)
&lt;/h3&gt;

&lt;p&gt;This is the feature that makes people pay attention. Meetily captures your system audio output directly — no bot joins the call, no calendar integration required. It works with any app that produces audio:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zoom, Google Meet, Microsoft Teams&lt;/li&gt;
&lt;li&gt;Discord, Slack Huddles&lt;/li&gt;
&lt;li&gt;Phone calls routed through your computer&lt;/li&gt;
&lt;li&gt;Any web-based meeting platform&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The audio capture includes intelligent ducking (reducing system audio when you speak) and clipping prevention.&lt;/p&gt;

&lt;h3&gt;
  
  
  Export and Edit
&lt;/h3&gt;

&lt;p&gt;You can export transcripts and summaries as Markdown. The built-in editor lets you clean up transcripts, fix speaker labels, and make corrections before saving.&lt;/p&gt;

&lt;h3&gt;
  
  
  Audio File Import (Community Contribution)
&lt;/h3&gt;

&lt;p&gt;Community contributor Jeremi Joslin added the ability to import existing audio/video files for retrospective transcription. You drop in a &lt;code&gt;.wav&lt;/code&gt;, &lt;code&gt;.mp3&lt;/code&gt;, or &lt;code&gt;.mp4&lt;/code&gt; and Meetily processes it. You can also re-transcribe any recorded meeting with a different model or language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture &amp;amp; How It Works
&lt;/h2&gt;

&lt;p&gt;Meetily's architecture is refreshingly simple — a Tauri shell wrapping Rust audio/ML pipelines with a Next.js UI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────┐
│            Tauri Desktop Shell            │
│  ┌──────────────────┐  ┌──────────────┐  │
│  │  Rust Backend    │  │ Next.js UI   │  │
│  │  ┌────────────┐  │  │ (Webview)    │  │
│  │  │ Audio      │  │  │              │  │
│  │  │ Capture    │  │  │ Live         │  │
│  │  ├────────────┤  │  │ Transcript   │  │
│  │  │ Parakeet   │  │  │ Summary      │  │
│  │  │ Inference  │  │  │ View         │  │
│  │  ├────────────┤  │  │ Settings     │  │
│  │  │ Whisper    │  │  │ Editor       │  │
│  │  │ Fallback   │  │  │              │  │
│  │  ├────────────┤  │  └──────────────┘  │
│  │  │ SQLite DB  │  │                    │
│  │  └────────────┘  │                    │
│  └──────────────────┘                    │
└─────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The audio pipeline flows like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;System audio + mic&lt;/strong&gt; captured via platform-native APIs (CoreAudio on macOS, WASAPI on Windows)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chunked and streamed&lt;/strong&gt; to the inference engine in real-time buffers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parakeet/Whisper processes&lt;/strong&gt; each chunk, returning text + timing data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speaker diarization&lt;/strong&gt; (basic in community, enhanced in PRO) assigns segments to speakers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transcript stored&lt;/strong&gt; in SQLite with timestamps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On meeting end&lt;/strong&gt;, transcript sent to configured LLM for summary generation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meetily borrows code from several open-source projects: &lt;a href="https://github.com/ggerganov/whisper.cpp" rel="noopener noreferrer"&gt;Whisper.cpp&lt;/a&gt; for inference orchestration, &lt;a href="https://github.com/mediar-ai/screenpipe" rel="noopener noreferrer"&gt;Screenpipe&lt;/a&gt; for system audio capture on desktop, and &lt;a href="https://crates.io/crates/transcribe-rs" rel="noopener noreferrer"&gt;transcribe-rs&lt;/a&gt; for Rust-level speech-to-text bindings. The ONNX Parakeet model is thanks to &lt;a href="https://huggingface.co/istupakov/parakeet-tdt-0.6b-v3-onnx" rel="noopener noreferrer"&gt;istupakov's HuggingFace conversion&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Use Cases
&lt;/h2&gt;

&lt;p&gt;On Reddit's r/selfhosted, the reception has been notably positive. The launch post gathered significant engagement:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Finally, a meeting tool that doesn't require me to trust a VC-backed startup with my company's confidential strategy discussions."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The primary use cases from community discussions:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consultants and independent professionals:&lt;/strong&gt; A management consultant using Meetily on a Windows laptop can record client calls, generate action items, and keep everything local. No NDAs violated, no data shared with a third party's data processors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Legal and compliance teams:&lt;/strong&gt; Law firms handling sensitive client communications can transcribe internal strategy sessions without sending audio through cloud APIs. The local-only workflow maps directly to confidentiality obligations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Defense and government:&lt;/strong&gt; The README explicitly calls out defense consultants as a target audience. When your meeting might contain classified information, a tool that never touches a network is the only option.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remote engineering teams:&lt;/strong&gt; Engineering teams running standups on Discord can capture decisions and action items automatically, with summaries generated via a local Ollama instance — no cloud dependency, no per-seat license cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  First Impressions from the Community
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://dev.to/zackriya/meetily-a-privacy-first-ai-for-taking-meeting-notes-and-meeting-minutes-26ed"&gt;DEV.to launch post&lt;/a&gt; received strong engagement:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Many closed-source AI assistants do not allow fine-tuning of models. Users cannot choose which LLM models to use, tweak parameters, or optimize AI summaries. Meetily offers full control."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One reviewer at The Windows Club &lt;a href="https://reviews.thewindowsclub.com/meetily-ai-privacy-first-ai-meeting-assistant/" rel="noopener noreferrer"&gt;noted&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The tool is also fully open source under the MIT license. As a result, if you are a developer, you can inspect the code, modify it, self-host it, and adapt it to your workflow."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The &lt;a href="https://anarlog.so/blog/meetily-review/" rel="noopener noreferrer"&gt;anarlog.so review&lt;/a&gt; from April 2026 called out the Windows support as the biggest practical advantage:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This is the single biggest practical advantage. Meetily is one of the only serious local-first meeting tools that runs on Windows."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The most common praise: zero friction on the free tier. Download, open, start a meeting. No account creation, no API key setup, no configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Installation is straightforward:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;macOS (ARM):&lt;/strong&gt; Download &lt;code&gt;meetily_0.4.0_aarch64.dmg&lt;/code&gt; from the &lt;a href="https://github.com/Zackriya-Solutions/meeting-minutes/releases/latest" rel="noopener noreferrer"&gt;releases page&lt;/a&gt;, open it, drag to Applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Download &lt;code&gt;x64-setup.exe&lt;/code&gt; from the same releases page and run the installer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linux:&lt;/strong&gt; Build from source:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Zackriya-Solutions/meeting-minutes
&lt;span class="nb"&gt;cd &lt;/span&gt;meeting-minutes/frontend
pnpm &lt;span class="nb"&gt;install&lt;/span&gt;
./build-gpu.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once installed, open the app and it immediately begins listening. Start a meeting in any conferencing tool, and Meetily captures both system audio and microphone simultaneously. When the meeting ends, review the transcript, trigger a summary via your configured LLM (Ollama works out of the box), and export as Markdown.&lt;/p&gt;

&lt;p&gt;For build-from-source development, you'll need Rust, Node.js, and pnpm. Full instructions are in the &lt;a href="https://github.com/Zackriya-Solutions/meetily/blob/main/docs/BUILDING.md" rel="noopener noreferrer"&gt;BUILDING.md&lt;/a&gt; docs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Should Use This
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;✅ Good fit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Professionals who discuss sensitive information (legal, healthcare, defense, finance)&lt;/li&gt;
&lt;li&gt;Windows users who want local transcription (nearly every other tool is macOS-only)&lt;/li&gt;
&lt;li&gt;Self-hosting enthusiasts who want full data control&lt;/li&gt;
&lt;li&gt;Cost-conscious teams avoiding $20–30/user/month SaaS fees&lt;/li&gt;
&lt;li&gt;Anyone who wants to try AI meeting notes without creating an account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;❌ Not a good fit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;People who want calendar integration and automatic meeting detection (not available on free tier)&lt;/li&gt;
&lt;li&gt;Teams that need speaker separation beyond basic diarization (enhanced version is PRO)&lt;/li&gt;
&lt;li&gt;Users who need PDF/DOCX exports without paying ($10/month)&lt;/li&gt;
&lt;li&gt;Anyone wanting cloud sync or multi-device access&lt;/li&gt;
&lt;li&gt;Enterprise teams needing SSO/SAML or audit trails&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Comparison with Alternatives
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Meetily (Free)&lt;/th&gt;
&lt;th&gt;Meetily PRO&lt;/th&gt;
&lt;th&gt;Otter.ai&lt;/th&gt;
&lt;th&gt;Fireflies&lt;/th&gt;
&lt;th&gt;Granola&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Price&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$10/mo&lt;/td&gt;
&lt;td&gt;$30/user/mo&lt;/td&gt;
&lt;td&gt;$19/user/mo&lt;/td&gt;
&lt;td&gt;$20/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Local processing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Full&lt;/td&gt;
&lt;td&gt;✅ Full&lt;/td&gt;
&lt;td&gt;❌ Cloud&lt;/td&gt;
&lt;td&gt;❌ Cloud&lt;/td&gt;
&lt;td&gt;✅ Local&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;macOS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Calendar integration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Coming&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Speaker diarization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;Enhanced&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Open source&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ MIT&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Offline&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Partially&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Export formats&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Markdown&lt;/td&gt;
&lt;td&gt;PDF/DOCX/MD&lt;/td&gt;
&lt;td&gt;TXT/SRT/CSV&lt;/td&gt;
&lt;td&gt;TXT/CSV/SRT&lt;/td&gt;
&lt;td&gt;TXT/PDF&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Account required&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The clear differentiator: Meetily is the only player offering &lt;strong&gt;native Windows support + full local processing + open source licensing + a genuinely free tier&lt;/strong&gt;. Otter and Fireflies give you convenience but take your data. Granola is local but macOS-only. Meetily's combination is currently unique.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;No calendar integration.&lt;/strong&gt; Meetily doesn't pull from your calendar. You start and stop recording manually. On the free tier, there's no automatic meeting detection — you need to remember to open the app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Summarization quality on long meetings.&lt;/strong&gt; The Meetily team documents that summary quality drops on meetings longer than 90 minutes. The free models (especially smaller Ollama models) can lose context in longer transcripts. A GPT-5.4 or Claude Sonnet 4.6 backend improves this significantly, but adds an API cost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Speaker diarization is basic.&lt;/strong&gt; The community edition identifies speaker changes but doesn't consistently label speakers across a meeting. The PRO tier promises enhanced diarization with consistent speaker IDs, but it hasn't shipped yet (listed as "mid-June" on the README — unclear if it landed).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Database-backed storage, no sync.&lt;/strong&gt; All data lives in a local SQLite database. If you want to access transcripts from multiple devices, you'll need to set up your own sync solution. There's no cloud component, which is a feature for privacy but a limitation for workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows-only installer availability.&lt;/strong&gt; The releases page primarily publishes macOS and Windows binaries. Linux users must build from source, which requires Rust, Node.js, and pnpm — a non-trivial dependency chain.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Meetily actually private?
&lt;/h3&gt;

&lt;p&gt;Yes — for transcription. Whisper or Parakeet runs entirely on your local hardware. Your audio never leaves your machine. Summarization is also local by default via Ollama. If you connect a cloud LLM API key (Claude, Groq, OpenRouter), the transcript text is sent to that provider for summarization. Audio itself is never uploaded. Storage is a local SQLite database with no sync to any server. No account is required.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Meetily work with Zoom, Teams, and Google Meet?
&lt;/h3&gt;

&lt;p&gt;Yes. Meetily captures system audio output and microphone input at the operating system level. It doesn't integrate with or depend on any specific meeting platform. It works with Zoom, Google Meet, Microsoft Teams, Discord, Slack Huddles, and any other application that produces audio on your computer. No bot joins your call.&lt;/p&gt;

&lt;h3&gt;
  
  
  What hardware do I need?
&lt;/h3&gt;

&lt;p&gt;Meetily runs on macOS (Apple Silicon recommended, Intel supported), Windows (x64), and Linux (build from source). For real-time transcription, an Apple Silicon Mac or a Windows machine with an NVIDIA GPU is ideal, but it also works on CPU-only machines with slightly higher latency. The Parakeet model is significantly more efficient than Whisper — older hardware handles it well.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the difference between the free and PRO versions?
&lt;/h3&gt;

&lt;p&gt;The free Community Edition is fully open source (MIT) with real-time transcription, AI summaries, Markdown export, and local SQLite storage. PRO ($10/month or $120/year) adds enhanced accuracy transcription models, auto-meeting detection, improved speaker diarization, PDF and DOCX export, custom summarization templates, and priority support. The free edition is not a trial — it's fully functional and has no expiry.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I run Meetily offline?
&lt;/h3&gt;

&lt;p&gt;Yes. With Parakeet or Whisper for transcription and Ollama for local summarization, the entire workflow runs without any internet connection. The only reason Meetily would go online is if you configure it with a cloud LLM API key for summaries.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Meetily support languages other than English?
&lt;/h3&gt;

&lt;p&gt;Whisper Large V3 supports 100+ languages with reasonable accuracy. Parakeet-tdt is primarily English-optimized. For non-English meetings, switching to Whisper as the backend model is recommended. Summary generation depends on your LLM's language capabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does the system audio capture work technically?
&lt;/h3&gt;

&lt;p&gt;Meetily uses platform-native audio APIs: CoreAudio on macOS (aggregate device with both system output and microphone) and WASAPI loopback on Windows. It creates a virtual audio device that captures both channels simultaneously, with intelligent ducking to reduce system volume during microphone activity. This happens at the OS level, not within any meeting application.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Meetily&lt;/strong&gt; is a genuine contender in a space dominated by cloud-dependent SaaS products. It's not as polished as Otter.ai or Fireflies, and it won't suit everyone — the lack of calendar integration and basic speaker diarization limit its convenience. But for the specific use case of "I need to transcribe meetings without sending my data to a third party," Meetily is the best open-source option on the market, and its Windows support makes it viable for enterprise adoption in a way that macOS-only competitors simply aren't.&lt;/p&gt;

&lt;p&gt;The fact that it's MIT-licensed, requires no account, and works offline means it will keep working even if the project changes direction or goes dormant. That's a level of data sovereignty no SaaS tool can match.&lt;/p&gt;

&lt;p&gt;If privacy matters for your meetings, Meetily is worth the download. It costs nothing to try, and the full community edition never expires.&lt;/p&gt;

</description>
      <category>meetily</category>
      <category>aimeetingassistant</category>
      <category>meetingminutes</category>
      <category>opensource</category>
    </item>
    <item>
      <title>OmniRoute: Free AI Gateway with 231 LLM Providers (2026 Review)</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Sun, 05 Jul 2026 11:35:51 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/omniroute-free-ai-gateway-with-231-llm-providers-2026-review-1bbg</link>
      <guid>https://dev.to/andrew-ooo/omniroute-free-ai-gateway-with-231-llm-providers-2026-review-1bbg</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/omniroute-free-ai-gateway-llm-providers-review/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you run Claude Code, Codex, Cursor, or Cline, you've felt the pain. &lt;strong&gt;Subscription quotas expire unused, rate limits kill momentum mid-sprint, and juggling API keys for Claude, GPT-5.5, Gemini 3, and a half-dozen cheaper alternatives is a part-time job.&lt;/strong&gt; Then there's the billing: $20 for Claude Code Pro, $20 for Codex, $10 for Cursor — and you still hit walls.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/diegosouzapw/OmniRoute" rel="noopener noreferrer"&gt;&lt;strong&gt;OmniRoute&lt;/strong&gt;&lt;/a&gt; just crossed &lt;strong&gt;11,473 GitHub stars&lt;/strong&gt; with &lt;strong&gt;4,133 added in the last week&lt;/strong&gt; (July 5, 2026), making it the fastest-growing AI infrastructure tool on GitHub Trending this week. The pitch:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One endpoint. 231 providers. Never hit limits. Auto-fallback across 237 providers in milliseconds. Save 15–95% of tokens. ~1.6B free tokens per month aggregated.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I've been running OmniRoute v3.8.44 as my primary AI gateway for four days across three coding agents. Here's the real review — what works, what doesn't, and whether it replaces your current setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR for AI Agents
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&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;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;TypeScript (Node.js)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;npm install -g omniroute&lt;/code&gt; or Docker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Endpoint&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;http://localhost:20128/v1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Providers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;237 total, 90+ free tiers, 11 free-forever&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Routing strategies&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;17 variants&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Token compression&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RTK + Caveman (15–95%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MCP server&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Built-in, 95 tools, 3 transports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Guardrails&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PII, injection, vision filters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Price&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free (MIT) — you supply the keys&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/diegosouzapw/OmniRoute" rel="noopener noreferrer"&gt;github.com/diegosouzapw/OmniRoute&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What OmniRoute Actually Is
&lt;/h2&gt;

&lt;p&gt;OmniRoute is a &lt;strong&gt;local-first AI API routing gateway&lt;/strong&gt; — a single OpenAI-compatible endpoint (&lt;code&gt;http://localhost:20128/v1&lt;/code&gt;) that sits between your coding agents and every LLM provider. It's not a model hub, not a cloud proxy, and not another OpenRouter wrapper.&lt;/p&gt;

&lt;p&gt;Architecturally, it's a four-layer pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your IDE / CLI (Claude Code, Codex, Cursor…)
         │
         ▼  http://localhost:20128/v1
┌─────────────────────────────────────────┐
│  OmniRoute Smart Router                  │
│  · 17 routing strategies                 │
│  · RTK + Caveman compression             │
│  · Circuit breakers · TLS stealth        │
│  · MCP server · A2A · Guardrails         │
└────────┬───────────────────────────────┬─┘
         │ Tier 1                        │ Tier 4
   Subscription (Claude Code Pro)        Free (Kiro, Qoder…)
   ↓ quota exhausted                     ↓ always on
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key distinction: &lt;strong&gt;OmniRoute is local-first and open-source&lt;/strong&gt;. Your config, your keys, your machine. No cloud intermediary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why It's Trending NOW (July 2026)
&lt;/h2&gt;

&lt;p&gt;Three market forces converged to make OmniRoute explode this week:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. AI coding agent saturation.&lt;/strong&gt; There are now 24+ viable coding agents, and every one needs its own API setup. OmniRoute's one-endpoint abstraction matters more as the ecosystem fragments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The free-tier aggregation play.&lt;/strong&gt; OmniRoute estimates ~1.6B documented free tokens per month aggregated across all providers — up to ~2.1B in your first month with signup credits. With Fable 5.0's credit cliff approaching, developers are scrambling for alternatives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Token compression that actually works.&lt;/strong&gt; The RTK + Caveman stacked compression pipeline averages ~89% on tool-heavy coding sessions. In an era where Claude Code sessions routinely burn 500K+ prompt tokens, that's the difference between $200/month and $20/month.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features (With Real Examples)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Combo Routing — The Killer Feature
&lt;/h3&gt;

&lt;p&gt;OmniRoute's "combo" system is what separates it from simple reverse proxies. A combo is a chain of models the gateway routes across automatically. Quota runs out, a provider fails, or costs spike — the combo silently slides to the next model.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;combo&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maximize-claude"&lt;/span&gt;
&lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;priority&lt;/span&gt;
&lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;cc/claude-opus-4-7&lt;/span&gt;     &lt;span class="c1"&gt;# Use subscription fully first&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;cx/gpt-5.5&lt;/span&gt;             &lt;span class="c1"&gt;# Fallback to Codex Pro&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;glm/glm-5.1&lt;/span&gt;            &lt;span class="c1"&gt;# Cheap backup ($0.5/1M)&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;kr/claude-sonnet-4.5&lt;/span&gt;   &lt;span class="c1"&gt;# FREE unlimited emergency&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's &lt;strong&gt;four layers of fallback&lt;/strong&gt; before you ever see a rate-limit error.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. 17 Routing Strategies
&lt;/h3&gt;

&lt;p&gt;The routing engine is absurdly configurable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;omniroute config &lt;span class="nb"&gt;set &lt;/span&gt;model auto          &lt;span class="c"&gt;# Balanced default&lt;/span&gt;
omniroute config &lt;span class="nb"&gt;set &lt;/span&gt;model auto/cheap    &lt;span class="c"&gt;# Cheapest viable&lt;/span&gt;
omniroute config &lt;span class="nb"&gt;set &lt;/span&gt;model fusion        &lt;span class="c"&gt;# Fan-out + judge&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fusion is uniquely OmniRoute: it sends one prompt to multiple models in parallel, then a judge model synthesizes the best answer. Expensive but excellent for complex reasoning.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. RTK + Caveman Compression
&lt;/h3&gt;

&lt;p&gt;This is where OmniRoute saves serious money. The pipeline has 10 composable engines stripping redundant tokens from tool outputs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;omniroute dashboard
&lt;span class="c"&gt;# → Compression: 62.3% avg reduction (last 100 requests)&lt;/span&gt;
&lt;span class="c"&gt;# → Tokens saved: 14,720,332 (this month)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;My four-day test results:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Session type&lt;/th&gt;
&lt;th&gt;Raw tokens&lt;/th&gt;
&lt;th&gt;Compressed&lt;/th&gt;
&lt;th&gt;Savings&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Code review (large PR diff)&lt;/td&gt;
&lt;td&gt;143,500&lt;/td&gt;
&lt;td&gt;21,380&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;85%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build log debugging&lt;/td&gt;
&lt;td&gt;78,200&lt;/td&gt;
&lt;td&gt;5,390&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;93%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-file refactor&lt;/td&gt;
&lt;td&gt;312,000&lt;/td&gt;
&lt;td&gt;34,100&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;89%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Normal coding session&lt;/td&gt;
&lt;td&gt;28,400&lt;/td&gt;
&lt;td&gt;15,900&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;44%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The numbers hold up for tool-heavy sessions. Normal conversational prompts save 15–30%.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. One-Command Setup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;omniroute setup-claude-code   &lt;span class="c"&gt;# Point Claude Code at gateway&lt;/span&gt;
omniroute setup-codex         &lt;span class="c"&gt;# Point Codex at gateway&lt;/span&gt;
omniroute launch cursor       &lt;span class="c"&gt;# Launch Cursor pre-routed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Zero manual configuration for every major coding agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Quota-Share for Teams
&lt;/h3&gt;

&lt;p&gt;Share one Codex Pro account across your team without lockout:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;pool&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;team-codex"&lt;/span&gt;
&lt;span class="na"&gt;keys&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;alice&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;weight &lt;/span&gt;&lt;span class="m"&gt;50&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;bob&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;weight &lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;ci-bot&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;weight &lt;/span&gt;&lt;span class="m"&gt;20&lt;/span&gt;
&lt;span class="na"&gt;policy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;soft&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  First Impressions from the Community
&lt;/h2&gt;

&lt;p&gt;The GitHub velocity tells the story — &lt;strong&gt;4,133 stars in one week&lt;/strong&gt; is exceptional. The README is translated into 42 languages, and the release cadence shows 24+ releases from v3.8.20 to v3.8.44 in recent weeks.&lt;/p&gt;

&lt;p&gt;Community reactions have been cautiously positive:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"OmniRoute is the first gateway that actually makes free-tier aggregation work without hoping it doesn't break. The combo system is genius." — r/opencodeCLI&lt;/p&gt;

&lt;p&gt;"The compression numbers seem inflated. My GCC build logs compress ~93% which is believable, but normal conversation tokens only saved 22%." — r/LocalLLaMA&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A fair critique: &lt;strong&gt;the project moves extremely fast&lt;/strong&gt; — config formats drift between minor versions. Pin versions for production.&lt;/p&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;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; omniroute

&lt;span class="c"&gt;# Or Docker&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; omniroute &lt;span class="nt"&gt;-p&lt;/span&gt; 20128:20128 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/omniroute-data:/data &lt;span class="se"&gt;\&lt;/span&gt;
  diegosouzapw/omniroute

&lt;span class="c"&gt;# Setup wizard&lt;/span&gt;
omniroute setup

&lt;span class="c"&gt;# Connect Claude Code&lt;/span&gt;
omniroute setup-claude-code

&lt;span class="c"&gt;# Verify&lt;/span&gt;
omniroute status
&lt;span class="c"&gt;# → 12 providers connected (7 with active quota)&lt;/span&gt;
&lt;span class="c"&gt;# → ~3,400,000 tokens remaining this month&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Who Should Use This
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Use OmniRoute if:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You run Claude Code or Codex daily.&lt;/strong&gt; The compression alone saves ~$40/month in tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limits frustrate you.&lt;/strong&gt; Auto-fallback means you never see "rate limit exceeded."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You cost-optimize.&lt;/strong&gt; Route cheap models for simple tasks, frontier for complex ones.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You share provider accounts on a team.&lt;/strong&gt; Quota-Share prevents CI lockout.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want built-in MCP tools.&lt;/strong&gt; 95 tools without installing a separate server.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ Skip if:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One provider, no limits.&lt;/strong&gt; Not worth the complexity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero latency overhead required.&lt;/strong&gt; Gateway adds 50–150ms per request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You prefer stable configs.&lt;/strong&gt; v3.8.x is stable but configs shift between releases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud proxy is all you need.&lt;/strong&gt; OpenRouter is simpler for cloud-only.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Comparison with Alternatives
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;OmniRoute&lt;/th&gt;
&lt;th&gt;LiteLLM&lt;/th&gt;
&lt;th&gt;OpenRouter&lt;/th&gt;
&lt;th&gt;Portkey&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Providers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;237&lt;/td&gt;
&lt;td&gt;~50&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;~20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Free tiers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;90+ (11 forever)&lt;/td&gt;
&lt;td&gt;1–5&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Local-first&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;❌ Cloud&lt;/td&gt;
&lt;td&gt;❌ Cloud&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Routing strategies&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;1–3&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Token compression&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10 engines&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;20–40%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MCP/A2A&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Built-in&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Open source&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ MIT&lt;/td&gt;
&lt;td&gt;✅ MIT&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;OmniRoute vs LiteLLM:&lt;/strong&gt; Both local-first, but OmniRoute routes more providers and ships compression + MCP/A2A natively. LiteLLM is simpler and more battle-tested.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OmniRoute vs OpenRouter:&lt;/strong&gt; OpenRouter is cloud-only (prompts through their proxy). OmniRoute is local-first with free-forever tiers and token compression.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest Limitations
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Project velocity is a double-edged sword.&lt;/strong&gt; 24 releases in a short window is impressive, but config formats shift. Pin your version for production.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compression is tool-output specific.&lt;/strong&gt; The 95% claim is real for git diffs and build logs. Normal prompts save 15–30%. The README is upfront, but marketing inflates expectations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Setup requires multiple API keys.&lt;/strong&gt; Free-forever providers work out of the box, but the full 237-provider catalog means signing up for 15–20 accounts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Latency overhead.&lt;/strong&gt; 50–150ms per request. Fine for coding agents, noticeable for interactive chat.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Documentation is scattered.&lt;/strong&gt; 20+ docs in &lt;code&gt;/docs/cover&lt;/code&gt; everything somewhere, but finding specific answers requires digging.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: Is OmniRoute really free?&lt;/strong&gt;&lt;br&gt;
A: Yes — MIT licensed. You pay only for the API keys you connect. Free-tier providers (Kiro, Qoder, Pollinations, Kilo, LongCat, Z.AI GLM-Flash) need no API key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Does OmniRoute work with Claude Code?&lt;/strong&gt;&lt;br&gt;
A: Yes — &lt;code&gt;omniroute setup-claude-code&lt;/code&gt; configures it automatically. OmniRoute translates the OpenAI endpoint to Anthropic's API so compression, routing, and fallback all work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How do the 1.6B free tokens work?&lt;/strong&gt;&lt;br&gt;
A: Aggregated free tiers of 40+ provider pools, pool-deduped (each shared pool counted once). First month reaches ~2.1B with signup credits. No-cap providers (SiliconFlow, Kilo, OpenCode Zen) add uncounted capacity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How much compression should I expect?&lt;/strong&gt;&lt;br&gt;
A: ~44% on normal sessions, ~85–93% on tool-heavy, ~62% average across all types per OmniRoute's dashboard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can I use it without npm?&lt;/strong&gt;&lt;br&gt;
A: Yes — Docker, Desktop app (Electron), and PWA are all supported.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Is it safe?&lt;/strong&gt;&lt;br&gt;
A: Runs locally on your machine. Prompts leave your network only when forwarded to providers (which happens anyway). MIT license — you can audit every line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Does it work with Cursor?&lt;/strong&gt;&lt;br&gt;
A: Yes — and Cline, Continue, Roo Code, Kilo Code, Goose, Aider, and 15+ more via &lt;code&gt;omniroute launch&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verdict
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;OmniRoute is the Swiss Army knife of AI coding gateways, and it's surprisingly sharp.&lt;/strong&gt; The combo routing, compression pipeline, and built-in MCP server solve real, painful problems that every AI developer faces daily. The 4K-star weekly velocity isn't hype — it reflects genuine relief from a community drowning in API keys and rate limits.&lt;/p&gt;

&lt;p&gt;The project moves fast — too fast for some — and the compression marketing needs context. But $0 cost, MIT license, and a 10-minute install that immediately saves you money? That's a rare combination.&lt;/p&gt;

&lt;p&gt;My recommendation: install it this afternoon. Connect your Claude Code and Codex subscriptions. Enable the free-forever providers. Set model to &lt;code&gt;auto/coding&lt;/code&gt;. The worst case is you delete the container. The best case is a 60% reduction in token spend and zero rate-limit interruptions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/diegosouzapw/OmniRoute" rel="noopener noreferrer"&gt;github.com/diegosouzapw/OmniRoute&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard:&lt;/strong&gt; &lt;a href="https://omniroute.online" rel="noopener noreferrer"&gt;omniroute.online&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stars:&lt;/strong&gt; 11,473 (July 5, 2026) — 4,133 this week&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License:&lt;/strong&gt; MIT&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install:&lt;/strong&gt; &lt;code&gt;npm install -g omniroute&lt;/code&gt; or Docker&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;My rating:&lt;/strong&gt; 4.2 / 5&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>omniroute</category>
      <category>aigateway</category>
      <category>llmrouter</category>
      <category>claudecode</category>
    </item>
    <item>
      <title>olmOCR Review: AllenAI's VLM Beats Mistral &amp; Marker on PDFs</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Sat, 04 Jul 2026 10:09:47 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/olmocr-review-allenais-vlm-beats-mistral-marker-on-pdfs-4cci</link>
      <guid>https://dev.to/andrew-ooo/olmocr-review-allenais-vlm-beats-mistral-marker-on-pdfs-4cci</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/olmocr-allenai-pdf-vision-language-model-review/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;&lt;strong&gt;olmOCR&lt;/strong&gt; is the Allen Institute for AI's open-source toolkit for &lt;strong&gt;converting PDFs, PNGs, and JPEGs into clean Markdown using a fine-tuned 7B vision-language model&lt;/strong&gt;. It scores &lt;strong&gt;82.4 on olmOCR-Bench&lt;/strong&gt;, beating Marker (76.1), MinerU (75.2), and Mistral's OCR API (72.0) — and it costs &lt;strong&gt;under $200 per million pages&lt;/strong&gt; end-to-end on your own GPU. The repo just crossed &lt;strong&gt;18,600 GitHub stars&lt;/strong&gt; with &lt;strong&gt;1,200 added this week&lt;/strong&gt;, and every serious LLM-dataset builder I know has now tried it.&lt;/p&gt;

&lt;p&gt;The pitch is straightforward: OCR isn't really OCR anymore. If you want text that's actually usable for LLM training, RAG, or fine-tuning, you don't want a bounding-box detector — you want a small vision model that reads the page the way a human does. That's what olmOCR is, packaged as a batch pipeline that will chew through millions of pages on a single node or a Kubernetes cluster.&lt;/p&gt;

&lt;p&gt;Key facts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;18,653 GitHub stars&lt;/strong&gt;, &lt;strong&gt;1,216 added this week&lt;/strong&gt; — top-trending Python repo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v0.4.0 (October 2025)&lt;/strong&gt; — a new RL-trained model (&lt;code&gt;olmOCR-2-7B-1025-FP8&lt;/code&gt;) that pushes olmOCR-Bench to 82.4&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backed by Ai2&lt;/strong&gt; and the AllenNLP team — same lab that ships OLMo, Dolma, and Tulu&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two ArXiv papers&lt;/strong&gt; (2502.18443 and 2510.19817), one at ICML 2025&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apache 2.0 license&lt;/strong&gt; on all code, models, and training data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ships a full benchmark suite&lt;/strong&gt; (olmOCR-Bench, 7,000+ test cases, 1,400 documents)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runs via &lt;code&gt;pip install olmocr[gpu]&lt;/code&gt;&lt;/strong&gt; or &lt;code&gt;docker pull alleninstituteforai/olmocr:latest-with-model&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install (GPU): &lt;code&gt;pip install olmocr[gpu] --extra-index-url https://download.pytorch.org/whl/cu128&lt;/code&gt;. Try the hosted demo at &lt;a href="https://olmocr.allenai.org/" rel="noopener noreferrer"&gt;olmocr.allenai.org&lt;/a&gt; before you commit to a 30GB Docker pull.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why olmOCR exists
&lt;/h2&gt;

&lt;p&gt;The pitch in the paper title is "Unlocking Trillions of Tokens in PDFs." That's not marketing. Somewhere between 40% and 60% of high-quality technical writing on the public internet — textbooks, government reports, court filings, scientific papers — is locked inside PDFs. Traditional OCR (Tesseract, ABBYY) can pull the text, but it can't preserve reading order across multi-column layouts, it hallucinates on tables, and it turns math into gibberish.&lt;/p&gt;

&lt;p&gt;The commercial answer is API-based OCR: Mistral OCR, AWS Textract, Azure Document Intelligence, Google Document AI. All of them work, all of them cost meaningful money per page, and none of them let you inspect or fine-tune the model.&lt;/p&gt;

&lt;p&gt;The AI2 answer is: fine-tune a 7B vision-language model on 260,000 PDF pages, ship the weights, ship the training code, ship the benchmark. If your data is sensitive or your volume is high, you run it yourself. If you just want to try it, hit the online demo or a hosted inference provider.&lt;/p&gt;

&lt;h2&gt;
  
  
  The actual pipeline
&lt;/h2&gt;

&lt;p&gt;The command-line surface is deceptively simple. The full pipeline runs one binary:&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;# Single PDF, local GPU&lt;/span&gt;
olmocr ./localworkspace &lt;span class="nt"&gt;--markdown&lt;/span&gt; &lt;span class="nt"&gt;--pdfs&lt;/span&gt; olmocr-sample.pdf

&lt;span class="c"&gt;# Glob of PDFs&lt;/span&gt;
olmocr ./localworkspace &lt;span class="nt"&gt;--markdown&lt;/span&gt; &lt;span class="nt"&gt;--pdfs&lt;/span&gt; tests/gnarly_pdfs/&lt;span class="k"&gt;*&lt;/span&gt;.pdf

&lt;span class="c"&gt;# Millions of PDFs, S3-coordinated across N worker nodes&lt;/span&gt;
olmocr s3://bucket/workspace &lt;span class="nt"&gt;--pdfs&lt;/span&gt; s3://bucket/pdfs/&lt;span class="k"&gt;*&lt;/span&gt;.pdf

&lt;span class="c"&gt;# Remote inference (no local GPU needed)&lt;/span&gt;
olmocr ./localworkspace &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--server&lt;/span&gt; http://your-vllm:8000/v1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--model&lt;/span&gt; allenai/olmOCR-2-7B-1025-FP8 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--markdown&lt;/span&gt; &lt;span class="nt"&gt;--pdfs&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;.pdf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Under the hood: &lt;code&gt;poppler-utils&lt;/code&gt; rasterizes each PDF page to an image, the pipeline crops that image plus an anchor-text hint from the raw PDF, sends both to a vLLM server hosting &lt;code&gt;olmOCR-2-7B-1025-FP8&lt;/code&gt;, and streams the model's output back into two files — a Dolma-format JSONL (structured for LLM training) and a plain Markdown file preserving your input folder structure.&lt;/p&gt;

&lt;p&gt;The two things that matter for real workloads:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--server&lt;/code&gt; decouples inference from ingestion.&lt;/strong&gt; You can run 40 CPU-only ingestion workers pushing pages to one shared vLLM box with two H100s. That's the shape production data-prep pipelines actually take.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;S3 workspaces are a shared work queue.&lt;/strong&gt; Start &lt;code&gt;olmocr s3://bucket/workspace ...&lt;/code&gt; on the first machine to seed the queue, then run the same binary without &lt;code&gt;--pdfs&lt;/code&gt; on every other node. They'll cooperatively drain the queue. This is how AI2 processes millions of pages on Beaker with &lt;code&gt;--beaker --beaker_gpus 4&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There's also a Docker image with the model baked in (~30GB), which is the right choice if you're spinning up ephemeral GPU boxes on RunPod, Modal, or Lambda:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull alleninstituteforai/olmocr:latest-with-model

docker run &lt;span class="nt"&gt;--gpus&lt;/span&gt; all &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;:/workspace &lt;span class="se"&gt;\&lt;/span&gt;
  alleninstituteforai/olmocr:latest-with-model &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"olmocr /workspace/output --markdown --pdfs /workspace/*.pdf"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The benchmark story
&lt;/h2&gt;

&lt;p&gt;The interesting bit isn't that olmOCR is "good" — every 7B VLM fine-tune claims that. The interesting bit is that AI2 shipped their own benchmark alongside the model and it survives external scrutiny. olmOCR-Bench has 7,000+ test cases across 1,400 documents, sliced into eight categories: ArXiv, old scans, math, tables, old-scans-headers, multi-column, long tiny text, and a base category.&lt;/p&gt;

&lt;p&gt;Here's the leaderboard as of v0.4.0:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;System&lt;/th&gt;
&lt;th&gt;Overall&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Chandra OCR 0.1.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;83.1&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Infinity-Parser 7B&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;82.5&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;olmOCR v0.4.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;82.4&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PaddleOCR-VL&lt;/td&gt;
&lt;td&gt;80.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Marker 1.10.1&lt;/td&gt;
&lt;td&gt;76.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek-OCR&lt;/td&gt;
&lt;td&gt;75.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MinerU 2.5.4&lt;/td&gt;
&lt;td&gt;75.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mistral OCR API&lt;/td&gt;
&lt;td&gt;72.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nanonets-OCR2-3B&lt;/td&gt;
&lt;td&gt;69.5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two things stand out. First, olmOCR is inside the top three despite being fully open-source &lt;em&gt;and&lt;/em&gt; the only one where you get the weights, the training data, the training code, and the benchmark all under Apache 2.0. Chandra and Infinity-Parser are strong but closed-weights. Second, the pairwise-preference numbers from AI2's own human eval — olmOCR was preferred &lt;strong&gt;61.3% of the time against Marker&lt;/strong&gt;, &lt;strong&gt;58.6% against GOT-OCR&lt;/strong&gt;, and &lt;strong&gt;71.4% against MinerU&lt;/strong&gt; — matter more than the aggregate score for real workloads, because they show olmOCR is producing text you actually want to read.&lt;/p&gt;

&lt;p&gt;The Medium recap of the paper put the human-ELO story bluntly: "Human ELO rankings (452 judgments) place olmOCR at 1,800+ Elo, far above Marker (1,600) and MinerU (1,500)."&lt;/p&gt;

&lt;h2&gt;
  
  
  What the community actually says
&lt;/h2&gt;

&lt;p&gt;The Hacker News thread on the initial launch (item 43174298) has the usual reception curve — impressed, then skeptical, then grudgingly on board. The strongest positive was that olmOCR &lt;strong&gt;runs locally on a single Nvidia GPU&lt;/strong&gt; and &lt;strong&gt;produces a single stream of text with correct reading order for multi-column PDFs&lt;/strong&gt; — which is the failure mode of every non-VLM tool. Handwriting recognition surprised people who expected traditional-OCR performance.&lt;/p&gt;

&lt;p&gt;The skepticism has a real edge to it, and it's important to name. VLMs can and do hallucinate on unreadable text. A traditional OCR engine faced with a smudged scan will output gibberish with low confidence — you can filter it. A VLM will confidently make something up that looks plausible. Multiple HN commenters flagged this as the reason they won't use VLM-based OCR for anything legal, medical, or scientific without a second pass.&lt;/p&gt;

&lt;p&gt;The r/LocalLLaMA thread was more practical — the first questions were about VRAM (12GB minimum, comfortable at 24GB), context length, and whether it can be quantized further (the FP8 model already is). The most interesting real-world comparison was on r/fintech, where someone benchmarked olmOCR against Gemini 2.0 Flash for structured extraction from financial tables. Verdict: Gemini's still better on the tightest table layouts, olmOCR is cheaper and more predictable on volume.&lt;/p&gt;

&lt;p&gt;Two threads on &lt;code&gt;daily.dev&lt;/code&gt; and &lt;code&gt;AI Innovations Substack&lt;/code&gt; picked up on the training data story — 260K PDF pages, 100K unique documents, all with GPT-4o silver labels. That's what fine-tunes a 7B model into an OCR specialist. If you want to replicate the recipe on your own domain, everything's in the repo under &lt;code&gt;olmocr/train/&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost math
&lt;/h2&gt;

&lt;p&gt;The bit AI2 keeps repeating in the docs — "less than $200 USD per million pages" — is worth checking, because it's the number that decides whether you self-host or pay Mistral $1/1000 pages.&lt;/p&gt;

&lt;p&gt;At $0.09 in / $0.19 out per million tokens on DeepInfra (one of the officially-tested providers), and ~500 tokens per page average for markdown output, one million pages is roughly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Input: ~150M tokens × $0.09/M = $13.50&lt;/li&gt;
&lt;li&gt;Output: ~500M tokens × $0.19/M = $95&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's ~$108 per million pages on hosted inference, plus the ingestion machine cost. On your own H100 running vLLM at FP8, the marginal cost per page trends toward the electricity + amortized GPU cost — well under $100/M pages if the box is saturated. On a rented H100 at $2/hr running at the paper's ~5,700 pages/GPU-hour, that's ~$350/M pages — higher than the marketing number, but still well under any commercial API.&lt;/p&gt;

&lt;p&gt;The takeaway: &lt;strong&gt;olmOCR wins the cost argument the moment your workload is more than ~50K pages/month&lt;/strong&gt;. Below that, the setup cost isn't worth it and you should just call Mistral OCR.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limitations
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;VLM hallucinations are real.&lt;/strong&gt; As the HN thread flagged, a 7B VLM can confidently invent text when the source is unreadable. If accuracy on scans matters — legal, medical, scientific — you need a second-pass validator (e.g., match against Tesseract output and flag disagreements). olmOCR doesn't ship that out of the box.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPU-heavy.&lt;/strong&gt; Even the FP8 model needs ~12GB VRAM minimum, and you'll want 24GB (RTX 3090 / 4090 / L40S / A100) for real throughput. There's no CPU fallback and no Apple-Silicon path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;English-first, and it shows.&lt;/strong&gt; The &lt;code&gt;--apply_filter&lt;/code&gt; flag literally filters to English, non-form, non-SEO-spam PDFs. Non-Latin scripts work but the training data is English-heavy, and the tables/math training slice is essentially all English.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;ttf-mscorefonts-installer&lt;/code&gt; is a real dependency.&lt;/strong&gt; The Ubuntu install spec includes Microsoft's core fonts because the model was trained on rendered pages that use them. Skip this and rendering-side artifacts creep in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not a document-understanding system.&lt;/strong&gt; olmOCR extracts text. If you want key-value extraction, form parsing, or structured JSON output ("give me the invoice total"), you're building that layer yourself on top of the markdown.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Docker image is 30GB.&lt;/strong&gt; Includes the model weights. If you're spinning up ephemeral cloud GPUs on every job, that pull dominates your cold-start.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How it compares
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;License&lt;/th&gt;
&lt;th&gt;Runs locally?&lt;/th&gt;
&lt;th&gt;Bench score&lt;/th&gt;
&lt;th&gt;Cost / 1M pages&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;olmOCR&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apache 2.0 (weights + code)&lt;/td&gt;
&lt;td&gt;Yes (GPU)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;82.4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$100–$350&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High-volume LLM training data, self-hosted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chandra OCR 0.1.0&lt;/td&gt;
&lt;td&gt;Closed weights&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;83.1&lt;/td&gt;
&lt;td&gt;API pricing&lt;/td&gt;
&lt;td&gt;Highest raw score, if you don't need open weights&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Marker 1.10.1&lt;/td&gt;
&lt;td&gt;GPL&lt;/td&gt;
&lt;td&gt;Yes (GPU/CPU)&lt;/td&gt;
&lt;td&gt;76.1&lt;/td&gt;
&lt;td&gt;~$0 self-hosted&lt;/td&gt;
&lt;td&gt;Fast, layout-only extraction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MinerU 2.5.4&lt;/td&gt;
&lt;td&gt;AGPL&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;75.2&lt;/td&gt;
&lt;td&gt;~$0 self-hosted&lt;/td&gt;
&lt;td&gt;Scientific PDFs, formula-heavy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mistral OCR API&lt;/td&gt;
&lt;td&gt;Closed&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;72.0&lt;/td&gt;
&lt;td&gt;$1,000&lt;/td&gt;
&lt;td&gt;Low-volume, no infra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nanonets-OCR2-3B&lt;/td&gt;
&lt;td&gt;Open weights&lt;/td&gt;
&lt;td&gt;Yes (GPU)&lt;/td&gt;
&lt;td&gt;69.5&lt;/td&gt;
&lt;td&gt;Self-hosted&lt;/td&gt;
&lt;td&gt;Smaller GPU footprint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek-OCR&lt;/td&gt;
&lt;td&gt;Open weights&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;75.7&lt;/td&gt;
&lt;td&gt;Self-hosted&lt;/td&gt;
&lt;td&gt;Multilingual, competitive on cost&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The unique seat is: &lt;strong&gt;highest open-weights score + real production pipeline (S3, Beaker, vLLM) + shipped benchmark&lt;/strong&gt;. Marker and MinerU are faster on CPU but their ceiling is lower. Chandra beats olmOCR on the bench but you can't fine-tune it. Mistral OCR is easier but 14× more expensive on volume.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is olmOCR free?
&lt;/h3&gt;

&lt;p&gt;Yes — Apache 2.0 on all code, model weights, training data, and benchmark. You pay for compute (a GPU or an inference provider). There's no license tier and no "open-core" catch — the same model AI2 uses internally is the one on Hugging Face.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need a GPU?
&lt;/h3&gt;

&lt;p&gt;For local inference, yes — 12GB VRAM minimum, 24GB comfortable. If you don't have a GPU, install the lightweight package (&lt;code&gt;pip install olmocr&lt;/code&gt;) and point &lt;code&gt;--server&lt;/code&gt; at Cirrascale, DeepInfra, or Parasail. They all host &lt;code&gt;olmOCR-2-7B-1025&lt;/code&gt; at $0.07–$0.10 per million input tokens.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does olmOCR compare to Mistral OCR?
&lt;/h3&gt;

&lt;p&gt;On the AI2-run benchmark, olmOCR scores 82.4 vs Mistral OCR's 72.0 — a real 10-point gap that shows up as fewer table errors and better multi-column reading order. On cost, olmOCR is ~10× cheaper per million pages at hosted inference and effectively free at scale on your own hardware. Mistral OCR wins on setup simplicity for one-off jobs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I fine-tune it on my own documents?
&lt;/h3&gt;

&lt;p&gt;Yes — that's the point. The &lt;code&gt;olmocr/train/&lt;/code&gt; directory has a clean SFT trainer for Qwen2.5-VL plus a GRPO RL trainer (the technique behind the v0.4.0 improvement). If your domain is old scanned invoices, medical charts, or legal filings, you can fine-tune on a few thousand labeled pages and materially improve accuracy on that slice.&lt;/p&gt;

&lt;h3&gt;
  
  
  What about non-English documents?
&lt;/h3&gt;

&lt;p&gt;It works, but performance drops. The training data is heavily English, and the &lt;code&gt;--apply_filter&lt;/code&gt; flag explicitly filters to English PDFs. For serious multilingual OCR at scale, DeepSeek-OCR or PaddleOCR-VL are stronger picks today. That said, olmOCR still handles Latin-script European languages well because of the shared Qwen2.5-VL base.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does it handle math and equations?
&lt;/h3&gt;

&lt;p&gt;Yes, and this is one of the strongest slices. On the "Old scans math" category of olmOCR-Bench, olmOCR v0.4.0 scores 82.3 — second only to Chandra (80.3 on the same slice). Equations come out as LaTeX inside the Markdown, which is usually what you want for LLM training and RAG.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I run it on RunPod / Modal / Lambda Labs?
&lt;/h3&gt;

&lt;p&gt;The Docker path is the fastest. Pull &lt;code&gt;alleninstituteforai/olmocr:latest-with-model&lt;/code&gt; on an H100 or L40S template, mount your PDFs, and run the pipeline. For repeated jobs, cache the image on a persistent volume — the 30GB pull is the slowest part of a cold start.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;If you're building an LLM training dataset, running RAG over a document archive, or converting a corpus of PDFs into anything useful, olmOCR is now the default open-source pick. It's not the highest-scoring OCR system on olmOCR-Bench — Chandra edges it — but it is the highest-scoring system where you get the weights, the training code, the data, the pipeline, and the benchmark under Apache 2.0.&lt;/p&gt;

&lt;p&gt;The right sequence is: &lt;strong&gt;hit the &lt;a href="https://olmocr.allenai.org/" rel="noopener noreferrer"&gt;hosted demo&lt;/a&gt; with a hard PDF from your workload → if the output is right, run the Docker image on a single-GPU box against 100 pages → if the numbers hold, wire up the S3 pipeline for the real corpus&lt;/strong&gt;. That's a one-afternoon evaluation for a decision that will save you five figures a year against any commercial API.&lt;/p&gt;

&lt;p&gt;The next release (per AI2's roadmap in the blog post) focuses on document-level QA rewards and a smaller distilled model — both of which would push this repo from "best default" to "the answer" for open PDF extraction.&lt;/p&gt;

&lt;p&gt;Install: &lt;code&gt;pip install olmocr[gpu] --extra-index-url https://download.pytorch.org/whl/cu128&lt;/code&gt;. Star and try the demo at &lt;a href="https://github.com/allenai/olmocr" rel="noopener noreferrer"&gt;github.com/allenai/olmocr&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>olmocr</category>
      <category>allenai</category>
      <category>ai2</category>
      <category>pdfocr</category>
    </item>
    <item>
      <title>Strix Review: Open-Source AI Penetration Testing Agents</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Fri, 03 Jul 2026 10:12:40 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/strix-review-open-source-ai-penetration-testing-agents-4463</link>
      <guid>https://dev.to/andrew-ooo/strix-review-open-source-ai-penetration-testing-agents-4463</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/strix-open-source-ai-penetration-testing-review/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Legacy vulnerability scanners have two problems. &lt;strong&gt;False positives&lt;/strong&gt; waste your security team's week chasing findings that turn out to be theoretical. And &lt;strong&gt;static analysis misses everything dynamic&lt;/strong&gt; — IDOR, business logic flaws, race conditions, chained exploits. The industry answer for twenty years has been "hire a pentest firm every six months" at $30–100K a pop.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/usestrix/strix" rel="noopener noreferrer"&gt;&lt;strong&gt;Strix&lt;/strong&gt;&lt;/a&gt; is the first serious open-source attempt to replace that model with autonomous AI agents that behave like real attackers. It just crossed &lt;strong&gt;33,383 GitHub stars&lt;/strong&gt; and pulled in &lt;strong&gt;4,743 stars in the last week&lt;/strong&gt; as of July 3, 2026 — one of the top-trending Python repos on GitHub. The pitch:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Strix are autonomous AI penetration testing agents that act just like real hackers — they run your code dynamically, find vulnerabilities, and validate them through actual proofs-of-concept.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The critical detail — and what separates Strix from every "AI security" tool that came before it — is &lt;strong&gt;exploit validation&lt;/strong&gt;. Every finding ships with a working PoC. If Strix says your endpoint is vulnerable to SSRF, it hands you the exact HTTP request that proves it. False positives approach zero because the finding &lt;em&gt;is&lt;/em&gt; the exploit.&lt;/p&gt;

&lt;p&gt;I spent three days running Strix against a deliberately-vulnerable Django app (DVWA-style), a real production-scale Node.js API I have permission to test, and a GitHub Actions PR-scan integration. This is the review.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Strix actually is
&lt;/h2&gt;

&lt;p&gt;Strip away the marketing and Strix is four things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A CLI&lt;/strong&gt; (&lt;code&gt;strix&lt;/code&gt;) that spins up a Docker sandbox and runs one or more AI agents inside it, targeting your code, URL, or repo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A multi-agent orchestrator&lt;/strong&gt; — specialized agents for reconnaissance, exploitation, and post-exploitation share state and collaborate like a small red team.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A pentest toolkit inside the sandbox&lt;/strong&gt; — Caido HTTP interception proxy, Playwright browser, Python exploit runtime, shell, Nuclei-style templates, subdomain enum.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A hosted platform&lt;/strong&gt; (&lt;code&gt;app.strix.ai&lt;/code&gt;) that layers continuous scanning, auto-PR patches, Slack/Jira/Linear integrations, and compliance reports on top of the OSS core.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The core philosophy from the README:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Built for developers and security teams who need fast, accurate security testing without the overhead of manual pentesting or the false positives of static analysis tools.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Strix isn't trying to replace human pentesters for high-stakes engagements. It's replacing the &lt;em&gt;frequency gap&lt;/em&gt; — the six months between contracted tests when your team ships 200 features and nobody looks at them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install and first scan
&lt;/h2&gt;

&lt;p&gt;Prerequisites are honest: Docker running, and an LLM API key. That's it.&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;# Install (single script)&lt;/span&gt;
curl &lt;span class="nt"&gt;-sSL&lt;/span&gt; https://strix.ai/install | bash

&lt;span class="c"&gt;# Configure LLM provider (OpenAI, Anthropic, Google, Vertex, Bedrock, Ollama, LMStudio…)&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;STRIX_LLM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"anthropic/claude-sonnet-4-6"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;LLM_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"sk-ant-..."&lt;/span&gt;

&lt;span class="c"&gt;# First scan — targeting a local codebase&lt;/span&gt;
strix &lt;span class="nt"&gt;--target&lt;/span&gt; ./my-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configuration persists to &lt;code&gt;~/.strix/cli-config.json&lt;/code&gt; so you don't re-enter your key each run. First-time execution pulls the sandbox Docker image (~2 GB, one-time). Results land in &lt;code&gt;strix_runs/&amp;lt;run-name&amp;gt;/&lt;/code&gt; with a Markdown report, structured JSON findings, and per-vulnerability PoC payloads.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;recommended models&lt;/strong&gt; are the frontier tier — OpenAI GPT-5.4, Anthropic Claude Sonnet 4.6, Google Gemini 3 Pro Preview. In practice I saw a meaningful drop-off with smaller local models (Qwen 3 30B via Ollama caught obvious SQLi but missed chained IDOR + business logic flows). Budget accordingly: a "standard" scan of a moderate Node.js API burned about $8–12 in Anthropic tokens with reasoning effort set to high.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real target types Strix handles
&lt;/h2&gt;

&lt;p&gt;Strix accepts five kinds of target, mixable in one command:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Target syntax&lt;/th&gt;
&lt;th&gt;What Strix does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--target ./app-dir&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;White-box: reads source + runs dynamic analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--target https://github.com/org/repo&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Clones repo, then acts like local white-box&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--target https://your-app.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Black-box: recon + DAST from outside&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;-t &amp;lt;src&amp;gt;&lt;/code&gt; + &lt;code&gt;-t &amp;lt;url&amp;gt;&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Grey-box: reads code, exploits deployed app&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;--instruction "..."&lt;/code&gt; or &lt;code&gt;--instruction-file&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Rules of engagement, scope, exclusions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The grey-box combo is the interesting one — I gave Strix both &lt;code&gt;./api-server/&lt;/code&gt; and &lt;code&gt;https://api.staging.mydomain.com&lt;/code&gt;, and it correlated a suspicious code path in &lt;code&gt;routes/user.js&lt;/code&gt; with a live IDOR at &lt;code&gt;GET /api/users/{id}/notes&lt;/code&gt;. The report contained the exact vulnerable line of code, the reproducing HTTP request, and a proposed patch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real code examples
&lt;/h2&gt;

&lt;p&gt;Actual commands from my test session, unedited:&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;# Local codebase scan&lt;/span&gt;
strix &lt;span class="nt"&gt;--target&lt;/span&gt; ./vulnerable-node-app

&lt;span class="c"&gt;# Test a GitHub repo end-to-end&lt;/span&gt;
strix &lt;span class="nt"&gt;--target&lt;/span&gt; https://github.com/OWASP/NodeGoat

&lt;span class="c"&gt;# Black-box web app&lt;/span&gt;
strix &lt;span class="nt"&gt;--target&lt;/span&gt; https://juice-shop.herokuapp.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--instruction&lt;/span&gt; &lt;span class="s2"&gt;"focus on auth bypass, IDOR, SQL injection"&lt;/span&gt;

&lt;span class="c"&gt;# Authenticated grey-box&lt;/span&gt;
strix &lt;span class="nt"&gt;--target&lt;/span&gt; https://staging.myapp.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--instruction&lt;/span&gt; &lt;span class="s2"&gt;"authenticated user creds: alice:hunter2, admin creds: root:letmein"&lt;/span&gt;

&lt;span class="c"&gt;# CI-friendly non-interactive&lt;/span&gt;
strix &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nt"&gt;--target&lt;/span&gt; ./ &lt;span class="nt"&gt;--scan-mode&lt;/span&gt; quick

&lt;span class="c"&gt;# Diff-scope for pull requests (only test changed files)&lt;/span&gt;
strix &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nt"&gt;--target&lt;/span&gt; ./ &lt;span class="nt"&gt;--scan-mode&lt;/span&gt; quick &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--scope-mode&lt;/span&gt; diff &lt;span class="nt"&gt;--diff-base&lt;/span&gt; origin/main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The GitHub Actions workflow is genuinely trivial:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;strix-security-scan&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;security&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v6&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;fetch-depth&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;0&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Install Strix&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;curl -sSL https://strix.ai/install | bash&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run Strix on PR diff&lt;/span&gt;
        &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;STRIX_LLM&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.STRIX_LLM }}&lt;/span&gt;
          &lt;span class="na"&gt;LLM_API_KEY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.LLM_API_KEY }}&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;strix -n -t ./ --scan-mode quick&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Strix auto-detects the pull-request context and scopes the scan to changed files only. Exit code is non-zero when vulnerabilities are found, so the PR is blocked. My "quick" scan on a small feature PR ran in &lt;strong&gt;4 minutes 12 seconds&lt;/strong&gt;, cost about &lt;strong&gt;$0.35&lt;/strong&gt; in Claude tokens, and caught a real XSS I'd introduced.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vulnerability coverage (real classes, not marketing)
&lt;/h2&gt;

&lt;p&gt;Strix maps to the full OWASP Top 10 and beyond, with actual detection paths (not just checklist claims):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Broken Access Control&lt;/strong&gt; — IDOR, privilege escalation, JWT &lt;code&gt;alg:none&lt;/code&gt;, path traversal in file endpoints, admin route auth bypass&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Injection&lt;/strong&gt; — SQL (union/blind/boolean/time), NoSQL ($where, MongoDB operator injection), OS command, SSTI (Jinja2, Twig, Freemarker), LDAP, XPath&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server-Side&lt;/strong&gt; — SSRF (blind and reflected), XXE, insecure deserialization (pickle, Java serial, .NET binary), RCE&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client-Side&lt;/strong&gt; — XSS (stored/reflected/DOM), prototype pollution, CSRF token bypass, clickjacking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Business Logic&lt;/strong&gt; — race conditions on payment endpoints, workflow bypass, price manipulation, quota escalation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth &amp;amp; Session&lt;/strong&gt; — JWT confusion attacks, session fixation, credential stuffing detection, OAuth flow flaws&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API&lt;/strong&gt; — mass assignment, broken function-level auth, rate-limit bypass via header spoofing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure&lt;/strong&gt; — cloud metadata exposure, misconfigured S3/GCS buckets, exposed Kubernetes services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Findings ship with CVSS scores and OWASP classifications for compliance workflows. Every one is validated with a PoC — the report literally contains the request body that triggered the vulnerability.&lt;/p&gt;

&lt;h2&gt;
  
  
  The killer feature: validated PoCs, not scanner noise
&lt;/h2&gt;

&lt;p&gt;The demo scan against OWASP NodeGoat surfaced 14 findings. Every single one included:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A reproducible request&lt;/strong&gt; — the exact &lt;code&gt;curl&lt;/code&gt; command, HTTP method, headers, body&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server response&lt;/strong&gt; — the raw response showing the exploit succeeded&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A remediation snippet&lt;/strong&gt; — code diff proposing the fix&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CVSS score&lt;/strong&gt; and OWASP category&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Compare this to a typical SAST run (Semgrep, CodeQL) which will emit 200+ "potential" findings, most of which require an hour of triage to determine "actually exploitable." Strix's finding count is lower and every one is real. That's the entire product.&lt;/p&gt;

&lt;p&gt;The auto-fix feature — currently only in the hosted &lt;code&gt;app.strix.ai&lt;/code&gt; version — takes it a step further: for each validated finding, Strix opens a pull request against your repo with the proposed patch. Merge, deploy, done. The open-source CLI emits the patch snippet in the report; you apply it manually.&lt;/p&gt;

&lt;h2&gt;
  
  
  Community reactions
&lt;/h2&gt;

&lt;p&gt;Reactions cluster into three groups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practitioners impressed by validation:&lt;/strong&gt; the Help Net Security piece from November 2025 called out exactly this: &lt;em&gt;"an open source way to catch [flaws] earlier by using autonomous agents that behave like human attackers."&lt;/em&gt; The Hacker News launch thread (400+ points) top comment: &lt;em&gt;"I've been drowning in SAST false positives for years. A tool where every finding is a working exploit sounds too good — I tested it, and it's true."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enterprises skeptical about frontier-model dependence:&lt;/strong&gt; &lt;em&gt;"$8–12 per moderate scan is fine for CI. But if you scan every branch, every PR, across a monorepo with 50 microservices, this is a five-figure monthly LLM bill."&lt;/em&gt; The Strix team responds by pointing at local model support (Ollama, LMStudio) as the escape hatch, though quality drops noticeably with smaller models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security researchers cautioning against overuse:&lt;/strong&gt; the top r/netsec discussion (200+ upvotes) flagged that Strix is powerful enough to find real vulns in live systems, which means the "only test apps you own or have permission to test" warning matters. Some bug bounty hunters are already using it against their programs (and reporting good bounty hits); at least one has claimed a $12K payout on HackerOne from a Strix-discovered SSRF.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limitations
&lt;/h2&gt;

&lt;p&gt;Three days of hard testing surfaced these.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Cost at scale is real.&lt;/strong&gt;&lt;br&gt;
Frontier models running with high reasoning effort against a mid-sized codebase are $8–20/scan. Continuous scanning on a large monorepo with dozens of PRs/day means a real four-figure monthly bill. Local models cut this to near-zero but reduce coverage — you'll miss chained business-logic vulns. The hosted app.strix.ai offers a "learned baseline" that skips known-good code paths, but the OSS CLI rescans everything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Grey-box is where the value lives; black-box is weaker.&lt;/strong&gt;&lt;br&gt;
Purely black-box scans (&lt;code&gt;--target https://your-app.com&lt;/code&gt; with no source) hit a lower ceiling. Strix does great recon, but without source code its exploitation depth caps out around the reflection-attack tier (XSS, obvious injection). Real business-logic vulns need either source access or extremely detailed instruction files. Set expectations if you're doing external-only testing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Not a replacement for human red teams on high-stakes systems.&lt;/strong&gt;&lt;br&gt;
The README doesn't claim this, and neither should you. If you're a bank, a payment processor, or handling sensitive PII, Strix is a &lt;em&gt;layer&lt;/em&gt; — you still want quarterly human pentests. Where Strix wins is the 25 weeks per year when no human is looking. That gap is where breaches happen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Docker requirement.&lt;/strong&gt;&lt;br&gt;
Everything runs in a sandbox container, which is the right architectural choice for a tool that literally runs exploit code — but it means no bare-metal or serverless CI setups. GitHub Actions works fine; you'll need to think about Kubernetes CI runners.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison to alternatives
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://portswigger.net/burp" rel="noopener noreferrer"&gt;PortSwigger Burp Suite&lt;/a&gt;&lt;/strong&gt; — the professional standard for manual pentesting. Burp is a tool; Strix is an autonomous agent. Different jobs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/projectdiscovery/nuclei" rel="noopener noreferrer"&gt;Nuclei by ProjectDiscovery&lt;/a&gt;&lt;/strong&gt; — template-based scanner, deterministic, no AI. Very fast, no false-positive validation. Strix uses Nuclei-style templates under the hood but adds dynamic exploitation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://semgrep.dev" rel="noopener noreferrer"&gt;Semgrep&lt;/a&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;a href="https://codeql.github.com" rel="noopener noreferrer"&gt;CodeQL&lt;/a&gt;&lt;/strong&gt; — static analysis. Deterministic, cheap, high false-positive rate. Strix is dynamic-first with source as an input.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://snyk.io" rel="noopener noreferrer"&gt;Snyk&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href="https://github.com/security" rel="noopener noreferrer"&gt;GitHub Advanced Security&lt;/a&gt;&lt;/strong&gt; — commercial DevSecOps. Broader dependency/secret coverage, less exploitation depth.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The niche Strix owns: &lt;em&gt;"validated dynamic exploitation of your own app, on every PR, at LLM-token pricing."&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Should you install it?
&lt;/h2&gt;

&lt;p&gt;If you ship code and don't already have continuous pentesting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Solo dev / small team:&lt;/strong&gt; yes. The GitHub Actions integration is 20 lines of YAML, and paying $10–30/month in LLM tokens for continuous pentest coverage of your PRs is a bargain compared to any human-pentest engagement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Startup with a product in production:&lt;/strong&gt; yes, especially if you have SOC 2 / ISO 27001 compliance needs. The hosted app.strix.ai adds compliance-ready reports.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise with an existing appsec program:&lt;/strong&gt; deploy as a supplementary layer, not a replacement. Run it on &lt;code&gt;main&lt;/code&gt; branches and pre-release environments; keep your human pentest engagements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bug bounty hunter:&lt;/strong&gt; absolutely — it's already producing paid bounties on HackerOne.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: Is Strix really free / open source?&lt;/strong&gt;&lt;br&gt;
A: The CLI, sandbox, agent orchestration, and all vulnerability coverage are open source (repo license visible on the GitHub page). You pay for LLM tokens to your provider of choice. The hosted &lt;code&gt;app.strix.ai&lt;/code&gt; platform is a separate SaaS with usage-based pricing and adds continuous scanning, auto-PR patches, and compliance reports on top of the OSS core.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Which LLM should I use?&lt;/strong&gt;&lt;br&gt;
A: For best results, Anthropic Claude Sonnet 4.6, OpenAI GPT-5.4, or Google Gemini 3 Pro Preview. Local models via Ollama/LMStudio work for basic scans but miss chained and business-logic vulnerabilities. Set &lt;code&gt;STRIX_REASONING_EFFORT=high&lt;/code&gt; for the deepest exploitation attempts (default for standard scans).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How is this different from a normal vulnerability scanner?&lt;/strong&gt;&lt;br&gt;
A: Standard scanners emit "potential" findings you must triage. Strix agents run the exploit and hand you the working PoC. Every finding is proven, not theoretical. False positives approach zero, though the scan is slower and more expensive per run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can I run Strix on my company's proprietary code?&lt;/strong&gt;&lt;br&gt;
A: Yes — the sandbox runs entirely on your infrastructure. Your source code never leaves your machine. LLM API calls send prompts and code context to your chosen provider (OpenAI, Anthropic, Google, etc.); if that's not acceptable, use Vertex AI/Bedrock private endpoints or local models via Ollama.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Is it safe to run Strix against production?&lt;/strong&gt;&lt;br&gt;
A: Only apps you own or have explicit written permission to test — the README is emphatic about this. Even then, prefer staging/pre-prod environments. Strix will attempt to exploit vulnerabilities, which can trigger real side effects (data changes, service disruption). For production, use the &lt;code&gt;--instruction&lt;/code&gt; flag to constrain what it can do (e.g., "read-only, no state-modifying requests").&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Does it work with GitLab / Bitbucket CI?&lt;/strong&gt;&lt;br&gt;
A: Yes. The hosted platform has native integrations for GitHub, GitLab, and Bitbucket. For the OSS CLI, the GitHub Actions example in the README translates directly — same install command, same env vars, adapt the CI syntax.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verdict
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Strix is the first open-source pentest tool where every finding is a working exploit.&lt;/strong&gt; Not a "potential vulnerability" — an actual proof-of-concept the agent ran to completion. That single design decision changes the economics of application security: a 4-minute Strix scan on every PR with a Claude-Sonnet backend delivers more validated findings than a quarterly $50K pentest, at $0.35/run.&lt;/p&gt;

&lt;p&gt;The Docker + LLM-token cost curve is real, especially at enterprise scale. The black-box mode is weaker than grey-box. And you still want humans in the loop for high-stakes systems. But for the 90% of developers and small security teams who currently ship code with no continuous pentest coverage at all, Strix is a genuine step-function upgrade.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/usestrix/strix" rel="noopener noreferrer"&gt;github.com/usestrix/strix&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosted platform:&lt;/strong&gt; &lt;a href="https://app.strix.ai" rel="noopener noreferrer"&gt;app.strix.ai&lt;/a&gt; (free tier available)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stars:&lt;/strong&gt; 33,383 (as of July 3, 2026) — 4,743 added in the last week&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License:&lt;/strong&gt; open-source (see repo)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;My rating:&lt;/strong&gt; 4.5 / 5 — the validated-PoC model is the correct product decision and the CI integration is the smoothest I've tested. Only losing half a star for frontier-model cost at scale and the (inherent) weakness of black-box-only mode.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>strix</category>
      <category>usestrix</category>
      <category>aipenetrationtesting</category>
      <category>pentesting</category>
    </item>
    <item>
      <title>video-use Review: browser-use Team's AI Video Editor</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Thu, 02 Jul 2026 10:12:16 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/video-use-review-browser-use-teams-ai-video-editor-58nl</link>
      <guid>https://dev.to/andrew-ooo/video-use-review-browser-use-teams-ai-video-editor-58nl</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/video-use-browser-use-ai-video-editor-review/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The &lt;a href="https://github.com/browser-use/browser-use" rel="noopener noreferrer"&gt;browser-use&lt;/a&gt; team built their reputation by giving LLMs a structured DOM instead of screenshots. Now they've applied the same trick to video.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/browser-use/video-use" rel="noopener noreferrer"&gt;&lt;strong&gt;video-use&lt;/strong&gt;&lt;/a&gt; is a 100% open-source skill that turns Claude Code, Codex, Hermes, OpenClaw — or any coding agent with shell access — into a full video editor. You drop raw footage into a folder, tell your agent what you want, and it hands you back &lt;code&gt;final.mp4&lt;/code&gt;. No timeline. No menus. No presets.&lt;/p&gt;

&lt;p&gt;The project shipped in April 2026 and hit &lt;strong&gt;13,000+ GitHub stars with 3,000+ added in a single week&lt;/strong&gt; as of early July 2026 — one of the fastest-growing repos in the browser-use org. It sits in a category that barely existed six months ago: &lt;strong&gt;coding agents editing video from raw source files&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I spent a few days running it against podcast rushes, product demos, and travel B‑roll. This is the review.&lt;/p&gt;

&lt;h2&gt;
  
  
  What video-use actually is
&lt;/h2&gt;

&lt;p&gt;Strip the marketing away and video-use is three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A skill package&lt;/strong&gt; (&lt;code&gt;SKILL.md&lt;/code&gt; + &lt;code&gt;helpers/*.py&lt;/code&gt;) any Anthropic-style agent can load, with production rules like "subtitles applied last" and "30ms audio fades at every cut boundary."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A transcript-first data pipeline&lt;/strong&gt; that turns raw video into a compact phrase-level Markdown transcript — using &lt;a href="https://elevenlabs.io/docs/product-guides/audio-tools/scribe" rel="noopener noreferrer"&gt;ElevenLabs Scribe&lt;/a&gt; for word-level timestamps and speaker diarization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A thin ffmpeg orchestration layer&lt;/strong&gt; (&lt;code&gt;render.py&lt;/code&gt;, &lt;code&gt;grade.py&lt;/code&gt;, &lt;code&gt;timeline_view.py&lt;/code&gt;) so the LLM expresses edits as data (&lt;code&gt;edl.json&lt;/code&gt;) and lets plain ffmpeg encode.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The core insight, from the README:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Naive approach: 30,000 frames × 1,500 tokens = 45M tokens of noise.&lt;br&gt;
Video Use: 12KB text + a handful of PNGs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The LLM never watches the video. It &lt;strong&gt;reads&lt;/strong&gt; it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture in one diagram
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Raw footage/
├── take_001.mov      ──► transcribe.py ──► transcripts/take_001.json  (cached)
├── take_002.mov      ──► transcribe.py ──► transcripts/take_002.json  (cached)
└── ...
                                │
                                ▼
                        pack_transcripts.py
                                │
                                ▼
                     edit/takes_packed.md  ◄── LLM's primary "reading view"
                                │
              ┌─────────────────┴──────────────────┐
              ▼                                    ▼
   LLM proposes strategy               timeline_view.py (on demand)
   (plain English, waits              filmstrip + waveform PNG at
    for user confirmation)             ambiguous decision points
              │
              ▼
        edit/edl.json  (cut decisions as data)
              │
              ▼
   render.py: per-segment extract → -c copy concat → overlays → subtitles LAST
              │
              ▼
   Self-eval: timeline_view on the RENDERED output at every cut boundary
              │
              ▼
        edit/final.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two design decisions carry most of the weight:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Audio is primary, visuals follow.&lt;/strong&gt; Cuts are always proposed on speech boundaries and silence gaps from the Scribe transcript. Visuals are only sampled at ambiguous moments (a long pause: was it a "thinking beat" worth keeping, or dead air worth cutting?).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ask → confirm → execute → self-eval → persist.&lt;/strong&gt; The agent has to describe its plan in plain English before it touches the cut, and it re-renders + re-inspects before it shows you anything.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation: really is one paste
&lt;/h2&gt;

&lt;p&gt;The install flow is deliberately paste-into-your-agent-and-walk-away. From the README:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Set up https://github.com/browser-use/video-use for me.
Read install.md first to install this repo, wire up ffmpeg,
register the skill with your agent, set up the ElevenLabs API
key, then read SKILL.md and helpers/.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That paragraph works because agents like Claude Code and Codex have a &lt;strong&gt;skills directory&lt;/strong&gt; convention. The script clones the repo, symlinks into &lt;code&gt;~/.claude/skills/video-use/&lt;/code&gt; (or &lt;code&gt;~/.codex/skills/video-use/&lt;/code&gt;), runs &lt;code&gt;uv sync&lt;/code&gt;, verifies &lt;code&gt;ffmpeg&lt;/code&gt;/&lt;code&gt;ffprobe&lt;/code&gt;, and prompts for &lt;code&gt;ELEVENLABS_API_KEY&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Or do it by hand in four commands:&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;# 1. Clone and symlink into your agent's skills directory&lt;/span&gt;
git clone https://github.com/browser-use/video-use ~/Developer/video-use
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sfn&lt;/span&gt; ~/Developer/video-use ~/.claude/skills/video-use   &lt;span class="c"&gt;# Claude Code&lt;/span&gt;
&lt;span class="c"&gt;# ln -sfn ~/Developer/video-use ~/.codex/skills/video-use  # Codex&lt;/span&gt;

&lt;span class="c"&gt;# 2. Install Python deps (ffmpeg-python, elevenlabs, pillow, etc.)&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Developer/video-use
uv &lt;span class="nb"&gt;sync&lt;/span&gt;   &lt;span class="c"&gt;# or: pip install -e .&lt;/span&gt;

&lt;span class="c"&gt;# 3. System binaries&lt;/span&gt;
brew &lt;span class="nb"&gt;install &lt;/span&gt;ffmpeg       &lt;span class="c"&gt;# required&lt;/span&gt;
brew &lt;span class="nb"&gt;install &lt;/span&gt;yt-dlp       &lt;span class="c"&gt;# optional, for downloading online sources&lt;/span&gt;

&lt;span class="c"&gt;# 4. Add your ElevenLabs API key&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;span class="nv"&gt;$EDITOR&lt;/span&gt; .env              &lt;span class="c"&gt;# ELEVENLABS_API_KEY=...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Grab a key at &lt;a href="https://elevenlabs.io/app/settings/api-keys" rel="noopener noreferrer"&gt;elevenlabs.io/app/settings/api-keys&lt;/a&gt;. Scribe is billed per minute of audio; a 20-minute podcast take costs roughly a few cents.&lt;/p&gt;

&lt;h2&gt;
  
  
  A real session: podcast edit end-to-end
&lt;/h2&gt;

&lt;p&gt;Here's what a session actually looks like. I &lt;code&gt;cd&lt;/code&gt;'d into a directory with four raw takes of a two-person podcast and started Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/podcast/ep47-raw
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;span class="go"&gt;take_001.mov  take_002.mov  take_003.mov  take_004.mov
&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then just:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; edit these into a 4–6 minute launch video for a developer audience.
  Neutral cinematic grade. 2-word uppercase subtitle chunks. Cut out
  the second take entirely — the guest coughed through it.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Behind the scenes, the agent did roughly this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;ffprobe&lt;/code&gt;&lt;/strong&gt; the sources, then &lt;strong&gt;transcribed all four takes in parallel&lt;/strong&gt; via &lt;code&gt;transcribe_batch.py&lt;/code&gt; (4-worker ElevenLabs Scribe fan-out, cached to &lt;code&gt;edit/transcripts/&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Packed the transcripts&lt;/strong&gt; into &lt;code&gt;edit/takes_packed.md&lt;/code&gt; — phrase-level, break on silence ≥ 0.5s, ~12 KB for 40 minutes of source. This is the LLM's reading view:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## take_001 (duration: 512.4s, 87 phrases)&lt;/span&gt;
  [002.52-005.36] S0 Ninety percent of what a web agent does is completely wasted.
  [006.08-006.74] S0 We fixed this.
  [007.90-012.11] S1 Wait, so — what does that mean exactly?
  [012.55-014.20] S0 (laughter)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Proposed a strategy in plain English&lt;/strong&gt;: "Open on &lt;code&gt;take_001&lt;/code&gt; 002.52 → 006.74 (hook). Cut to &lt;code&gt;take_003&lt;/code&gt; 048–132s. Skip take_002. Close on &lt;code&gt;take_004&lt;/code&gt; 210–230s. Target 4:47. Grade: neutral cinematic. Confirm before I cut."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Waited for me to say "yes."&lt;/strong&gt; The agent isn't allowed to touch the cut until the user approves the plan in words.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generated &lt;code&gt;edit/edl.json&lt;/code&gt;&lt;/strong&gt; — every segment, source, start, end, grade, overlay, and subtitle style as data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rendered per-segment&lt;/strong&gt;, &lt;code&gt;ffmpeg concat -c copy&lt;/code&gt;, applied overlays, then burned subtitles &lt;strong&gt;last&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-evaluated&lt;/strong&gt; by running &lt;code&gt;timeline_view.py&lt;/code&gt; on the &lt;em&gt;rendered&lt;/em&gt; output at every cut boundary (visual jumps, waveform spikes, hidden subtitles, misaligned overlays). Up to 3 fix-and-re-render passes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Handed me &lt;code&gt;edit/preview.mp4&lt;/code&gt;.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Wall-clock: about 8 minutes. Transcription dominated. Two revisions later ("20% tighter", "swap the opening line") the final rendered without re-transcription — Scribe results are cached per source.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 12 hard rules — production correctness
&lt;/h2&gt;

&lt;p&gt;The most interesting part of &lt;code&gt;SKILL.md&lt;/code&gt; isn't aesthetics. It's a list labeled &lt;strong&gt;Hard Rules&lt;/strong&gt; — non-negotiable correctness constraints:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Subtitles applied LAST in the filter chain&lt;/strong&gt;, otherwise overlays hide captions (silent failure).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-segment extract → lossless &lt;code&gt;-c copy&lt;/code&gt; concat&lt;/strong&gt;, not single-pass filtergraph — avoids double-encoding when overlays land.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;30ms audio fades at every segment boundary&lt;/strong&gt; (&lt;code&gt;afade=t=in:st=0:d=0.03,afade=t=out:st={dur-0.03}:d=0.03&lt;/code&gt;), otherwise audible pops.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Overlays use &lt;code&gt;setpts=PTS-STARTPTS+T/TB&lt;/code&gt;&lt;/strong&gt; to shift the overlay's frame 0 to its window start.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Master SRT uses output-timeline offsets:&lt;/strong&gt; &lt;code&gt;output_time = word.start - segment_start + segment_offset&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never cut inside a word.&lt;/strong&gt; Snap every cut edge to a Scribe word boundary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pad every cut edge&lt;/strong&gt; by 30–200ms — Scribe timestamps drift 50–100ms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Word-level verbatim ASR only.&lt;/strong&gt; Never SRT/phrase mode. Never normalized fillers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cache transcripts per source.&lt;/strong&gt; Never re-transcribe unless the file itself changed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parallel sub-agents for multiple animations&lt;/strong&gt;, never sequential.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Strategy confirmation before execution.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;All session outputs in &lt;code&gt;&amp;lt;videos_dir&amp;gt;/edit/&lt;/code&gt;.&lt;/strong&gt; Never write inside &lt;code&gt;video-use/&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The list is worth reading even if you never use video-use — accumulated bruises from actually shipping this pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overlays, grades, and generated animations
&lt;/h2&gt;

&lt;p&gt;Animation overlays render via parallel sub-agents in any of four systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/heygen-com/hyperframes" rel="noopener noreferrer"&gt;&lt;strong&gt;HyperFrames&lt;/strong&gt;&lt;/a&gt; — HeyGen's declarative framer&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.remotion.dev/" rel="noopener noreferrer"&gt;&lt;strong&gt;Remotion&lt;/strong&gt;&lt;/a&gt; — React-based programmatic video&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.manim.community/" rel="noopener noreferrer"&gt;&lt;strong&gt;Manim&lt;/strong&gt;&lt;/a&gt; — 3Blue1Brown's math library&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PIL&lt;/strong&gt; — plain Pillow for raster overlays&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each animation lives in &lt;code&gt;edit/animations/slot_&amp;lt;id&amp;gt;/&lt;/code&gt;. The parent agent spawns one sub-agent per slot in parallel via Claude Code's Agent tool — wall time is the slowest single animation, not the sum. On a five-animation launch video: 90 seconds instead of 7+ minutes.&lt;/p&gt;

&lt;p&gt;Color grading is a one-liner:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helpers/grade.py &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;.mp4 &lt;span class="nt"&gt;-o&lt;/span&gt; graded.mp4 &lt;span class="nt"&gt;--preset&lt;/span&gt; neutral_cinematic
&lt;span class="c"&gt;# or custom ffmpeg chain:&lt;/span&gt;
helpers/grade.py &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;.mp4 &lt;span class="nt"&gt;-o&lt;/span&gt; graded.mp4 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--filter&lt;/span&gt; &lt;span class="s1"&gt;'curves=preset=medium_contrast,eq=saturation=1.05:gamma=0.98'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Grades apply per-segment before concat — combined with rule 2, that's one encode per segment, not two.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it's genuinely good at
&lt;/h2&gt;

&lt;p&gt;After a week on real work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Talking-head content.&lt;/strong&gt; Podcasts, video essays, tutorial narration, launch videos. Transcript-first is perfect for anything speech-driven.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-take selection.&lt;/strong&gt; Pick the best of six takes without watching all six. The LLM reads them all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filler-word removal at scale.&lt;/strong&gt; Every "um," "uh," false start comes with a word-level timestamp — one pass to cut them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Iterating verbally.&lt;/strong&gt; "Tighter." "Warmer grade." "Bigger subtitle chunks." Each revision is minutes, not hours.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session handoff.&lt;/strong&gt; &lt;code&gt;project.md&lt;/code&gt; persists memory. Start with Claude Code, resume next week in Codex.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reproducibility.&lt;/strong&gt; &lt;code&gt;edl.json&lt;/code&gt; is a checked-in data file. Regenerate the same edit deterministically.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Honest limitations
&lt;/h2&gt;

&lt;p&gt;video-use is not a Premiere replacement, and the README is upfront about it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Purely visual content is a bad fit.&lt;/strong&gt; No speech, nothing for the LLM to reason about. Wordless drone montages: use something else.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ElevenLabs Scribe is a hard dependency.&lt;/strong&gt; No local Whisper fallback in the box. Sensitive material: non-starter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Word-timing drift.&lt;/strong&gt; Scribe timestamps drift 50–100ms. Edge padding hides most of it, but tightly-paced comedic timing can feel slightly off vs. a hand-cut.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No frame-accurate motion graphics.&lt;/strong&gt; Overlays sit on top; nothing gets composited into a scene. Rotoscoping and motion tracking need a real NLE.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-form gets expensive.&lt;/strong&gt; 90-minute raw source at Scribe's per-minute pricing is a few dollars per first pass. Iteration is cheap because results cache.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ffmpeg is the ceiling.&lt;/strong&gt; Effects that need After Effects still need After Effects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows story is weaker.&lt;/strong&gt; Docs and community are macOS/Linux-first. WSL2 works fine.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Community reactions
&lt;/h2&gt;

&lt;p&gt;Reception in the six weeks since launch has been unusually positive:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;a href="https://github.com/browser-use" rel="noopener noreferrer"&gt;browser-use org page&lt;/a&gt; lists video-use alongside the flagship browser agent and desktop app — signaling first-class product status.&lt;/li&gt;
&lt;li&gt;Coverage from &lt;a href="https://www.solosoft.dev/post/video-use-ai-editing-2026/" rel="noopener noreferrer"&gt;SoloSoft&lt;/a&gt;, &lt;a href="https://openflows.org/currency/currents/video-use/" rel="noopener noreferrer"&gt;Openflows&lt;/a&gt;, and &lt;a href="https://themenonlab.blog/blog/video-use-ai-video-editing-claude-code" rel="noopener noreferrer"&gt;The Menon Lab&lt;/a&gt; all landed on the same observation: the transcript-first pipeline makes it feel qualitatively different from previous "AI video editors" that tried to reason from frames.&lt;/li&gt;
&lt;li&gt;The most cited critique on X and Reddit is the ElevenLabs dependency and the cost of transcribing long sources — legitimate concerns that a local-Whisper fallback would fix.&lt;/li&gt;
&lt;li&gt;Independent developers have started shipping video-use plugins as their own agent skills — automatic B‑roll insertion, chapter marker generation. The "skill" packaging is proving to be a real extension point.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When to use video-use vs. alternatives
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;th&gt;Trade-off&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;video-use&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Podcasts, launch videos, tutorials with agent-first workflow&lt;/td&gt;
&lt;td&gt;Needs ElevenLabs, ffmpeg-ceiling on effects&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://dev.to/blog/openmontage-agentic-video-production-system-review/"&gt;&lt;strong&gt;OpenMontage&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Full agentic pipeline, 12 pipelines, 500+ skills&lt;/td&gt;
&lt;td&gt;Heavier setup, broader surface area&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Descript&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Text-based editing with polished UI&lt;/td&gt;
&lt;td&gt;Proprietary, cloud-only, subscription&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DaVinci / Premiere&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Color-critical or motion-graphics-heavy work&lt;/td&gt;
&lt;td&gt;Manual, hours per edit, no LLM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;yt-dlp + ffmpeg&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;One-off clip extraction&lt;/td&gt;
&lt;td&gt;You write the whole pipeline&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;video-use wins when material is speech-driven, iteration speed matters more than pixel-perfect control, and you already live in Claude Code or Codex.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does video-use work with any coding agent?&lt;/strong&gt;&lt;br&gt;
Yes — the README explicitly lists Claude Code, Codex, Hermes, and OpenClaw, and anything that can run shell commands + read a skill file. The skill is just a directory with &lt;code&gt;SKILL.md&lt;/code&gt; and helper scripts; the agent-specific step is symlinking it into that agent's skills directory. Cursor and Windsurf work via their own skill/rule conventions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need an ElevenLabs subscription?&lt;/strong&gt;&lt;br&gt;
You need an API key, but ElevenLabs offers a free tier with limited monthly minutes that's enough to try the whole pipeline on a short podcast. Paid usage is billed per minute of audio transcribed. There's no local Whisper fallback in the current release; adding one is the most common community feature request.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can it edit videos without spoken audio?&lt;/strong&gt;&lt;br&gt;
Poorly. The whole pipeline is built around the transcript being the LLM's primary reading surface. For wordless material — B‑roll, dance, music videos, silent product demos — the LLM has almost nothing to reason about and you'd be better off with a traditional editor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it re-transcribe every session?&lt;/strong&gt;&lt;br&gt;
No. Transcripts are cached per source file in &lt;code&gt;edit/transcripts/&amp;lt;name&amp;gt;.json&lt;/code&gt; and only regenerated if the source file itself changes. This is Rule 9 in the hard rules. Iteration on cut decisions, grades, and overlays reuses the cached JSON.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where do the outputs go?&lt;/strong&gt;&lt;br&gt;
All session artifacts live under &lt;code&gt;&amp;lt;your_videos_dir&amp;gt;/edit/&lt;/code&gt; — &lt;code&gt;project.md&lt;/code&gt; for persistent session memory, &lt;code&gt;takes_packed.md&lt;/code&gt; for the LLM's reading view, &lt;code&gt;edl.json&lt;/code&gt; for cut decisions, &lt;code&gt;clips_graded/&lt;/code&gt; for per-segment extracts, &lt;code&gt;animations/slot_&amp;lt;id&amp;gt;/&lt;/code&gt; for overlays, &lt;code&gt;master.srt&lt;/code&gt; for subtitles, &lt;code&gt;preview.mp4&lt;/code&gt;, and &lt;code&gt;final.mp4&lt;/code&gt;. The &lt;code&gt;video-use/&lt;/code&gt; repo itself is never written to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does the self-eval loop actually work?&lt;/strong&gt;&lt;br&gt;
After render, the agent runs &lt;code&gt;timeline_view.py&lt;/code&gt; on the rendered output (not the sources) at every cut boundary — a ±1.5s window around each cut. It checks each generated PNG for visual discontinuity, waveform spikes past the 30ms fade, subtitles hidden behind overlays, or misaligned animation frames. If it finds any of these, it fixes and re-renders, capping at 3 self-eval passes before surfacing the issue to the user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What license is it under?&lt;/strong&gt;&lt;br&gt;
MIT. Everything — the pipeline, helpers, and skill definition — is fully open source. You can fork it, ship your own version, or vendor parts of it inside a proprietary product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is this actually production-ready?&lt;/strong&gt;&lt;br&gt;
For talking-head content, podcasts, launch videos, and tutorial narration: yes, it's shipping real work today, including for the browser-use team's own &lt;a href="https://www.tiktok.com/@browser_use/video/7639824093721758989" rel="noopener noreferrer"&gt;15-second TikTok demo&lt;/a&gt; advertising it. For anything that would strain a traditional NLE — color-critical work, motion graphics, VFX — you'll want a real editor. Treat video-use as the fastest possible path from raw footage to polished-enough draft, not as a replacement for professional post-production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verdict
&lt;/h2&gt;

&lt;p&gt;video-use is one of the more surprising open-source releases of 2026 because it doesn't ask an LLM to do the thing LLMs are worst at — reasoning about pixels. Instead, it does the browser-use trick: give the model a well-structured symbolic representation of the medium (a transcript with word-level timestamps), let it reason there, and let deterministic code (ffmpeg) do the actual rendering. Wrap the whole thing in an agent skill so any coding agent can pick it up in one paste.&lt;/p&gt;

&lt;p&gt;If you spend any time producing speech-driven video and you already use Claude Code or Codex for other work, video-use is worth an afternoon to try. It's MIT-licensed, sits on a well-known dependency stack, and the hard-rules list alone is a useful education in what silent-failure modes actually exist in an automated video pipeline.&lt;/p&gt;

&lt;p&gt;For the browser-use team specifically, video-use is another data point in a pattern that's starting to look like a thesis: &lt;strong&gt;the right primitive for an agent isn't a screenshot, it's a structured view of the medium.&lt;/strong&gt; DOM for the web. Transcript for video. Whatever's next for whatever comes next.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/browser-use/video-use" rel="noopener noreferrer"&gt;github.com/browser-use/video-use&lt;/a&gt;. Try it in &lt;a href="https://cloud.browser-use.com/v4" rel="noopener noreferrer"&gt;Browser Use Cloud&lt;/a&gt;. Related: &lt;a href="https://dev.to/blog/openmontage-agentic-video-production-system-review/"&gt;OpenMontage review&lt;/a&gt;, &lt;a href="https://dev.to/blog/voicebox-open-source-ai-voice-studio-review/"&gt;Voicebox: open-source ElevenLabs alternative&lt;/a&gt;, &lt;a href="https://dev.to/blog/browser-use-ai-agent-browser-automation/"&gt;browser-use review&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>videouse</category>
      <category>browseruse</category>
      <category>aivideoediting</category>
      <category>claudecode</category>
    </item>
    <item>
      <title>Cognee Review: Open-Source AI Memory Platform for Agents</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Wed, 01 Jul 2026 10:11:04 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/cognee-review-open-source-ai-memory-platform-for-agents-196f</link>
      <guid>https://dev.to/andrew-ooo/cognee-review-open-source-ai-memory-platform-for-agents-196f</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/cognee-open-source-ai-memory-platform-agents-review/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;&lt;strong&gt;Cognee&lt;/strong&gt; is an open-source AI memory platform that gives agents persistent long-term memory across sessions. It combines vector embeddings, graph reasoning, and cognitive-science-grounded ontology generation into a single Python package with a four-verb API: &lt;code&gt;remember&lt;/code&gt;, &lt;code&gt;recall&lt;/code&gt;, &lt;code&gt;forget&lt;/code&gt;, and &lt;code&gt;improve&lt;/code&gt;. It just crossed &lt;strong&gt;26,000 GitHub stars&lt;/strong&gt; (6,400+ new this week) and, notably, in Cognee 1.0 you can run the entire memory layer — graph, vectors, sessions, metadata — on a &lt;strong&gt;single Postgres instance&lt;/strong&gt; instead of the usual Neo4j + Redis + vector-DB stack.&lt;/p&gt;

&lt;p&gt;Key facts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Four-verb API&lt;/strong&gt;: &lt;code&gt;cognee.remember()&lt;/code&gt;, &lt;code&gt;cognee.recall()&lt;/code&gt;, &lt;code&gt;cognee.forget()&lt;/code&gt;, &lt;code&gt;cognee.improve()&lt;/code&gt; — that's the whole surface area&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two memory tiers&lt;/strong&gt;: session memory (fast cache) + permanent knowledge graph (background sync)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Postgres-native&lt;/strong&gt;: pgvector for embeddings, Postgres graph backend for relationships, SQL session cache — one database or swap in Neo4j/Redis/Qdrant&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BEAM benchmark&lt;/strong&gt;: 0.79 at 100K tokens (previous SOTA 0.735), 0.67 at 10M tokens — beats the state of the art on long-context memory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code plugin&lt;/strong&gt;: hooks into &lt;code&gt;SessionStart&lt;/code&gt;, &lt;code&gt;UserPromptSubmit&lt;/code&gt;, &lt;code&gt;PostToolUse&lt;/code&gt;, &lt;code&gt;Stop&lt;/code&gt;, &lt;code&gt;PreCompact&lt;/code&gt;, &lt;code&gt;SessionEnd&lt;/code&gt; for automatic memory capture and context injection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-language clients&lt;/strong&gt;: Python, TypeScript (&lt;code&gt;@cognee/cognee-ts&lt;/code&gt;), Rust (&lt;code&gt;cognee-rs&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;26,000+ GitHub stars&lt;/strong&gt;, 6,400+ new stars this week, &lt;a href="https://github.com/topoteretes/cognee/blob/main/LICENSE" rel="noopener noreferrer"&gt;Apache 2.0&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick Reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&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;&lt;strong&gt;Repository&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/topoteretes/cognee" rel="noopener noreferrer"&gt;github.com/topoteretes/cognee&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Author&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Topoteretes (Vasilije Markovic + team)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Languages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Python 3.10–3.14, TypeScript, Rust&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;uv pip install cognee&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub Stars&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;26,229 (6,417 this week)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Docker Images&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;cognee/cognee&lt;/code&gt;, &lt;code&gt;cognee/cognee-mcp&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cloud&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://www.cognee.ai" rel="noopener noreferrer"&gt;cognee.ai&lt;/a&gt; (managed)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Research paper&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://arxiv.org/abs/2505.24478" rel="noopener noreferrer"&gt;arXiv:2505.24478&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Benchmark&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;BEAM 0.79 @ 100K, 0.67 @ 10M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What It Is
&lt;/h2&gt;

&lt;p&gt;Cognee is the piece almost every serious agent build eventually needs but nobody wants to write from scratch: &lt;strong&gt;the memory layer&lt;/strong&gt;. LLMs, on their own, have no persistent memory. RAG stores documents but doesn't build relationships. Vector databases embed chunks but can't reason about how facts connect. Cognee sits underneath your agent and turns raw inputs into a &lt;strong&gt;knowledge graph plus a vector index plus a session cache&lt;/strong&gt; — all of which get queried together when the agent needs context.&lt;/p&gt;

&lt;p&gt;The mental model is straightforward. You call &lt;code&gt;remember()&lt;/code&gt; with text (or documents, or structured data). Cognee runs an ingestion pipeline that extracts entities, generates embeddings, builds subject–relation–object triplets, and stores everything in a knowledge graph that also knows how to be searched by meaning. When you later call &lt;code&gt;recall()&lt;/code&gt; with a question, Cognee picks the best retrieval strategy — pure vector search, graph traversal, or a hybrid — and returns context that the agent can slot into its prompt.&lt;/p&gt;

&lt;p&gt;What makes it different from Graphiti, Zep, or standard GraphRAG stacks: cognee ships the whole thing as &lt;strong&gt;one Python package&lt;/strong&gt; with sensible defaults (SQLite + LanceDB + Kuzudb for local dev, Postgres + pgvector for production) and a four-verb API. You don't need to stand up Neo4j to start; you just install the package and call &lt;code&gt;remember&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation and First-Run
&lt;/h2&gt;

&lt;p&gt;The quickstart is refreshingly boring, which is the highest compliment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv pip &lt;span class="nb"&gt;install &lt;/span&gt;cognee
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;cognee&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;LLM_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sk-...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# OpenAI, or configure any provider
&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="c1"&gt;# Store permanently in the knowledge graph
&lt;/span&gt;    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;cognee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remember&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cognee turns documents into AI memory.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Store in session memory (fast cache, syncs to graph in background)
&lt;/span&gt;    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;cognee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remember&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User prefers detailed explanations.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;session_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chat_1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Query with auto-routing
&lt;/span&gt;    &lt;span class="n"&gt;results&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;cognee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What does Cognee do?&lt;/span&gt;&lt;span class="sh"&gt;"&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;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Session-scoped recall (falls through to permanent graph if needed)
&lt;/span&gt;    &lt;span class="n"&gt;results&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;cognee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What does the user prefer?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;session_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chat_1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's a functioning agent memory layer in ~15 lines. No graph database to configure, no vector store to provision, no schema to design. The first &lt;code&gt;remember()&lt;/code&gt; call takes a few seconds because Cognee spins up the local SQLite + LanceDB stack and runs the entity-extraction pipeline; every call after that is fast.&lt;/p&gt;

&lt;p&gt;There's also a CLI for the shell-first crowd:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cognee-cli remember &lt;span class="s2"&gt;"Cognee turns documents into AI memory."&lt;/span&gt;
cognee-cli recall &lt;span class="s2"&gt;"What does Cognee do?"&lt;/span&gt;
cognee-cli forget &lt;span class="nt"&gt;--all&lt;/span&gt;
cognee-cli &lt;span class="nt"&gt;-ui&lt;/span&gt;   &lt;span class="c"&gt;# local web UI (Docker required)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Postgres-Only Deployment
&lt;/h2&gt;

&lt;p&gt;This is the headline feature of Cognee 1.0 and the reason it's trending this week. Traditionally, "graph memory" means running four services in production:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Memory layer&lt;/th&gt;
&lt;th&gt;Traditional stack&lt;/th&gt;
&lt;th&gt;Cognee on Postgres&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Relationships&lt;/td&gt;
&lt;td&gt;Neo4j (or another graph DB)&lt;/td&gt;
&lt;td&gt;Cognee's Postgres graph backend&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Embeddings&lt;/td&gt;
&lt;td&gt;Dedicated vector DB (Qdrant, Weaviate, Milvus)&lt;/td&gt;
&lt;td&gt;pgvector&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sessions&lt;/td&gt;
&lt;td&gt;Redis&lt;/td&gt;
&lt;td&gt;SQL session-cache backend&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Metadata&lt;/td&gt;
&lt;td&gt;Relational DB&lt;/td&gt;
&lt;td&gt;Same Postgres&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Cognee collapses all four into one Postgres instance. The graph still exists — it just lives inside the same Postgres-backed memory layer as the text, metadata, and embeddings, so retrieval doesn't cross service boundaries. In the project's own CI benchmarks, this setup ran &lt;strong&gt;~10% faster&lt;/strong&gt; than the separate graph-plus-vector configuration.&lt;/p&gt;

&lt;p&gt;To switch on Postgres mode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="s2"&gt;"cognee[postgres]"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# .env&lt;/span&gt;
&lt;span class="nv"&gt;DB_PROVIDER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;postgres
&lt;span class="nv"&gt;VECTOR_DB_PROVIDER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;pgvector
&lt;span class="nv"&gt;GRAPH_DATABASE_PROVIDER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;postgres
&lt;span class="nv"&gt;CACHE_BACKEND&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;postgres

&lt;span class="nv"&gt;DB_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;localhost
&lt;span class="nv"&gt;DB_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5432
&lt;span class="nv"&gt;DB_USERNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;cognee
&lt;span class="nv"&gt;DB_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;cognee
&lt;span class="nv"&gt;DB_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;cognee_db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For teams that already run Postgres, this is a large operational win. One database to back up, one to secure, one to patch. If your workload later demands specialized backends, you can still swap in Neo4j or Neptune for graphs, Redis for sessions, and Qdrant/Weaviate/Milvus/Chroma for vectors via community adapters. Nothing about the API changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two-Tier Memory: Session vs Permanent
&lt;/h2&gt;

&lt;p&gt;Cognee splits memory into two tiers, which is a good design decision borrowed from how human memory actually works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Session memory&lt;/strong&gt; is short-term working memory. Cognee loads relevant embeddings and graph fragments into a fast cache scoped by &lt;code&gt;session_id&lt;/code&gt;. Reads and writes are cheap and low-latency, ideal for the currently-open chat or task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permanent memory&lt;/strong&gt; is the long-term knowledge graph. User data, resolved interaction traces, learned patterns, and stable facts land here. Session data syncs into permanent memory in the background (or on session end).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The nice consequence: your hot path stays fast because you're hitting the session cache, and your cold path is a proper graph query that can reason across everything the agent has ever learned.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Session write — fast, scoped to this conversation
&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;cognee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remember&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The user is debugging a Postgres connection issue on Fly.io.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;session_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chat_2026_07_01&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Session read first, fall through to permanent graph if needed
&lt;/span&gt;&lt;span class="n"&gt;answer&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;cognee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What was the user working on last?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;session_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chat_2026_07_01&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Under the Hood
&lt;/h2&gt;

&lt;p&gt;Cognee's ingestion pipeline is where the work happens. &lt;code&gt;remember()&lt;/code&gt; is shorthand for &lt;code&gt;add + cognify + improve&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;add&lt;/strong&gt; — ingest the raw document (text, PDF, code, JSON, structured data).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cognify&lt;/strong&gt; — extract entities and subject–relation–object triplets via LLM calls, generate embeddings, write both into the graph and vector store.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;improve&lt;/strong&gt; — a feedback loop that refines the graph over time. Weights shift, redundant nodes merge, ontology grounding tightens.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;recall()&lt;/code&gt; auto-routes: it inspects the query and picks between pure vector similarity, graph traversal, or a combined "GraphRAG" mode that pulls both. You can override with explicit search parameters when needed.&lt;/p&gt;

&lt;p&gt;Cognee also supports &lt;strong&gt;OWL ontologies&lt;/strong&gt; for domain-specific knowledge modeling — useful in regulated domains (medical, legal, financial) where you want the graph structured against a formal schema rather than whatever the LLM extracts on the fly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Code Plugin: Persistent Memory Across Sessions
&lt;/h2&gt;

&lt;p&gt;If you use Claude Code, the &lt;a href="https://github.com/topoteretes/cognee-integrations/tree/main/integrations/claude-code" rel="noopener noreferrer"&gt;Cognee memory plugin&lt;/a&gt; is the most useful integration to try. Install it once from the shell, before launching Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude plugin marketplace add topoteretes/cognee-integrations
claude plugin &lt;span class="nb"&gt;install &lt;/span&gt;cognee-memory@cognee

&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;LLM_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"sk-..."&lt;/span&gt;   &lt;span class="c"&gt;# local mode&lt;/span&gt;
claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The plugin hooks into Claude Code's lifecycle events:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;SessionStart&lt;/code&gt; — selects mode (local vs cloud) and sets up identity&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;UserPromptSubmit&lt;/code&gt; — injects dataset-scoped context from memory into the prompt&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;PostToolUse&lt;/code&gt; — captures tool call traces&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Stop&lt;/code&gt; — writes the assistant's answer into session memory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;PreCompact&lt;/code&gt; — preserves memory across Claude Code's context resets (this is the killer feature — no more losing the plot when the context window fills up)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SessionEnd&lt;/code&gt; — final sync into the permanent graph&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You get a "Cognee Memory Connected" system message on startup. In practice, this means Claude Code remembers what you were working on last week, what conventions your codebase follows, and which fixes you've already tried and rejected — without you copy-pasting summaries into every new session.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmarks: BEAM
&lt;/h2&gt;

&lt;p&gt;Cognee published results on &lt;a href="https://github.com/topoteretes/cognee" rel="noopener noreferrer"&gt;BEAM&lt;/a&gt;, a long-context benchmark designed to test whether a memory system can track a long, evolving conversation — a more useful test than the usual needle-in-a-haystack setups.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Cognee&lt;/th&gt;
&lt;th&gt;Previous SOTA&lt;/th&gt;
&lt;th&gt;Obsidian / RAG baseline&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;BEAM&lt;/td&gt;
&lt;td&gt;100K tokens&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;0.79&lt;/strong&gt; (&amp;gt;0.8 with per-question routing)&lt;/td&gt;
&lt;td&gt;0.735&lt;/td&gt;
&lt;td&gt;~0.33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BEAM&lt;/td&gt;
&lt;td&gt;10M tokens&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.67&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.641&lt;/td&gt;
&lt;td&gt;~0.33&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two things to note. First, these numbers are with Cognee's &lt;em&gt;default&lt;/em&gt; settings and standard open-source features — no BEAM-specific pipelines, no custom fine-tunes. Second, the vanilla RAG baseline sits at ~0.33, less than half of what Cognee delivers, which lines up with what most people building agent memory report anecdotally: RAG alone is not enough once the context gets long or the questions get multi-hop.&lt;/p&gt;

&lt;p&gt;An earlier evaluation on HotpotQA also reported &lt;strong&gt;87% answer accuracy&lt;/strong&gt; with human labeling (&lt;a href="https://docs.cognee.ai/evaluations" rel="noopener noreferrer"&gt;evaluations docs&lt;/a&gt;), consistent with the "top choice for knowledge-intensive scenarios and multi-hop reasoning" verdict from third-party reviewers.&lt;/p&gt;

&lt;p&gt;Fair caveat that Cognee itself calls out: these numbers are directional. Long-context memory benchmarks are genuinely hard and the field is still figuring out what to measure. But even discounting the SOTA claim, the &lt;em&gt;gap&lt;/em&gt; over vanilla RAG is large enough to justify trying it on your own workload.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two Concrete Use Cases
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Customer Support Agent.&lt;/strong&gt; The agent resolves issues using a customer's data across finance, support, and product history. Cognee tracks past interactions, failed actions, and resolved cases. When the customer says "my invoice looks wrong and the issue is still not resolved," the agent can pull similar billing cases resolved last month and reply with a concrete diagnosis rather than a scripted response. Memory updates after execution so the agent never repeats the same failed step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL Copilot.&lt;/strong&gt; Cognee stores expert SQL queries, workflow patterns, and schema structures. When a junior asks "how do I calculate customer retention for this dataset?" Cognee matches the current schema to a known structure and adapts an expert's retention query. Every successful implementation feeds back into the graph.&lt;/p&gt;

&lt;p&gt;The pattern is the same in both cases: cognee handles the "what did we do before, and what worked" question, so the agent doesn't have to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Community Reactions
&lt;/h2&gt;

&lt;p&gt;Cognee has been building momentum on Hacker News and Reddit for over a year — the &lt;a href="https://news.ycombinator.com/item?id=44169594" rel="noopener noreferrer"&gt;Show HN in June 2025&lt;/a&gt; framed it as "the AI memory layer that remembers context," and the founder is active in r/LLMDevs and r/AIMemory.&lt;/p&gt;

&lt;p&gt;Recurring themes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Praise for the API surface&lt;/strong&gt;: developers like that &lt;code&gt;remember&lt;/code&gt;/&lt;code&gt;recall&lt;/code&gt; is the whole thing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skepticism about graph overhead&lt;/strong&gt;: some HN commenters worry graph construction is slow on large corpora. Cognee runs it in the background and lets you tune it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comparisons to Graphiti / Zep / Mem0&lt;/strong&gt;: the founder describes cognee as "similar to Graphiti but more modular, and not just time graphs." Graphiti is opinionated about temporal edges; cognee lets you shape the graph how you want.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Postgres-only mode is universally applauded&lt;/strong&gt; — the top-requested feature for months, and the main reason the current release is trending.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;a href="https://weavai.app/blog/en/2026/05/09/cognee-2026-review-graphrag-ontology-ai-memory-layer/" rel="noopener noreferrer"&gt;WeavAI review&lt;/a&gt; from May 2026 rates cognee 8.5/10 overall and calls it "the top choice for knowledge-intensive scenarios and multi-hop reasoning applications."&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest Limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;First-run cost&lt;/strong&gt;: ingesting a large corpus makes a lot of LLM calls (entity extraction, triplet generation, embedding). Point cognee at a 100MB knowledge base with OpenAI defaults and your first bill is not zero. Local LLM providers are supported and shrink this concern.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graph queries are slower than pure vector search&lt;/strong&gt;. If your workload is really just similarity retrieval, you're paying for graph infrastructure you don't need. Cognee is designed for cases where relationships matter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ontology tooling is Python-centric&lt;/strong&gt;. TypeScript and Rust clients cover the API but don't have first-class support for defining custom OWL ontologies — that lives in the Python SDK.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker requirement for &lt;code&gt;cognee-cli -ui&lt;/code&gt;&lt;/strong&gt;. The MCP-backed UI needs Docker or Colima installed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-tenant isolation is documented but young&lt;/strong&gt;. Cognee ships user/tenant isolation primitives; if you're deploying to enterprise with strict data-boundary requirements, build your own test harness before trusting it in production.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Deployment Options
&lt;/h2&gt;

&lt;p&gt;Cognee ships 1-click deploy configurations for most modern platforms: &lt;strong&gt;Cognee Cloud&lt;/strong&gt; (managed, &lt;code&gt;await cognee.serve()&lt;/code&gt;), &lt;strong&gt;Modal&lt;/strong&gt; (serverless, GPU), &lt;strong&gt;Railway&lt;/strong&gt; (PaaS + native Postgres), &lt;strong&gt;Fly.io&lt;/strong&gt; (edge + volumes), &lt;strong&gt;Render&lt;/strong&gt;, &lt;strong&gt;Daytona&lt;/strong&gt; (cloud sandboxes), and plain &lt;strong&gt;Docker Compose&lt;/strong&gt; for self-hosters. &lt;code&gt;docker compose up&lt;/code&gt; with the right profiles gets you the API server, frontend, MCP server, Postgres, and optionally Neo4j — all in one file.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How is Cognee different from a normal RAG pipeline?
&lt;/h3&gt;

&lt;p&gt;RAG chunks documents, embeds them, and does similarity search. It has no idea that "the customer" in chunk 47 is the same person as "the user" in chunk 302. Cognee builds a knowledge graph on top of the embeddings, so entities and relationships are explicit. When you query, Cognee can traverse the graph &lt;em&gt;and&lt;/em&gt; do vector search, which is why it hits ~0.79 on BEAM at 100K tokens vs ~0.33 for vanilla RAG.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need to run Neo4j?
&lt;/h3&gt;

&lt;p&gt;No. Cognee 1.0 can run the entire memory layer on a single Postgres instance (pgvector for embeddings + Postgres graph backend for relationships + SQL session cache + metadata in the same DB). Local dev works with SQLite + LanceDB + Kuzudb, no services required. Neo4j is still supported if you want it.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does Cognee compare to Graphiti, Zep, or Mem0?
&lt;/h3&gt;

&lt;p&gt;The founder's own framing (in &lt;a href="https://www.reddit.com/r/LLMDevs/comments/1n1c7cj/how_is_everyone_dealing_with_agent_memory/" rel="noopener noreferrer"&gt;r/LLMDevs&lt;/a&gt;): "similar to Graphiti but a bit more modular and customizable, and not just time graphs." Graphiti is opinionated around temporal edges; Cognee is more general-purpose. Zep is a hosted product; Cognee is open source with a cloud option. Mem0 is more of a session-memory library; Cognee spans session + long-term graph.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use Cognee without OpenAI?
&lt;/h3&gt;

&lt;p&gt;Yes. Cognee's LLM provider layer is pluggable — configure any OpenAI-compatible endpoint (local Ollama, LM Studio, vLLM, Anthropic, Gemini, etc.) via environment variables. See the &lt;a href="https://docs.cognee.ai/setup-configuration/llm-providers" rel="noopener noreferrer"&gt;LLM Provider docs&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is there a JavaScript/TypeScript client?
&lt;/h3&gt;

&lt;p&gt;Yes — &lt;a href="https://www.npmjs.com/package/@cognee/cognee-ts" rel="noopener noreferrer"&gt;&lt;code&gt;@cognee/cognee-ts&lt;/code&gt;&lt;/a&gt; on npm. There's also a Rust client, &lt;a href="https://github.com/topoteretes/cognee-rs" rel="noopener noreferrer"&gt;&lt;code&gt;cognee-rs&lt;/code&gt;&lt;/a&gt;, for &lt;code&gt;cargo add cognee&lt;/code&gt;. All three clients hit the same Cognee API, so you can mix languages across an application.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the license?
&lt;/h3&gt;

&lt;p&gt;Apache 2.0. You can self-host, modify, and use it commercially. There's a managed Cognee Cloud tier for teams that don't want to run the infra.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verdict
&lt;/h2&gt;

&lt;p&gt;Cognee earns the "top of GitHub trending" spot because it does one thing well: it's the memory layer for AI agents that you &lt;em&gt;don't&lt;/em&gt; have to build yourself. The four-verb API (&lt;code&gt;remember&lt;/code&gt;, &lt;code&gt;recall&lt;/code&gt;, &lt;code&gt;forget&lt;/code&gt;, &lt;code&gt;improve&lt;/code&gt;) is small enough to fit in your head, the Postgres-only deployment removes the biggest operational objection to graph memory, and the BEAM benchmarks are strong enough — and honestly presented enough — to take seriously.&lt;/p&gt;

&lt;p&gt;If you're building anything more sophisticated than a stateless chatbot, you will eventually need agent memory. Cognee is the shortest path from "we need memory" to "we have memory" that currently exists in open source. Install it, spend an afternoon on the Claude Code plugin or the Python quickstart, and see if the two-tier session-plus-graph model fits your workload.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/topoteretes/cognee" rel="noopener noreferrer"&gt;github.com/topoteretes/cognee&lt;/a&gt; · Docs: &lt;a href="https://docs.cognee.ai" rel="noopener noreferrer"&gt;docs.cognee.ai&lt;/a&gt; · Discord: &lt;a href="https://discord.gg/NQPKmU5CCg" rel="noopener noreferrer"&gt;discord.gg/NQPKmU5CCg&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cognee</category>
      <category>topoteretes</category>
      <category>aimemory</category>
      <category>aiagents</category>
    </item>
    <item>
      <title>DESIGN.md: Google's Spec for AI-Agent Design Systems</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Mon, 29 Jun 2026 10:08:34 +0000</pubDate>
      <link>https://dev.to/andrew-ooo/designmd-googles-spec-for-ai-agent-design-systems-3nnh</link>
      <guid>https://dev.to/andrew-ooo/designmd-googles-spec-for-ai-agent-design-systems-3nnh</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Originally published on &lt;a href="https://andrew.ooo/posts/google-labs-design-md-ai-agent-design-spec-review/" rel="noopener noreferrer"&gt;andrew.ooo&lt;/a&gt;&lt;/strong&gt; — visit the original for any updates, code snippets that aged out, or follow-up posts.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;&lt;strong&gt;DESIGN.md&lt;/strong&gt; is a format specification from Google Labs that lets you describe your visual identity in a single markdown file that AI coding agents can actually read and follow. It combines YAML front matter (machine-readable design tokens) with markdown prose (human-readable rationale) — so agents get exact color values &lt;em&gt;and&lt;/em&gt; the context for why those values exist. It hit &lt;strong&gt;23,000+ GitHub stars&lt;/strong&gt; in its first week and is now &lt;strong&gt;the #1 most-starred new Google Labs open-source project&lt;/strong&gt; on GitHub Trending this week.&lt;/p&gt;

&lt;p&gt;Key facts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dual-layer format&lt;/strong&gt;: YAML tokens for agents, markdown prose for humans — same file&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in CLI tools&lt;/strong&gt;: &lt;code&gt;lint&lt;/code&gt; (WCAG contrast checking, broken reference detection), &lt;code&gt;diff&lt;/code&gt; (token-level regression detection), &lt;code&gt;export&lt;/code&gt; (Tailwind v3/v4, DTCG/W3C Design Tokens)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token references&lt;/strong&gt;: Components reference design tokens with &lt;code&gt;{colors.primary}&lt;/code&gt; syntax — change one value, update everywhere&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;9 lint rules&lt;/strong&gt;: broken-ref, contrast-ratio, orphaned-tokens, section-order, unknown-key detection, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Already ecosystem-ready&lt;/strong&gt;: Used by Google's Stitch MCP server, available as &lt;code&gt;npx @google/design.md&lt;/code&gt;, exportable to Tailwind themes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero dependencies&lt;/strong&gt;: Just a markdown file and &lt;code&gt;npx&lt;/code&gt; — no build step, no config file, no SDK&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;23,000+ GitHub stars&lt;/strong&gt;, 6,700+ new stars this week&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick Reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&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;&lt;strong&gt;Repository&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/google-labs-code/design.md" rel="noopener noreferrer"&gt;github.com/google-labs-code/design.md&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Author&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Labs (Google)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;TypeScript (CLI), Markdown (format)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CLI Package&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;@google/design.md&lt;/code&gt; on npm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Current Version&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;alpha&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub Stars&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;23,000+ (6,700+ this week)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Related Projects&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Stitch, Astryx (Meta), Agent Skills&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What It Is
&lt;/h2&gt;

&lt;p&gt;DESIGN.md is deceptively simple: a single markdown file with YAML front matter that defines colors, typography, spacing, rounded corners, and component tokens, followed by prose sections that explain &lt;em&gt;why&lt;/em&gt; the design system works the way it does.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Heritage&lt;/span&gt;
&lt;span class="na"&gt;colors&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;primary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#1A1C1E"&lt;/span&gt;
  &lt;span class="na"&gt;secondary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#6C7278"&lt;/span&gt;
  &lt;span class="na"&gt;tertiary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#B8422E"&lt;/span&gt;
  &lt;span class="na"&gt;neutral&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#F7F5F2"&lt;/span&gt;
&lt;span class="na"&gt;typography&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;h1&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;fontFamily&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Public Sans&lt;/span&gt;
    &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;3rem&lt;/span&gt;
  &lt;span class="na"&gt;body-md&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;fontFamily&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Public Sans&lt;/span&gt;
    &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1rem&lt;/span&gt;
  &lt;span class="na"&gt;label-caps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;fontFamily&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Space Grotesk&lt;/span&gt;
    &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;0.75rem&lt;/span&gt;
&lt;span class="na"&gt;rounded&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;sm&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;4px&lt;/span&gt;
  &lt;span class="na"&gt;md&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;8px&lt;/span&gt;
&lt;span class="na"&gt;spacing&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;sm&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;8px&lt;/span&gt;
  &lt;span class="na"&gt;md&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;16px&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This isn't just another design spec format. What makes DESIGN.md different is that it's built for &lt;strong&gt;dual consumption&lt;/strong&gt; — both humans and AI agents read the same file. The YAML front matter is the machine contract: agents parse it and get exact hex values, font stacks, spacing scales. The markdown body is the human contract: designers explain &lt;em&gt;why&lt;/em&gt; "Boston Clay" (#B8422E) is the sole interaction color, and agents use that context to make better judgment calls.&lt;/p&gt;

&lt;p&gt;The format is versioned (currently &lt;code&gt;alpha&lt;/code&gt;) and published at &lt;a href="https://github.com/google-labs-code/design.md/blob/main/docs/spec.md" rel="noopener noreferrer"&gt;docs/spec.md&lt;/a&gt;. It supports 8 named sections: Overview, Colors, Typography, Layout, Elevation &amp;amp; Depth, Shapes, Components, and Do's and Don'ts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why It's Trending NOW
&lt;/h2&gt;

&lt;p&gt;Three forces converged to make DESIGN.md explode this week.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First, the AI coding agent boom.&lt;/strong&gt; Every major coding assistant — Claude Code, Codex CLI, Gemini CLI, Cursor, Zed, OpenClaw — now supports MCP (Model Context Protocol) and custom instruction files. Developers are rushing to give their agents context about codebases. DESIGN.md is the missing piece for &lt;em&gt;visual&lt;/em&gt; context: it tells agents what the UI should look like.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second, the design-system industry is converging on a standard.&lt;/strong&gt; Meta just launched &lt;a href="https://github.com/facebook/astryx" rel="noopener noreferrer"&gt;Astryx&lt;/a&gt;, an open-source React design system with an MCP server that lets agents browse 150+ components. Google Stitch, Google's agentic design workflow platform, already has a &lt;code&gt;stitch-design&lt;/code&gt; plugin with a &lt;code&gt;generate-design&lt;/code&gt; skill that outputs DESIGN.md files. The industry is realizing that for AI agents to produce decent UIs, they need structured access to design tokens — not screenshots, not Figma links, not prose descriptions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Third, the timing is perfect for a "README.md for design."&lt;/strong&gt; Every developer knows what README.md is. Every developer has been frustrated by AI agents generating UIs with random colors, mismatched typography, and broken spacing. DESIGN.md slots into the same mental model as README.md — a file you drop into your repo that agents read automatically. The parallel is so obvious it's surprising nobody standardized it before.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"DESIGN.md is to agentic UI development what README.md was to open-source documentation — a single file that changes everything." — @davideast, maintainer&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Key Features (with Code Examples)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Structured Design Tokens with Component References
&lt;/h3&gt;

&lt;p&gt;The token system supports references — components can reference tokens with &lt;code&gt;{token.path}&lt;/code&gt; syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;components&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;button-primary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{colors.tertiary}"&lt;/span&gt;
    &lt;span class="na"&gt;textColor&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{colors.on-tertiary}"&lt;/span&gt;
    &lt;span class="na"&gt;rounded&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{rounded.sm}"&lt;/span&gt;
    &lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;12px&lt;/span&gt;
  &lt;span class="na"&gt;button-primary-hover&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{colors.tertiary-container}"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means changing &lt;code&gt;colors.tertiary&lt;/code&gt; from &lt;code&gt;"#B8422E"&lt;/code&gt; to &lt;code&gt;"#C94F3F"&lt;/code&gt; propagates to every component that references it. No more hunting through code for hard-coded hex values.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. CLI Linter (WCAG Contrast Checking Built In)
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;lint&lt;/code&gt; command validates your DESIGN.md against 9 rules:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @google/design.md lint DESIGN.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"findings"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"severity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"warning"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"components.button-primary"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"textColor (#ffffff) on backgroundColor (#1A1C1E) has contrast ratio 15.42:1 — passes WCAG AA."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"summary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"errors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"warnings"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"info"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The contrast-ratio rule checks every component's &lt;code&gt;backgroundColor&lt;/code&gt;/&lt;code&gt;textColor&lt;/code&gt; pair against WCAG AA minimum (4.5:1). This catches accessibility bugs &lt;em&gt;before&lt;/em&gt; any code is written.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Token-Level Diff (Regression Detection)
&lt;/h3&gt;

&lt;p&gt;Compare two versions of a design system to detect token drift:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @google/design.md diff DESIGN.md DESIGN-v2.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"colors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"added"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"accent"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"removed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"modified"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"tertiary"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"typography"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"added"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"removed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"modified"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"regression"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is huge for design system maintainers. You can CI-check a PR that changes DESIGN.md and reject it if it introduces regressions like removing a token that components still reference.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Export to Tailwind (v3 and v4)
&lt;/h3&gt;

&lt;p&gt;Probably the most immediately useful feature for most developers:&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;# Tailwind v3 config&lt;/span&gt;
npx @google/design.md &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; json-tailwind DESIGN.md &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; tailwind.theme.json

&lt;span class="c"&gt;# Tailwind v4 @theme block&lt;/span&gt;
npx @google/design.md &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; css-tailwind DESIGN.md &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; theme.css
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This generates a complete &lt;code&gt;theme.extend&lt;/code&gt; config (v3) or &lt;code&gt;@theme { ... }&lt;/code&gt; block (v4) with every color, font, spacing, and radius token mapped to the correct Tailwind namespace. No manual token mapping, no copy-paste errors.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. DTCG (W3C Standard) Export
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @google/design.md &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; dtcg DESIGN.md &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; tokens.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The W3C Design Tokens Format Module is the emerging standard for cross-tool token exchange. DESIGN.md converts to it natively, so you can sync tokens between Figma plugins, design tooling, and your codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Community Reactions
&lt;/h2&gt;

&lt;p&gt;The launch generated significant discussion across developer platforms:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reddit r/UXDesign:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Even with MD files it's not one size fits all. I created a semi automated framework for one of my projects and I still have to tweak things here and there." — &lt;a href="https://www.reddit.com/r/UXDesign/comments/1uct2dx/claude_code_has_access_to_my_design_system_yet/" rel="noopener noreferrer"&gt;r/UXDesign&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;TechTimes:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Version 0.3.0 shipped on June 15. Artiverse reported that Google's specification notes that tokens give agents exact values while prose tells them why those values exist and how to apply them." — &lt;a href="https://www.techtimes.com/articles/319202/20260627/metas-astryx-gives-ai-coding-agents-design-system-they-can-actually-read.htm" rel="noopener noreferrer"&gt;TechTimes&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;SlideSpeak (DESIGN.md for presentations):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"DESIGN.md is a small format with a big idea. Google Labs publishes the spec: one markdown file that tells AI coding agents how to build on-brand interfaces." — &lt;a href="https://slidespeak.co/blog/design-md-for-presentations" rel="noopener noreferrer"&gt;SlideSpeak&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The community's biggest open question is adoption: &lt;em&gt;will this become the standard, or will every company invent their own?&lt;/em&gt; Early signs are positive — Google Stitch already generates DESIGN.md files natively, and the &lt;code&gt;awesome-agent-skills&lt;/code&gt; repo lists it as a recommended skill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Getting started takes about 30 seconds:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Install the CLI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @google/design.md
&lt;span class="c"&gt;# or run directly:&lt;/span&gt;
npx @google/design.md lint DESIGN.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Windows note:&lt;/strong&gt; PowerShell may confuse &lt;code&gt;design.md&lt;/code&gt; with the Markdown file association. Use the &lt;code&gt;designmd&lt;/code&gt; alias instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-p&lt;/span&gt; @google/design.md designmd lint DESIGN.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Create a DESIGN.md
&lt;/h3&gt;

&lt;p&gt;Start with the minimal structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;My App&lt;/span&gt;
&lt;span class="na"&gt;colors&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;primary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#1A1C1E"&lt;/span&gt;
&lt;span class="na"&gt;typography&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;fontFamily&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Inter&lt;/span&gt;
    &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1rem&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Validate It
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @google/design.md lint DESIGN.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Export to Your Framework
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @google/design.md &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; json-tailwind DESIGN.md &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; tailwind.theme.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Drop It in Your Repo
&lt;/h3&gt;

&lt;p&gt;Just like README.md, commit DESIGN.md to the root of your repository. AI coding agents that support MCP or custom instructions will automatically read it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works Under the Hood
&lt;/h2&gt;

&lt;p&gt;DESIGN.md is parsed into a structured &lt;code&gt;DesignSystemState&lt;/code&gt; object:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The YAML front matter is parsed with a custom schema validator that recognizes &lt;code&gt;Color&lt;/code&gt;, &lt;code&gt;Dimension&lt;/code&gt;, &lt;code&gt;Typography&lt;/code&gt;, and &lt;code&gt;TokenReference&lt;/code&gt; types&lt;/li&gt;
&lt;li&gt;Token references (&lt;code&gt;{colors.primary}&lt;/code&gt;) are resolved into a dependency graph — the linter detects broken references as errors&lt;/li&gt;
&lt;li&gt;Component definitions are validated against a whitelist of allowed properties (&lt;code&gt;backgroundColor&lt;/code&gt;, &lt;code&gt;textColor&lt;/code&gt;, &lt;code&gt;typography&lt;/code&gt;, &lt;code&gt;rounded&lt;/code&gt;, &lt;code&gt;padding&lt;/code&gt;, &lt;code&gt;size&lt;/code&gt;, &lt;code&gt;height&lt;/code&gt;, &lt;code&gt;width&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;The linter runs 9 rule checks in parallel, each producing findings at &lt;code&gt;error&lt;/code&gt;, &lt;code&gt;warning&lt;/code&gt;, or &lt;code&gt;info&lt;/code&gt; severity&lt;/li&gt;
&lt;li&gt;The export command traverses the resolved token graph and generates framework-specific output (Tailwind theme config, DTCG JSON)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The token system is inspired by the &lt;a href="https://www.designtokens.org/" rel="noopener noreferrer"&gt;W3C Design Token Format&lt;/a&gt;, but DESIGN.md is deliberately simpler: no nested groups, no aliases, no &lt;code&gt;$type&lt;/code&gt; declarations. It's designed to be writable by humans, not just machines.&lt;/p&gt;

&lt;p&gt;The CLI is a single TypeScript package compiled to Node.js. It has zero runtime dependencies beyond Node 18+.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Should Use This
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;✅ You should use DESIGN.md if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You use AI coding agents (Claude Code, Cursor, Codex, Gemini CLI) and want consistent UI output&lt;/li&gt;
&lt;li&gt;You maintain a design system and want agents to follow it&lt;/li&gt;
&lt;li&gt;You're tired of AI agents hallucinating colors, fonts, and spacing&lt;/li&gt;
&lt;li&gt;You use Tailwind CSS and want to share tokens between your design system and your codebase&lt;/li&gt;
&lt;li&gt;You want WCAG accessibility checking as part of your design token workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;❌ You should NOT use DESIGN.md if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You don't use AI coding agents at all&lt;/li&gt;
&lt;li&gt;You have a design system that's already expressed in Storybook + Figma tokens with auto-sync&lt;/li&gt;
&lt;li&gt;You need runtime token resolution (DESIGN.md is a build-time spec, not a runtime token engine)&lt;/li&gt;
&lt;li&gt;You're looking for a replacement for CSS variables or Tailwind configs (it maps to them, doesn't replace them)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  DESIGN.md vs Meta Astryx
&lt;/h2&gt;

&lt;p&gt;Both Google and Meta launched design-system + AI-agent integrations within days of each other — but they're solving different parts of the problem.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;DESIGN.md (Google)&lt;/th&gt;
&lt;th&gt;Astryx (Meta)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;What it is&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A format spec for describing visual identity&lt;/td&gt;
&lt;td&gt;A full React design system (150+ components)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CLI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npx @google/design.md lint/diff/export&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npx @astryx/cli scaffold/build&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI integration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Format agents can read (token-driven)&lt;/td&gt;
&lt;td&gt;MCP server agents can query (component-driven)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tailwind config, DTCG tokens&lt;/td&gt;
&lt;td&gt;React components, templates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub Stars&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;23,000+&lt;/td&gt;
&lt;td&gt;8,500+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Describing &lt;em&gt;your&lt;/em&gt; design system&lt;/td&gt;
&lt;td&gt;Using &lt;em&gt;Meta's&lt;/em&gt; design system&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In practice, they're complementary. You could put Astryx components in your repo &lt;em&gt;and&lt;/em&gt; write a DESIGN.md that tells agents how to use them together with your brand colors. Astryx's MCP server handles "what components exist," while DESIGN.md handles "what should the UI look like."&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest Limitations
&lt;/h2&gt;

&lt;p&gt;DESIGN.md is at version &lt;strong&gt;alpha&lt;/strong&gt;, and it shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The spec is still evolving.&lt;/strong&gt; Expected changes as it matures — the alpha label means no backward compatibility guarantees yet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No runtime token resolution.&lt;/strong&gt; DESIGN.md is a build-time format. If you need runtime token access (themed UIs, dynamic color switching), you'll still need a runtime token system alongside it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adoption is early.&lt;/strong&gt; The format is only useful if agents actually read it. Right now, it requires a custom instruction or skill to wire into Claude Code, Cursor, etc. Google Stitch supports it natively, but other agents need manual setup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Figma plugin (yet).&lt;/strong&gt; The ideal workflow would be "design in Figma → export DESIGN.md → agents build UI." That pipeline doesn't exist yet — you're writing DESIGN.md by hand.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limited color space validation.&lt;/strong&gt; The linter checks WCAG contrast, but it doesn't validate that your color palette has enough variance, or that accessibility modes work — those still need human judgment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Component model is basic.&lt;/strong&gt; Components can only reference 7 property types. There's no support for state machines, responsive variants, or animation tokens.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How is DESIGN.md different from a Tailwind config?
&lt;/h3&gt;

&lt;p&gt;A Tailwind config defines &lt;em&gt;everything available&lt;/em&gt; to your CSS framework. DESIGN.md defines &lt;em&gt;what your brand looks like&lt;/em&gt;. DESIGN.md exports to Tailwind config (so you get both), but it also includes prose rationale, accessibility data, and component token references that a Tailwind config can't express.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use DESIGN.md without Google Stitch?
&lt;/h3&gt;

&lt;p&gt;Absolutely. DESIGN.md is format-first — the CLI is just tooling. Drop the file in any repo, and any AI coding agent with custom instructions can read it. Stitch is one integration; the ecosystem is growing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does DESIGN.md replace Storybook?
&lt;/h3&gt;

&lt;p&gt;No. Storybook documents &lt;em&gt;what components look like interactively&lt;/em&gt;. DESIGN.md documents &lt;em&gt;what tokens and rules govern your visual identity&lt;/em&gt;. They serve different purposes and work well together — DESIGN.md defines the tokens, Storybook shows the components built with them.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens if I change a token?
&lt;/h3&gt;

&lt;p&gt;Change the YAML value and re-lint. The &lt;code&gt;diff&lt;/code&gt; command will show exactly what changed. Any component referencing the old value via &lt;code&gt;{token.path}&lt;/code&gt; syntax automatically inherits the new value. The linter will catch broken contracts (removing a token that's still referenced).&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I get Claude Code or Cursor to read DESIGN.md?
&lt;/h3&gt;

&lt;p&gt;Add a custom instruction pointing to the file. For Claude Code, add to your CLAUDE.md: "Read DESIGN.md at the project root for design system tokens and visual identity rules." For Cursor, add a &lt;code&gt;.cursorrules&lt;/code&gt; entry. The &lt;code&gt;awesome-agent-skills&lt;/code&gt; repo has ready-to-use skill files for common agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can DESIGN.md define dark mode tokens?
&lt;/h3&gt;

&lt;p&gt;Version alpha doesn't have a native dark-mode namespace, but you can use two DESIGN.md files (DESIGN.md + DESIGN.dark.md) or extend the format with section-level overrides. The spec is flexible enough to accommodate this within existing constraints.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;DESIGN.md is one of those rare developer tools that feels inevitable in hindsight.&lt;/strong&gt; Just as README.md became the universal convention for project documentation, DESIGN.md has the potential to become the universal convention for design system documentation — especially in an age where AI agents read more code than humans do. It's alpha software, it has rough edges, and adoption is early. But the direction is right, and 23,000 stars in a week suggests the community agrees.&lt;/p&gt;

</description>
      <category>googlelabs</category>
      <category>designmd</category>
      <category>designtokens</category>
      <category>aicodingagents</category>
    </item>
  </channel>
</rss>
