<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  
  <title>DrkPxl</title>
  <subtitle>Practical AI for Real People</subtitle>
  <link href="https://drkpxl.com/feed.xml" rel="self" />
  <link href="https://drkpxl.com/" />
  <updated>2026-07-29T00:00:00Z</updated>
  <id>https://drkpxl.com/</id>
  <author>
    <name>DrkPxl</name>
  </author>
  <entry>
    <title>Erase Old MQTT or Unwanted Sensors</title>
    <link href="https://drkpxl.com/erase-old-mqtt-or-unwanted-sensors/" />
    <updated>2025-11-18T00:00:00Z</updated>
    <id>https://drkpxl.com/erase-old-mqtt-or-unwanted-sensors/</id>
    <content type="html">&lt;p&gt;Home Assistant makes it easy to &lt;em&gt;add&lt;/em&gt; devices and surprisingly tedious to remove a lot of them at once — especially stale MQTT sensors. Here&#39;s the approach I use to delete them in bulk.&lt;/p&gt;
&lt;h2 id=&quot;the-idea&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/erase-old-mqtt-or-unwanted-sensors/#the-idea&quot;&gt;The idea&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Rather than deleting devices one by one, you herd everything you want gone into a single &lt;strong&gt;Area&lt;/strong&gt;, then run a short script in your browser&#39;s console that deletes everything in that Area.&lt;/p&gt;
&lt;h2 id=&quot;steps&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/erase-old-mqtt-or-unwanted-sensors/#steps&quot;&gt;Steps&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Create a staging Area.&lt;/strong&gt; In Home Assistant, make a new Area — I call mine &lt;strong&gt;Garbage&lt;/strong&gt; — and note its ID. You&#39;ll set that as the &lt;code&gt;GARBAGE_ID&lt;/code&gt; variable in the script.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Move the junk in.&lt;/strong&gt; In the devices list, check off the devices you want to remove, then use the menu in the upper right to mass-assign them to the staging Area.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Run the script.&lt;/strong&gt; Open your browser&#39;s developer console and paste in the script. It calls Home Assistant&#39;s WebSocket API to read the device registry, filter to your staging Area, and remove those devices from their config entries, logging results as it goes.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; The script ships with an &lt;code&gt;actually_delete&lt;/code&gt; flag set to &lt;code&gt;false&lt;/code&gt;. Leave it off for a dry run first — you&#39;ll see exactly which devices &lt;em&gt;would&lt;/em&gt; be deleted before anything is removed. Flip it to &lt;code&gt;true&lt;/code&gt; once you&#39;re happy.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;the-script&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/erase-old-mqtt-or-unwanted-sensors/#the-script&quot;&gt;The script&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The full, current script lives in this gist:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://gist.github.com/jasonk/cea154e5785684e184492256f2fdb21a&quot;&gt;github.com/jasonk — erase-old-mqtt gist ↗&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Copy it into your console after you&#39;ve staged the devices, do a dry run, then delete for real.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Figma Design Agent Launch</title>
    <link href="https://drkpxl.com/figma-design-agent-launch/" />
    <updated>2026-06-11T00:00:00Z</updated>
    <id>https://drkpxl.com/figma-design-agent-launch/</id>
    <content type="html">&lt;p&gt;Figma announced an AI design agent that lives right inside the canvas — generating, editing, and iterating on designs alongside you instead of in a separate chat window.&lt;/p&gt;
&lt;p&gt;It&#39;s a good example of the pattern we keep seeing: agents showing up &lt;em&gt;inside&lt;/em&gt; the tools people already use, rather than as standalone chatbots.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.figma.com/blog/the-figma-agent-is-here/&quot;&gt;Read the announcement on Figma&#39;s blog ↗&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Claude Fable 5: The &quot;Safe&quot; Mythos for Everyone</title>
    <link href="https://drkpxl.com/claude-fable-5-the-safe-mythos-for-everyone/" />
    <updated>2026-06-11T00:00:00Z</updated>
    <id>https://drkpxl.com/claude-fable-5-the-safe-mythos-for-everyone/</id>
    <content type="html">&lt;p&gt;Anthropic just dropped &lt;strong&gt;Claude Fable 5&lt;/strong&gt;, and if you&#39;ve been following the whispers about &amp;quot;Mythos,&amp;quot; this is the moment. For the uninitiated: Mythos is Anthropic&#39;s powerhouse architecture—a class of model designed for extreme technical proficiency, specifically in areas like vulnerability discovery and complex software engineering.&lt;/p&gt;
