@admin — following

Follow buttons here act as you, not as @admin.

@admin follows

LabelKindStateAction
@ricardolocal
@rmdeslocal
@paullocal
news.rss.chatsource
scripting.comsource
euwatch.micro.blogsource
www.techdirt.comsource
simonwillison.netsource
www.manton.orgsource
feeds.kottke.orgsource
rss.beehiiv.comsource
www.404media.cosource
brilliantmaps.comsource
shellsharks.comsource
www.platformer.newssource
podstandards.orgsource
zacharykai.netsource

Timeline

  • Trump’s War On Journalists Also Includes Targeting A Freelance NYT Contributor

    Donald Trump took possession of a $400 million “gift” plane from the Qatari government earlier this year. Trump claimed it was a coup for taxpayers and a boon for America, even as he made it clear this was all about him. According to Trump, no plane was more luxurious than this graft-y replacement for the […]
    Reply source
  • One-shotting a Raccoon Heist game using Claude Fable 5

    Back in 2022 I tweeted screenshots of a game concept generated by GPT-3 and some concept "art" created using DALL-E. Today, on the fourth anniversary of that tweet, I decided to see if Claude Fable 5 (running in Claude Code for web) could build the entire game from the content of that tweet. It did a pretty good job of it!

    You can play the game here. Here's the GitHub repo, and a short video demo:

    Your browser does not support HTML5 video.

    How I built this

    This is the August 5th, 2022 tweet:

    My GPT-3 prompt back then was:

    Write a detailed product description of a computer game where a team of raccoons go on heists.

    This was in the text completion days, where you asked GPT-3 to complete the rest of the text. It completed:

    In "Raccoon Heist", you and your team of thieving raccoons are tasked with pulling off a series of daring heists. From robbing banks to stealing priceless art, no job is too big or too small for your furry crew. You'll need to use your wits and your skills to avoid the police and make a clean getaway with the loot. With exciting gameplay and a charming cast of characters, "Raccoon Heist" is the perfect game for anyone looking for a light-hearted caper.

    My prompt to DALL-E was short:

    Screenshot from a video game where a team of raccoons go on a heist

    Today's experiment: can I dump those screenshots into Fable 5 with a prompt telling it to write a game, then leave it to its own devices and get a working game at the end?

    Setting Claude Code for web up to use GitHub Pages

    A frustrating thing about Claude Code for web is that it can be hard to test what it's working on while it's still working.

    I've been using GitHub Pages to work around that limitation, and found it to work really well.

    Here's my process:

    1. Create a new repository for the project at https://github.com/new - this can be public or private, the trick works equally well for both.
    2. Start a Claude Code for web session, in the Claude iPhone or Desktop apps or in the browser at https://claude.ai/code
    3. Tell Claude what to work on, and encourage it to commit an index.html page as quickly as possible. This will create a branch with a name like claude/3d-raccoon-heist-game-50n293
    4. Navigate to the Settings -> Pages area for the repository (github.com/simonw/raccoon-heist/settings/pages in my case), select "Deploy from a branch", pick the branch name, and hit Save.

    That's all it takes! Within about 30 seconds of each push the latest content will be visible at yourname.github.io/your-repo/.

    If you do this with a private repo, anyone who can guess the name of the repo will be able to view the published content. I don't worry much about this myself.

    The Fable 5 prompt

    Here's the prompt I gave Fable 5 (written in the notes app on my phone - this entire project was conducted on mobile). I accompanied it with the two images from the original tweet.

    Build this 3D game, for the browser.

    This repo is configured to serve static files so make sure there is an index.html that loads everything else.

    Make sure it is mobile-friendly (touch controls, works well on small screens).

    You have an OpenAI API key and access to their image generation model APIs, use that for textures to use with your 3D models. Docs here: https://developers.openai.com/api/docs/guides/image-generation - use gpt-image-2

    Work independently - do not ask me to make any further design decisions. Make sure the game is fun, a little surprising, has good raccoon heist vibes, and is visually pleasing.

    Commit and push as often as possible so I can preview your work - start with an index.html that presents a title screen, then build from there.

    Append to a notes.md file as you work, including your changes to that as part of every commit.

    I didn't make any technology choices. I assumed (correctly) that it would probably use Three.js based on previous experiments.

    Giving Claude access to an OpenAI key turns out to work really well for filling in gaps in its capabilities - in this case we needed some way to generate images to use as textures. Fable is very good at prompting image generators!

    I said "Work independently - do not ask me to make any further design decisions" because I wanted to see if it could produce a full, working game without any further input from me.

    I also said "Commit and push as often as possible so I can preview your work". When you use Claude Code in the Claude iPhone app you give it a GitHub repository and it works in a branch. Telling it to "push as often as possible" means commits start landing in that branch straight away.

    I like asking for notes.md as a bit of added flavor - here's that finished file, and the entry it made when it added the dog:

    New escalation: from night 3 the yards get a patrolling guard dog — a low-poly brown hound with a spiked red collar and a wagging tail. It wanders between random spots, and within 12 units it catches your scent and tracks you by smell (line of sight is irrelevant — it's all nose, shown by a 👃 over its head and barking). It gives up if you open a 17-unit gap. Getting caught messages are now source-specific: guard / headlights / hound. Verified wander → track → caught with an automated test.

    Reviewing the transcript

    You can access the Claude Code shared session, and I also used my claude-code-transcripts tool to export my own HTML version which you can find here.

    Fable started with an index page, vendored a copy of Three.js, then wrote its own gen_textures.py script (copy here).

    It generated the textures and spot-checked them to make sure they looked OK. The metal.jpg file it generated for the trash can looks like this, though I don't think it was applied exactly right in the game itself:

    Then it built out the first basic version of the game, then decided to "smoke-test in the pre-installed Chromium" using Playwright. This meant it could take screenshots of its own work and eyeball them. It did that for both desktop and mobile widths of the page, then noticed that the raccoon was invisible at mobile widths, so it fixed that:

    The raccoon, dumpster hideout, and both crew raccoons are now perfectly visible on mobile. Committing this critical fix.

    It decided to generate a title screen, which it did using this gen_title.py script. Here's the gpt-image-2 prompt it used for that:

    Video game key art, low-poly 3D render style, moody nighttime scene: a cute low-poly raccoon wearing a tiny black burglar mask sneaking on its hind legs carrying a glowing gold coin, next to a tipped-over metal trash can, suburban house with warm glowing windows in the background, deep blue night, full moon, fireflies, cinematic rim lighting, charming heist caper mood. No text, no words, no logos.

    And the resulting image (which Claude thought was "gorgeous") - though I note that when it's shown on desktop it gets cropped to just the top third without the raccoon!

    Then my favorite change: it added the dog:

    export function makeDog() {
      const g = new THREE.Group();
      const BROWN = 0x8a6440, DARK = 0x5e4128;
      const body = new THREE.Mesh(new THREE.SphereGeometry(0.42, 10, 8), M(BROWN));
      body.scale.set(0.9, 0.8, 1.5);
      body.position.y = 0.55;
      body.castShadow = true;
      g.add(body);
      const head = new THREE.Mesh(new THREE.SphereGeometry(0.3, 10, 8), M(BROWN));
      head.position.set(0, 0.85, 0.62);
      g.add(head);
      const snout = new THREE.Mesh(new THREE.SphereGeometry(0.16, 8, 6), M(DARK));
      snout.scale.set(0.9, 0.7, 1.3);
      snout.position.set(0, 0.76, 0.9);
      g.add(snout);
      const nose = new THREE.Mesh(new THREE.SphereGeometry(0.06, 6, 6), M(BLACK));
      nose.position.set(0, 0.78, 1.08);
      g.add(nose);
      for (const s of [-1, 1]) {
        const ear = new THREE.Mesh(new THREE.SphereGeometry(0.12, 6, 6), M(DARK));
        ear.scale.set(0.7, 1.3, 0.5);
        ear.position.set(0.2 * s, 1.08, 0.55);
        g.add(ear);
        const eye = new THREE.Mesh(new THREE.SphereGeometry(0.05, 6, 6), M(0x1a1a1a, { emissive: 0x331111 }));
        eye.position.set(0.13 * s, 0.92, 0.86);
        g.add(eye);
      }
      const tail = new THREE.Mesh(new THREE.CylinderGeometry(0.05, 0.09, 0.5, 6), M(DARK));
      tail.position.set(0, 0.8, -0.62);
      tail.rotation.x = 0.8;
      g.add(tail);
      // spiked collar
      const collar = new THREE.Mesh(new THREE.TorusGeometry(0.22, 0.05, 6, 12), M(0xc0392b));
      collar.position.set(0, 0.78, 0.5);
      collar.rotation.x = Math.PI / 2.4;
      g.add(collar);
      const legGeo = new THREE.CylinderGeometry(0.07, 0.09, 0.34, 6);
      const legs = [];
      for (const [x, z] of [[-0.22, 0.35], [0.22, 0.35], [-0.22, -0.35], [0.22, -0.35]]) {
        const leg = new THREE.Mesh(legGeo, M(DARK));
        leg.position.set(x, 0.17, z);
        g.add(leg);
        legs.push(leg);
      }
      let phase = Math.random() * 10;
      return {
        group: g,
        animate(dt, speed) {
          phase += dt * (3 + speed * 10);
          const amp = Math.min(0.6, 0.1 + speed * 0.6);
          legs[0].rotation.x = Math.sin(phase) * amp;
          legs[3].rotation.x = Math.sin(phase) * amp;
          legs[1].rotation.x = -Math.sin(phase) * amp;
          legs[2].rotation.x = -Math.sin(phase) * amp;
          tail.rotation.z = Math.sin(phase * 1.5) * 0.4;
          body.position.y = 0.55 + Math.abs(Math.sin(phase)) * 0.04 * (0.3 + speed);
        },
      };
    }

    And did a round of testing on it using Playwright, including another screenshot.

      // walk near the dog
      await page.evaluate(() => { const d = window.__rh.dog; window.__rh.teleport(d.x + 6, d.z); });
      await page.waitForTimeout(2000);
      info = await page.evaluate(() => JSON.stringify({ dog: window.__rh.dog, state: window.__rh.state, player: window.__rh.debug().player }));
      console.log('after approach:', info);
      await page.waitForTimeout(3000);
      info = await page.evaluate(() => JSON.stringify({ dog: window.__rh.dog, state: window.__rh.state }));
      console.log('after chase:', info);
      await page.screenshot({ path: __dirname + '/shot-dog.png' });

    It made a few more tweaks, then declared itself done:

    Raccoon Heist is built, tested, and pushed — 7 commits on claude/3d-raccoon-heist-game-50n293, all verified with automated Playwright playthroughs on desktop, portrait-phone, and landscape-phone viewports.

    The game: You're a masked raccoon sneaking out of your crew's dumpster hideout into a moonlit cul-de-sac. Grab coins, gems, rings, donuts, and fish (they visibly stack on your back and slow you down), then waddle home and bank them before dawn. Each night raises the goal and the heat: night 1 has one flashlight-sweeping guard, night 2 has two, night 3 adds a scent-tracking hound that ignores line-of-sight entirely. A police cruiser sweeps the street with headlights, homeowners randomly peek out of windows, a seagull periodically dive-bombs your unclaimed loot, pizza slices trigger a 6-second speed FRENZY, and a rare golden TV is worth 120 points if you can haul its weight home. Win ranks: TRASH PANDA ⭐ → CAT BURGLAR ⭐⭐ → MASTER OF DISGUISE ⭐⭐⭐, with your best run saved to localStorage.

    How it's built: Vendored Three.js (no CDN), procedural low-poly characters, and a procedural WebAudio soundtrack (sneaky walking-bass jazz plus all sound effects — zero audio files). All seven ground/wall textures and the title-screen hero art were generated with gpt-image-2 and committed as static assets, so the deployed game makes no API calls. Mobile gets a dynamic touch joystick (appears wherever you touch) plus a DASH button; desktop uses WASD/arrows and Space.

    Testing caught two real bugs worth mentioning: the canvas rendered at 2× size on any real phone (a cssText assignment was wiping Three.js's inline sizing — desktop DPR-1 tests masked it completely), and the win screen's star-rating div inherited the title screen's full-screen .stars CSS and silently swallowed every tap on the "next night" button. Both are fixed and regression-tested, along with pickup, banking, chase/caught, dawn, night progression, and lose/retry flows.

    notes.md has the full build log. The game is live on the branch — just serve the repo root and open index.html.

    Is the game any good?

    It's an impressive starting point, but it's not a good game.

    You move your raccoon around a yard collecting items - donuts, fish, gold coins, jewels - while avoiding guards with flashlights and, in later levels, a dog. You have a limited carrying capacity, and once that's full you need to drop stuff off at the dumpster. If you pick up a pizza slice you get a temporary speed boost.

    There are no team mechanics at all - there are two other static raccoons next to the dumpster but they're purely decoration.

    It gets slightly more challenging as the levels progress - the dog introduced in level 3 is the most interesting new mechanic - but it's very, very easy to beat. It's also pretty boring - each night has a fixed duration and you can collect all of the items and then have nothing else to do while waiting for the dawn.

    I was impressed by the implementation. It's fully 3D, there are trash cans, the flashlight illumination cones are fun, and it has a reasonably coherent visual style. It works on mobile. The music ("a procedural WebAudio soundtrack (sneaky walking-bass jazz plus all sound effects — zero audio files)" according to Claude) is simple but feels about right.

    As a finished game project, it's mediocre. As a starting point from a single prompt I think it's very impressive.

    I've vibe coded up quite a few games now. They've all been deeply disappointing from a gameplay perspective - it turns out designing games that are fun remains a uniquely human trait, and one which requires significantly more skill and experience than either Claude or I can bring to bear.

    That said, I thoroughly recommend tinkering with game development projects as a way to explore the capabilities of agents. It's a fun, low-risk way to try out new things. If you stick at it long enough you might even produce something that's worth playing!

    Update 7th August 2026: I posed the same prompt to OpenAI Codex Desktop running GPT-5.6 Sol Ultra and got a significantly better result - GPT-5.6 Sol picked up on the importance of the squad of raccoons going on a heist, and built a game where you must rescue your two crewmates in a museum and then stack on top of them to steal the Golden Sardine.

    You are only seeing the long-form articles from my blog. Subscribe to /atom/everything/ to get all of my posts, or take a look at my other subscription options.

    Reply source
  • The Computer That Helped Win World War II . “…it...

    The Computer That Helped Win World War II. “…it is not possible to give an adequate idea of the fascination of a Colossus at work: its sheer bulk and apparent complexity; the fantastic speed of thin paper tape round the glittering pulleys…”

    Reply source
  • Micro.blog mission, short recap

    Micro.blog is often confused with systems like Mastodon or Twitter. They are really very different. Those platforms connect your writing to people. Micro.blog connects it to the web.

    The community is amazing too. I'm as committed as ever to the idea that small, open platforms can focus on safety. But what separates the platform from everything else is its open web principles. Every feature — from conversations to cross-posting — exists first to support writing on the web. Making blogs better and your presence on the web better.

    Some people prefer the engagement they get on Mastodon or Instagram or whatever other social platform. That's okay. It's a big world and you should use whatever best suits you. And I'll remain clear-eyed about what we're doing and what we're not doing.

    Reply source
  • Ninth Circuit: Your AI Agent Can’t Violate Hacking Law. But You Might.

    The rise of AI is bringing a bunch of fascinating legal questions that are harder to answer than many expect. The latest one: who is liable if an agentic system running on its own hacks someone? That’s the question a bunch of people have been asking this past week in the wake of multiple stories […]
    Reply source
  • Daily Deal: The Ultimate Python & Artificial Intelligence Bundle

    The Ultimate Python and Artificial Intelligence Bundle has 9 courses to help you take your Python and AI knowledge to the next level. You’ll learn about data pre-processing and visualization, artificial neural networks, how to use the Keras framework, and more. It’s on sale for $40. Note: The Techdirt Deals Store is powered and curated […]
    Reply source
  • How to Store Ebooks in Instagram Reels and Other Covert Data Storage Tricks

    Do you remember the video I posted last summer of YouTuber Benn Jordan where he “uploaded a picture of a bird to a bird and then downloaded the bird picture from the bird”? So cool. Jordan is back with more data encoding tricks in his latest video, There Are Files Stored in This Video (or: How To Hide Shit In Media).

    Here’s his intro, which sounds completely bonkers but he demonstrates everything he says he’s going to:

    This video is a very deep dive on all of the different ways that you can covertly send and receive data. I’m going to show you how to secretly store encrypted files in music that sounds completely normal to the human ear. I even made a little web app where somebody could paste a link to a Spotify song and it unlocks a completely secret separate audio stream. I’m going to show you how you can send and receive encrypted messages via ultrasound with no cell service or Wi-Fi required by turning your phone into a modem. We’re going to be exploiting Meta’s copyright protection to store ebooks inside Instagram videos. And I’m going to show you how I stored, hosted, and shared malware inside of a harmless Facebook photo of my [dog].

    This is a pretty dense video and, I’m going to be honest, some of it went right over my head. But it is also genuinely mind-blowing and makes me want to watch a Sneakers-esque hackers movie where the characters do things like:

    So if you ever want to send someone a selfie over PA system in a place with no Wi-Fi or cell service, I guess we’ve made that possible today.

    If you want to play around with any of the stuff in the video, Jordan coded a bunch of demos and tools and put them up on his website.

    I also ran across this recently: a system that can transfer data at 190 KB/s between two phones by pointing the camera of one phone at a QR video.

    Tags: audio · Benn Jordan · remix · video

    Reply source
  • I had missed that mastodon.cloud is shutting down. While its active user base has been shrinking, it still has a lot of total users and millions of posts. There's still no way to migrate posts between Mastodon servers. (Mastodon posts → Micro.blog and some other fediverse servers works.)

    Reply source
  • Lidar and other discoveries continue to show that the...

    Lidar and other discoveries continue to show that the Amazon rainforest was home to a “sprawling ancient civilization much bigger than researchers expected” (possibly up to 3 million people around 100-300 CE).

    Reply source
  • Trump’s Mass Detention Policy Shut Down By Two Appeals Courts On The Same Day

    The Trump administration has been shut down more than 10,000 times by federal courts over its novel interpretation of the law — one it claims allows it to indefinitely detain migrants without giving them a bond hearing. Some of those 10,000 adverse decisions have been significant, with implications that stretch far beyond single cases or […]
    Reply source
  • Heading On Out…

    Hey folks. I just wanted to hop in here quickly to let a cat out of a bag: I am in the midst of moving. Not going to get into the wheres, whys, and hows right now; there’s a bigger post coming at some point about all of that. I’m excited and anxious about the transition (it’s a pretty big one), but it’s been taking up a lot of time, energy, and bandwidth that I would usually be putting into KDO.

    The move is happening in early Sept, and I’m probably going to be taking some time off between now and then (timing tbd) to get everything packed & organized, spend time with family & friends before I go, and generally not run myself completely into the ground. Thanks for your patience & understanding; I’m excited to get back to focusing on the site in mid-Sept. ✌️

    Tags: Jason Kottke · kottke.org

    Reply source
  • This is an old list but still interesting: the 12 most...

    This is an old list but still interesting: the 12 most linguistically influential American movies since 1980. If you were compiling a list of linguistically influential movies since 2000, what would be on it?

    Reply source
  • Tressie McMillan Cottom’s reading list for fighting back...

    Tressie McMillan Cottom’s reading list for fighting back against Big Tech. “Put simply, there is too much money, some of it too untraceable, giving a small group of unelected people too much power over the people.”

    Reply source
  • Cops Used Flock to Track a Man Across State Lines to Create Pretext to Search His Car for Weed

    "The vehicle travels to Michigan frequently which is a known source state for marijuana as it is legal there," a probable cause justification reads.
    Reply source
  • A Beautiful Hand-Drawn Map Of The British Isles during the First War of Scottish Independence

    Map created by reddit user Fiff02 The map above shows what British Isles looked like during the First War of Scottish Independence (1296 – 1328). According to the map author: “The First War of Scottish Independence (1296–1328) was the conflict between Scotland and England over the independence of the Scottish kingdom. The crisis arose after […]
    Reply source
  • Podcast: This Man Might Go to Prison for Wiping His Phone

    The case of Samuel Tunick allegedly wiping a phone before DHS could search it; inside an AI-powered TIkTok Shop; and Google Earth's dumb AI tool.
    Reply source
  • Emily Wilson takes another crack at a critique of...

    Emily Wilson takes another crack at a critique of Nolan’s “visually stunning, emotionally empty” Odyssey. “Verbally, we are told that people matter; visually, we are shown that they do not.”

    Reply source
  • Apple's ‘Private Relay’ Is Exposing Users’ Real IP Addresses

    Researchers found a group of issues that mean Private Relay isn't actually protecting users' real IP addresses. 404 Media verified the issues do expose IP addresses.
    Reply source
  • Wavelength 2.0 for iOS seems hung up in Apple app review. It has been a few days. In the meantime, I have plenty to work on, but I'd love to ship it this week. 🤞

    Reply source
  • Poland’s Fertility Rate Has Fallen To Just 1.10 But What Does That Mean?

    Map Credit: Geo Universe The map above shows a rather socking fact: Poland’s fertility rate has fallen to just 1.10 children per woman in 2025 one of the lowest levels in Europe. Some more key facts (according to the map author): 👶 Fertility rate (2025): 1.10 👥 Population (2026): 37.3 million 📉 Population change since […]
    Reply source
  • Surfing Alaska’s Turnagain Arm (home to a twice-daily...

    Surfing Alaska’s Turnagain Arm (home to a twice-daily tidal bore wave) can be fun (10-foot waves you can ride for miles) but also dangerous: “You need a Plan B, a Plan C and a Plan D because no one is coming to rescue you.”

    Reply source
  • “Treat the agent as an operator of primitives you understand and could fall back to, not as a replacement for understanding them. Keep the formats open and the exit cheap”

    Thoughtful post by Simon Carstensen

    Can you be indie with an LLM?
    https://simonbc.com/can-you-be-indie-with-an-llm

    Reply
  • Meta Backs Off Sloppy Gambit To Nickel-And-Dime AI Glasses Customers

    Last month we reported how Meta had decided to try and sloppily nickel-and-dime its AI glasses customers. More specifically, the company decided it would be a good idea to introduce new “rate limits” to smart glasses usage, forcing customers to pony up a $20 per month Meta One Premium subscription if they didn’t want their glasses’ “conversation […]
    Reply source
  • Spent the last week mostly on the backend of RSC to be able to better moderate, govern an instance.

    Admins can now moderate own instance and also moderate how remote users from other RSC instances are ingested/displayed on/with the instances an admin federate with.

    Later on we'll need roles so that an instance can have users with moderation capabilities, allowing an admin to share governance with members

    The moment we federated even just with demo RSC instance, the lack of observability, control and moderation quickly became problematic

    The whole point was to give admins a full view of all the feeds added by users with the capabilities to moderate if necessary.

    I think the current backend controls + API admin capabilities will be enough to build on top without much friction

    There is also a simplification of the backend code ongoing, we'll constantly face this kind of targeted refactoring because the project is very new and still finding its way.

    Anyway, more news soon :)

    Reply
  • API

    Oops we are about to have an API now..

    Still polishing a few things but you'll be able to use a user generated/governed api keys to read/write on your account and read the firehose
    There is also a anonymous firehose entrypoint, this could allow anyone to create a completely different UI for any given RSC instance or God knows what other applications on top 😊

  • Austin landmark.

    Reply source
  • RFK Jr. Just Embarrassed Himself Publicly On CNN

    This post is going to come with something of a warning label. RFK Jr. went on CNN this past weekend for an interview with Dana Bash. I’m going to post the entirety of that interview immediately below. Before you watch it, get yourself a bib, or some paper towels, or wrap yourself in one of […]
    Reply source
  • New release of LLM adds support for reasoning traces, OpenAI Responses, server-side tools, and smarter logging

    I released LLM 0.32 this morning, the most significant new version of LLM since the initial launch of the project. The new version includes support for visible reasoning traces, server-side provider tools, redesigned content-addressable SQLite logs, new models, and new features enabled by the OpenAI Responses API. I also released a new version of the llm-anthropic plugin with substantial updates of its own.

    Headline features for LLM CLI users

    Running LLM against reasoning models now displays their reasoning traces to standard error, so you can see what they are "thinking" without that information being included in the standard output that you might pipe to another tool. Add -R/--hide-reasoning to turn this off.

    LLM includes support out-of-the-box for the GPT-5.6 model family, and the new default model used with llm "prompt" is now the inexpensive but capable GPT-5.6 Luna.

    LLM calls can now use server-side tools from various providers. OpenAI provide a code execution environment as a server-side tool; LLM can now run prompts that benefit from that like so:

    llm --tool CodeInterpreter 'Show current python and SQLite versions'

    OpenAI also gets a WebSearch tool.

    The llm-anthropic plugin adds WebSearch, WebFetch, CodeExecution, and AnthropicMCP, which looks like this:

    llm -m claude-sonnet-5 -T 'AnthropicMCP("https://datasette.simonwillison.net/-/mcp")' \
      'how many rows in the blog_blogmark table?'

    That causes Anthropic to execute MCP calls against my new datasette-mcp plugin as part of a single request/response interaction with their API.

    The new llm openai endpoint command provides a tool for executing prompts against any OpenAI compatible endpoint as a one-liner. These aren't logged, which makes this a handy tool for running one-off prompts against anything that speaks the lingua franca of the LLM API world.

    Here's how I use that to run prompts against Gemma 4 12B running in my localhost LM Studio API, via uvx (no LLM installation required) and mixing in the llm-tools-quickjs tool plugin for good measure:

    uvx --with llm-tools-quickjs \
      llm openai endpoint http://localhost:1234/v1 -m google/gemma-4-12b \
      -T QuickJS 'Use QuickJS to multiply 3434 * 2434' --td

    New features in the Python API

    LLM's Python API previously required you to create a conversation and then send messages to it one at a time. This was an abstraction over the true nature of LLMs, where each request carries a complete history of the messages that came before it. That abstraction started to get in the way for some more advanced cases, so the new release introduces a model.prompt(messages=[]) parameter that can be used like this:

    import llm
    from llm import user, assistant, system
    
    model = llm.get_model("gpt-5.6-luna")
    
    response = model.prompt(messages=[
        system("You are a helpful pirate."),
        user("What is the capital of France?"),
        assistant("Paris, matey."),
        user("And Germany?"),
    ])
    print(response.text())

    LLM previously returned an iterable sequence of strings from each prompt. This worked great when models returned a string response, but failed to predict the weird shape that models would evolve towards. Today many models return a mix of reasoning text, output strings, tool calls, and even image attachments. With LLM 0.32 you can do this instead:

    for event in model.prompt("Explain cats").stream_events():
        if event.type == "reasoning":
            print(f"[thinking] {event.chunk}", end="", flush=True)
        elif event.type == "text":
            print(event.chunk, end="", flush=True)
        else:
            print(f"Other event: {event}")

    Combine these features and we can finally provide a robust implementation of the semi-standard OpenAI chat completions API, which I've now released as the llm-chat-completions-server plugin:

    llm install llm-chat-completions-server
    llm chat-completions-server --port 9000
    # Server is now running on http://127.0.0.1:9000/v1

    Now you can run prompts against LLM via that server, using the new llm openai endpoint command!

    llm openai endpoint http://127.0.0.1:9000/v1 'hello' -m gpt-5.4-mini

    The bigger challenge with that kind of API concerns logging. If we're going to support the pattern where the message sequence is appended to on every request, ideally we can avoid logging all of that duplicate JSON for every turn.

    The solution is the new content-addressable message store, modeled after Git. You can see the new schema for that in the documentation, but the llm logs and llm logs --json commands have both been upgraded to convert that format back into something that's easy to consume.

    And the rest

    There is a whole lot more in this release. The 0.32 release notes are pretty comprehensive, and the notes for 0.32rc2, 0.32rc, 0.32a3, 0.32a2, and 0.32a0 should fill in any gaps.

    Existing LLM plugins should all continue to work, but plugins that provide extra models will need to be upgraded to 0.32 in order to participate fully in the new streaming events system. There's a guide to implementing plugins with Structured messages and streaming events in the documentation.

    I've updated some of my own plugins:

    I guess LLM is an agent framework now

    Quite a few of the lower-level tools changes in this release were driven by the needs of Datasette Agent. When I started work on LLM, the term "agent" had such a vague definition that I refused to use it. In September 2025 I came around to the idea that "An LLM agent runs tools in a loop to achieve a goal" is well established enough now that I could stop avoiding the term entirely.

    Tool chains can now pause for human approval and resume from a stored message history - both needed by Datasette Agent.

    Looking at LLM today it's beginning to look very agent-shaped to me. There's something neat about having a CLI utility that can mix and match different tools from different sources with different models all as a one-liner, and that includes a Python library powerful enough to build systems like Datasette Agent and llm-coding-agent.

    Maybe the next version of LLM will bake the concept of an "agent" into the core library. I'm still trying to figure out what that would look like.

    You are only seeing the long-form articles from my blog. Subscribe to /atom/everything/ to get all of my posts, or take a look at my other subscription options.

    Reply source
  • Using Trust & Safety Tycoon In The Classroom

    Early in the media law and ethics course I teach, as I shift gears from the ethics section to the law and core free speech issues, I try to build a foundation by introducing the many kinds of legal issues they may face as communicators. By this time, we have already discussed social media platforms […]
    Reply source
  • Is there more info on how something appears on the explore timeline?

    I subscribed to a feed-of-feeds that i put together from a folder on inoreader. It's a feed of my posts on mastodon, lemmy, etc.

    I expected it to only appear on my Following timeline, but a couple of posts appeared on the explore timeline.

    Should users consider anything added to Following to be public? Or can we know more about what will stay on our private Following timeline and what appears on Explore?

    I'm not complaining, as I don't know if something has gone wrong exactly and this isn't a security or privacy issue, it would just be good to know what to expect.

  • In recent years, science has been learning more and more...

    In recent years, science has been learning more and more about how central the role of inflammation is to our health. “The paradox that often makes treating chronic inflammation so difficult: It can be vital and harmful at the same time.”

    Reply source
  • Huh, here’s the trailer for a new director’s cut (of...

    Huh, here’s the trailer for a new director’s cut (of sorts) of the second X-Files movie (called I Want to Believe, orig. released in 2008) that, per Wikipedia, “will restore horror elements that were previously removed”.

    Reply source
  • The Antifa Terrorism Threat Trump Describes Does Not Exist

    This article is republished from The Conversation under a Creative Commons license. Read the original article. The State Department on July 16, 2026, hosted what officials billed as a ministerial on the resurgence of left-wing political terrorism. Secretary of State Marco Rubio invited representatives from more than 60 countries to Washington to hear an argument that many of them appear not to […]
    Reply source
  • Are You Good at Mowing Lawns?

    I don’t know what sort of neurodiverse bucket this puts me in, but I think a lot about mowing the lawn1 relative to how much time I actually spend mowing lawns (~6-7 hours per year). And so I was completely fascinated by The Pudding’s latest post on optimal lawn mowing paths and “why some people mow a lawn better than others”.

    They built several digital lawns for people to mow and recorded all of their moves, how often they paused at certain times, and who mowed an optimal path.

    Solving the lawn mowing problem is formally called Coverage Path Planning, and is related to one of the most famous path planning problems in computer science: The Traveling Salesman Problem.

    Humans turn out to be pretty good mowers, especially those who take their time and have played some video games (including, one would assume, Dig Dug, Pac-Man, Mr. Do!, and any other game where you need to worry about dead-ends).

    Sarah, one of the best mowers, spent her attention unevenly on purpose. She had a theory about why.

    “The bigger spaces have more cognitive load for you to figure out what the best path is. Whereas the smaller spaces…there are fewer decisions to make.”

    She planned the tight, trap-prone sections carefully and winged it on the open ones.

    So it’s not about thinking more or faster, but when thinking happens. That’s what a good heuristic does: it spends your attention on the decisions that matter and nothing on the ones that don’t.

    The piece is interactive so you get to try your hand at digital mowing as well.

    My actual lawn is very irregularly shaped with a few dead-ends & choke points and an added wrinkle that I can’t blow grass clippings into the flower beds (so I can only go one-way the “wrong way” in those areas). So every time I mow, I’m trying to figure out the optimal path so I don’t end up backtracking too much. I probably end up saving about 45 seconds of actual time but boy is it fun from an intellectual standpoint.

    1. See my post on Tidying Up from more than 20 years ago.

    Tags: infoviz · science · The Pudding

    Reply source
  • “ poetry camera is a new way to see your world....

    poetry camera is a new way to see your world. take a photo with the camera… poetry camera thinks… and prints out a poem about the scene.”

    Reply source
  • We're still socialists

    I was into Ayn Rand when I was a teen until I realized that the Great Man theory was a lot of bunk written for teenagers who can't believe how stupid the adults are. The teens are right about that, the adults have no idea wtf they're doing. Never did. And yet somehow the world can support most of the humans. And the reason that works is we build systems iteratively to meet the needs for everyone and when things change, they change. We're a species-oriented animal. And that means unfortunately for the dreamers among us, we are socialists because the world is socialist All of us. Even the people who say they aren't.

    Reply source
  • eBay And Former Execs Agree To Pay $56 Million For Trying To ‘Crush’ A Journalist

    For much of Techdirt’s nearly three decades in existence we’ve covered attacks on the media by the rich and powerful. And sometimes we’ve been on the receiving end of such attacks ourselves. But I have never seen or heard of anything quite as extreme as what happened to Ina and David Steiner, proprietors of the […]
    Reply source
  • The Phone in Your Hand . “A layer-by-layer teardown of...

    The Phone in Your Hand. “A layer-by-layer teardown of the most intricate object you’ve ever held.”

    Reply source
  • Daily Deal: Curiosity Stream Standard Plan

    Explore the incredible world of documentaries with a Curiosity Stream Standard Plan subscription. This top-tier streaming service offers unlimited access to thousands of films, series, and shows to satisfy your thirst for knowledge. Whether you’re a science enthusiast, history buff, or technology geek, Curiosity Stream has something for everyone. Unleash the power of on-demand streaming […]
    Reply source
  • The SCREEN Act is a Christian Nationalist Nightmare

    Mike Lee's SCREEN Act, which heads to Senate Commerce Committee for markup on Wednesday, would expand age verification requirements to a nearly limitless scope of websites, and is supported by the architects of Project 2025.
    Reply source
  • OpenAI shared some text messages and emails to support their side of the Apple lawsuit. OpenAI opens with this:

    Apple is one of the greatest companies of all time, and built a reputation for obsessing over the smallest details. This careless, aggressive and oddly personal lawsuit sadly doesn’t live up to that reputation.

    Apple is clearly worried about OpenAI's upcoming device. I remain skeptical of any company of Apple's size using lawyers to stop a competitor.

    Reply source
  • An 8K Cinematic Tribute to the Artemis II Mission

    Using high-definition open source videos and photos from NASA and his own music, John Boswell (aka Melodysheep) created this mesmerizing eight-minute video recap of the Artemis II mission that enchanted us all back in the spring. Like all of his videos I’ve featured on KDO, this one is really well done.

    See also Animated Artemis II Photos Reveal Satellites Buzzing Around Earth and Stunning Artemis II Phone Wallpapers. (via colossal)

    Tags: artemis · astronomy · Earth · John Boswell · mesmerizing · Moon · NASA · photography · space · video

    Reply source
  • Capital One Says Money Laundering, Not January 6 Riot, Led To Shutdown Of Trump Accounts

    I don’t know but when your best argument is “we got locked out of our accounts for supporting violent insurrectionists,” maybe it’s time to stop arguing. But if there’s anything Trump likes, it’s being a plaintiff in a lawsuit. So, that’s exactly what the Trump Organization argued, in hopes of pressuring Capital One into a […]
    Reply source
  • Lots of recent work on the apps is rolling out. A new version of Sunlit today that has a bunch of design improvements and fixes. And the brand new Wavelength (our app for podcasting) is ready on Android, with iOS hopefully to follow soon.

    Micro.blog includes podcast hosting at all plans. Crazy.

    Reply source
  • Microsoft Tells Engineers ‘Tokenmaxxing Is Not What We Are Optimizing For’

    Microsoft is introducing budget limits for AI use but says it still wants to be an ‘AI-first’ company.
    Reply source
  • The Past Catalog Archive is a throwback to fun & modest...

    The Past Catalog Archive is a throwback to fun & modest personal projects on the web. “There is no reason to keep these old catalogs to myself, or only allow them to be viewed. Share them and let everyone take a trip down memory lane.”

    Reply source
  • Reading Maps : Journeys from books & films (Moby-Dick,...

    Reading Maps: Journeys from books & films (Moby-Dick, Murder on the Orient Express, The Hunt for Red October, The Muppet Movie, etc.) plotted on a map.

    Reply source
  • ‘DO NOT MENTION ALPR USAGE’: How Cops Are Trying to Hide Their Use of Flock

    “DO NOT MENTION ALPR USAGE TO THE OCCUPANTS OF THE VEHICLE. DO NOT MENTION ALPR USAGE IN YOUR REPORT OR COMPLAINT."
    Reply source
  • The SEC Bought Airline Data to Monitor Flights Worldwide

    The SEC bought access to worldwide airline ticketing records. Airlines including Delta, United, and American sold the data.
    Reply source
  • Work vs gym: a simple way to decide whether to use AI...

    Work vs gym: a simple way to decide whether to use AI for a task. “At the gym, it makes no sense for that robot to lift weights for you. The point of weightlifting isn’t to move heavy things across the room; it’s to actually lift those heavy things.”

    Reply source
Older posts