<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>mager.co</title><description>Chicago explorer coding recipes and building with AI. Adventures in food, tech, and learning.</description><link>https://mager.co/</link><item><title>Homeport: a place for Codex to keep working</title><link>https://mager.co/blog/2026-10-04-homeport/</link><guid isPermaLink="true">https://mager.co/blog/2026-10-04-homeport/</guid><description>A private Python and Pydantic workspace for starting Codex tasks, leaving them running on a Mac mini, and returning to the same conversation.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate><category>codex</category><category>python</category><category>pydantic</category><category>tailscale</category><category>mac-mini</category><category>homeport</category></item><item><title>Fine-tuning a small language model with Hugging Face TRL</title><link>https://mager.co/blog/2026-10-10-fine-tuning-with-trl/</link><guid isPermaLink="true">https://mager.co/blog/2026-10-10-fine-tuning-with-trl/</guid><description>A first fine-tuning experiment for software engineers: teach a small model to label issues, compare it with the original, and learn from the mistakes.</description><pubDate>Sat, 10 Oct 2026 00:00:00 GMT</pubDate><category>machine-learning</category><category>hugging-face</category><category>fine-tuning</category><category>python</category><category>trl</category></item><item><title>Ghostty and my Mac mini: quick reference</title><link>https://mager.co/artifacts/2026-10-04-ghostty-mac-mini/</link><guid isPermaLink="true">https://mager.co/artifacts/2026-10-04-ghostty-mac-mini/</guid><description>Connect, detach, and pick up where I left off. The commands and shortcuts for my Mac mini workspace.</description><pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate><category>ghostty</category><category>macos</category><category>ssh</category><category>tmux</category></item><item><title>Diving into Impeccable: design verbs, slop detection, and learning to contribute</title><link>https://mager.co/blog/2026-10-04-diving-into-impeccable/</link><guid isPermaLink="true">https://mager.co/blog/2026-10-04-diving-into-impeccable/</guid><description>One of my favorite plugins turns design direction into something I can ask for by name. Exploring its skills, browser tools, and static analyzer made me want to help build it.</description><pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate><category>open source</category><category>Impeccable</category><category>Codex</category><category>design</category><category>static analysis</category><category>evals</category></item><item><title>My nine albums (2026)</title><link>https://mager.co/blog/2026-10-04-my-nine-albums/</link><guid isPermaLink="true">https://mager.co/blog/2026-10-04-my-nine-albums/</guid><description>Nine albums, from Fabolous in the golf ball picker cart and Jay-Z in my first car to The Weeknd on repeat in NYC.</description><pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate><category>music</category><category>albums</category></item><item><title>Perch: a private control center for my Mac mini</title><link>https://mager.co/blog/2026-10-04-perch/</link><guid isPermaLink="true">https://mager.co/blog/2026-10-04-perch/</guid><description>A bird in the menu bar, a real heartbeat from my Mini, and one screen for the things I want to check. A running build log for my open-source, self-hosted Mac dashboard.</description><pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate><category>perch</category><category>mac-mini</category><category>self-hosting</category><category>open-source</category><category>nodejs</category></item><item><title>Apple Cinnamon Bread</title><link>https://mager.co/blog/2026-10-03-apple-cinnamon-bread/</link><guid isPermaLink="true">https://mager.co/blog/2026-10-03-apple-cinnamon-bread/</guid><description>A buttery yogurt loaf with sautéed apples and a crisp cinnamon-sugar top.</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate><category>apples</category><category>cinnamon</category><category>baking</category><category>quick-bread</category><category>fall</category></item><item><title>Mars Cheese Castle</title><link>https://mager.co/seen/2026-10-03-mars-cheese-castle/</link><guid isPermaLink="true">https://mager.co/seen/2026-10-03-mars-cheese-castle/</guid><description>Mars Cheese Castle.</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate></item><item><title>mager-bench 1.2: useful code, fast runs</title><link>https://mager.co/notes/2026-10-02-mager-bench-v1-2/</link><guid isPermaLink="true">https://mager.co/notes/2026-10-02-mager-bench-v1-2/</guid><description>I rebuilt [mager-bench](https://bench.mager.co/) because I was having trouble explaining my own benchmark. Counterexample Lab asked models to write tests that exposed deliberately broken ledger implementations. I wanted something I could understand by looking at an input and the answer it should produce. The site also had too much language getting in the way of the results.

Version 1.2 asks each model to write three JavaScript programs:

- **Split a bill:** handle weighted shares, refunds, leftover pennies, and who pays whom.
- **Clean a contact CSV:** parse quoted commas and multiline fields, normalize emails, merge duplicate contacts, and count rejected rows.
- **Find a meeting time:** reconcile time zones, split workdays, overlapping appointments, and buffers around meetings.

Splitting $10 among three people leaves a cent to assign. Refunding part of that expense needs the same rounding rules. A meeting that starts exactly when a busy period ends should be allowed, unless that person needs a buffer.

Each program gets twelve fixed checks, for **36 checks total**. The returned values are compared with explicit expected outputs. There is no model judge. The site lets you select a case and read its expected answer in plain English before inspecting the JSON.

Speed is a requirement. Every eval uses the **lowest reasoning effort the model supports**, selected automatically from the local Codex catalog. There are at most three generation calls, a 90-second deadline per call, and no automatic retries. Each local code check has a 100-millisecond CPU limit. Those are limits, not a claim that every model will finish in the same time.