&lt;p&gt;The problem? A model that can find every bug in a system can also be used to break every system.&lt;/p&gt;
&lt;p&gt;Enter &lt;strong&gt;Fable 5&lt;/strong&gt;: a &amp;quot;safe&amp;quot; version of the Mythos-class model designed for public consumption.&lt;/p&gt;
&lt;h2 id=&quot;what-exactly-is-fable-5&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/claude-fable-5-the-safe-mythos-for-everyone/#what-exactly-is-fable-5&quot;&gt;What exactly is Fable 5?&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Think of Fable 5 as the &amp;quot;civilian&amp;quot; version of a high-grade military tool. It shares the same underlying brain as &lt;strong&gt;Claude Mythos 5&lt;/strong&gt; (which is restricted to a vetted group of partners via &lt;em&gt;Project Glasswing&lt;/em&gt;), but it comes with heavy-duty guardrails.&lt;/p&gt;
&lt;h3 id=&quot;the-safe-part-how-the-guardrails-work&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/claude-fable-5-the-safe-mythos-for-everyone/#the-safe-part-how-the-guardrails-work&quot;&gt;The &amp;quot;Safe&amp;quot; Part: How the Guardrails Work&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Anthropic isn&#39;t just using a simple &amp;quot;I can&#39;t answer that&amp;quot; filter. They&#39;ve implemented a &lt;strong&gt;Fallback Mechanism&lt;/strong&gt;. When Fable 5 detects a high-risk prompt (specifically in cybersecurity, biology, chemistry, or model distillation), it doesn&#39;t just stop—it silently reroutes the request to &lt;strong&gt;Claude Opus 4.8&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Essentially, if you ask something too &amp;quot;dangerous,&amp;quot; the system swaps the super-brain for a standard high-end model to ensure a safe response. Anthropic claims ≥ 95% of sessions stay on Fable 5, meaning for most of us, we get the full power without the &amp;quot;safety-triggered&amp;quot; downgrades.&lt;/p&gt;
&lt;h2 id=&quot;why-should-you-care-the-specs&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/claude-fable-5-the-safe-mythos-for-everyone/#why-should-you-care-the-specs&quot;&gt;Why should you care? (The Specs)&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you&#39;re doing high-end knowledge work or coding, Fable 5 is a significant leap over Opus 4.8.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Software Engineering:&lt;/strong&gt; It&#39;s designed to &amp;quot;one-shot&amp;quot; full applications and excels at UI design and game coding. Stripe reported it compressed months of engineering into days, performing a codebase-wide migration in one day that would have taken a team two months.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Autonomous Operations:&lt;/strong&gt; It has a superior ability to reflect on and validate its own work. Simon Willison noted it as being &amp;quot;very proactive,&amp;quot; spotting and fixing bugs in dependency libraries during development.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analytics &amp;amp; Vision:&lt;/strong&gt; It&#39;s the first model to hit 90% on the Hex core analytics benchmark. On the vision side, it&#39;s a new state-of-the-art, capable of rebuilding web app source code from screenshots alone and playing &lt;em&gt;Pokémon FireRed&lt;/em&gt; with minimal vision-only scaffolding.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;the-controversy-silent-sabotage&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/claude-fable-5-the-safe-mythos-for-everyone/#the-controversy-silent-sabotage&quot;&gt;The Controversy: Silent Sabotage&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It hasn&#39;t been all sunshine. Shortly after launch, it was revealed in Fable&#39;s 319-page system card that Anthropic implemented &lt;strong&gt;invisible safeguards&lt;/strong&gt; for &amp;quot;frontier LLM development.&amp;quot;&lt;/p&gt;
&lt;p&gt;If you were trying to build a competing LLM, pretraining pipelines, or ML accelerator designs, the model would silently &amp;quot;limit effectiveness&amp;quot; via steering vectors or prompt modification &lt;em&gt;without notifying the user&lt;/em&gt;. After a massive outcry from the research community and coverage by Simon Willison and Wired, Anthropic walked this back. They have now shifted these specific &amp;quot;frontier&amp;quot; safeguards to be visible, meaning they now trigger a visible fallback to Opus 4.8 rather than silent degradation.&lt;/p&gt;
&lt;h2 id=&quot;the-trade-offs-cost-and-privacy&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/claude-fable-5-the-safe-mythos-for-everyone/#the-trade-offs-cost-and-privacy&quot;&gt;The Trade-offs: Cost and Privacy&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Power isn&#39;t free. Fable 5 comes with two major &amp;quot;catches&amp;quot;:&lt;/p&gt;
&lt;h3 id=&quot;1-the-price-tag&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/claude-fable-5-the-safe-mythos-for-everyone/#1-the-price-tag&quot;&gt;1. The Price Tag 💸&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Fable 5 is &lt;strong&gt;twice as expensive&lt;/strong&gt; as Opus 4.8.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Input:&lt;/strong&gt; $10 / million tokens&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Output:&lt;/strong&gt; $50 / million tokens&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anthropic&#39;s counter-argument is that the higher intelligence leads to a higher ROI—you spend more per token, but you get the job done right the first time.&lt;/p&gt;
&lt;h3 id=&quot;2-the-data-policy&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/claude-fable-5-the-safe-mythos-for-everyone/#2-the-data-policy&quot;&gt;2. The Data Policy ⚠️&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To defend against novel jailbreaks, Anthropic has introduced a &lt;strong&gt;mandatory 30-day data retention policy&lt;/strong&gt; for all traffic. This overrides previous &amp;quot;zero-retention&amp;quot; enterprise agreements. They claim this data is &lt;em&gt;not&lt;/em&gt; used for training, but strictly for security monitoring.&lt;/p&gt;
&lt;h2 id=&quot;final-verdict-practical-ai-take&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/claude-fable-5-the-safe-mythos-for-everyone/#final-verdict-practical-ai-take&quot;&gt;Final Verdict: Practical AI Take&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Fable 5 is a beast for anyone who needs a model that can actually &lt;em&gt;reason&lt;/em&gt; through a multi-step project rather than just predicting the next word. If you are building agents or handling complex technical debt, the 2x cost is likely negligible compared to the time saved.&lt;/p&gt;
&lt;p&gt;Just be mindful of the 30-day retention if you&#39;re handling extremely sensitive data, and keep an eye on your token usage—this model will eat through credits faster than Opus ever did.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Want to see how Fable 5 integrates with Hermes and other automation tools? Stay tuned for the next guide.&lt;/em&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Armchair Arena - Test Ollama Models for YOUR use case</title>
    <link href="https://drkpxl.com/notes-on-hermes-and-ollama-open-models/" />
    <updated>2026-06-15T00:00:00Z</updated>
    <id>https://drkpxl.com/notes-on-hermes-and-ollama-open-models/</id>
    <content type="html">&lt;p&gt;Up until recently, I was a HUGE Claude user, bouncing between Max and Max 20 depending on the project and the month. I mostly saw AI as a way to write deterministic code. I watched OpenClaw show up, get hacked, then evolve, and I said, &amp;quot;I don&#39;t need that.&amp;quot; Between Perplexity, Gemini, and Claude Code, all my non-coding &amp;quot;life assistant&amp;quot; needs were covered.&lt;/p&gt;
&lt;p&gt;Then I got curious about Hermes — it seemed like a &amp;quot;smarter&amp;quot; OpenClaw. I set it up against my ChatGPT subscription and it worked fine, but it got me curious about running open models. So I grabbed an Ollama subscription and was immediately spoiled for choice: 20+ models, each with a pile of cryptic numbers after its name — oh my. I picked them basically at random, wired up Cron jobs and webhooks, and had them give me advice and run little errands. Sometimes they were great, sometimes they weren&#39;t, and I genuinely couldn&#39;t tell which. Classic analysis paralysis: I had no idea which model deserved to be my &amp;quot;go-to,&amp;quot; my &amp;quot;set and forget&amp;quot; pick.&lt;/p&gt;
&lt;p&gt;So, in classic Steve fashion, I built my own LM arena : &lt;strong&gt;Armchair Arena&lt;/strong&gt;  where I judge a model&#39;s performance by completely subjective voting on the answer &lt;em&gt;and&lt;/em&gt; on the web sources it chose to cite.&lt;/p&gt;
&lt;h2 id=&quot;what-armchair-arena-actually-does&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/notes-on-hermes-and-ollama-open-models/#what-armchair-arena-actually-does&quot;&gt;What Armchair Arena actually does&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It&#39;s a tiny, self-hosted arena for evaluating LLMs on &lt;strong&gt;real-world, non-coding tasks&lt;/strong&gt; — web research, summarization, advice, recipes, general knowledge — and it judges them on the three things that actually matter day to day: &lt;strong&gt;was it fast, was it token-efficient, and was the answer any good?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You pick 3 models, ask one question, and see the answers &lt;strong&gt;side-by-side&lt;/strong&gt; — complete with live metrics (tokens, tokens/sec, wall-clock) and the actual source URLs each model pulled in. Then you crown the best one with a single click. Every model gets the &lt;em&gt;same&lt;/em&gt; web-research tools (a self-hosted Firecrawl), so it&#39;s a fair fight.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/drkpxl/armchair-arena/main/docs/compare.png&quot; alt=&quot;Compare page — three models answering the same question side-by-side, each with metrics, sources, and a &amp;quot;Pick as winner&amp;quot; button&quot; title=&quot;Results Comparison&quot;&gt;&lt;/p&gt;
&lt;p&gt;One decisive judgment per round beats fuzzy 1–5 star ratings, because over many rounds it turns into something you can actually quantify.&lt;/p&gt;
&lt;h2 id=&quot;the-data-is-where-it-gets-interesting&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/notes-on-hermes-and-ollama-open-models/#the-data-is-where-it-gets-interesting&quot;&gt;The data is where it gets interesting&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Every run is saved to SQLite, and an analytics page turns all of it into an &lt;strong&gt;opponent-aware strength rating&lt;/strong&gt; , a Bradley-Terry / Elo-style score where beating a &lt;em&gt;strong&lt;/em&gt; model counts for more than beating a weak one. You get win-rate with a 95% confidence interval (so a lucky 3-run sample can&#39;t masquerade as the champ), a Pareto &lt;strong&gt;efficiency frontier&lt;/strong&gt; that flags the models nothing else beats on strength, cost, &lt;em&gt;and&lt;/em&gt; speed at once, plus strength-vs-cost and speed leaderboards. And CSV export, because of course.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/drkpxl/armchair-arena/main/docs/analytics.png&quot; alt=&quot;Analytics Dashboard — strength (Elo) leaderboard, efficiency frontier, and strength-vs-cost charts across all runs&quot; title=&quot;Analytics Dashboard&quot;&gt;&lt;/p&gt;
&lt;p&gt;Here&#39;s my honest snapshot. By raw strength, &lt;code&gt;deepseek-v4-pro&lt;/code&gt; (~1743) and &lt;code&gt;qwen3.5&lt;/code&gt; (~1738) are out front, and my pick &lt;code&gt;nemotron-3-nano:30b-cloud&lt;/code&gt; sits around third (~1469 strength, ~31% win rate over 26 runs). It&#39;s not on the efficiency frontier either. So why is it my &amp;quot;set and forget&amp;quot;?&lt;/p&gt;
&lt;p&gt;Because for &lt;em&gt;my&lt;/em&gt; questions, it&#39;s fast, it&#39;s light, its answers are consistently good-enough, and it tends to cite sources I&#39;d actually click. The heavyweights win more head-to-heads, but nemotron-nano is the one I&#39;m happy to leave running unattended on a Cron job.&lt;/p&gt;
&lt;h2 id=&quot;set-it-up-to-curate-your-own-roster-local-remote-or-cloud&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/notes-on-hermes-and-ollama-open-models/#set-it-up-to-curate-your-own-roster-local-remote-or-cloud&quot;&gt;Set it up to curate your own roster  local, remote, or cloud&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On first run, an onboarding screen lets you &lt;strong&gt;curate the roster&lt;/strong&gt; of models you want in the arena. Mix &lt;strong&gt;Ollama Cloud&lt;/strong&gt; with any number of &lt;strong&gt;local or remote Ollama servers you add by URL&lt;/strong&gt; (a workstation, a box on your tailnet, whatever) — each model is automatically routed to its own backend. Your picks are saved &lt;strong&gt;server-side&lt;/strong&gt;, so they persist across sessions and browsers, and you can edit the roster anytime from &lt;strong&gt;⚙ Models&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/drkpxl/armchair-arena/main/docs/models.png&quot; alt=&quot;Model manager — pick which cloud models compete and add local/remote Ollama servers by URL&quot; title=&quot;Model Manager&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;how-you-can-use-it&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/notes-on-hermes-and-ollama-open-models/#how-you-can-use-it&quot;&gt;How you can use it&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you&#39;re curious what the best model is for YOU, try it, the whole project is on GitHub:&lt;/p&gt;
&lt;p&gt;👉 &lt;strong&gt;&lt;a href=&quot;https://github.com/drkpxl/armchair-arena&quot;&gt;https://github.com/drkpxl/armchair-arena&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can set it up yourself (Python + &lt;code&gt;uv&lt;/code&gt;, a self-hosted Firecrawl for the web tools, and an Ollama backend), or just point an AI agent like Hermes/OpenClaw at the included &lt;a href=&quot;https://github.com/drkpxl/armchair-arena/blob/main/AGENTS.md&quot;&gt;&lt;code&gt;AGENTS.md&lt;/code&gt;&lt;/a&gt; — &lt;em&gt;&amp;quot;clone this repo, follow &lt;a href=&quot;http://AGENTS.md&quot;&gt;AGENTS.md&lt;/a&gt;, here&#39;s my Ollama API key&amp;quot;&lt;/em&gt;  and let it install, configure, and confirm everything&#39;s healthy for you.&lt;/p&gt;
&lt;h2 id=&quot;future-plans&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/notes-on-hermes-and-ollama-open-models/#future-plans&quot;&gt;Future plans&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If there&#39;s interest, I&#39;d add frontier models via their own API keys  I&#39;m just not ready for that yet. If you want to help shape that, or you just want to argue about which model &lt;em&gt;should&lt;/em&gt; be everyone&#39;s set-and-forget, let me know. And if you run it, I&#39;d genuinely love to hear which model ends up being &lt;em&gt;your&lt;/em&gt; armchair champion.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Change Hermes Reasoning at Runtime</title>
    <link href="https://drkpxl.com/change-hermes-reasoning-at-runtime/" />
    <updated>2026-06-15T00:00:00Z</updated>
    <id>https://drkpxl.com/change-hermes-reasoning-at-runtime/</id>
    <content type="html">&lt;p&gt;Sometimes my Hermes over reasons on simple tasks but I don&#39;t want to change it globally. Here is a quick cheat sheet for how to change it during a session.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-plain&quot;&gt;/reasoning           # Show current effort level and display state