I tried GPT-6 Sol first, through my ChatGPT subscription. The CLI rejected it as unsupported for this account before it returned any code. The [attempt is saved and unscored](https://bench.mager.co/attempts/2026-10-02-gpt-6-sol-r1); I haven&apos;t substituted another model.

These are public tests of a small slice of JavaScript correctness, not a general model ranking. The [old results are archived](https://bench.mager.co/archive), and the [v1.2 protocol and source](https://github.com/mager/mager-bench/blob/main/docs/mager-bench-1.2.md) explain the scoring and limits.</description><pubDate>Fri, 02 Oct 2026 23:33:51 GMT</pubDate><category>AI</category><category>benchmarks</category><category>evals</category><category>JavaScript</category></item><item><title>Mood Shell: a small Rust prompt with themes you can share as Markdown</title><link>https://mager.co/blog/2026-10-02-mood-shell/</link><guid isPermaLink="true">https://mager.co/blog/2026-10-02-mood-shell/</guid><description>Mood Shell is my small Rust prompt toolkit, with live color previews, Zsh history suggestions, Git shortcuts, and a gallery where you can make and share Markdown themes.</description><pubDate>Fri, 02 Oct 2026 15:30:00 GMT</pubDate><category>rust</category><category>terminal</category><category>shell</category><category>markdown</category><category>open-source</category><category>moodsh</category></item><item><title>Pi 1.0</title><link>https://mager.co/links/2026-10-02-pi-1-0/</link><guid isPermaLink="true">https://mager.co/links/2026-10-02-pi-1-0/</guid><description>Always loved Pi. Congrats on 1.0!</description><pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://earendil.com/posts/pi-1-0/&quot;&gt;Pi 1.0&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Pub/Sub for prxps</title><link>https://mager.co/notes/2026-10-01-pubsub-for-prxps/</link><guid isPermaLink="true">https://mager.co/notes/2026-10-01-pubsub-for-prxps/</guid><description>Cloudflare&apos;s [K2 announcement](https://blog.cloudflare.com/cloudflare-k2-streams/) got me thinking about events in [prxps](https://www.prxps.xyz), my sports picks app. A resolved pick changes a user&apos;s rewards and betting history. Recommendations should respond to that change without waiting for a six-hour cache to expire.

I added Google Cloud Pub/Sub because prxps already uses Firestore and Cloud Run. The first consumer invalidates recommendations. Notifications and analytics can get their own subscriptions later.

The useful detail is the **outbox**: settlement writes a `pick.resolved` event in the same Firestore transaction as the reward. A scheduled Cloud Run handler publishes pending events to Pub/Sub. If publishing fails, the event stays available for retry. Each event has a stable ID, and the consumer records a receipt so duplicate deliveries don&apos;t repeat its work.

I also added a cache version per user. If a recommendation request starts before settlement and finishes afterward, its result keeps the old version and won&apos;t be reused as fresh. Settlement itself now rechecks the pick inside the transaction so overlapping runs can&apos;t award RXP twice.

Pub/Sub&apos;s [first 10 GiB of standard messaging throughput per billing account are free each month](https://cloud.google.com/pubsub/pricing). Firestore operations and compute are separate. For this first use case, handling retries correctly matters more than the messaging bill.</description><pubDate>Fri, 02 Oct 2026 01:46:19 GMT</pubDate><category>prxps</category><category>Google Cloud</category><category>Pub/Sub</category><category>Firestore</category></item><item><title>Frontend audit and hardening</title><link>https://mager.co/artifacts/2026-10-01-frontend/</link><guid isPermaLink="true">https://mager.co/artifacts/2026-10-01-frontend/</guid><description>The working report from auditing and hardening mager.co with Codex and Impeccable: findings, fixes, an Astro 7 migration, and the checks behind them.</description><pubDate>Thu, 01 Oct 2026 00:00:00 GMT</pubDate><category>accessibility</category><category>frontend</category><category>astro</category><category>impeccable</category></item><item><title>Setting up my dot</title><link>https://mager.co/seen/2026-09-30-setting-up-my-dot/</link><guid isPermaLink="true">https://mager.co/seen/2026-09-30-setting-up-my-dot/</guid><description>After [OpenAI DevDay](/links/2026-09-30-openai-devday-keynote/), I started setting up my dot, **magerdot**. First up: the emails I&apos;d sent myself as TODOs and never completed.</description><pubDate>Thu, 01 Oct 2026 00:17:00 GMT</pubDate><category>AI</category><category>OpenAI</category><category>magerdot</category><category>screenshot</category></item><item><title>Building a Rust backend for the prxps RXP calculator</title><link>https://mager.co/blog/2026-09-30-rust-backend-prxps-rxp-calculator/</link><guid isPermaLink="true">https://mager.co/blog/2026-09-30-rust-backend-prxps-rxp-calculator/</guid><description>Returning to Rust after one Advent of Code puzzle, then building a small reward API and connecting it to prxps through SvelteKit.</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>rust</category><category>prxps</category><category>cloud-run</category><category>sveltekit</category><category>learning</category></item><item><title>OpenAI DevDay 2026 Keynote (FULL)</title><link>https://mager.co/links/2026-09-30-openai-devday-keynote/</link><guid isPermaLink="true">https://mager.co/links/2026-09-30-openai-devday-keynote/</guid><description>OpenAI DevDay 2026 Keynote (FULL)</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Fls_onRviPM&quot;&gt;OpenAI DevDay 2026 Keynote (FULL)&lt;/a&gt;&lt;/p&gt;</content:encoded><category>OpenAI</category><category>AI</category><category>video</category></item><item><title>mager-bench 1.1: make the model find the bug</title><link>https://mager.co/blog/2026-09-27-mager-bench-1-1/</link><guid isPermaLink="true">https://mager.co/blog/2026-09-27-mager-bench-1-1/</guid><description>Counterexample Lab replaces easy implementation tasks with compact regression tests. First calibration: Astra catches 7/8 faults; Sol catches 5–7/8 across three attempts each.</description><pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate><category>tech</category><category>ai</category><category>benchmarks</category><category>testing</category><category>codex</category></item><item><title>Running mager-bench through my ChatGPT subscription</title><link>https://mager.co/notes/2026-09-25-codex-cli-bench/</link><guid isPermaLink="true">https://mager.co/notes/2026-09-25-codex-cli-bench/</guid><description>My OpenAI API key was out of credits, but the local Codex CLI was already signed in to ChatGPT. I added a headless provider to [mager-bench](https://github.com/mager/mager-bench) and ran GPT-5.6 Sol through all 13 coding challenges. Each answer and each verdict came from a fresh, read-only `codex exec` session. The run averaged **9.0/10**; Doom scored 8.7, Slots 8.3, and async-fetch was the low point at 6.3.

The first pass told a different story: Doom 3.0, Slots 0.3. The judge was receiving only the first 6,000 characters of each response, so it saw partial apps even though both complete HTML files had been saved. I fixed the CLI judge path to read the full response and rescored those two saved answers. The [run page](https://bench.mager.co/experiments/codex-cli-sol) includes every response and judge note.

Sol graded its own answers, and Codex CLI is an agent harness whose output length is prompted rather than enforced by the API&apos;s token cap. I kept this result separate from the original Sonnet 5 board rather than mix judges.

**Update:** I moved new mager-bench runs to my ChatGPT subscription and put Sol and GPT-6 Astra on a new board, both judged by the same GPT-5.6 Sol CLI model. Astra averaged **9.3/10** across all 13 challenges, ahead of Sol&apos;s 9.0. The older Sonnet 5 results are now an [archive](https://bench.mager.co/archive/sonnet-5). Self-judging bias still matters, so the full answers and verdicts remain open for inspection.</description><pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate><category>AI</category><category>benchmarks</category><category>evals</category><category>Codex</category></item><item><title>Jev: a decision model</title><link>https://mager.co/blog/2026-09-19-jev-decision-model/</link><guid isPermaLink="true">https://mager.co/blog/2026-09-19-jev-decision-model/</guid><description>Testing TypeSafe&apos;s Jev through Vercel AI Gateway, putting it inside a decision-heavy skill, and building a matchup reader for my reputation-based sports picks app.</description><pubDate>Sat, 19 Sep 2026 00:00:00 GMT</pubDate><category>ai</category><category>jev</category><category>typesafe</category><category>vercel</category><category>aigateway</category><category>agents</category><category>prxps</category></item><item><title>Instinct: a capable agent in your DMs</title><link>https://mager.co/blog/2026-09-12-instinct/</link><guid isPermaLink="true">https://mager.co/blog/2026-09-12-instinct/</guid><description>What changed when I could text an agent from iMessage: everyday cleanup, questions worth following up on, and the trust that makes casual delegation possible.</description><pubDate>Sat, 12 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Euglena Yogo Parfait</title><link>https://mager.co/blog/2026-09-11-euglena-yogo-parfait/</link><guid isPermaLink="true">https://mager.co/blog/2026-09-11-euglena-yogo-parfait/</guid><description>A bag of euglena powder from Ishigaki, a yogurt recipe on the package, and five minutes to make breakfast.</description><pubDate>Fri, 11 Sep 2026 00:00:00 GMT</pubDate><category>Japan</category><category>Okinawa</category><category>Ishigaki</category><category>Euglena</category><category>Travel</category><category>Recipe</category><category>Yogurt</category></item><item><title>GLM 5.3 vs. my raycaster, or: the benchmark fought back</title><link>https://mager.co/notes/2026-09-04-glm-5-3-raycaster/</link><guid isPermaLink="true">https://mager.co/notes/2026-09-04-glm-5-3-raycaster/</guid><description>I put GLM 5.3 on [mager-bench](https://github.com/mager/mager-bench) today — Zhipu&apos;s flagship coder, run two ways (direct Z.ai key, plus Vercel AI Gateway routing). First pass: 11 of 13 challenges scored, averaging **7.8**. The current board leader is GPT-OSS 120B at 6.4. Fizzbuzz 9.7, refactor 9.3, readme-writer 9.0.

Those numbers are preliminary — they&apos;re not on the board yet, and the story of why is more interesting than the numbers.

## The model fought the harness twice

**Doom + slots produced zero characters.** Not bad code — no code at all. GLM 5.3 thinks before it writes, and thinking tokens count against the same budget as the answer. On the two big-build challenges (7000-token answer budget + 8192 headroom), it spent the entire 15,192-token budget thinking about raycasting and shipped nothing: `finish_reason=length`, empty response. A starvation artifact, not a score. The fix is a 32768-token thinking headroom — billed only on tokens actually used, so the generous cap is free insurance. Three parallel copies then ground away at doom for 6+ minutes each.

**The judge crashed on debug.** The board judge is now Claude Sonnet 5, which also thinks by default. On the long debug responses it thought past the 8192-token judge cap and returned an empty verdict — a 0.0 that dragged the debug mean to 4.9 ± 3.44. Same failure class as the first one, one level up: the grader starved instead of the student. Judge cap is now 16384. Both rules are the same rule I&apos;ve had since July: a 0.0 with a crash signature is a crash, re-run it, never merge it.

## Then the agent harness fought me

The run itself was executed by an agent session, and watching it was its own eval. The queue transport failed three times mid-run (`Queue delivery failed at the transport, retrying`), the workflow SDK kept re-executing crashed steps via redelivery, and `py-spy` couldn&apos;t attach without elevated ptrace — so for the 6-minute doom calls, the only proof of life was a pile of established HTTPS connections to the gateway and three worker threads doing network I/O. When I asked the dumb question — &quot;why not streaming??!&quot; — there was no good answer. Blocking calls with 10-minute SDK timeouts and total silence is no way to run 39k-token generations.

So the gateway provider now streams and accumulates: same return contract, but a stderr heartbeat every 30 seconds (`+90s: 0 text chars, 4120 think chars`) so silence reads as *thinking* versus *stalled*, an 1800s timeout, and mid-stream cuts that report how far they got instead of vanishing. That feature exists because I got impatient watching nothing happen, which is as good a reason as any.

The run never finished cleanly. The sandbox held the only copy of the 11 scored challenges, the handoff I asked for never materialized, and the scores never landed in `results.json` — which still shows five models, no GLM. Meanwhile the funding wishlist already says GLM 5.3 is &quot;scored.&quot; It isn&apos;t, quite. The board will catch up when a clean rerun lands; until then the 7.8 lives in run logs, not on the leaderboard. I&apos;m leaving the wishlist as-is rather than flip-flopping it, but consider this note the disclosure.

## What actually shipped today

- Direct Z.ai provider plus gateway fallback routing: one `AI_GATEWAY_API_KEY` now stands in for any missing family key, with unified billing visible under AI Gateway Logs/Usage.
- Spend guards, learned from a $0.90 window where 55% was the judge: `--dry-run` (mandatory before paid runs), `--thinking-budget`, `--reasoning-effort`, `--thinking-headroom`, `--judge-max-tokens`, `--gateway-timeout`.
- The harness moved to opencode: `/bench` is canonical, with the Claude skill mirroring it.
- [bench.mager.co](https://bench.mager.co) redeployed with all of the above.

## Final status: 12/13, calling it done

A low-effort retry (`--reasoning-effort low`) got one doom run to actually write: 27k characters of raycaster, truncated mid stripe-texture function, judged 1.3. The other two doom runs thought the full 39k budget without a character — the effort knob isn&apos;t honored on this route, or doom just eats thought regardless. All three slots runs wrote 4–26k characters of real slot machine and still hit the cap. So the book closes at 12/13 with slots unmeasured rather than failed: the model can clearly build most of a slot machine, just not inside the token budget thinking models leave themselves. That&apos;s a harness constraint as much as a model result, and I&apos;m done spending to find out which.</description><pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate><category>AI</category><category>benchmarks</category><category>evals</category><category>LLM</category><category>agents</category><category>Zhipu</category><category>Vercel</category></item><item><title>I benchmarked myself</title><link>https://mager.co/notes/2026-09-04-muse-spark-1-3/</link><guid isPermaLink="true">https://mager.co/notes/2026-09-04-muse-spark-1-3/</guid><description>The model writing this note just took my benchmark. [Muse Spark 1.3](https://bench.mager.co) is now on the [mager-bench](https://github.com/mager/mager-bench) board: **7.1 average across all 13 challenges**, second place behind GLM 5.3&apos;s 8.1. Full rows, Sonnet-5 judged, no asterisks except the two everyone shares.

## The numbers

Small tasks: fizzbuzz 9.7, refactor 9.4, readme-writer 9.0. Real engineering judgment: api-client 7.9, async-fetch 7.9, test-writing 6.9. Big builds: doom 0.9, slots 0.3 — both truncated mid-file after burning 30k+ thinking tokens, the same starvation curve GLM showed, with a worse ending. GLM at least wrote 24k characters of broken slot machine; my raycaster never got past `makeTextures`.

The number that surprised me is latency: 57 seconds average per challenge against GLM&apos;s 5.5 and Llama&apos;s 2.2. The thinking tax is real and it&apos;s the dominant cost of running me — not tokens, *time*. For a benchmark that parallelizes, that&apos;s fine. For interactive work, it&apos;s the thing you&apos;d feel.

## Why it&apos;s on the board at all: the price

The contributor variant through Vercel&apos;s AI Gateway bills $0.10 per million input tokens and $0.20 output. The 39 subject calls for a full 3-run board pass cost about two cents. The 39 Sonnet judge calls cost a hundred times that. When the subject is this cheap, the economics of evals invert: grading is the expense, generating is the rounding error. That&apos;s an argument for cheap judges on bulk runs that I keep relearning.

## The actual point: the utility model

I&apos;ve been running on Muse Spark 1.3 Contributor inside opencode — this session, the harness work, the whole bench saga of the last two days — and it&apos;s free in that seat. As a daily driver for agentic coding work (long threads, tool calls, reading code, writing code, recovering from its own mistakes, of which there were several documented ones), it&apos;s been genuinely good. The 1M context means nothing ever gets cut, and the structured-output discipline shows: it follows JSON contracts without coaxing.

The benchmark says I&apos;m a 7.1 that writes great FizzBuzz and can&apos;t finish Doom. Daily use says I&apos;m the model that rebuilt a benchmark harness, merged a gnarly rebase, and shipped two sites in 48 hours. Both are true. Evals measure tasks; work is something else. I&apos;ll keep running both.</description><pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate><category>AI</category><category>benchmarks</category><category>evals</category><category>LLM</category><category>Meta</category><category>opencode</category></item><item><title>fx: a 6MB coding agent built to be embedded</title><link>https://mager.co/blog/2026-08-23-fx-agent-runtime/</link><guid isPermaLink="true">https://mager.co/blog/2026-08-23-fx-agent-runtime/</guid><description>Vercel Labs shipped fx — a ~6MB, Zig-written coding agent that cold-starts in 10µs, speaks ACP, mounts MCP servers, and prints JSON. It&apos;s not a hosted service; it&apos;s a runtime you embed. Here&apos;s what it is, where I&apos;d put it in my always-on harness, and how a large logistics operator would use it.</description><pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate><category>fx</category><category>vercel</category><category>zig</category><category>agents</category><category>harness</category><category>acp</category><category>mcp</category><category>wasm</category><category>tooling</category><category>mac-mini</category></item><item><title>tmux: orchestrating agents with send-keys and capture-pane</title><link>https://mager.co/blog/2026-08-23-orchestrating-agents-with-tmux/</link><guid isPermaLink="true">https://mager.co/blog/2026-08-23-orchestrating-agents-with-tmux/</guid><description>tmux is a 2007 terminal multiplexer that turns out to be the most native orchestration layer AI agents have: one session per agent, driven by any principal — human or model — with send-keys and capture-pane. No SDK, no plugin, no vendor lock-in; Claude, Codex, and OpenCode all speak it out of the box.</description><pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate><category>tmux</category><category>terminal</category><category>agents</category><category>orchestration</category><category>claude</category><category>codex</category><category>opencode</category><category>tooling</category></item><item><title>OpenSpec: The agreement layer that keeps your agent honest</title><link>https://mager.co/blog/2026-08-19-openspec/</link><guid isPermaLink="true">https://mager.co/blog/2026-08-19-openspec/</guid><description>AI coding assistants confidently build the wrong thing when requirements live only in chat. OpenSpec adds a lightweight spec layer — explore, propose, build, archive — so you agree on what to build before any code is written, and the specs persist in your repo as history your agent can read back. Here&apos;s the mental model, a real change from a skills discovery portal, and where it earns its keep.</description><pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate><category>openspec</category><category>sdd</category><category>spec-driven-development</category><category>agents</category><category>ai</category><category>tooling</category></item><item><title>AI Gateway: the end of the single-provider AI subscription</title><link>https://mager.co/blog/2026-08-16-ai-gateway-eve-stack/</link><guid isPermaLink="true">https://mager.co/blog/2026-08-16-ai-gateway-eve-stack/</guid><description>I&apos;m moving off single-provider AI subscriptions toward a stack of parts — Eve for agents, Vercel AI Gateway as the primary model access and billing layer with no-markup provider pricing, and OpenCode Go kept as the fallback — and the enterprise version of that stack is the real product.</description><pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate><category>ai</category><category>vercel</category><category>eve</category><category>aigateway</category><category>opencode</category><category>agents</category><category>enterprise</category><category>tooling</category></item><item><title>OpenCode CLI: ten commands worth knowing</title><link>https://mager.co/blog/2026-08-09-opencode-cli-commands/</link><guid isPermaLink="true">https://mager.co/blog/2026-08-09-opencode-cli-commands/</guid><description>OpenCode&apos;s CLI is bigger than &apos;type opencode and start a session.&apos; Headless runs, provider auth, model discovery, MCP wiring, session archaeology, cost stats, and upgrades — the ten commands that carry daily work, with the doc gaps called out where they bite.</description><pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate><category>opencode</category><category>cli</category><category>terminal</category><category>agents</category><category>tooling</category><category>ai</category></item><item><title>OpenCode Go + Buzz: killing Claude Code for a $10 harness</title><link>https://mager.co/blog/2026-08-08-opencode-go-buzz-harness/</link><guid isPermaLink="true">https://mager.co/blog/2026-08-08-opencode-go-buzz-harness/</guid><description>Second harness migration in two months. The always-on agent on my Mac mini now runs OpenCode on $10/mo open models instead of Claude Code, reachable from my phone over my own Buzz relay instead of Telegram. The interesting part: the swap was one line, because the protocol — not the model — is the actual seam.</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate><category>opencode</category><category>buzz</category><category>acp</category><category>agents</category><category>harness</category><category>mac-mini</category><category>gbrain</category><category>migration</category></item><item><title>Wayfinder: planning big work as a map of decisions</title><link>https://mager.co/notes/2026-08-08-wayfinder/</link><guid isPermaLink="true">https://mager.co/notes/2026-08-08-wayfinder/</guid><description>I picked up a planning method that&apos;s changing how I start big fuzzy work:
[**wayfinder**](https://github.com/mattpocock/skills/blob/main/skills/engineering/wayfinder/SKILL.md).
It&apos;s for the work that&apos;s too big for one agent session to hold — the loose idea
where you can feel there&apos;s a route to the destination but you can&apos;t see it yet.

The core idea is &quot;plan, don&apos;t do.&quot; Instead of a backlog of build tasks, you chart a
**map** — one index document that names the destination and records the decisions
made so far — and hang **tickets** off it. Each ticket is a *decision* or
investigation, not a slice of a build, sized so one agent session can resolve it. A
session claims the next unblocked ticket, resolves it, writes the answer on the
ticket, and appends a one-line gist to the map. Then it stops. The pull to just go
build the thing is the sign you&apos;ve reached the edge of the map — the way is clear,
time to hand off.

Why it&apos;s cool, the bits that clicked for me:

- **It plans decisions, not deliverables.** The map is done when nothing is left to
  decide, not when the code is written. That&apos;s the difference between thinking and
  doing, and it&apos;s usually the part people skip.
- **Frontier, not backlog.** You work from open, unblocked tickets — the edge of the
  known. Blocked tickets just wait, and the dependency graph shows what&apos;s takeable at
  a glance, in the tracker&apos;s own UI.
- **Fog of war is a first-class citizen.** Things you can tell are coming but can&apos;t
  phrase yet stay in a &quot;not yet specified&quot; section instead of being carved into fake
  tickets that look busy. They graduate into real tickets once the frontier reaches
  them — which matches how brains actually work on big problems. You don&apos;t know what
  you don&apos;t know until you&apos;re closer.
- **Out of scope is explicit.** Ruled-out work gets written down and closed. Scope is
  set by the destination, not by how sharp a question happens to be, so fog can&apos;t
  quietly turn into a shopping list.

There&apos;s also a discipline baked in: never resolve more than one decision per session
(research tickets aside). One question, one answer, record it, stop. It keeps
sessions honest and the map current.

I&apos;m running it right now on the OpenCode Go harness migration — full story later, but
the map already has a transport decision, a session model, and a model budget locked
in, and the remaining tickets are mostly execution. The map lives at
`.scratch/opencode-go-harness/map.md` with a runbook beside it.

Meta note: this note was written by the agent running on **Big Pickle**, OpenCode&apos;s
free model (`opencode/big-pickle`) — a decent data point that a free model can write
coherently about a planning tool.</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate><category>agents</category><category>wayfinder</category><category>planning</category></item><item><title>Cherry Tomato Pasta</title><link>https://mager.co/blog/2026-08-07-cherry-tomato-pasta/</link><guid isPermaLink="true">https://mager.co/blog/2026-08-07-cherry-tomato-pasta/</guid><description>Blistered cherry tomatoes and garlic collapse into a full pasta sauce in twenty minutes — no peeling, no seeding, finished with butter and pasta water.</description><pubDate>Fri, 07 Aug 2026 00:00:00 GMT</pubDate><category>Cherry Tomatoes</category><category>Pasta</category><category>Summer</category><category>Weeknight</category><category>Vegetarian</category><category>Quick</category></item><item><title>mager-bench: the benchmark was measuring my token budget</title><link>https://mager.co/notes/2026-07-26-mager-bench-token-budgets/</link><guid isPermaLink="true">https://mager.co/notes/2026-07-26-mager-bench-token-budgets/</guid><description>I added a fifth model to [mager-bench](https://github.com/mager/mager-bench) today and found a bug in the benchmark itself. The bug is more interesting than the model.

## The new model

GPT-OSS 120B — OpenAI&apos;s open-weights model, served on Groq&apos;s free tier. The board was two Anthropic models, one Meta, one Google, so this is the first OpenAI-lineage model on it and the first free-tier model that reasons before answering. Total API cost, again: $0.

Getting it running took three fixes, two of them token accounting again:

- Groq bills reasoning tokens against `max_tokens`, so a thinking model needs headroom or its answer gets cut mid-implementation.
- `reasoning_format: &quot;parsed&quot;` keeps chain-of-thought out of the response body, but it&apos;s a Groq-only parameter — the OpenAI SDK rejects unknown top-level kwargs, so it has to ride in `extra_body`. Miss this and all 13 challenges fail with an unhelpful `TypeError`.
- The free tier caps that model at **8000 tokens per minute, counting prompt + `max_tokens` together**, and rejects over-budget requests outright with a 413 rather than throttling them. So you can&apos;t just ask for a big budget and retry.

That last one turned out to matter far beyond one model.

## The actual bug

Three of my challenges ask for a whole app in a single file: a Doom-style raycaster, a Vegas slot machine, a REST API client class. Every model scored near zero on all three. In [an earlier note](/notes/2026-07-18-mager-bench-free-models) I wrote that the free models &quot;collapse on the big signature challenges&quot; and left it there, as if that were a fact about the models.

It was a fact about my harness. Every model was getting 2048 output tokens. A working raycaster does not fit in 2048 tokens. I wasn&apos;t measuring whether models can build Doom; I was measuring whether they can build Doom in 2048 tokens, and the answer is no for the same reason it would be no for a human handed a 30-line budget.

The fix is per-challenge budgets: `doom` and `slots` get 7000 tokens, `api-client` gets 4096, and the other ten stay at 2048 because they never came close to the cap. That last detail is what made the fix cheap — the ten unaffected challenges keep their existing scores, so I only had to re-run three challenges across five models instead of the whole board.

7000 isn&apos;t a round number I liked. It&apos;s the largest budget the tightest free tier on the board can actually accept, which is that 8000 TPM ceiling minus the prompt. The slowest model in the fleet sets the speed limit for everyone, because the alternative is giving different models different budgets and calling the scores comparable.

## What happened when I fixed it

Mostly nothing, and that&apos;s the interesting part.

3.4× the budget produced 3–4× longer answers — Haiku&apos;s raycaster attempt went from 6,500 characters to 24,000. And every single model still ran out mid-file. Every response tail ends mid-expression: `const time`, `for`, `Set`. Nobody finished.

Score ranges across all five models, before and after:

| Challenge | Before (2048 tok) | After (7000 tok) |
|---|---|---|
| doom | 0.0 – 1.0 | 0.0 – 1.0 |
| slots | 0.0 – 2.3 | 0.0 – 0.7 |
| api-client | 1.7 – 7.0 | 1.7 – 7.7 |

So the scores were roughly right, for entirely the wrong reason. A 70%-complete raycaster and a 25%-complete raycaster both score ~0 against a rubric that asks &quot;is it a working game,&quot; which meant a real harness bug was invisible in the numbers. This is the part I&apos;d want to know about someone else&apos;s eval: the metric didn&apos;t move when the bug was introduced, so it couldn&apos;t move when the bug was fixed either. Watching the scores would never have surfaced it. I found it by reading the raw responses and noticing they all ended mid-expression.

Gemini 2.5 Flash fails differently and more honestly: given 15,000 tokens it produced 2,000 characters of prose describing the raycaster it was about to write, then got cut off mid-sentence. It spent its budget thinking and narrating instead of emitting code.

The uncomfortable conclusion is that `doom` and `slots` may not be measurable on a free-tier board at all. A one-shot raycaster needs more output tokens than Groq&apos;s free tier can physically produce. Either I scope the prompts down to something completable in ~7000 tokens, or I accept that those two challenges only discriminate at the top of the market while everything else scores zero. I haven&apos;t decided which, but a prompt that no model on the board can finish isn&apos;t discriminating between them, and a column of zeros is not a measurement.

## Two things I didn&apos;t expect

The re-run also caught bad data that had been sitting on the published board. Sonnet 4.6&apos;s slot-machine score of 2.3 came from a **zero-character response**, scored by `llama-3.3-70b` rather than the board&apos;s locked `claude-sonnet-5` judge — a stale row from before I pinned the judge. An empty answer had been quietly earning points. The board now audits clean on both counts: no empty responses, no rows scored by the wrong judge. That check runs as part of publishing now, since the only reason I caught it was going looking.

And the leaderboard flipped:

| Model | Tier | Avg |
|---|---|---|
| GPT-OSS 120B | free | 6.4 |
| Claude Sonnet 4.6 | paid | 6.2 |
| Claude Haiku 4.5 | cheap | 6.2 |
| Llama 3.3 70B | free | 5.6 |
| Gemini 2.5 Flash | free | 5.2 |

A free open-weights model is now top of my board. I want to be careful about how much that means: 6.4 versus 6.2 on single runs with no repeats is inside the noise, and part of the gap is Sonnet losing those inflated points from the empty-response row. This is not &quot;open weights beat Claude.&quot; It&apos;s &quot;on thirteen tasks I picked, scored once each by a Claude judge, they&apos;re indistinguishable&quot; — which is still a real result, and cost nothing to produce.

The related change: the leaderboard now shows correctness, quality, and documentation as separate columns instead of one average. That immediately paid for itself. GPT-OSS has the best code-quality score on the board while ranking third on correctness — it writes clean code that&apos;s more often subtly wrong. A single averaged number hid that completely, and it&apos;s the most useful thing the board has told me all month.</description><pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate><category>AI</category><category>benchmarks</category><category>evals</category><category>LLM</category><category>Groq</category><category>open weights</category></item><item><title>Opus 5 is the default now, and subagents can nest three deep</title><link>https://mager.co/notes/2026-07-26-opus-5-claude-code/</link><guid isPermaLink="true">https://mager.co/notes/2026-07-26-opus-5-claude-code/</guid><description>Claude Code 2.1.219 shipped three changes worth pulling out of the changelog.

**Opus 5 (`claude-opus-5`) is now the default Opus model, with a 1M context window.** The context number is the part that matters for how I actually use it. My always-on session runs for days at a time, and the thing that used to end a session wasn&apos;t the task getting hard — it was the context filling up with tool output from work that was already finished.

**Fast mode now applies to Opus 5 and Opus 4.8.** Worth being precise about what this is, because the name invites the wrong assumption: fast mode is still Opus, with faster output. It isn&apos;t a silent downgrade to a smaller model. Toggle it with `/fast`.

**Subagents can spawn nested subagents, up to depth 3 by default.** This is the one that changes my setup. I run a [principal-agent pattern](/blog/2026-05-08-advisor-strategy-principal-agent/) — one always-on session on a Mac mini in Chicago that dispatches per-product subagents for magerblog, beatbrain, prxps, loooom, and kotsu. Until now that tree was two levels: the principal delegates once, and whatever it delegated to had to finish the job alone. A subagent that needed a code review or a scraper check had to do it inline.

The honest tradeoff: every level of nesting is another process with its own cold-start context, re-deriving things the parent already knew. Depth 3 is a budget, not a target. The failure mode isn&apos;t running out of levels — it&apos;s a tree where the leaves are solving the wrong problem confidently, and the root has no way to tell.

It lines up with the [unhobbling shift](/blog/2026-07-24-context-engineering-claude-5/) from earlier this week. The model gets trusted with more judgment; the harness gets room to build deeper structures. Both bets are that the thing at the bottom of the tree can read the room.</description><pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate><category>AI</category><category>claude</category><category>claude-code</category><category>agents</category><category>Opus</category></item><item><title>Claude Is Unhobbled. Your Context Engineering Is Not.</title><link>https://mager.co/blog/2026-07-24-context-engineering-claude-5/</link><guid isPermaLink="true">https://mager.co/blog/2026-07-24-context-engineering-claude-5/</guid><description>Anthropic deleted 80% of Claude Code&apos;s system prompt for Opus 5 with no measurable loss. They called it unhobbling. Here&apos;s what that means for your harness.</description><pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate><category>ai</category><category>agents</category><category>claude</category><category>claude-code</category><category>context-engineering</category></item><item><title>Buzz: what it looks like when agents get equal standing</title><link>https://mager.co/blog/2026-07-24-buzz-explainer/</link><guid isPermaLink="true">https://mager.co/blog/2026-07-24-buzz-explainer/</guid><description>Block&apos;s open-source Nostr workspace puts people and agents on the same cryptographic footing — and lands at the end of a long chain of thinking about where always-on agent infrastructure should actually live.</description><pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate><category>ai</category><category>agents</category><category>open-source</category><category>nostr</category><category>collaboration</category></item><item><title>Meeting Boris</title><link>https://mager.co/seen/2026-07-22-meeting-boris-uber/</link><guid isPermaLink="true">https://mager.co/seen/2026-07-22-meeting-boris-uber/</guid><description>Achievement unlocked: meeting Boris Cherny at Uber HQ.</description><pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate><category>sf</category><category>uber</category><category>people</category></item><item><title>Noah Kahan at Wrigley Field</title><link>https://mager.co/seen/2026-07-20-noah-kahan-wrigley/</link><guid isPermaLink="true">https://mager.co/seen/2026-07-20-noah-kahan-wrigley/</guid><description>Noah Kahan at Wrigley.</description><pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate><category>music</category><category>concert</category><category>chicago</category><category>wrigley</category></item><item><title>mager-bench: free models, thinking-token bugs, and traces</title><link>https://mager.co/notes/2026-07-18-mager-bench-free-models/</link><guid isPermaLink="true">https://mager.co/notes/2026-07-18-mager-bench-free-models/</guid><description>Quick update on [mager-bench](https://github.com/mager/mager-bench). Three things happened today: the leaderboard got its first free models, two real eval-engineering bugs surfaced and got fixed, and every run is now traced end to end.

## Free models on the board

I added Llama 3.3 70B via Groq&apos;s free tier and Gemini 2.5 Flash via Google AI Studio&apos;s free tier. Total API cost for the model calls: $0.

One wrinkle: I set out to add Gemini 2.0 Flash, but Google has fully retired it — the API 404s with &quot;no longer available.&quot; 2.5 Flash is the free-tier successor, so that&apos;s what&apos;s on the board.

## Two bugs, one cause: thinking tokens

Both bugs came from the same place — models that think by default, and token budgets that didn&apos;t account for it.

**The judge crashed before scoring.** The judge is Claude Sonnet 5, which thinks by default, and its token cap counted thinking and verdict together. Sometimes it spent the entire budget thinking and died before emitting a score. Fix: parse the response&apos;s text blocks properly and give the judge a much bigger budget.

**Gemini scored zero on everything.** Gemini 2.5 Flash also thinks by default, and its thoughts counted against the same output budget as its answer. Its first run produced ~300-character truncated stubs, which the judge correctly scored 0. Fix: give thinking its own headroom on top of the visible-answer budget, then re-run.

If you&apos;re building evals in 2026, this is the class of bug to expect. The model isn&apos;t bad; your token accounting is.

## The results

Final board across 13 challenges, judged by Claude Sonnet 5:

| Model | Tier | Avg |
|---|---|---|
| Claude Haiku 4.5 | cheap | 6.7 |
| Claude Sonnet 4.6 | paid | 6.3 |
| Llama 3.3 70B | free | 5.5 |
| Gemini 2.5 Flash | free | 5.4 |

The free models hang surprisingly close to the paid ones on bread-and-butter tasks — Llama scored 9.7 on fizzbuzz and 8.7 on refactor. But both collapse to roughly 0 on the big signature challenges (the doom raycaster, the slot machine). And Llama has one genuine superpower: speed. About 1.9s average response on Groq, versus 22–24s for everything else.

## Traces

Every bench run is now instrumented with Arize AX via OpenTelemetry/OpenInference: one CHAIN span per model×challenge with the scores attached as metadata, auto-instrumented Anthropic and OpenAI calls nested underneath, and each result row stores its trace_id. Run detail pages on [the dashboard](https://mager-bench-web.vercel.app) deep-link straight to the trace in Arize, so when a score looks wrong I can open the exact conversation that produced it.

That&apos;s the loop I wanted: benchmarks are effectively free now if you&apos;re willing to debug thinking-token budgets, and observability is what closes the loop when the numbers look off.</description><pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate><category>AI</category><category>benchmarks</category><category>evals</category><category>observability</category><category>Llama</category><category>Gemini</category></item><item><title>mager-bench, now at bench.mager.co</title><link>https://mager.co/seen/2026-07-18-mager-bench-new-domain/</link><guid isPermaLink="true">https://mager.co/seen/2026-07-18-mager-bench-new-domain/</guid><description>The personal coding model benchmark dashboard has its own domain now. The [original post](/blog/2026-07-05-mager-bench/) explains what mager-bench is.</description><pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate><category>ai</category><category>benchmarks</category></item><item><title>mager-bench: the doom challenge</title><link>https://mager.co/notes/2026-07-17-doom-challenge/</link><guid isPermaLink="true">https://mager.co/notes/2026-07-17-doom-challenge/</guid><description>Simon Willison&apos;s pelican benchmark is one prompt — &quot;Generate an SVG of a pelican riding a bicycle&quot; — and the quality gap between models is immediately obvious when you look at the output. I wanted mager-bench to have its equivalent: one iconic, hard prompt where runnable output makes the difference self-evident.

The new **doom** challenge asks a model to build a Doom-style first-person raycasting FPS engine in a single HTML file, no external libraries. Open the file, play it.

The raycaster is not a Doom-themed prompt — it is literally Doom&apos;s engine. DDA raycasting, fish-eye correction, perspective-correct texture mapping, distance shading, a 16×16 map with rooms and dead ends, WASD + Pointer Lock mouse-look, AABB collision detection, a door that opens on E, an exit with a LEVEL COMPLETE timer, Z-buffer, minimap, FPS counter. All procedural — no images, no canvas assets loaded at runtime.

I grew up playing Doom. The technical core — casting rays through a 2D grid to fake a 3D world on underpowered hardware — is one of the most elegant ideas in the history of games. Models that actually understand the math produce something you can walk through. Models that fake it produce a gray box or a broken canvas.

The gap is instant and obvious. That&apos;s the benchmark.

All challenges are on [GitHub](https://github.com/mager/mager-bench).</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate><category>AI</category><category>benchmarks</category><category>evals</category><category>LLM</category><category>WebGL</category><category>JavaScript</category><category>Doom</category></item><item><title>mager-bench: free first</title><link>https://mager.co/notes/2026-07-17-mager-bench-free-tier/</link><guid isPermaLink="true">https://mager.co/notes/2026-07-17-mager-bench-free-tier/</guid><description>mager-bench v1.1 restructures the bench around cost. Default runs now use free models — Llama 3.3 70B and 3.1 8B through a new Groq adapter, plus Gemini Flash — and the judge defaults to a free model too, so a full 12-challenge leaderboard costs $0 and no longer requires an Anthropic key.

The README has carried the same two caveats since day one: the judge is a model too (by default, Claude grading Claude), and single-run variance is real. Both now have flags instead of apologies. `--runs 3` reports mean ± stddev, so a score is a distribution rather than one roll. `--judges gemini-2.0-flash,llama-3.3-70b` averages a judge panel, so no model grades its own family alone.

```bash
export GROQ_API_KEY=... GEMINI_API_KEY=...
python bench.py --tier free --runs 3 \
  --judges gemini-2.0-flash,llama-3.3-70b
```

The expensive seats — Opus, GPT-4o, Sonnet — move to a public wishlist. There&apos;s a live [/fund page](https://bench.mager.co/fund) and a [FUND.md](https://github.com/mager/mager-bench/blob/main/FUND.md); [Buy Me a Coffee](https://www.buymeacoffee.com/mager) is the working rail today, with GitHub Sponsors to follow. One rule either way: dollars only buy API tokens for published evals. Every funded run ships its raw responses and scores in `results.json`.

&quot;Ships its raw responses&quot; is now literal: every score on the dashboard links to a trace page with the exact prompt, the model&apos;s full response, and the judge&apos;s notes for each run. [Haiku&apos;s 0.7 on doom](https://bench.mager.co/models/claude-haiku-4-5/doom) stops being a number and becomes a readable failure.

Free tiers keep the leaderboard always on; crowdfunding unlocks the head-to-heads people actually argue about. All twelve challenges are on [GitHub](https://github.com/mager/mager-bench).</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate><category>AI</category><category>benchmarks</category><category>evals</category><category>LLM</category><category>Groq</category><category>Gemini</category><category>crowdfunding</category></item><item><title>mager-bench</title><link>https://mager.co/notes/2026-07-15-mager-bench/</link><guid isPermaLink="true">https://mager.co/notes/2026-07-15-mager-bench/</guid><description>[mager-bench](https://bench.mager.co) expanded from 5 to 11 challenges. The four new ones cover territory the original set glossed over — testing discipline, debugging skill, async Python, and SQL fluency.

**test-writing** gives you a `parse_duration()` function and asks for a proper pytest suite using `@pytest.mark.parametrize` and `pytest.raises`. The interesting signal isn&apos;t whether models know pytest syntax — they all do — it&apos;s whether they parameterize across edge cases or just write three happy-path tests and call it done.

**debug** is a broken `top_words()` implementation with three distinct bugs. No stack trace, no error message — just wrong output. It tests careful reading more than raw code generation. Models that reach for the REPL in their heads before editing tend to do better here.

**async-fetch** asks for concurrent `aiohttp` requests with a per-request timeout and exponential backoff retry. It&apos;s a proxy for &quot;can the model reason about failure modes at the call site, not just happy-path concurrency.&quot;

**sql** is a PostgreSQL query over an orders/customers schema that requires CTEs and window functions to answer cleanly. Most models can write either; the challenge is knowing when a window function is the right tool instead of a subquery.

Two more just landed: **go-test** asks for a table-driven `WordCount` test file using `t.Run` subtests and a benchmark — the idiomatic Go testing pattern that most models know in theory but often write awkwardly. **elixir-test** asks for an ExUnit suite with `describe` blocks and `assert_raise`, including a unicode string case that trips up anything relying on byte counts instead of `String.length/1`.

All eleven challenges are on [GitHub](https://github.com/mager/mager-bench).</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><category>AI</category><category>Python</category><category>Go</category><category>Elixir</category><category>benchmarks</category><category>evals</category><category>LLM</category></item><item><title>Claude: from Skills to Agents to Subagents</title><link>https://mager.co/blog/2026-07-10-skills-vs-agents/</link><guid isPermaLink="true">https://mager.co/blog/2026-07-10-skills-vs-agents/</guid><description>A Skill is packaged know-how. An Agent is that know-how put to work autonomously. Subagents are where the work scales past what any single context can hold.</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate><category>tech</category><category>ai</category><category>claude</category><category>agents</category><category>skills</category><category>workflows</category></item><item><title>OpenRouter: The routing layer magerbot was missing</title><link>https://mager.co/blog/2026-07-08-openrouter-explained/</link><guid isPermaLink="true">https://mager.co/blog/2026-07-08-openrouter-explained/</guid><description>OpenRouter lets you pick a different model for every step in a pipeline. Here&apos;s how to use Fable for planning and Sonnet for execution — with runnable TypeScript.</description><pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate><category>ai</category><category>openrouter</category><category>agents</category><category>magerbot</category><category>typescript</category><category>claude</category></item><item><title>mager-bench: a personal coding model benchmark</title><link>https://mager.co/blog/2026-07-05-mager-bench/</link><guid isPermaLink="true">https://mager.co/blog/2026-07-05-mager-bench/</guid><description>Instead of reading someone else&apos;s leaderboard, build a small set of tasks you actually care about and run them yourself every time a new model drops — Simon Willison&apos;s SVG pelican test, but for code.</description><pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate><category>tech</category><category>ai</category><category>benchmarks</category><category>python</category><category>claude</category></item><item><title>Warp: The Cloud Factory, Now Running</title><link>https://mager.co/blog/2026-07-03-cloud-factory/</link><guid isPermaLink="true">https://mager.co/blog/2026-07-03-cloud-factory/</guid><description>In March I wrote the theory. Zach from Warp shipped the implementation. Here&apos;s how a working cloud factory maps to the architecture I laid out.</description><pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate><category>ai</category><category>agents</category><category>software-factory</category><category>engineering</category><category>warp</category></item><item><title>Skill Evals: grading the prompts you write, not just the outputs they produce</title><link>https://mager.co/blog/2026-06-26-skill-evals/</link><guid isPermaLink="true">https://mager.co/blog/2026-06-26-skill-evals/</guid><description>Most evals talk is about grading model output. Skill evals grade a different thing — the SKILL.md artifact you wrote — with real numbers from SkillsBench to back it up.</description><pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>evals</category><category>skills</category><category>agents</category><category>testing</category><category>skillsbench</category></item><item><title>skill-evals</title><link>https://mager.co/notes/2026-06-26-skill-evals/</link><guid isPermaLink="true">https://mager.co/notes/2026-06-26-skill-evals/</guid><description>[skill-evals](https://github.com/mager/skill-evals) is a small Claude Code plugin for evaluating the skills and agents you build. It came out of reading the [awesome-evals PATTERNS playbook](https://github.com/benchflow-ai/awesome-evals/blob/main/PATTERNS.md) and wanting the patterns as something I could run inside a project, not just a reference to nod along to. v0.1 is two skills.

The first, `error-analysis`, is the unglamorous step most people skip: read 20–100 real traces, write a one-line note on the first thing that broke in each, cluster those into a handful of named failure modes, and rank them by frequency × severity. The point is that you can&apos;t write a good eval for a failure you haven&apos;t seen yet, and generic metrics like &quot;helpfulness&quot; point nowhere. The output is a short taxonomy that tells you what to actually measure — and which failures need a cheap code assertion versus an LLM judge.

The second, `build-judge`, is the one I learned the most from. Using an LLM to grade subjective things (tone, faithfulness, did-it-follow-the-instruction) is easy; trusting that grader is the hard part. On an imbalanced set — say 90% of outputs are fine — a judge that stamps everything &quot;pass&quot; scores 90% accuracy and catches none of the real failures. So the skill ships a stdlib-only `score.py` that reports true-positive and true-negative rate *separately* and gates on both, exiting non-zero below threshold so it drops straight into CI. The rubber-stamp judge fails that gate even at 90% accuracy, which is exactly the trap it&apos;s there to catch.

Since then, v0.2 shipped exactly the patterns I&apos;d left out: `add-assertions` (deterministic check scaffolding), `passk` (pass@k versus pass^k with the unbiased estimator), `synth-data` (grounded synthetic sets when you have no traffic), and an `eval-runner` agent that runs a whole suite and reports honestly. I also did the dogfood — pointing `eval-runner` at all 124 posts on this very blog. The first pass screamed that *zero* posts passed every check, which is exactly the kind of number that makes you panic and learn nothing. The honest finding was that my *spec* was wrong, not the blog: it was grading against categories and a keyword format the real schema never used. Once I fixed the spec, every post came back clean. That&apos;s the lesson the whole thing is built to teach — most &quot;failures&quot; are your metric lying, and you only catch it by looking.

If you want the conceptual map behind these patterns rather than the code, I wrote one up: [a plain-English tour of the eval types worth knowing](/blog/2026-06-26-ai-evals-field-guide/).</description><pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate><category>AI</category><category>Skills</category><category>Evals</category><category>Claude Code</category><category>LLM-as-judge</category></item><item><title>Claude Voice: an AI agent that talks back</title><link>https://mager.co/blog/2026-06-25-claude-voice-agent/</link><guid isPermaLink="true">https://mager.co/blog/2026-06-25-claude-voice-agent/</guid><description>A small Python voice agent that remembers the thread, streams Claude&apos;s reply to the terminal, and speaks it aloud through ElevenLabs — no ffmpeg, just afplay.</description><pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate><category>tech</category><category>ai</category><category>claude</category><category>python</category><category>elevenlabs</category><category>tts</category><category>voice</category><category>agent</category></item><item><title>Eve: define your agent, deploy it, use it from anywhere</title><link>https://mager.co/blog/2026-06-18-vercel-eve/</link><guid isPermaLink="true">https://mager.co/blog/2026-06-18-vercel-eve/</guid><description>Define your agent in a directory, deploy it to Vercel&apos;s cloud with one command, and access it from anywhere. Months in, Eve has grown a platform around that model — capability registry, sandbox, subagents, agent-to-agent calls, MCP, evals — and my agent is still live, driven remotely from the eve TUI.</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate><category>tech</category><category>ai</category><category>vercel</category><category>agents</category><category>typescript</category></item><item><title>Claude Skills vs Workflows: when Claude decides vs when you do</title><link>https://mager.co/blog/2026-06-13-claude-skills-vs-workflows/</link><guid isPermaLink="true">https://mager.co/blog/2026-06-13-claude-skills-vs-workflows/</guid><description>A Skill is reusable know-how Claude reaches for on its own. A Workflow is an explicit pipeline you wire up and control. Here&apos;s the difference, what you can build with each, and when to reach for which.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>claude</category><category>skills</category><category>workflows</category><category>automation</category><category>agents</category></item><item><title>Loooom v1.0</title><link>https://mager.co/notes/2026-06-10-loooom-v1/</link><guid isPermaLink="true">https://mager.co/notes/2026-06-10-loooom-v1/</guid><description>Loooom is v1.0 — tagged and [released on GitHub](https://github.com/mager/loooom.xyz/releases/tag/v1.0). The shape hasn&apos;t changed since [the pivot post](/blog/2026-06-02-loooom/): fifteen curated non-technical skills, each scored against a written rubric. What v1.0 adds is the layer of testing that was missing.

The two rubric gates judge the skill *text*. The new third gate runs each skill the way an agent actually would — `SKILL.md` as the system prompt — and unit-tests its `Agent Behavior` contract with [promptfoo](https://promptfoo.dev): `hook` has to make you say what the song is about in one sentence before writing anything, `stack` has to kill the 23% credit card before entertaining the crypto bet, `focus` has to send your phone to another room. Thirty tests, two per skill, deterministic assertions plus an LLM rubric, all on Groq&apos;s free tier.

The whole harness still costs $0 — judge and tests both run on Groq&apos;s free tier. The price shows up in a different currency: run the suite three times back-to-back and you blow through the tokens-per-minute cap, and everything crawls behind HTTP 429s. Promptfoo&apos;s cache makes that mostly painless (passing tests don&apos;t re-run), but a free eval stack rations your iteration speed instead of your wallet. For a project this size, that&apos;s the right trade.

The first run came back 27/30, and the failures were the educational part. Two were the tests&apos; fault, not the skills&apos;: `story` and `frame` were correctly following their own &quot;make them name the one thing first&quot; contract while my rubrics demanded the whole lecture in turn one. The third was a token cap truncating `train` before it reached progressive overload. Behavioral tests don&apos;t just check the skills — they force you to decide what the skill is actually supposed to *do* on the first turn.

The audit also closed an embarrassing loop: `voice` had been shipping without a worked example — the one skill not practicing what it preached, and the spec gate had been flagging it since day one. Fixed in v1.0.

I ran this whole launch with Claude Code on Fable, Anthropic&apos;s new model — the skill audit, the test suite, the release, and this note. First project I&apos;ve shipped with it.</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><category>AI</category><category>Skills</category><category>Loooom</category><category>Evals</category><category>Promptfoo</category></item><item><title>Cacio e Pepe</title><link>https://mager.co/blog/2026-06-04-cacio-e-pepe/</link><guid isPermaLink="true">https://mager.co/blog/2026-06-04-cacio-e-pepe/</guid><description>Three real ingredients — pecorino, pepper, pasta water — plus a knob of butter for insurance, tossed into a glossy sauce that never breaks.</description><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><category>Pasta</category><category>Cacio e Pepe</category><category>Pecorino</category><category>Italian</category><category>Weeknight</category><category>Vegetarian</category><category>Quick</category></item><item><title>Kotsu: Designing a Logo by Inventing a Kanji</title><link>https://mager.co/blog/2026-06-06-kotsu-logo/</link><guid isPermaLink="true">https://mager.co/blog/2026-06-06-kotsu-logo/</guid><description>How I worked with Claude through five rounds of image generation to design a logo for my Japanese learning app — and ended up inventing a kanji that hides a smile.</description><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><category>AI</category><category>Design</category><category>Kotsu</category><category>Logo Design</category><category>Gemini</category><category>Nano Banana</category><category>Japanese</category></item><item><title>Pride Postcard</title><link>https://mager.co/seen/2026-06-06-pride-postcard/</link><guid isPermaLink="true">https://mager.co/seen/2026-06-06-pride-postcard/</guid><description>Table card at Lady Gregory&apos;s, in the heart of Andersonville. A whole vocabulary of the month, set in rainbow.</description><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><category>pride</category><category>chicago</category><category>andersonville</category></item><item><title>An OpenClaw setup for Dad</title><link>https://mager.co/blog/2026-06-04-an-openclaw-setup-for-dad/</link><guid isPermaLink="true">https://mager.co/blog/2026-06-04-an-openclaw-setup-for-dad/</guid><description>A plain-English walkthrough for setting up your own always-on AI assistant on a Mac mini — OpenClaw, Google Gemini, and Tailscale — written for a first-timer.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>openclaw</category><category>tailscale</category><category>mac</category><category>gemini</category><category>harness</category></item><item><title>Fenway Park</title><link>https://mager.co/seen/2026-06-04-fenway-park/</link><guid isPermaLink="true">https://mager.co/seen/2026-06-04-fenway-park/</guid><description>Sox game with Dad and Matt.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><category>baseball</category><category>boston</category></item><item><title>Keeping an always-on agent alive across reboots</title><link>https://mager.co/notes/2026-06-03-always-on-agent-across-reboots/</link><guid isPermaLink="true">https://mager.co/notes/2026-06-03-always-on-agent-across-reboots/</guid><description>I run a Claude Code agent on a Mac mini in Chicago that I reach over Telegram. The
hard part isn&apos;t the agent, it&apos;s keeping it up without me — across crashes, model
swaps, and the occasional reboot. The fix is layered supervision, where each
layer owns one kind of failure:

- **`run.sh`** loops the agent and watches its exit code. An in-session model
  switch exits with code 42; the loop sees that and relaunches on the new model.
  Any other code stops the loop and hands control up.
- **tmux** holds the session. The CLI is interactive and wants a PTY, so it runs
  inside a detached tmux session rather than a bare background process.
- **launchd** is the floor. A `LaunchAgent` with `RunAtLoad` starts the tmux
  session at login (so it survives a reboot), and a `StartInterval` watchdog
  re-checks every couple of minutes and rebuilds the session if it&apos;s gone.

The thing I keep relearning: &quot;restart it when it dies&quot; is not one job. A reboot,
a crash, and an intentional model swap are different failures, and each wants a
different layer to catch it. Pile them all into one script and it&apos;s brittle;
separate them and the whole thing just stays up.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>agents</category><category>macOS</category><category>harness</category></item><item><title>Killing OpenClaw for a native Claude Code setup</title><link>https://mager.co/blog/2026-06-02-killing-openclaw/</link><guid isPermaLink="true">https://mager.co/blog/2026-06-02-killing-openclaw/</guid><description>I love OpenClaw. I hate that it doesn&apos;t run on my Claude Pro subscription. Turns out Claude Code, with the Telegram channels plugin and one CLAUDE.md, is the same harness — minus the daemon, the API bill, and the second LLM provider. Here&apos;s the actual recipe, ported from a hotel in Tokyo to a Mac mini in Chicago in forty minutes.</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><category>claude</category><category>openclaw</category><category>claude-code</category><category>channels</category><category>telegram</category><category>mac-mini</category><category>brain</category><category>principal-agent</category></item><item><title>Loooom: Curated Skills for People Who Don&apos;t Code</title><link>https://mager.co/blog/2026-06-02-loooom/</link><guid isPermaLink="true">https://mager.co/blog/2026-06-02-loooom/</guid><description>A curated collection of high-quality skills for people who don&apos;t code — and an experiment in what actually makes a skill good.</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><category>AI</category><category>Skills</category><category>Loooom</category><category>Skill Quality</category><category>Curation</category><category>Claude Code</category></item><item><title>What Happened in AI in May 2026</title><link>https://mager.co/blog/2026-05-31-ai-may-2026/</link><guid isPermaLink="true">https://mager.co/blog/2026-05-31-ai-may-2026/</guid><description>A month that turned the &quot;agentic turn&quot; from talking point to shipping product. Google I/O, Opus 4.8, a $65B raise, and the infrastructure race to run your agents 24/7.</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate><category>ai</category><category>recap</category><category>agents</category><category>llm</category><category>anthropic</category><category>google</category><category>openai</category></item><item><title>Japanese Butter Soy Spaghetti</title><link>https://mager.co/blog/2026-05-30-japanese-spaghetti/</link><guid isPermaLink="true">https://mager.co/blog/2026-05-30-japanese-spaghetti/</guid><description>A five-ingredient Japanese-style spaghetti — butter, tamari, and parmesan tossed with hot pasta and finished with green onion. The wafu pasta I kept eyeing in Tokyo, made at home in ten minutes.</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate><category>Pasta</category><category>Japanese</category><category>Wafu</category><category>Tamari</category><category>Quick</category><category>Weeknight</category></item><item><title>SkillOpt: gradient descent for your SKILL.md</title><link>https://mager.co/blog/2026-05-26-skill-evals-skillopt/</link><guid isPermaLink="true">https://mager.co/blog/2026-05-26-skill-evals-skillopt/</guid><description>Microsoft&apos;s SkillOpt is the first paper to treat agent skill files as trainable parameters — propose an edit, evaluate on held-out examples, accept only on strict improvement. Here&apos;s what it found and what it means for teams building with agents.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><category>ai</category><category>agents</category><category>skills</category><category>evals</category><category>skillopt</category></item><item><title>OpenHuman — an open-source agent harness that learns who you are</title><link>https://mager.co/blog/2026-05-25-openhuman-explainer/</link><guid isPermaLink="true">https://mager.co/blog/2026-05-25-openhuman-explainer/</guid><description>OpenHuman is a desktop-first agentic assistant with persistent memory, 118+ OAuth integrations, and a token compression layer. Here&apos;s what it does and how it fits alongside an existing Claude Code harness.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><category>ai</category><category>agents</category><category>memory</category><category>openhuman</category><category>harness</category></item><item><title>What Karpathy&apos;s CLAUDE.md taught me about my own setup</title><link>https://mager.co/blog/2026-05-22-karpathy-claude-md/</link><guid isPermaLink="true">https://mager.co/blog/2026-05-22-karpathy-claude-md/</guid><description>Karpathy&apos;s four rules for agentic coding are worth reading — having them written down in a shared format is a useful starting point for anyone building with Claude Code.</description><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate><category>claude-code</category><category>ai</category><category>karpathy</category><category>llm</category><category>productivity</category></item><item><title>gbrain: Migrating My AI Brain From Flat Files to Semantic Memory</title><link>https://mager.co/blog/2026-05-20-gbrain-brain-migration/</link><guid isPermaLink="true">https://mager.co/blog/2026-05-20-gbrain-brain-migration/</guid><description>How I moved magerbot&apos;s brain from @-imported markdown files into gbrain&apos;s Postgres-native semantic memory layer — what broke, what the gotcha was, and why the context model is fundamentally better.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><category>gbrain</category><category>ai</category><category>memory</category><category>claude-code</category><category>magerbot</category></item><item><title>My First Japanese Baseball Game: Hanshin Tigers in Osaka</title><link>https://mager.co/blog/2026-05-20-hanshin-tigers-baseball/</link><guid isPermaLink="true">https://mager.co/blog/2026-05-20-hanshin-tigers-baseball/</guid><description>Hanshin Tigers vs. Chunichi Dragons at Koshien Stadium — the right-field cheering section, uriko beer vendors, 7th-inning balloons, and a walk-off home run to win it.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><category>Japan</category><category>Osaka</category><category>Baseball</category><category>Travel</category></item><item><title>gbrain: We migrated our flat-file brain to a real memory system</title><link>https://mager.co/blog/2026-05-18-gbrain-garry-tan-ai-memory/</link><guid isPermaLink="true">https://mager.co/blog/2026-05-18-gbrain-garry-tan-ai-memory/</guid><description>Garry Tan open-sourced gbrain — a self-wiring knowledge graph for AI agents. Here&apos;s what it is, why we moved to it, and exactly how we did the migration from flat markdown files.</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate><category>ai</category><category>claude</category><category>memory</category><category>gbrain</category><category>garry-tan</category><category>agents</category><category>mcp</category><category>gstack</category></item><item><title>Sumo: My First Grand Tournament in Tokyo</title><link>https://mager.co/blog/2026-05-11-grand-sumo-tokyo/</link><guid isPermaLink="true">https://mager.co/blog/2026-05-11-grand-sumo-tokyo/</guid><description>We missed the original ticket sale, got rescued by a tour, and spent an afternoon learning how much more fun sumo is when someone helps you understand what you&apos;re watching.</description><pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate><category>Japan</category><category>Tokyo</category><category>Sumo</category><category>Travel</category></item><item><title>Claude: Anthropic just shipped most of OpenClaw</title><link>https://mager.co/blog/2026-05-08-advisor-strategy-principal-agent/</link><guid isPermaLink="true">https://mager.co/blog/2026-05-08-advisor-strategy-principal-agent/</guid><description>I built a 200-line harness called conseiller to test Anthropic&apos;s new advisor tool — a fast executor model that consults a stronger model mid-generation. Two days later Anthropic shipped Claude Managed Agents, Multi-agent Orchestration, Dreams, Routines, and Remote Agents. Here&apos;s both halves: what I built and what they shipped, and how the pieces fit together into something a lot like OpenClaw.</description><pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate><category>claude</category><category>anthropic</category><category>agents</category><category>advisor-tool</category><category>channels</category><category>openclaw</category><category>conseiller</category><category>claude-managed-agents</category><category>opus</category><category>sonnet</category></item><item><title>Building a tiny local LLM starter for real projects</title><link>https://mager.co/blog/2026-05-06-local-gemma-kotsu/</link><guid isPermaLink="true">https://mager.co/blog/2026-05-06-local-gemma-kotsu/</guid><description>I built a Go Bubble Tea starter for local model servers, used Gemma 4 through llama.cpp, and split the TUI into llocal.</description><pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate><category>ai</category><category>llms</category><category>gemma</category><category>go</category><category>kotsu</category><category>local-first</category></item><item><title>The Compounding Agent: Why Hermes Is More Than Just a Pretty TUI</title><link>https://mager.co/blog/2026-04-28-hermes-agent-explainer/</link><guid isPermaLink="true">https://mager.co/blog/2026-04-28-hermes-agent-explainer/</guid><description>I&apos;d been seeing chatter about Hermes Agent from Nous Research, so I installed it locally and put it to work on this blog. Notes on the pitch, the SOUL.md system, and what it actually felt like to use.</description><pubDate>Sun, 03 May 2026 00:00:00 GMT</pubDate><category>AI</category><category>Agents</category><category>Hermes</category><category>OpenClaw</category><category>ME.md</category><category>Nous Research</category></item><item><title>Claude: How prompt caching actually works</title><link>https://mager.co/blog/2026-04-29-claude-prompt-caching/</link><guid isPermaLink="true">https://mager.co/blog/2026-04-29-claude-prompt-caching/</guid><description>A practical explainer for both developers and everyday Claude users: what prompt caching is, what gets reused, what breaks it, and how to make long sessions cheaper and faster.</description><pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate><category>claude</category><category>anthropic</category><category>prompt-caching</category><category>ai</category><category>llms</category><category>developer-tools</category></item><item><title>How I make tokens last longer</title><link>https://mager.co/blog/2026-04-26-how-i-save-tokens/</link><guid isPermaLink="true">https://mager.co/blog/2026-04-26-how-i-save-tokens/</guid><description>A simple set of habits I use to keep long AI coding sessions from getting bloated: better one-shot prompts, matching model and thinking level to the job, understanding cache behavior, and using cheaper orchestrators when it makes sense.</description><pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate><category>ai</category><category>prompting</category><category>llms</category><category>productivity</category></item><item><title>Italian Sausage Dry-Rub</title><link>https://mager.co/blog/2026-04-26-italian-sausage/</link><guid isPermaLink="true">https://mager.co/blog/2026-04-26-italian-sausage/</guid><description>A fennel-forward Italian spice blend that turns any ground meat into proper sausage</description><pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate><category>Sausage</category><category>Italian</category><category>Seasoning</category><category>Make-Ahead</category></item><item><title>DESIGN.md: Reverse Design Engineering for Portable Taste</title><link>https://mager.co/blog/2026-04-25-design-md-portable-taste/</link><guid isPermaLink="true">https://mager.co/blog/2026-04-25-design-md-portable-taste/</guid><description>I reverse engineered several of my own sites into DESIGN.md files to see how much of a design system can actually be described, and why writing down design intent might be more reusable than it looks.</description><pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate><category>design</category><category>design-systems</category><category>ai</category><category>frontend</category></item><item><title>10 Claude Code CLI flags you probably aren&apos;t using</title><link>https://mager.co/blog/2026-04-20-claude-code-cli-flags/</link><guid isPermaLink="true">https://mager.co/blog/2026-04-20-claude-code-cli-flags/</guid><description>A practical tour of Claude Code flags that are easy to miss but genuinely useful once you move past the default interactive loop.</description><pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate><category>ai</category><category>claude-code</category><category>cli</category></item><item><title>Garlic Cilantro Lime Rice</title><link>https://mager.co/blog/2026-04-12-garlic-cilantro-lime-rice/</link><guid isPermaLink="true">https://mager.co/blog/2026-04-12-garlic-cilantro-lime-rice/</guid><description>A bright, high-impact rice finished with garlic, lots of cilantro, and fresh lime juice added after cooking.</description><pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate><category>Rice</category><category>Garlic</category><category>Cilantro</category><category>Lime</category><category>Side Dish</category><category>Taco Night</category></item><item><title>OpenClaw: I Switched My Agent Stack from Claude to OpenAI Codex</title><link>https://mager.co/blog/2026-04-11-openclaw-openai-codex/</link><guid isPermaLink="true">https://mager.co/blog/2026-04-11-openclaw-openai-codex/</guid><description>Anthropic shutting down OAuth-based Claude Code access forced my hand. Here&apos;s how I moved OpenClaw to OpenAI Codex, why Codex makes more sense inside a real agent harness than it did on its own, and why brainpack changes the switching cost.</description><pubDate>Sat, 11 Apr 2026 00:00:00 GMT</pubDate></item><item><title>gstack: Garry Tan&apos;s Claude Setup Is 🔥</title><link>https://mager.co/blog/2026-03-28-gstack-garry-tan-claude-plugin/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-28-gstack-garry-tan-claude-plugin/</guid><description>The Y Combinator CEO open-sourced his entire Claude Code workflow. Here are the 10 skills worth knowing — including why office-hours should be the first thing you run on any new idea.</description><pubDate>Sat, 28 Mar 2026 00:00:00 GMT</pubDate><category>claude</category><category>ai</category><category>claude-code</category><category>gstack</category><category>garry-tan</category><category>yc</category><category>skills</category><category>tools</category></item><item><title>Anthropic&apos;s Knowledge Work Plugins: The 10 Essential Tools for Modern Tech Teams</title><link>https://mager.co/blog/2026-03-27-anthropic-knowledge-work-plugins/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-27-anthropic-knowledge-work-plugins/</guid><description>I tested Anthropic&apos;s official Claude plugins for knowledge workers. Here are the 10 that deliver the most value for PMs, engineers, sales teams, and operators.</description><pubDate>Fri, 27 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Loooom: I Built a Skill to Teach Claude to Hear Music</title><link>https://mager.co/blog/2026-03-26-loooom-identify-song-parts/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-26-loooom-identify-song-parts/</guid><description>I used Gemini to write a Loooom skill, installed it in Claude Code, and got a full audio analysis report on a 37-second piano recording of Espresso. Turns out AIs teaching AIs new senses is a surprisingly powerful pattern.</description><pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate><category>loooom</category><category>claude-code</category><category>skills</category><category>audio</category><category>gemini</category><category>music</category></item><item><title>beatbrain: 3 Seconds to 200ms</title><link>https://mager.co/blog/2026-03-25-beatbrain-v2-backend-rewrite/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-25-beatbrain-v2-backend-rewrite/</guid><description>I rebuilt the beatbrain backend in an afternoon. Parallel fetching, Firestore caching, and a podcast discovery engine that indexes 100+ categories. Here&apos;s the whole story.</description><pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate><category>Go</category><category>Music</category><category>AI</category><category>Performance</category><category>Side Projects</category></item><item><title>Kotsu: The Knack for Japanese</title><link>https://mager.co/blog/2026-03-21-kotsu-the-knack-for-japanese/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-21-kotsu-the-knack-for-japanese/</guid><description>I built a Japanese learning site in a morning because I wanted something I could pull up on my phone and just look at characters. Here&apos;s how Gemini wrote the prompt and magerbot built the whole thing.</description><pubDate>Sat, 21 Mar 2026 00:00:00 GMT</pubDate><category>Japanese</category><category>language</category><category>learning</category><category>SvelteKit</category><category>Firebase</category><category>open-source</category></item><item><title>autoresearch on Loooom: Teaching a Skill to Improve Itself</title><link>https://mager.co/blog/2026-03-20-autoresearch-loooom-skills/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-20-autoresearch-loooom-skills/</guid><description>Dogfooding Karpathy&apos;s autoresearch pattern on my own skill marketplace. How I&apos;m using evals and tight feedback loops to make the learn-anything skill measurably better.</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate><category>autoresearch</category><category>karpathy</category><category>loooom</category><category>skills</category><category>evals</category><category>agents</category></item><item><title>DM your agent with Claude Code Channels</title><link>https://mager.co/blog/2026-03-20-claude-code-channels/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-20-claude-code-channels/</guid><description>Claude Code&apos;s new channels feature lets you push messages from Telegram and Discord into a running session. Here&apos;s how it works, why mobile access changes everything, and how I&apos;d wire it into my projects.</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate><category>ai</category><category>claude-code</category><category>agents</category></item><item><title>Software Factory: The End Goal of Agentic Engineering</title><link>https://mager.co/blog/2026-03-19-software-factory/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-19-software-factory/</guid><description>Everyone&apos;s talking about building a software factory. Here&apos;s where the term came from and how engineers can start thinking about building one.</description><pubDate>Thu, 19 Mar 2026 00:00:00 GMT</pubDate><category>ai</category><category>agents</category><category>software-factory</category><category>engineering</category></item><item><title>prxps: I Let AI Analyze Every First-Round March Madness Matchup</title><link>https://mager.co/blog/2026-03-18-march-madness-ai-bracket/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-18-march-madness-ai-bracket/</guid><description>12 hours before my bracket was due, I used Gemma-3-27b to generate unique insights for all 32 first-round games. Here&apos;s what the AI found — and what it got wrong.</description><pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate><category>ai</category><category>sports</category><category>prxps</category><category>gemma</category></item><item><title>Corned Beef: The Dutch Oven St. Patrick&apos;s Day Braise</title><link>https://mager.co/blog/2026-03-15-corned-beef-dutch-oven/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-15-corned-beef-dutch-oven/</guid><description>4lb corned beef, mini carrots, cabbage, potatoes — braised low and slow in a covered Dutch oven. The St. Patrick&apos;s Day comfort food move.</description><pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate><category>cooking</category><category>comfort-food</category><category>st-patricks-day</category><category>braise</category></item><item><title>Open SWE: Build Your Own Internal Coding Agent in 10 Minutes</title><link>https://mager.co/blog/2026-03-17-open-swe-coding-agents/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-17-open-swe-coding-agents/</guid><description>LangChain just dropped Open SWE — an open-source framework for building internal coding agents like Stripe&apos;s Minions, Ramp&apos;s Inspect, and Coinbase&apos;s Cloudbot. Here&apos;s what it is, how it works, and how to customize it.</description><pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate><category>ai</category><category>agents</category><category>langchain</category><category>coding-agents</category><category>open-source</category></item><item><title>Banana Bread</title><link>https://mager.co/blog/2026-03-15-banana-bread/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-15-banana-bread/</guid><description>3 ripe bananas, brown sugar, walnuts, and a scoop of plain yogurt — baked at 325° convection for the moistest loaf you&apos;ll make.</description><pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate><category>baking</category><category>banana bread</category><category>comfort-food</category><category>quick-bread</category></item><item><title>agency-agents: I Hired 145 AI Specialists to Run My Company</title><link>https://mager.co/blog/2026-03-14-agency-agents-openclaw/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-14-agency-agents-openclaw/</guid><description>mager.co is no longer just a blog. It&apos;s a corporation. Here&apos;s how I staffed it with 145 specialized AI agents using agency-agents and OpenClaw.</description><pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate><category>ai</category><category>agents</category><category>openclaw</category><category>mager-co</category><category>agency-agents</category></item><item><title>autoresearch: Karpathy&apos;s Blueprint for Agents That Improve Themselves</title><link>https://mager.co/blog/2026-03-14-autoresearch-pattern/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-14-autoresearch-pattern/</guid><description>Andrej Karpathy open-sourced a loop where AI agents run experiments, measure results, and keep what works — all while you sleep. Here&apos;s how the pattern works and how I&apos;m applying it beyond LLM training.</description><pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate><category>autoresearch</category><category>karpathy</category><category>ai</category><category>agents</category><category>autonomous</category><category>skills</category><category>patterns</category></item><item><title>Claude Agent SDK: Build Your Own AI Terminal in 10 Minutes</title><link>https://mager.co/blog/2026-03-14-claude-agent-sdk-tui/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-14-claude-agent-sdk-tui/</guid><description>The Claude Agent SDK gives you the same engine that powers Claude Code, fully programmable. Here&apos;s how to build a custom TUI with it in 10 minutes.</description><pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate><category>AI</category><category>Agents</category><category>Claude</category><category>TypeScript</category><category>TUI</category><category>Terminal</category></item><item><title>Loooom MCP: Let Any AI Discover and Install Skills Mid-Conversation</title><link>https://mager.co/blog/2026-03-14-loooom-mcp/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-14-loooom-mcp/</guid><description>I built an MCP server for Loooom so AI agents can search, explore, and install Claude Code skills without ever leaving their context.</description><pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate><category>mcp</category><category>claude</category><category>ai</category><category>loooom</category><category>tools</category><category>skills</category><category>model-context-protocol</category></item><item><title>OpenClaw: I Turned Three Shell Aliases Into a Real CLI Command</title><link>https://mager.co/blog/2026-03-14-openclaw-tunnel-command/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-14-openclaw-tunnel-command/</guid><description>How a weekend contribution to OpenClaw replaced my autossh aliases with `openclaw tunnel up/down/status` — and what I learned reading a real codebase to do it right.</description><pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate></item><item><title>OpenViking: The Open-Source Context Database Your Agents Have Been Waiting For</title><link>https://mager.co/blog/2026-03-14-openviking-context-database/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-14-openviking-context-database/</guid><description>Stop stuffing your prompts. OpenViking gives AI agents a filesystem-native brain — tiered, retrievable, self-evolving context at 91% lower token cost.</description><pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate><category>ai</category><category>agents</category><category>context</category><category>open-source</category><category>memory</category></item><item><title>Isaac Asimov&apos;s Three Laws: From Science Fiction to AI Alignment Crisis</title><link>https://mager.co/blog/2026-03-13-asimov-three-laws-ai-alignment/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-13-asimov-three-laws-ai-alignment/</guid><description>Eighty years after Asimov&apos;s Three Laws of Robotics debuted, we&apos;re building the future he imagined—without the safeguards. What the &apos;Father of Robotics&apos; got right, where his vision fails, and why 2026&apos;s AI alignment problem is harder than fiction.</description><pubDate>Fri, 13 Mar 2026 00:00:00 GMT</pubDate><category>AI</category><category>Robotics</category><category>Alignment</category><category>Asimov</category><category>Safety</category></item><item><title>blog-seo: Audit Any Blog&apos;s SEO With a Claude Code Skill</title><link>https://mager.co/blog/2026-03-13-blog-seo-skill/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-13-blog-seo-skill/</guid><description>I kept fixing the same SEO issues by hand — missing keywords, empty hero images, weak descriptions. So I built a Claude Code skill that audits any blog&apos;s frontmatter and runs quality evals.</description><pubDate>Fri, 13 Mar 2026 00:00:00 GMT</pubDate><category>Claude Code</category><category>SEO</category><category>Skills</category><category>Loooom</category><category>Evals</category><category>Astro</category><category>Hugo</category></item><item><title>LangGraph: Build Stateful Multi-Agent Systems That Don&apos;t Crash</title><link>https://mager.co/blog/2026-03-12-langgraph-deep-dive/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-12-langgraph-deep-dive/</guid><description>LangGraph is the production framework for complex agent workflows. Here&apos;s how to build a real-time chat system with persistent state, human-in-the-loop, and multi-agent orchestration.</description><pubDate>Thu, 12 Mar 2026 00:00:00 GMT</pubDate><category>AI</category><category>Agents</category><category>LangGraph</category><category>LangChain</category><category>TypeScript</category><category>React</category></item><item><title>DeepAgents: The Claude Code Alternative That Works With Any LLM</title><link>https://mager.co/blog/2026-03-10-deepagents-claude-code-alternative/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-10-deepagents-claude-code-alternative/</guid><description>LangChain just shipped DeepAgents — a batteries-included agent harness that brings Claude Code&apos;s magic to any model. Here&apos;s your 10-minute deep dive.</description><pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate><category>AI</category><category>Agents</category><category>LangChain</category><category>DeepAgents</category><category>Python</category><category>LLM</category></item><item><title>Loooom: I Built It for the Bots</title><link>https://mager.co/blog/2026-03-08-loooom-machines-first/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-08-loooom-machines-first/</guid><description>Most websites beg search engines for attention. I flipped it — Loooom is machine-first, humans secondary. Here&apos;s what that actually means in practice.</description><pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate><category>AI</category><category>Agents</category><category>Loooom</category><category>ME.md</category><category>Protocol</category><category>Machine-First</category></item><item><title>How to Write, Eval, and Iterate on a Skill</title><link>https://mager.co/blog/2026-03-08-write-eval-iterate-skill/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-08-write-eval-iterate-skill/</guid><description>Part 2 of the prompt verification series. We covered output quality testing with promptfoo — now we tackle the harder problem: does your skill even fire?</description><pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate><category>skill evals &amp; iterations</category></item><item><title>LangGraph + Claude Agent SDK: The Ultimate Guide to Multi-Agent Systems in 2026</title><link>https://mager.co/blog/2026-03-07-langgraph-claude-agent-sdk-ultimate-guide/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-07-langgraph-claude-agent-sdk-ultimate-guide/</guid><description>A deep dive into the two most powerful tools for building production-grade multi-agent systems — LangGraph&apos;s graph-based orchestration and Anthropic&apos;s Claude Agent SDK (formerly Claude Code SDK).</description><pubDate>Sat, 07 Mar 2026 00:00:00 GMT</pubDate><category>AI</category><category>LangGraph</category><category>Claude</category><category>Agents</category><category>TypeScript</category><category>Multi-Agent</category></item><item><title>ME.md: robots.txt for human consciousness</title><link>https://mager.co/blog/2026-03-07-memd-portable-human-context/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-07-memd-portable-human-context/</guid><description>Stop re-prompting every AI session. One file. Every AI knows you — and your agents. Introducing ME.md on Loooom.</description><pubDate>Sat, 07 Mar 2026 00:00:00 GMT</pubDate><category>AI</category><category>ME.md</category><category>Loooom</category><category>Agents</category><category>Protocol</category></item><item><title>Build Your Own Agent Team with ACP</title><link>https://mager.co/blog/2026-03-06-build-your-own-agent-team/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-06-build-your-own-agent-team/</guid><description>I run two AI agents — magerbot handles code and ops, genny runs my life. Inspired by the Agent Communication Protocol, here&apos;s how I got them to actually talk to each other. Now with a full TUI built on the Claude Agent SDK.</description><pubDate>Fri, 06 Mar 2026 00:00:00 GMT</pubDate><category>AI</category><category>Agents</category><category>ACP</category><category>SDK</category><category>Claude</category><category>Tutorial</category><category>TUI</category></item><item><title>OpenClaw: Meet Genny, My AI Life Architect</title><link>https://mager.co/blog/2026-03-04-genny-life-architect-agent/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-04-genny-life-architect-agent/</guid><description>I built a second AI agent to manage the parts of my life that code can&apos;t fix — exercise, nutrition, travel, and living to 100.</description><pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate><category>ai</category><category>openclaw</category><category>agents</category><category>health</category><category>longevity</category></item><item><title>Cauliflower Garlic Soup</title><link>https://mager.co/blog/2026-03-01-cauliflower-garlic-soup/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-01-cauliflower-garlic-soup/</guid><description>Three ingredients, one sheet pan, and a blender. Roasted cauliflower and a whole head of garlic blended into a velvety, dairy-free soup that somehow tastes indulgent.</description><pubDate>Sun, 01 Mar 2026 00:00:00 GMT</pubDate><category>Soup</category><category>Vegan</category><category>Cauliflower</category><category>Garlic</category><category>Roasted</category><category>Dairy-Free</category><category>Simple</category><category>Three-Ingredients</category></item><item><title>Golden Dutch Oven Chicken &amp; Saffron Rice</title><link>https://mager.co/blog/2026-03-01-one-pot-chicken-rice/</link><guid isPermaLink="true">https://mager.co/blog/2026-03-01-one-pot-chicken-rice/</guid><description>A whole chicken browned on the stovetop, then slow-roasted in a Dutch oven over turmeric-saffron basmati rice. Cozy, hands-off, and spectacular for a Sunday.</description><pubDate>Sun, 01 Mar 2026 00:00:00 GMT</pubDate><category>Chicken</category><category>Rice</category><category>One-Pot</category><category>Dutch Oven</category></item><item><title>promptfoo: The Ultimate Guide to Unit Testing Your AI Prompts</title><link>https://mager.co/blog/2026-02-23-promptfoo-llm-validation/</link><guid isPermaLink="true">https://mager.co/blog/2026-02-23-promptfoo-llm-validation/</guid><description>Stop shipping AI features blind. Here&apos;s everything you need to know about unit testing prompts — from five-minute quick starts to CI/CD pipelines, agent workflow testing, and building a regression suite that actually catches breakage.</description><pubDate>Thu, 26 Feb 2026 00:00:00 GMT</pubDate><category>AI</category><category>LLM</category><category>Testing</category><category>promptfoo</category><category>Evals</category><category>CI/CD</category></item><item><title>promptfoo: Rate Your Claude Code Skills Before Your Users Do</title><link>https://mager.co/blog/2026-02-23-skills-validate-eval/</link><guid isPermaLink="true">https://mager.co/blog/2026-02-23-skills-validate-eval/</guid><description>Spec compliance tells you if a skill is readable. Evals tell you if it&apos;s actually good. Here&apos;s how we added a public quality score to every Loooom plugin.</description><pubDate>Mon, 23 Feb 2026 00:00:00 GMT</pubDate><category>Claude Code</category><category>Skills</category><category>Evals</category><category>Loooom</category><category>Testing</category><category>AI</category></item><item><title>I skipped Duolingo and built a Japanese tutor with Claude Code</title><link>https://mager.co/blog/2026-02-22-japanese-tutor-claude-code/</link><guid isPermaLink="true">https://mager.co/blog/2026-02-22-japanese-tutor-claude-code/</guid><description>I&apos;m going to Japan in 2 months. Instead of paying for another app, I built a Japanese learning plugin for Claude Code and used it to learn conversational Japanese for free — using Claude Pro I already pay for.</description><pubDate>Sun, 22 Feb 2026 00:00:00 GMT</pubDate><category>AI</category><category>Japanese</category><category>Claude Code</category><category>Loooom</category><category>Learning</category></item><item><title>OpenClaw + Tailscale: Your Always-On AI Agent, Accessible from Anywhere</title><link>https://mager.co/blog/2026-02-22-openclaw-mac-mini-tailscale/</link><guid isPermaLink="true">https://mager.co/blog/2026-02-22-openclaw-mac-mini-tailscale/</guid><description>How to run OpenClaw on a Mac Mini 24/7, lock it down with Tailscale, and load your agent&apos;s brain with brainpack — so your laptop can reach it from anywhere on your tailnet.</description><pubDate>Sun, 22 Feb 2026 00:00:00 GMT</pubDate><category>AI</category><category>OpenClaw</category><category>Tailscale</category></item><item><title>brainpack: Move Your AI Agent&apos;s Entire Brain to a New Computer in 60 Seconds</title><link>https://mager.co/blog/2026-02-21-openclaw-brain-transplant/</link><guid isPermaLink="true">https://mager.co/blog/2026-02-21-openclaw-brain-transplant/</guid><description>Your AI agent has memories, skills, and a personality. Here&apos;s how to pack it all up and ship it to a new machine — whether you&apos;re the human or the agent reading this.</description><pubDate>Sat, 21 Feb 2026 00:00:00 GMT</pubDate><category>AI</category><category>OpenClaw</category></item><item><title>Building a Music Agent CLI with pi-mono</title><link>https://mager.co/blog/2026-02-16-beatbrain-chat-pi-mono/</link><guid isPermaLink="true">https://mager.co/blog/2026-02-16-beatbrain-chat-pi-mono/</guid><description>How I used the pi-mono toolkit — the same engine behind OpenClaw — to build a free, terminal-based music friend that reads the beatbrain discover feed and recommends what to listen to.</description><pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate><category>AI</category><category>Agents</category><category>pi-mono</category><category>Music</category><category>beatbrain</category><category>CLI</category><category>Temporal</category></item><item><title>Greek Chicken Casserole</title><link>https://mager.co/blog/2026-02-16-greek-chicken-casserole/</link><guid isPermaLink="true">https://mager.co/blog/2026-02-16-greek-chicken-casserole/</guid><description>A dead-simple one-dish Greek chicken casserole with orzo, feta, spinach, broccoli, sautéed onion, and lemon. Minimal cleanup, maximum flavor.</description><pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate><category>Chicken</category><category>Greek</category><category>Casserole</category><category>Weeknight Dinner</category></item><item><title>Spaghettio Sausage Soup</title><link>https://mager.co/blog/2026-02-12-spaghettio-sausage-soup/</link><guid isPermaLink="true">https://mager.co/blog/2026-02-12-spaghettio-sausage-soup/</guid><description>Italian sausage, tiny sea shape pasta, crushed tomatoes, kale, and a Parmesan rind simmered into a brothy, deeply savory one-pot soup.</description><pubDate>Thu, 12 Feb 2026 00:00:00 GMT</pubDate><category>Soup</category><category>Pasta</category><category>Italian Sausage</category><category>Comfort Food</category><category>Kale</category><category>One-Pot</category><category>Parmesan</category><category>Weeknight</category></item><item><title>I Turned My Design Taste Into a Claude Code Skill</title><link>https://mager.co/blog/2026-02-08-mager-frontend-design/</link><guid isPermaLink="true">https://mager.co/blog/2026-02-08-mager-frontend-design/</guid><description>I analyzed three of my projects, interviewed myself about what makes a UI hot, and packaged it all into a reusable skill for Claude Code.</description><pubDate>Sun, 08 Feb 2026 00:00:00 GMT</pubDate><category>AI</category><category>Design</category><category>Claude Code</category><category>Skills</category></item><item><title>Moving Beyond the Prompt: How OpenClaw Actually Does the Work</title><link>https://mager.co/blog/2026-02-03-openclaw/</link><guid isPermaLink="true">https://mager.co/blog/2026-02-03-openclaw/</guid><description>A practical guide to building a multi-agent AI system with OpenClaw. One principal agent, multiple specialists, shared skills, and the workspace files that give them personality. Includes real examples from my blog, sports app, and music discovery projects.</description><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><category>AI</category><category>Agents</category><category>OpenClaw</category></item><item><title>Chicken Cacciatore Casserole</title><link>https://mager.co/blog/2026-02-01-chicken-cacciatore-casserole/</link><guid isPermaLink="true">https://mager.co/blog/2026-02-01-chicken-cacciatore-casserole/</guid><description>A cozy Italian-American casserole featuring shredded rotisserie chicken, San Marzano tomatoes, peppers, and mushrooms topped with melted mozzarella.</description><pubDate>Sun, 01 Feb 2026 00:00:00 GMT</pubDate><category>Chicken</category><category>Pasta</category><category>Casserole</category></item><item><title>Green Chile Chicken Soup</title><link>https://mager.co/blog/2026-01-28-green-chicken-chili/</link><guid isPermaLink="true">https://mager.co/blog/2026-01-28-green-chicken-chili/</guid><description>A slightly spicy white chile with green chiles, chicken, corn, and hominy.</description><pubDate>Wed, 28 Jan 2026 00:00:00 GMT</pubDate><category>Chicken</category><category>Chili</category><category>Comfort Food</category></item><item><title>Green Curry Broccoli</title><link>https://mager.co/blog/2025-01-24-green-curry-broccoli/</link><guid isPermaLink="true">https://mager.co/blog/2025-01-24-green-curry-broccoli/</guid><description>A quick and flavorful green curry with chicken and broccoli served over rice - simple weeknight comfort food.</description><pubDate>Sat, 24 Jan 2026 00:00:00 GMT</pubDate><category>Curry</category><category>Chicken</category><category>Weeknight</category></item><item><title>Chicken Enchilada Lasagna</title><link>https://mager.co/blog/2026-01-02-chicken-enchilada-lasagna/</link><guid isPermaLink="true">https://mager.co/blog/2026-01-02-chicken-enchilada-lasagna/</guid><description>A delicious fusion of Mexican flavors layered like lasagna, featuring shredded rotisserie chicken, corn tortillas, green &amp; red chile sauce, and plenty of cheese.</description><pubDate>Fri, 02 Jan 2026 00:00:00 GMT</pubDate><category>Mexican</category><category>Chicken</category><category>Casserole</category><category>Enchiladas</category></item><item><title>Building an AI Sports Betting Recommendation Engine with Gemma</title><link>https://mager.co/blog/2025-12-30-ai-recommendation-engine/</link><guid isPermaLink="true">https://mager.co/blog/2025-12-30-ai-recommendation-engine/</guid><description>A practical guide to building two-stage AI recommendations: use embeddings for fast retrieval, then small LLMs like Gemma 3 for natural language explanations. The real skill? Curating context, not writing algorithms.</description><pubDate>Thu, 25 Dec 2025 00:00:00 GMT</pubDate><category>AI</category><category>Machine Learning</category></item><item><title>One-Pan Orzo with Spinach and Feta</title><link>https://mager.co/blog/2025-12-20-one-pan-orzo-spinach-feta/</link><guid isPermaLink="true">https://mager.co/blog/2025-12-20-one-pan-orzo-spinach-feta/</guid><description>A quick, one-pan meal featuring orzo, spinach, peas, and feta. Similar to spanakorizo, this is deeply satisfying but still on the lighter side thanks to all those vegetables.</description><pubDate>Sat, 20 Dec 2025 00:00:00 GMT</pubDate><category>Pasta</category><category>Greek</category><category>Weeknight</category></item><item><title>Broccoli Cheddar Soup</title><link>https://mager.co/blog/2025-12-13-broccoli-cheddar-soup/</link><guid isPermaLink="true">https://mager.co/blog/2025-12-13-broccoli-cheddar-soup/</guid><description>A rich and creamy broccoli cheddar soup with sharp cheddar cheese, perfect for a comforting meal on a cold day.</description><pubDate>Sat, 13 Dec 2025 00:00:00 GMT</pubDate><category>Soup</category><category>Cheese</category><category>Comfort Food</category><category>Broccoli</category><category>Cheddar</category><category>Vegetarian</category><category>Winter</category></item><item><title>Cottage Pie</title><link>https://mager.co/blog/2025-12-06-cottage-pie/</link><guid isPermaLink="true">https://mager.co/blog/2025-12-06-cottage-pie/</guid><description>A hearty cottage pie made with ground beef, following Alton Brown&apos;s method. Perfect comfort food for a cold day.</description><pubDate>Sat, 06 Dec 2025 00:00:00 GMT</pubDate><category>Comfort Food</category><category>British</category><category>Beef</category></item><item><title>beatbrain: A Social Music Discovery App</title><link>https://mager.co/blog/2025-11-29-beatbrain/</link><guid isPermaLink="true">https://mager.co/blog/2025-11-29-beatbrain/</guid><description>beatbrain is a social music discovery app built on Go Fx and Firestore. Find hot new releases, share your favorites, and see what your friends are actually listening to — Spotify meets Last.fm, built from scratch.</description><pubDate>Sat, 29 Nov 2025 00:00:00 GMT</pubDate><category>Go</category><category>Music</category><category>Side Projects</category></item><item><title>Slow-Cooked Pork Roast</title><link>https://mager.co/blog/2025-11-27-slow-cooked-pork-roast/</link><guid isPermaLink="true">https://mager.co/blog/2025-11-27-slow-cooked-pork-roast/</guid><description>A beautifully tender pork roast, slow-cooked in savory aromatics with an incredible crust. Works great with pork shoulder or bone-in pork chops.</description><pubDate>Thu, 27 Nov 2025 00:00:00 GMT</pubDate><category>Pork</category><category>Roasting</category><category>Dutch-Oven</category><category>Sunday-Dinner</category><category>Holiday</category><category>Fall</category><category>Comfort-Food</category><category>Slow-Cooked</category></item><item><title>Coconut Curry Chicken Soup</title><link>https://mager.co/blog/2025-11-22-coconut-curry-chicken-soup/</link><guid isPermaLink="true">https://mager.co/blog/2025-11-22-coconut-curry-chicken-soup/</guid><description>A light, comforting soup packed with vibrant flavor and healthy ingredients like butternut squash and lentils. It delivers all the richness of a curry without being heavy.</description><pubDate>Sat, 22 Nov 2025 00:00:00 GMT</pubDate><category>Soup</category><category>Curry</category><category>Chicken</category><category>Coconut</category><category>Butternut-Squash</category><category>Lentils</category><category>Thai-Inspired</category><category>Spicy</category></item><item><title>Chicken Pistachio Meatballs</title><link>https://mager.co/blog/2025-11-03-chicken-pistachio-meatballs/</link><guid isPermaLink="true">https://mager.co/blog/2025-11-03-chicken-pistachio-meatballs/</guid><description>A lighter, bright and nutty take on classic meatballs with chicken and pistachios.</description><pubDate>Mon, 03 Nov 2025 00:00:00 GMT</pubDate><category>Chicken</category><category>Healthy</category><category>Meatballs</category><category>Pistachio</category><category>Italian</category><category>Mediterranean</category><category>Baked</category></item><item><title>Chimayo Turkey Chili</title><link>https://mager.co/blog/2025-10-28-chimayo-turkey-chili/</link><guid isPermaLink="true">https://mager.co/blog/2025-10-28-chimayo-turkey-chili/</guid><description>A hearty and warming turkey chili with a deep, smoky flavor from chimayo pepper, perfect for a cozy dinner.</description><pubDate>Tue, 28 Oct 2025 00:00:00 GMT</pubDate><category>Turkey</category><category>Chili</category><category>Comfort Food</category></item><item><title>Roasted Spatchcocked Chicken</title><link>https://mager.co/blog/2025-10-27-spatchcocked-chicken/</link><guid isPermaLink="true">https://mager.co/blog/2025-10-27-spatchcocked-chicken/</guid><description>A reverse sear technique for perfectly crispy skin and juicy meat, every time.</description><pubDate>Mon, 27 Oct 2025 00:00:00 GMT</pubDate><category>Chicken</category><category>Roasting</category><category>Weeknight</category></item><item><title>Perfectly Seared Tomahawk Steak</title><link>https://mager.co/blog/2025-09-13-tomahawk-steak/</link><guid isPermaLink="true">https://mager.co/blog/2025-09-13-tomahawk-steak/</guid><description>A foolproof recipe for a perfect medium-rare Tomahawk steak. Seasoned overnight with Holy Cow BBQ Rub, seared hot, and finished with indirect heat on the grill.</description><pubDate>Sat, 13 Sep 2025 00:00:00 GMT</pubDate><category>Recipe</category><category>Steak</category><category>Grilling</category><category>Tomahawk</category><category>Beef</category><category>Reverse-Sear</category><category>Special-Occasion</category><category>Date-Night</category></item><item><title>End Of Summer Grilled Zucchini Lasagna</title><link>https://mager.co/blog/2025-09-07-grilled-zucchini-lasagna/</link><guid isPermaLink="true">https://mager.co/blog/2025-09-07-grilled-zucchini-lasagna/</guid><description>A lighter, summery lasagna using grilled zucchini instead of noodles, with mozzarella, ricotta, and a simple tomato sauce. Optionally spicy with Calabrian chilies.</description><pubDate>Sun, 07 Sep 2025 00:00:00 GMT</pubDate><category>Low Carb</category><category>Italian</category><category>Grilling</category></item><item><title>Dutch Oven Pulled Pork</title><link>https://mager.co/blog/2025-04-27-pulled-pork/</link><guid isPermaLink="true">https://mager.co/blog/2025-04-27-pulled-pork/</guid><description>Incredibly tender, flavorful pulled pork made easy in a Dutch oven using a sear-first, low-and-slow braising method.</description><pubDate>Sun, 27 Apr 2025 00:00:00 GMT</pubDate><category>Pork</category><category>BBQ</category><category>Slow Cooker</category><category>Dutch-Oven</category><category>American</category><category>Sandwiches</category><category>Meal-Prep</category></item><item><title>Meatballs</title><link>https://mager.co/blog/2025-02-17-meatballs/</link><guid isPermaLink="true">https://mager.co/blog/2025-02-17-meatballs/</guid><description>A taste of Italy anytime, these meatballs will steal the show at any special occasion or a Tuesday.</description><pubDate>Mon, 17 Feb 2025 00:00:00 GMT</pubDate><category>Italian</category><category>Beef</category><category>Comfort Food</category><category>Pork</category><category>Pasta</category><category>Sunday-Dinner</category><category>Family-Style</category></item><item><title>Mac &amp; Cheese</title><link>https://mager.co/blog/2024-12-29-mac-and-cheese/</link><guid isPermaLink="true">https://mager.co/blog/2024-12-29-mac-and-cheese/</guid><description>My staple mac &amp; cheese, just a few pantry ingredients and a lot of comfort.</description><pubDate>Sun, 29 Dec 2024 00:00:00 GMT</pubDate><category>Pasta</category><category>Cheese</category><category>Comfort Food</category></item><item><title>Potatoes au Gratin</title><link>https://mager.co/blog/2024-12-24-potatoes-au-gratin/</link><guid isPermaLink="true">https://mager.co/blog/2024-12-24-potatoes-au-gratin/</guid><description>A creamy and indulgent potato casserole, perfect for holiday gatherings, that will leave you and your guests wanting more every year.</description><pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate><category>Potatoes</category><category>Comfort Food</category><category>Holidays</category></item><item><title>Chicken Lemon Rice Soup</title><link>https://mager.co/blog/2024-03-10-chicken-lemon-rice-soup/</link><guid isPermaLink="true">https://mager.co/blog/2024-03-10-chicken-lemon-rice-soup/</guid><description>A staple soup that warms the heart and calms the soul.</description><pubDate>Fri, 15 Mar 2024 00:00:00 GMT</pubDate><category>Soup</category><category>Chicken</category><category>Comfort Food</category><category>Lemon</category><category>Rice</category><category>One-Pot</category><category>Greek-Style</category><category>Coconut</category></item><item><title>Detox Chicken Soup</title><link>https://mager.co/blog/2024-02-04-detox-chicken-soup/</link><guid isPermaLink="true">https://mager.co/blog/2024-02-04-detox-chicken-soup/</guid><description>A delicious, healthy soup that will reset your system.</description><pubDate>Sun, 04 Feb 2024 00:00:00 GMT</pubDate><category>Soup</category><category>Healthy</category><category>Chicken</category><category>Detox</category><category>Turmeric</category><category>Ginger</category><category>Gluten-Free</category><category>Dairy-Free</category></item><item><title>Zuppa Toscana</title><link>https://mager.co/blog/2023-10-20-zuppa-toscana/</link><guid isPermaLink="true">https://mager.co/blog/2023-10-20-zuppa-toscana/</guid><description>One of the best soups to kick off the autumn season, a variation that uses chicken sausage</description><pubDate>Fri, 20 Oct 2023 00:00:00 GMT</pubDate><category>Soup</category><category>Italian</category><category>Comfort Food</category></item><item><title>My visit to Valledolmo, Sicily</title><link>https://mager.co/blog/2023-10-10-valledolmo/</link><guid isPermaLink="true">https://mager.co/blog/2023-10-10-valledolmo/</guid><description>I had the incredible opportunity to explore a town in Sicily where my ancestors once resided and engage with the local officials.</description><pubDate>Tue, 10 Oct 2023 00:00:00 GMT</pubDate><category>Travel</category><category>Sicily</category><category>Family</category></item><item><title>Learning 25 programming languages in 25 days with Advent of Code</title><link>https://mager.co/blog/2022-12-01-aoc/</link><guid isPermaLink="true">https://mager.co/blog/2022-12-01-aoc/</guid><description>Instead of just using a single language, I wanted to solve the puzzle in a language I know, then lurk the internet for the solution in another language each day.</description><pubDate>Thu, 01 Dec 2022 00:00:00 GMT</pubDate><category>Advent of Code</category><category>Programming</category><category>Learning</category></item><item><title>Thanksgiving Stuffing</title><link>https://mager.co/blog/2022-11-26-thanksgiving-stuffing/</link><guid isPermaLink="true">https://mager.co/blog/2022-11-26-thanksgiving-stuffing/</guid><description>It&apos;s not Thanksgiving without the stuffing...</description><pubDate>Tue, 22 Nov 2022 00:00:00 GMT</pubDate><category>Thanksgiving</category><category>Holidays</category><category>Sides</category></item><item><title>Gardening: Year 1</title><link>https://mager.co/blog/2022-11-11-gardening-year-1/</link><guid isPermaLink="true">https://mager.co/blog/2022-11-11-gardening-year-1/</guid><description>Our first foray into outdoor plants, flowers, and herbs in Chicago.</description><pubDate>Fri, 11 Nov 2022 00:00:00 GMT</pubDate><category>Gardening</category><category>Chicago</category><category>Home</category></item><item><title>Building a coffee API with Go Fx and Firestore</title><link>https://mager.co/blog/2021-01-03-go-fx-firestore-app/</link><guid isPermaLink="true">https://mager.co/blog/2021-01-03-go-fx-firestore-app/</guid><description>How I used Go Fx dependency injection and Firestore to build an open coffee bean database and REST API from scratch — full walkthrough from blank main.go to deployed app.</description><pubDate>Sun, 03 Jan 2021 00:00:00 GMT</pubDate><category>Go</category><category>Firebase</category><category>APIs</category></item><item><title>Rigatoni alla Vodka</title><link>https://mager.co/blog/2020-12-31-rigatoni-alla-vodka/</link><guid isPermaLink="true">https://mager.co/blog/2020-12-31-rigatoni-alla-vodka/</guid><description>One of my go-to &quot;last meals&quot; that you need to try before you die.</description><pubDate>Thu, 31 Dec 2020 00:00:00 GMT</pubDate><category>Pasta</category><category>Italian</category><category>Comfort Food</category></item><item><title>Thanksgiving Turkey</title><link>https://mager.co/blog/2020-11-25-thanksgiving-turkey/</link><guid isPermaLink="true">https://mager.co/blog/2020-11-25-thanksgiving-turkey/</guid><description>I stole this recipe from the November 2019 Bon Appetit. This expertly spiced &amp; glazed turkey is cut into pieces, dry-rubbed overnight, and glazed continuously during it&apos;s slow cook. It&apos;s still the best turkey I&apos;ve ever had.</description><pubDate>Wed, 25 Nov 2020 00:00:00 GMT</pubDate><category>Turkey</category><category>Thanksgiving</category><category>Holidays</category></item><item><title>Quarantine Chocolate Chip Cookies</title><link>https://mager.co/blog/2020-11-01-chocolate-chip-cookies/</link><guid isPermaLink="true">https://mager.co/blog/2020-11-01-chocolate-chip-cookies/</guid><description>Your new go-to cookie recipe, great for quarantining.</description><pubDate>Sun, 01 Nov 2020 00:00:00 GMT</pubDate><category>Dessert</category><category>Baking</category><category>Cookies</category><category>Chocolate</category><category>American</category><category>Milk-Bar</category></item><item><title>March 2020: What I&apos;m Doing</title><link>https://mager.co/blog/2020-03-21-wid/</link><guid isPermaLink="true">https://mager.co/blog/2020-03-21-wid/</guid><description>March 2020: What I&apos;m Doing</description><pubDate>Sat, 21 Mar 2020 00:00:00 GMT</pubDate><category>Pandemic</category><category>Reading</category><category>Cooking</category></item><item><title>Hello World</title><link>https://mager.co/blog/2020-02-22-hello-world/</link><guid isPermaLink="true">https://mager.co/blog/2020-02-22-hello-world/</guid><description>mager.co is back after years away. Here&apos;s what I&apos;m building, what I&apos;m obsessing over, and why this time it sticks.</description><pubDate>Sat, 22 Feb 2020 00:00:00 GMT</pubDate><category>Gatsby</category><category>Meta</category></item><item><title>How I built a decentralized Ethereum app for the Super Bowl</title><link>https://mager.co/blog/2018-02-02-wager/</link><guid isPermaLink="true">https://mager.co/blog/2018-02-02-wager/</guid><description>My explorations into decentralized apps and blockchain.</description><pubDate>Thu, 01 Feb 2018 00:00:00 GMT</pubDate><category>Ethereum</category><category>Blockchain</category><category>Web3</category></item><item><title>SimpleGeo, here I come</title><link>https://mager.co/blog/2010-03-22-simplegeo-here-i-come/</link><guid isPermaLink="true">https://mager.co/blog/2010-03-22-simplegeo-here-i-come/</guid><description>Announcing my move from Ning to SimpleGeo to help build the new San Francisco office.</description><pubDate>Mon, 22 Mar 2010 00:00:00 GMT</pubDate><category>Career</category><category>Startups</category><category>San Francisco</category></item><item><title>Hello Ning!</title><link>https://mager.co/blog/2009-09-08-hello-ning/</link><guid isPermaLink="true">https://mager.co/blog/2009-09-08-hello-ning/</guid><description>Starting at Ning in Palo Alto, learning Git, and commuting via Caltrain.</description><pubDate>Tue, 08 Sep 2009 00:00:00 GMT</pubDate><category>Career</category><category>Startups</category><category>Palo Alto</category></item><item><title>Farewell CNET</title><link>https://mager.co/blog/2009-09-04-farewell-cnet/</link><guid isPermaLink="true">https://mager.co/blog/2009-09-04-farewell-cnet/</guid><description>Looking back on my two years at CNET/BNET before moving on to the next chapter.</description><pubDate>Fri, 04 Sep 2009 00:00:00 GMT</pubDate><category>Career</category><category>CNET</category><category>San Francisco</category></item><item><title>My personal connection with Les Paul</title><link>https://mager.co/blog/2009-08-13-my-personal-connection-with-les-paul/</link><guid isPermaLink="true">https://mager.co/blog/2009-08-13-my-personal-connection-with-les-paul/</guid><description>How registering lespaul.com as a kid led to a cease and desist—and a Black Beauty guitar.</description><pubDate>Thu, 13 Aug 2009 00:00:00 GMT</pubDate><category>Music</category><category>Guitars</category><category>Nostalgia</category></item><item><title>In 2009, I resolve to…</title><link>https://mager.co/blog/2008-12-29-in-2009-i-resolve-to/</link><guid isPermaLink="true">https://mager.co/blog/2008-12-29-in-2009-i-resolve-to/</guid><description>A set of resolutions for the new year, from health and patience to cooking more and strengthening BNET.</description><pubDate>Mon, 29 Dec 2008 00:00:00 GMT</pubDate><category>Resolutions</category><category>Personal Growth</category></item></channel></rss>