/reasoning high      # Set reasoning effort to high
/reasoning none      # Disable reasoning
/reasoning show      # Show model thinking above each response
/reasoning hide      # Hide model thinking
&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <title>Tiny Air: A Practical MCP Server for Air Quality</title>
    <link href="https://drkpxl.com/tiny-air-a-practical-mcp-server-for-air-quality/" />
    <updated>2026-06-26T00:00:00Z</updated>
    <id>https://drkpxl.com/tiny-air-a-practical-mcp-server-for-air-quality/</id>
    <content type="html">&lt;p&gt;&lt;img src=&quot;https://drkpxl.com/assets/img/Screenshot%202026-06-26%20at%201.25.32%20PM.png&quot; alt=&quot;&quot; title=&quot;Tiny Air Screenshot&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;what-it-gives-your-agent&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/tiny-air-a-practical-mcp-server-for-air-quality/#what-it-gives-your-agent&quot;&gt;What It Gives Your Agent&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Four read-only tools:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;get_air_quality&lt;/code&gt; — current AQI and category for a zip, city, or lat/lon&lt;/li&gt;
&lt;li&gt;&lt;code&gt;check_air_quality_threshold&lt;/code&gt; — boolean: is AQI above a given number right now?&lt;/li&gt;
&lt;li&gt;&lt;code&gt;find_nearby_stations&lt;/code&gt; — nearby AirNow reporting stations&lt;/li&gt;
&lt;li&gt;&lt;code&gt;list_aqi_categories&lt;/code&gt; — the AQI scale so the agent understands what the numbers mean&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Connect it in two lines:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;mcp_servers:
  tinyair:
    url: &amp;quot;https://air.drkpxl.com/mcp&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Works with Hermes, Claude Code/Desktop, and OpenClaw. If your agent speaks MCP, it can use this.&lt;/p&gt;
&lt;h3 id=&quot;why-this-is-interesting&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/tiny-air-a-practical-mcp-server-for-air-quality/#why-this-is-interesting&quot;&gt;Why This Is Interesting&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Your agent already has a scheduler. It already knows your zip code. It already knows how to message you. Tiny Air just gives it the data pipe. The agent decides when to check, what threshold matters, and what to do about it. A composable MCP pattern done right .&lt;/p&gt;
&lt;p&gt;This is where I believe practical AI is heading. Not bigger models or more complex tools but just small, focused connections that let your agent handle the stuff you&#39;d otherwise forget. Air quality is one example. There are a hundreds more.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://drkpxl.com/assets/img/Screenshot%202026-06-26%20at%201.25.47%20PM.png&quot; alt=&quot;&quot; title=&quot;Air Quality&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;why-stateless&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/tiny-air-a-practical-mcp-server-for-air-quality/#why-stateless&quot;&gt;Why Stateless&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I could have built a notification service with stored zips and SMS alerts. But that&#39;s a database with PII, a privacy policy, and maintenance. Your agent already knows where you live and how to reach you. Duplicating that state into a second service is liability, not value.&lt;/p&gt;
&lt;p&gt;Tiny Air holds nothing. It answers one question and lets the agent do the rest. No webhooks, no stored preferences, no callback URLs.&lt;/p&gt;
&lt;h3 id=&quot;try-it&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/tiny-air-a-practical-mcp-server-for-air-quality/#try-it&quot;&gt;Try It&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://air.drkpxl.com&quot;&gt;air.drkpxl.com&lt;/a&gt; has the full config, example recipes for Hermes, OpenClaw, and Claude, and screenshots of it running in Telegram, Discord, and Claude. Source is on &lt;a href=&quot;https://github.com/drkpxl/drkpxl-skels&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;US coverage only : &lt;a href=&quot;http://AirNow.gov&quot;&gt;AirNow.gov&lt;/a&gt; is a US service. If someone wants to build a non-US equivalent on OpenAQ or ECMWF, the architecture is simple enough to copy. Happy to share notes.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Qwen 3.6 27B is the sweet spot for local development</title>
    <link href="https://drkpxl.com/qwen-3-6-27b-is-the-sweet-spot-for-local-development/" />
    <updated>2026-06-30T00:00:00Z</updated>
    <id>https://drkpxl.com/qwen-3-6-27b-is-the-sweet-spot-for-local-development/</id>
    <content type="html">&lt;p&gt;A hands-on review of Qwen 3.6 27B, a dense local model that punches above its weight for development work, with practical setup instructions for running it via llama.cpp and benchmarks comparing it to frontier models.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Introducing Claude Sonnet 5</title>
    <link href="https://drkpxl.com/introducing-claude-sonnet-5/" />
    <updated>2026-07-01T00:00:00Z</updated>
    <id>https://drkpxl.com/introducing-claude-sonnet-5/</id>
    <content type="html">&lt;p&gt;Anthropic has released Claude Sonnet 5, a more agentic and cost-efficient model that approaches Opus 4.8&#39;s performance on many tasks, shows improved safety metrics over its predecessor Sonnet 4.6, and is now available across all Claude plans and the API with introductory pricing through August 31, 2026.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Claude Code Is Steganographically Marking Requests</title>
    <link href="https://drkpxl.com/claude-code-is-steganographically-marking-requests/" />
    <updated>2026-07-01T00:00:00Z</updated>
    <id>https://drkpxl.com/claude-code-is-steganographically-marking-requests/</id>
    <content type="html">&lt;p&gt;A security researcher claims to have found hidden Unicode markers in Claude Code that subtly alter the date string in its system prompt based on the API base URL&#39;s hostname and system timezone—apparently to flag custom gateways, proxies, or resellers (especially Chinese AI-related domains)—raising privacy and transparency concerns about undisclosed steganographic fingerprinting in a widely-trusted developer tool.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Claude Claude Fable 5 and Mythos 5 are back July 2nd</title>
    <link href="https://drkpxl.com/claude-claude-fable-5-and-mythos-5-are-back-july-2nd/" />
    <updated>2026-07-01T00:00:00Z</updated>
    <id>https://drkpxl.com/claude-claude-fable-5-and-mythos-5-are-back-july-2nd/</id>
    <content type="html">&lt;p&gt;Anthropic has received notice that the Department of Commerce has lifted export controls on Claude Fable 5 and Mythos 5.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Building pi in a World of Slop</title>
    <link href="https://drkpxl.com/building-pi-in-a-world-of-slop/" />
    <updated>2026-07-17T00:00:00Z</updated>
    <id>https://drkpxl.com/building-pi-in-a-world-of-slop/</id>
    <content type="html">&lt;p&gt;Refreshing video from Mario Zechner (Pi creator) on building deterministic code generation tools in a market flooded with unreliable AI-generated &amp;quot;slop&amp;quot;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>chatbox: Hermes/OpenClaw Based Voice Assistant</title>
    <link href="https://drkpxl.com/chatbox-a-desk-terminal-with-exactly-one-job/" />
    <updated>2026-07-29T00:00:00Z</updated>
    <id>https://drkpxl.com/chatbox-a-desk-terminal-with-exactly-one-job/</id>
    <content type="html">&lt;p&gt;Before 3d printers got awesome I used to built my own or customize the heck out of my Ender 3, as a result I have a bunch of old parts sitting around so last weekend I decided to put it to use to act as a household AI assistant.&lt;/p&gt;
&lt;p&gt;It has one real job: &lt;strong&gt;press the knob, ask out loud, read the answer.&lt;/strong&gt;.&lt;/p&gt;
&lt;iframe width=&quot;850&quot; height=&quot;478&quot; src=&quot;https://www.youtube.com/embed/OlpE03loK9w?si=ff2EwZGjIL8bj1nK&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;Code, case, and wiring are all here: &lt;strong&gt;&lt;a href=&quot;https://github.com/drkpxl/chatbox&quot;&gt;github.com/drkpxl/chatbox&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-star-of-the-show&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/chatbox-a-desk-terminal-with-exactly-one-job/#the-star-of-the-show&quot;&gt;The star of the show&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The display is a &lt;strong&gt;BigTreeTech Mini12864&lt;/strong&gt; which is a part made for 3D printers, not for this. And it is an absurdly good deal for what I needed,  A: Because I already had it but also because BTT put four things on one PCB: a 128×64 LCD, a rotary encoder with a push switch, three addressable WS2812 LEDs, and a piezo buzzer. One board, one bundle of jumper wires, and I have a screen, an input device, a status light, and a speaker.&lt;/p&gt;
&lt;p&gt;Add a Raspberry Pi Zero W, an INMP441 I2S microphone, and about 150g of filament. Nineteen jumper leads, and the microphone&#39;s pads are the only soldering.&lt;/p&gt;
&lt;h2 id=&quot;its-all-cheapspare-parts&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/chatbox-a-desk-terminal-with-exactly-one-job/#its-all-cheapspare-parts&quot;&gt;Its all cheap/spare parts&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The architecture is pretty simple. and works with the low end hardware.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;knob press ──&amp;gt; record to RAM (16 kHz mono WAV, never touches the SD card)
           ──&amp;gt; POST the audio to a transcription endpoint  ──&amp;gt; text
           ──&amp;gt; POST that text to a chat endpoint (SSE)      ──&amp;gt; tokens
           ──&amp;gt; draw them as they arrive
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&#39;s the whole thing. The box records, uploads, and renders. All the intelligence is a &lt;a href=&quot;https://hermes-agent.nousresearch.com/docs/&quot;&gt;Hermes Agent&lt;/a&gt; host on my LAN, but nothing in the Pi code is Hermes-specific, it&#39;s just a multipart upload and an OpenAI-compatible &lt;code&gt;/v1/chat/completions&lt;/code&gt; stream. Any Whisper-style transcriber and any OpenAI-shaped chat endpoint will drop in.&lt;/p&gt;
&lt;p&gt;Because it streams, the answer starts appearing while the model is still writing it, which matters a lot on a screen this small. And an &lt;code&gt;X-Hermes-Session-Id&lt;/code&gt; header scoped to the service run means consecutive questions continue a warm thread instead of starting cold every time.&lt;/p&gt;
&lt;h2 id=&quot;text-that-holds-still&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/chatbox-a-desk-terminal-with-exactly-one-job/#text-that-holds-still&quot;&gt;Text that holds still&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Long answers &lt;strong&gt;page&lt;/strong&gt; rather than scroll. Each chunk sits still for a few seconds and then cuts to the next one.&lt;/p&gt;
&lt;p&gt;The knob&#39;s LEDs carry the state, so you&#39;re never wondering whether it heard you — blue while listening, pulsing blue while transcribing, breathing amber while thinking, green while streaming, a double-pulse when it&#39;s done, red when it isn&#39;t.&lt;/p&gt;
&lt;h2 id=&quot;it-can-also-just-say-it&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/chatbox-a-desk-terminal-with-exactly-one-job/#it-can-also-just-say-it&quot;&gt;It can also just say it&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I also added &lt;strong&gt;Speak answers&lt;/strong&gt; to the UI, pick a speaker available in Home Assistant, and the box stops drawing text entirely. It hands the finished answer to Home Assistant and shows an animated speaker icon. Same reasoning as the paging, if you asked out loud, you shouldn&#39;t then have to read if you don&#39;t want to.&lt;/p&gt;
&lt;p&gt;Two things I learned wiring that up. Home Assistant acknowledges a TTS call &lt;em&gt;immediately&lt;/em&gt;, so the box never learns when the speaker actually stops talking — the animation runs on a 150-wpm word-count estimate and a click cuts it short. And long answers get split into ~240-character chunks on sentence boundaries, because Alexa&#39;s notify TTS silently truncates past some length that moves between releases.&lt;/p&gt;
&lt;p&gt;If HA refuses the call, it falls back to the text screen and plays the error tone.&lt;/p&gt;
&lt;h2 id=&quot;what-it-does-when-im-not-talking-to-it&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/chatbox-a-desk-terminal-with-exactly-one-job/#what-it-does-when-im-not-talking-to-it&quot;&gt;What it does when I&#39;m not talking to it&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Most of the day it&#39;s a clock with the two readings I&#39;d otherwise unlock my phone for.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/drkpxl/chatbox/main/docs/screen-clock.png&quot; alt=&quot;The idle home screen: AQI and temperature above a large clock&quot;&gt;&lt;/p&gt;
&lt;p&gt;But in the morning I genuinely don&#39;t care what time it is. I care whether I need a coat, whether the air is bad, and what I already said yes to. So between 6 and 9 the clock shrinks down to the bottom row and the whole middle of the screen becomes the day:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/drkpxl/chatbox/main/docs/screen-morning.png&quot; alt=&quot;The morning briefing: air quality and current conditions, an inverted row reading STORMS 90/67 57%, and two calendar events&quot;&gt;&lt;/p&gt;
&lt;p&gt;Air quality and what it&#39;s actually like outside on top, then today&#39;s sky with the high, the low and the chance of rain, then whatever&#39;s on the shared calendar. All of it comes out of Home Assistant, an Acurite 5-in-1 in the yard for temperature and humidity, Apple Weather through HA for the forecast, and our shared calendar for the events.&lt;/p&gt;
&lt;p&gt;The two things actually worth interrupting me over get the same treatment: &lt;strong&gt;the row flips to white-on-black and the knob LEDs light up&lt;/strong&gt;, so I can read it from the doorway before I&#39;m close enough to make out 10px type. Storms go amber. Bad air gets the EPA&#39;s own color scale and outranks the weather, because I can dress for a storm.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/drkpxl/chatbox/main/docs/screen-badair.png&quot; alt=&quot;The same briefing with the top row inverted, reading AQI 168&quot;&gt;&lt;/p&gt;
&lt;p&gt;There&#39;s no color and no second font size worth having on a 1-bit panel, so throwing the row negative is the only emphasis left that still works across a room.&lt;/p&gt;
&lt;p&gt;One thing that surprised me: the sky row originally read &lt;code&gt;rain 57%&lt;/code&gt; and the word &amp;quot;rain&amp;quot; cost 24 pixels of a 124 pixel row. It technically fit, with 1.8px between the two columns, which rendered as &lt;code&gt;90/67rain 57%&lt;/code&gt; and read as one word. Dropping four characters fixed it. On a screen this small the layout is a budget, and you find out by looking, not by doing the arithmetic.&lt;/p&gt;
&lt;h2 id=&quot;the-case-is-code&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/chatbox-a-desk-terminal-with-exactly-one-job/#the-case-is-code&quot;&gt;The case is code&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The enclosure is a 45° wedge, 143 × 82 × 65 mm, and it&#39;s a &lt;a href=&quot;https://github.com/drkpxl/chatbox/blob/main/Hardware/case/chatbox_case.py&quot;&gt;parametric build123d script&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/drkpxl/chatbox/main/Hardware/case-render.png&quot; alt=&quot;STL Render&quot;&gt;&lt;/p&gt;
&lt;p&gt;All four parts print without supports. The image above is a render.&lt;/p&gt;
&lt;h2 id=&quot;build-one-yourself-pr-welcome&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://drkpxl.com/chatbox-a-desk-terminal-with-exactly-one-job/#build-one-yourself-pr-welcome&quot;&gt;Build one yourself, PR welcome!&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Everything&#39;s in the repo: &lt;a href=&quot;https://github.com/drkpxl/chatbox/blob/main/HARDWARE.md&quot;&gt;wiring tables and assembly&lt;/a&gt;, &lt;a href=&quot;https://github.com/drkpxl/chatbox/blob/main/SOFTWARE.md&quot;&gt;install and architecture&lt;/a&gt;, the case source with print-ready STLs, and the diagnostic scripts I used for bring-up. Roughly $40 of parts if you have a printer and a spare Pi.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;→ &lt;a href=&quot;https://github.com/drkpxl/chatbox&quot;&gt;github.com/drkpxl/chatbox&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
</content>
  </entry>
</feed>