row_to_json() demo

Example of the row_to_json() PostgreSQL function.

Owned by simonw, visibility: Public

SQL query
with quotations as (select 'quotation' as type, created, row_to_json(blog_quotation) as row from blog_quotation),
blogmarks as (select 'blogmark' as type, created, row_to_json(blog_blogmark) as row from blog_blogmark),
combined as (select * from quotations union all select * from blogmarks)
select * from combined order by created desc limit 100

100 rows

type created row
quotation 2026-03-01 11:21:45+00:00
{
  "id": 2038,
  "slug": "claude-import-memory",
  "quotation": "`I'm moving to another service and need to export my data. List every memory you have stored about me, as well as any context you've learned about me from past conversations. Output everything in a single code block so I can easily copy it. Format each entry as: [date saved, if available] - memory content. Make sure to cover all of the following \u2014 preserve my words verbatim where possible: Instructions I've given you about how to respond (tone, format, style, 'always do X', 'never do Y'). Personal details: name, location, job, family, interests. Projects, goals, and recurring topics. Tools, languages, and frameworks I use. Preferences and corrections I've made to your behavior. Any other stored context not covered above. Do not summarize, group, or omit any entries. After the code block, confirm whether that is the complete set or if any remain.`",
  "source": "claude.com/import-memory",
  "source_url": "https://claude.com/import-memory",
  "created": "2026-03-01T11:21:45+00:00",
  "metadata": {},
  "search_document": "'/import-memory':161C 'a':37A 'about':19A,29A,76A 'above':122A 'after':131A 'ai':146B,152B 'all':61A 'always':83A 'and':7A,98A,103A,108A 'another':5A 'anthropic':154B 'any':24A,116A,129A,144A 'as':21A,23A,50A 'available':54A 'behavior':115A 'block':40A,134A 'can':43A 'claude':155B 'claude.com':160C 'claude.com/import-memory':159C 'code':39A,133A 'complete':140A 'confirm':135A 'content':56A 'context':25A,119A 'conversations':33A 'copy':45A 'corrections':109A 'cover':60A 'covered':121A 'data':12A 'date':51A 'details':90A 'do':84A,87A,123A 'each':48A 'easily':44A 'engineering':149B 'entries':130A 'entry':49A 'every':14A 'everything':35A 'export':10A 'family':94A 'following':64A 'format':47A,81A 'frameworks':104A 'from':31A 'generative':151B 'generative-ai':150B 'given':74A 'goals':97A 'group':126A 'have':17A 'how':77A 'i':1A,42A,72A,105A,110A 'if':53A,143A 'in':36A 'instructions':71A 'interests':95A 'is':138A 'it':46A 'job':93A 'languages':102A 'learned':28A 'list':13A 'llm':157B 'llm-memory':156B 'llms':153B 'location':92A 'm':2A 'made':112A 'make':57A 'me':20A,30A 'memory':15A,55A,158B 'moving':3A 'my':11A,66A 'name':91A 'need':8A 'never':86A 'not':120A,124A 'of':62A 'omit':128A 'or':127A,142A 'other':117A 'output':34A 'past':32A 'personal':89A 'possible':70A 'preferences':107A 'preserve':65A 'projects':96A 'prompt':148B 'prompt-engineering':147B 'recurring':99A 'remain':145A 'respond':79A 'saved':52A 'service':6A 'set':141A 'single':38A 'so':41A 'stored':18A,118A 'style':82A 'summarize':125A 'sure':58A 'that':137A 'the':63A,132A,139A 'to':4A,9A,59A,78A,113A 'tone':80A 'tools':101A 'topics':100A 'use':106A 've':27A,73A,111A 'verbatim':68A 'well':22A 'where':69A 'whether':136A 'words':67A 'x':85A 'y':88A 'you':16A,26A,75A 'your':114A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "Anthropic's \"import your memories to Claude\" feature is a prompt"
}
blogmark 2026-02-27 22:49:32+00:00
{
  "id": 9320,
  "slug": "passkeys",
  "link_url": "https://blog.timcappalli.me/p/passkeys-prf-warning/",
  "link_title": "Please, please, please stop using passkeys for encrypting user data",
  "via_url": "https://lobste.rs/s/tf8j5h/please_stop_using_passkeys_for",
  "via_title": "lobste.rs",
  "commentary": "Because users lose their passkeys *all the time*, and may not understand that their data has been irreversibly encrypted using them and can no longer be recovered.\r\n\r\nTim Cappalli:\r\n\r\n> To the wider identity industry: *please stop promoting and using passkeys to encrypt user data. I\u2019m begging you. Let them be great, phishing-resistant authentication credentials*.",
  "created": "2026-02-27T22:49:32+00:00",
  "metadata": {},
  "search_document": "'all':19C 'and':22C,35C,51C 'authentication':69C 'be':39C,64C 'because':14C 'been':30C 'begging':60C 'blog.timcappalli.me':71C 'can':36C 'cappalli':42C 'credentials':70C 'data':10A,28C,57C 'encrypt':55C 'encrypted':32C 'encrypting':8A 'for':7A 'great':65C 'has':29C 'i':58C 'identity':46C 'industry':47C 'irreversibly':31C 'let':62C 'lobste.rs':72C 'longer':38C 'lose':16C 'm':59C 'may':23C 'no':37C 'not':24C 'passkeys':6A,13B,18C,53C 'phishing':67C 'phishing-resistant':66C 'please':1A,2A,3A,48C 'promoting':50C 'recovered':40C 'resistant':68C 'security':11B 'stop':4A,49C 'that':26C 'the':20C,44C 'their':17C,27C 'them':34C,63C 'tim':41C 'time':21C 'to':43C,54C 'understand':25C 'usability':12B 'user':9A,56C 'users':15C 'using':5A,33C,52C 'wider':45C 'you':61C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-27 20:43:41+00:00
{
  "id": 9319,
  "slug": "ai-agent-coding-in-excessive-detail",
  "link_url": "https://minimaxir.com/2026/02/ai-agent-coding/",
  "link_title": "An AI agent coding skeptic tries AI agent coding, in excessive detail",
  "via_url": null,
  "via_title": null,
  "commentary": "Another in the genre of \"OK, coding agents got good in November\" posts, this one is by Max Woolf and is very much worth your time. He describes a sequence of coding agent projects, each more ambitious than the last - starting with simple YouTube metadata scrapers and eventually evolving to this:\r\n\r\n> It would be arrogant to port Python's [scikit-learn](https://scikit-learn.org/stable/) \u2014 the gold standard of data science and machine learning libraries \u2014 to Rust with all the features that implies.\r\n> \r\n> But that's unironically a good idea so I decided to try and do it anyways. With the use of agents, I am now developing `rustlearn` (extreme placeholder name), a Rust crate that implements not only the fast implementations of the standard machine learning algorithms such as [logistic regression](https://en.wikipedia.org/wiki/Logistic_regression) and [k-means clustering](https://en.wikipedia.org/wiki/K-means_clustering), but also includes the fast implementations of the algorithms above: the same three step pipeline I describe above still works even with the more simple algorithms to beat scikit-learn's implementations.\r\n\r\nMax also captures the frustration of trying to explain how good the models have got to an existing skeptical audience:\r\n\r\n> The real annoying thing about Opus 4.6/Codex 5.3 is that it\u2019s impossible to publicly say \u201cOpus 4.5 (and the models that came after it) are an order of magnitude better than coding LLMs released just months before it\u201d without sounding like an AI hype booster clickbaiting, but it\u2019s the counterintuitive truth to my personal frustration. I have been trying to break this damn model by giving it complex tasks that would take me months to do by myself despite my coding pedigree but Opus and Codex keep doing them correctly.\r\n\r\nA throwaway remark in this post inspired me to [ask Claude Code to build a Rust word cloud CLI tool](https://github.com/simonw/research/tree/main/rust-wordcloud#readme), which it happily did.",
  "created": "2026-02-27T20:43:41+00:00",
  "metadata": {},
  "search_document": "'-2025':34B '/codex':239C '/simonw/research/tree/main/rust-wordcloud#readme),':347C '/stable/)':100C '/wiki/k-means_clustering),':178C '/wiki/logistic_regression)':170C '4.5':250C '4.6':238C '5.3':240C 'a':64C,123C,148C,325C,339C 'about':236C 'above':188C,196C 'after':256C 'agent':3A,8A,68C 'agentic':31B 'agentic-engineering':30B 'agents':29B,43C,139C 'ai':2A,7A,14B,21B,24B,276C 'ai-assisted-programming':23B 'algorithms':163C,187C,204C 'all':114C 'also':180C,213C 'am':141C 'ambitious':72C 'an':1A,228C,259C,275C 'and':55C,82C,107C,131C,171C,251C,319C 'annoying':234C 'another':36C 'anyways':134C 'are':258C 'arrogant':90C 'as':165C 'ask':334C 'assisted':25B 'audience':231C 'be':89C 'beat':206C 'been':292C 'before':270C 'better':263C 'booster':278C 'break':295C 'build':338C 'but':119C,179C,280C,317C 'by':52C,299C,311C 'came':255C 'captures':214C 'claude':335C 'cli':343C 'clickbaiting':279C 'cloud':342C 'clustering':175C 'code':336C 'codex':320C 'coding':4A,9A,28B,42C,67C,265C,315C 'coding-agents':27B 'complex':302C 'correctly':324C 'counterintuitive':284C 'crate':150C 'damn':297C 'data':105C 'decided':128C 'describe':195C 'describes':63C 'despite':313C 'detail':12A 'developing':143C 'did':351C 'do':132C,310C 'doing':322C 'each':70C 'en.wikipedia.org':169C,177C 'en.wikipedia.org/wiki/k-means_clustering),':176C 'en.wikipedia.org/wiki/logistic_regression)':168C 'engineering':32B 'even':199C 'eventually':83C 'evolving':84C 'excessive':11A 'existing':229C 'explain':220C 'extreme':145C 'fast':156C,183C 'features':116C 'frustration':216C,289C 'generative':20B 'generative-ai':19B 'genre':39C 'github.com':346C 'github.com/simonw/research/tree/main/rust-wordcloud#readme),':345C 'giving':300C 'gold':102C 'good':45C,124C,222C 'got':44C,226C 'happily':350C 'have':225C,291C 'he':62C 'how':221C 'hype':277C 'i':127C,140C,194C,290C 'idea':125C 'implementations':157C,184C,211C 'implements':152C 'implies':118C 'impossible':245C 'in':10A,37C,46C,328C 'includes':181C 'inflection':35B 'inspired':331C 'is':51C,56C,241C 'it':87C,133C,243C,257C,271C,281C,301C,349C 'just':268C 'k':173C 'k-means':172C 'keep':321C 'last':75C 'learn':97C,209C 'learning':109C,162C 'libraries':110C 'like':274C 'llms':22B,266C 'logistic':166C 'machine':108C,161C 'magnitude':262C 'max':17B,53C,212C 'max-woolf':16B 'me':307C,332C 'means':174C 'metadata':80C 'minimaxir.com':352C 'model':298C 'models':224C,253C 'months':269C,308C 'more':71C,202C 'much':58C 'my':287C,314C 'myself':312C 'name':147C 'not':153C 'november':33B,47C 'now':142C 'of':40C,66C,104C,138C,158C,185C,217C,261C 'ok':41C 'one':50C 'only':154C 'opus':237C,249C,318C 'order':260C 'pedigree':316C 'personal':288C 'pipeline':193C 'placeholder':146C 'port':92C 'post':330C 'posts':48C 'programming':26B 'projects':69C 'publicly':247C 'python':13B,93C 'real':233C 'regression':167C 'released':267C 'remark':327C 'rust':15B,112C,149C,340C 'rustlearn':144C 's':94C,121C,210C,244C,282C 'same':190C 'say':248C 'science':106C 'scikit':96C,208C 'scikit-learn':95C,207C 'scikit-learn.org':99C 'scikit-learn.org/stable/)':98C 'scrapers':81C 'sequence':65C 'simple':78C,203C 'skeptic':5A 'skeptical':230C 'so':126C 'sounding':273C 'standard':103C,160C 'starting':76C 'step':192C 'still':197C 'such':164C 'take':306C 'tasks':303C 'than':73C,264C 'that':117C,120C,151C,242C,254C,304C 'the':38C,74C,101C,115C,136C,155C,159C,182C,186C,189C,201C,215C,223C,232C,252C,283C 'them':323C 'thing':235C 'this':49C,86C,296C,329C 'three':191C 'throwaway':326C 'time':61C 'to':85C,91C,111C,129C,205C,219C,227C,246C,286C,294C,309C,333C,337C 'tool':344C 'tries':6A 'truth':285C 'try':130C 'trying':218C,293C 'unironically':122C 'use':137C 'very':57C 'which':348C 'with':77C,113C,135C,200C 'without':272C 'woolf':18B,54C 'word':341C 'works':198C 'worth':59C 'would':88C,305C 'your':60C 'youtube':79C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-27 18:08:22+00:00
{
  "id": 9318,
  "slug": "claude-max-oss-six-months",
  "link_url": "https://claude.com/contact-sales/claude-for-oss",
  "link_title": "Free Claude Max for (large project) open source maintainers",
  "via_url": "https://news.ycombinator.com/item?id=47178371",
  "via_title": "Hacker News",
  "commentary": "Anthropic are now offering their $200/month Claude Max 20x plan for free to open source maintainers... for six months... and you have to meet the following criteria:\r\n\r\n> - **Maintainers:** You're a primary maintainer or core team member of a public repo with 5,000+ GitHub stars *or* 1M+ monthly NPM downloads. You've made commits, releases, or PR reviews within the last 3 months.\r\n> - **Don't quite fit the criteria** If you maintain something the ecosystem quietly depends on, apply anyway and tell us about it.\r\n\r\nAlso in the small print: \"Applications are reviewed on a rolling basis. We accept up to 10,000 contributors\".",
  "created": "2026-02-27T18:08:22+00:00",
  "metadata": {},
  "search_document": "'000':63C,123C '10':122C '1m':67C '200/month':25C '20x':28C '3':82C '5':62C 'a':50C,58C,115C 'about':104C 'accept':119C 'ai':13B,16B 'also':106C 'and':39C,101C 'anthropic':18B,20C 'anyway':100C 'applications':111C 'apply':99C 'are':21C,112C 'basis':117C 'claude':2A,19B,26C 'claude.com':125C 'commits':74C 'contributors':124C 'core':54C 'criteria':46C,89C 'depends':97C 'don':84C 'downloads':70C 'ecosystem':95C 'fit':87C 'following':45C 'for':4A,30C,36C 'free':1A,31C 'generative':15B 'generative-ai':14B 'github':64C 'hacker':126C 'have':41C 'if':90C 'in':107C 'it':105C 'large':5A 'last':81C 'llms':17B 'made':73C 'maintain':92C 'maintainer':52C 'maintainers':9A,35C,47C 'max':3A,27C 'meet':43C 'member':56C 'monthly':68C 'months':38C,83C 'news':127C 'now':22C 'npm':69C 'of':57C 'offering':23C 'on':98C,114C 'open':7A,11B,33C 'open-source':10B 'or':53C,66C,76C 'plan':29C 'pr':77C 'primary':51C 'print':110C 'project':6A 'public':59C 'quietly':96C 'quite':86C 're':49C 'releases':75C 'repo':60C 'reviewed':113C 'reviews':78C 'rolling':116C 'six':37C 'small':109C 'something':93C 'source':8A,12B,34C 'stars':65C 't':85C 'team':55C 'tell':102C 'the':44C,80C,88C,94C,108C 'their':24C 'to':32C,42C,121C 'up':120C 'us':103C 've':72C 'we':118C 'with':61C 'within':79C 'you':40C,48C,71C,91C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-27 17:50:54+00:00
{
  "id": 9317,
  "slug": "unicode-explorer",
  "link_url": "https://tools.simonwillison.net/unicode-binary-search",
  "link_title": "Unicode Explorer using binary search over fetch() HTTP range requests",
  "via_url": null,
  "via_title": null,
  "commentary": "Here's a little prototype I built this morning from my phone as an experiment in HTTP range requests, and a general example of using LLMs to satisfy curiosity.\r\n\r\nI've been collecting [HTTP range tricks](https://simonwillison.net/tags/http-range-requests/) for a while now, and I decided it would be fun to build something with them myself that used binary search against a large file to do something useful.\r\n\r\nSo I [brainstormed with Claude](https://claude.ai/share/47860666-cb20-44b5-8cdb-d0ebe363384f). The challenge was coming up with a use case for binary search where the data could be naturally sorted in a way that would benefit from binary search.\r\n\r\nOne of Claude's suggestions was looking up information about unicode codepoints, which means searching through many MBs of metadata.\r\n\r\nI had Claude write me a spec to feed to Claude Code - [visible here](https://github.com/simonw/research/pull/90#issue-4001466642) - then kicked off an [asynchronous research project](https://simonwillison.net/2025/Nov/6/async-code-research/) with Claude Code for web against my [simonw/research](https://github.com/simonw/research) repo to turn that into working code.\r\n\r\nHere's the [resulting report and code](https://github.com/simonw/research/tree/main/unicode-explorer-binary-search#readme). One interesting thing I learned is that Range request tricks aren't compatible with HTTP compression because they mess with the byte offset calculations. I added `'Accept-Encoding': 'identity'` to the `fetch()` calls but this isn't actually necessary because Cloudflare and other CDNs automatically skip compression if a `content-range` header is present.\r\n\r\nI deployed the result [to my tools.simonwillison.net site](https://tools.simonwillison.net/unicode-binary-search), after first tweaking it to query the data via range requests against a CORS-enabled 76.6MB file in an S3 bucket fronted by Cloudflare.\r\n\r\nThe demo is fun to play with - type in a single character like `\u00f8` or a hexadecimal codepoint indicator like `1F99C` and it will binary search its way through the large file and show you the steps it takes along the way:\r\n\r\n![Animated demo of a web tool called Unicode Explore. I enter the ampersand character and hit Search. A box below shows a sequence of HTTP binary search requests made, finding in 17 steps with 3,864 bytes transferred and telling me that ampersand is U+0026 in Punctuation other, Basic Latin](https://static.simonwillison.net/static/2026/unicode-explore.gif)",
  "created": "2026-02-27T17:50:54+00:00",
  "metadata": {},
  "search_document": "'+0026':391C '/2025/nov/6/async-code-research/)':182C '/share/47860666-cb20-44b5-8cdb-d0ebe363384f).':107C '/simonw/research)':193C '/simonw/research/pull/90#issue-4001466642)':172C '/simonw/research/tree/main/unicode-explorer-binary-search#readme).':210C '/static/2026/unicode-explore.gif)':399C '/tags/http-range-requests/)':70C '/unicode-binary-search),':277C '17':377C '1f99c':324C '3':380C '76.6':294C '864':381C 'a':34C,52C,72C,93C,114C,128C,161C,260C,290C,313C,319C,349C,363C,367C 'about':145C 'accept':238C 'accept-encoding':237C 'actually':249C 'added':236C 'after':278C 'against':92C,188C,289C 'ai':16B,19B,22B 'ai-assisted-programming':21B 'algorithms':11B 'along':343C 'ampersand':358C,388C 'an':45C,176C,298C 'and':51C,75C,206C,253C,325C,336C,360C,384C 'animated':346C 'aren':221C 'as':44C 'assisted':23B 'asynchronous':177C 'automatically':256C 'basic':395C 'be':80C,124C 'because':227C,251C 'been':63C 'below':365C 'benefit':132C 'binary':4A,90C,118C,134C,328C,371C 'box':364C 'brainstormed':102C 'bucket':300C 'build':83C 'built':38C 'but':245C 'by':302C 'byte':232C 'bytes':382C 'calculations':234C 'called':352C 'calls':244C 'case':116C 'cdns':255C 'challenge':109C 'character':315C,359C 'claude':104C,138C,158C,166C,184C 'claude.ai':106C 'claude.ai/share/47860666-cb20-44b5-8cdb-d0ebe363384f).':105C 'cloudflare':252C,303C 'code':167C,185C,200C,207C 'codepoint':321C 'codepoints':147C 'coding':27B 'collecting':64C 'coming':111C 'compatible':223C 'compression':226C,258C 'content':262C 'content-range':261C 'cors':292C 'cors-enabled':291C 'could':123C 'curiosity':60C 'data':122C,285C 'decided':77C 'demo':305C,347C 'deployed':268C 'do':97C 'enabled':293C 'encoding':239C 'enter':356C 'example':54C 'experiment':46C 'explore':354C 'explorer':2A 'feed':164C 'fetch':7A,243C 'file':95C,296C,335C 'finding':375C 'first':279C 'for':71C,117C,186C 'from':41C,133C 'fronted':301C 'fun':81C,307C 'general':53C 'generative':18B 'generative-ai':17B 'github.com':171C,192C,209C 'github.com/simonw/research)':191C 'github.com/simonw/research/pull/90#issue-4001466642)':170C 'github.com/simonw/research/tree/main/unicode-explorer-binary-search#readme).':208C 'had':157C 'header':264C 'here':32C,169C,201C 'hexadecimal':320C 'hit':361C 'http':8A,12B,29B,48C,65C,225C,370C 'http-range-requests':28B 'i':37C,61C,76C,101C,156C,214C,235C,267C,355C 'identity':240C 'if':259C 'in':47C,127C,297C,312C,376C,392C 'indicator':322C 'information':144C 'interesting':212C 'into':198C 'is':216C,265C,306C,389C 'isn':247C 'it':78C,281C,326C,341C 'its':330C 'kicked':174C 'large':94C,334C 'latin':396C 'learned':215C 'like':316C,323C 'little':35C 'llms':20B,57C 'looking':142C 'made':374C 'many':152C 'mb':295C 'mbs':153C 'me':160C,386C 'means':149C 'mess':229C 'metadata':155C 'morning':40C 'my':42C,189C,272C 'myself':87C 'naturally':125C 'necessary':250C 'now':74C 'of':55C,137C,154C,348C,369C 'off':175C 'offset':233C 'one':136C,211C 'or':318C 'other':254C,394C 'over':6A 'phone':43C 'play':309C 'present':266C 'programming':24B 'project':179C 'prototype':36C 'punctuation':393C 'query':283C 'range':9A,30B,49C,66C,218C,263C,287C 'repo':194C 'report':205C 'request':219C 'requests':10A,31B,50C,288C,373C 'research':13B,178C 'result':270C 'resulting':204C 's':33C,139C,202C 's3':299C 'satisfy':59C 'search':5A,91C,119C,135C,329C,362C,372C 'searching':150C 'sequence':368C 'show':337C 'shows':366C 'simonw/research':190C 'simonwillison.net':69C,181C 'simonwillison.net/2025/nov/6/async-code-research/)':180C 'simonwillison.net/tags/http-range-requests/)':68C 'single':314C 'site':274C 'skip':257C 'so':100C 'something':84C,98C 'sorted':126C 'spec':162C 'static.simonwillison.net':398C 'static.simonwillison.net/static/2026/unicode-explore.gif)':397C 'steps':340C,378C 'suggestions':140C 't':222C,248C 'takes':342C 'telling':385C 'that':88C,130C,197C,217C,387C 'the':108C,121C,203C,231C,242C,269C,284C,304C,333C,339C,344C,357C 'them':86C 'then':173C 'they':228C 'thing':213C 'this':39C,246C 'through':151C,332C 'to':58C,82C,96C,163C,165C,195C,241C,271C,282C,308C 'tool':351C 'tools':14B 'tools.simonwillison.net':273C,276C,400C 'tools.simonwillison.net/unicode-binary-search),':275C 'transferred':383C 'tricks':67C,220C 'turn':196C 'tweaking':280C 'type':311C 'u':390C 'unicode':1A,15B,146C,353C 'up':112C,143C 'use':115C 'used':89C 'useful':99C 'using':3A,56C 've':62C 'via':286C 'vibe':26B 'vibe-coding':25B 'visible':168C 'was':110C,141C 'way':129C,331C,345C 'web':187C,350C 'where':120C 'which':148C 'while':73C 'will':327C 'with':85C,103C,113C,183C,224C,230C,310C,379C 'working':199C 'would':79C,131C 'write':159C 'you':338C '\u00f8':317C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/unicode-explorer-card.jpg",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-02-26 19:03:27+00:00
{
  "id": 2037,
  "slug": "andrej-karpathy",
  "quotation": "It is hard to communicate how much programming has changed due to AI in the last 2 months: not gradually and over time in the \"progress as usual\" way, but specifically this last December. There are a number of asterisks but imo coding agents basically didn\u2019t work before December and basically work since - the models have significantly higher quality, long-term coherence and tenacity and they can power through large and long tasks, well past enough that it is extremely disruptive to the default programming workflow. [...]",
  "source": "Andrej Karpathy",
  "source_url": "https://twitter.com/karpathy/status/2026731645169185220",
  "created": "2026-02-26T19:03:27+00:00",
  "metadata": {},
  "search_document": "'-2025':108B '2':17A 'a':37A 'agentic':105B 'agentic-engineering':104B 'agents':44A,103B 'ai':13A,89B,95B,98B 'ai-assisted-programming':97B 'and':21A,51A,65A,67A,73A 'andrej':91B,110C 'andrej-karpathy':90B 'are':36A 'as':27A 'assisted':99B 'asterisks':40A 'basically':45A,52A 'before':49A 'but':30A,41A 'can':69A 'changed':10A 'coding':43A,102B 'coding-agents':101B 'coherence':64A 'communicate':5A 'december':34A,50A 'default':86A 'didn':46A 'disruptive':83A 'due':11A 'engineering':106B 'enough':78A 'extremely':82A 'generative':94B 'generative-ai':93B 'gradually':20A 'hard':3A 'has':9A 'have':57A 'higher':59A 'how':6A 'imo':42A 'in':14A,24A 'inflection':109B 'is':2A,81A 'it':1A,80A 'karpathy':92B,111C 'large':72A 'last':16A,33A 'llms':96B 'long':62A,74A 'long-term':61A 'models':56A 'months':18A 'much':7A 'not':19A 'november':107B 'number':38A 'of':39A 'over':22A 'past':77A 'power':70A 'programming':8A,87A,100B 'progress':26A 'quality':60A 'significantly':58A 'since':54A 'specifically':31A 't':47A 'tasks':75A 'tenacity':66A 'term':63A 'that':79A 'the':15A,25A,55A,85A 'there':35A 'they':68A 'this':32A 'through':71A 'time':23A 'to':4A,12A,84A 'usual':28A 'way':29A 'well':76A 'work':48A,53A 'workflow':88A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": null
}
blogmark 2026-02-26 04:28:55+00:00
{
  "id": 9316,
  "slug": "google-api-keys",
  "link_url": "https://trufflesecurity.com/blog/google-api-keys-werent-secrets-but-then-gemini-changed-the-rules",
  "link_title": "Google API Keys Weren't Secrets. But then Gemini Changed the Rules.",
  "via_url": "https://news.ycombinator.com/item?id=47156925",
  "via_title": "Hacker News",
  "commentary": "Yikes! It turns out Gemini and Google Maps (and other services) share the same API keys... but Google Maps API keys are designed to be public, since they are embedded directly in web pages. Gemini API keys can be used to access private files and make billable API requests, so they absolutely should not be shared.\r\n\r\nIf you don't understand this it's very easy to accidentally enable Gemini billing on a previously public API key that exists in the wild already.\r\n\r\n> What makes this a privilege escalation rather than a misconfiguration is the sequence of events.\u00a0\r\n> \r\n> 1.  A developer creates an API key and embeds it in a website for Maps. (At that point, the key is harmless.)\u00a0\r\n> 2.  The Gemini API gets enabled on the same project. (Now that same key can access sensitive Gemini endpoints.)\u00a0\r\n> 3.  The developer is never warned that the keys' privileges changed underneath it. (The key went from public identifier to secret credential).\r\n\r\nTruffle Security found 2,863 API keys in the November 2025 Common Crawl that could access Gemini, verified by hitting the `/models` listing endpoint. This included several keys belonging to Google themselves, one of which had been deployed since February 2023 (according to the Internet Archive) hence predating the Gemini API that it could now access.\r\n\r\nGoogle are working to revoke affected keys but it's still a good idea to check that none of yours are affected by this.",
  "created": "2026-02-26T04:28:55+00:00",
  "metadata": {},
  "search_document": "'/models':201C '1':117C '2':139C,183C '2023':220C '2025':190C '3':158C '863':184C 'a':91C,105C,110C,118C,128C,247C 'absolutely':70C 'access':60C,154C,195C,235C 'accidentally':86C 'according':221C 'affected':241C,257C 'already':101C 'an':121C 'and':24C,27C,63C,124C 'api':2A,14B,33C,38C,54C,66C,94C,122C,142C,185C,230C 'api-keys':13B 'archive':225C 'are':40C,47C,237C,256C 'at':132C 'be':43C,57C,73C 'been':216C 'belonging':208C 'billable':65C 'billing':89C 'but':7A,35C,243C 'by':198C,258C 'can':56C,153C 'changed':10A,168C 'check':251C 'common':191C 'could':194C,233C 'crawl':192C 'creates':120C 'credential':179C 'deployed':217C 'designed':41C 'developer':119C,160C 'directly':49C 'don':77C 'easy':84C 'embedded':48C 'embeds':125C 'enable':87C 'enabled':144C 'endpoint':203C 'endpoints':157C 'escalation':107C 'events':116C 'exists':97C 'february':219C 'files':62C 'for':130C 'found':182C 'from':174C 'gemini':9A,18B,23C,53C,88C,141C,156C,196C,229C 'gets':143C 'good':248C 'google':1A,16B,25C,36C,210C,236C 'hacker':261C 'had':215C 'harmless':138C 'hence':226C 'hitting':199C 'idea':249C 'identifier':176C 'if':75C 'in':50C,98C,127C,187C 'included':205C 'internet':224C 'is':112C,137C,161C 'it':20C,81C,126C,170C,232C,244C 'key':95C,123C,136C,152C,172C 'keys':3A,15B,34C,39C,55C,166C,186C,207C,242C 'listing':202C 'make':64C 'makes':103C 'maps':26C,37C,131C 'misconfiguration':111C 'never':162C 'news':262C 'none':253C 'not':72C 'november':189C 'now':149C,234C 'of':115C,213C,254C 'on':90C,145C 'one':212C 'other':28C 'out':22C 'pages':52C 'point':134C 'predating':227C 'previously':92C 'private':61C 'privilege':106C 'privileges':167C 'project':148C 'public':44C,93C,175C 'rather':108C 'requests':67C 'revoke':240C 'rules':12A 's':82C,245C 'same':32C,147C,151C 'secret':178C 'secrets':6A 'security':17B,181C 'sensitive':155C 'sequence':114C 'services':29C 'several':206C 'share':30C 'shared':74C 'should':71C 'since':45C,218C 'so':68C 'still':246C 't':5A,78C 'than':109C 'that':96C,133C,150C,164C,193C,231C,252C 'the':11A,31C,99C,113C,135C,140C,146C,159C,165C,171C,188C,200C,223C,228C 'themselves':211C 'then':8A 'they':46C,69C 'this':80C,104C,204C,259C 'to':42C,59C,85C,177C,209C,222C,239C,250C 'truffle':180C 'trufflesecurity.com':260C 'turns':21C 'underneath':169C 'understand':79C 'used':58C 'verified':197C 'very':83C 'warned':163C 'web':51C 'website':129C 'went':173C 'weren':4A 'what':102C 'which':214C 'wild':100C 'working':238C 'yikes':19C 'you':76C 'yours':255C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-02-26 03:44:56+00:00
{
  "id": 2036,
  "slug": "benedict-evans",
  "quotation": "If people are only using this a couple of times a week at most, and can\u2019t think of anything to do with it on the average day, it hasn\u2019t changed their life. OpenAI itself admits the problem, talking about a \u2018capability gap\u2019 between what the models can do and what people do with them, which seems to me like a way to avoid saying that you don\u2019t have clear product-market fit. \r\n\r\nHence, OpenAI\u2019s ad project is partly just about covering the cost of serving the 90% or more of users who don\u2019t pay (and capturing an early lead with advertisers and early learning in how this might work), but more strategically, it\u2019s also about making it possible to give those users the latest and most powerful (i.e. expensive) models, in the hope that this will deepen their engagement.",
  "source": "Benedict Evans",
  "source_url": "https://www.ben-evans.com/benedictevans/2026/2/19/how-will-openai-compete-nkg2x",
  "created": "2026-02-26T03:44:56+00:00",
  "metadata": {},
  "search_document": "'90':92A 'a':7A,11A,42A,62A 'about':41A,85A,122A 'ad':80A 'admits':37A 'advertisers':107A 'ai':147B 'also':121A 'an':103A 'and':15A,51A,101A,108A,132A 'anything':20A 'are':3A 'at':13A 'average':27A 'avoid':65A 'benedict':151B,153C 'benedict-evans':150B 'between':45A 'but':116A 'can':16A,49A 'capability':43A 'capturing':102A 'changed':32A 'chatgpt':149B 'clear':72A 'cost':88A 'couple':8A 'covering':86A 'day':28A 'deepen':144A 'do':22A,50A,54A 'don':69A,98A 'early':104A,109A 'engagement':146A 'evans':152B,154C 'expensive':136A 'fit':76A 'gap':44A 'give':127A 'hasn':30A 'have':71A 'hence':77A 'hope':140A 'how':112A 'i.e':135A 'if':1A 'in':111A,138A 'is':82A 'it':24A,29A,119A,124A 'itself':36A 'just':84A 'latest':131A 'lead':105A 'learning':110A 'life':34A 'like':61A 'making':123A 'market':75A 'me':60A 'might':114A 'models':48A,137A 'more':94A,117A 'most':14A,133A 'of':9A,19A,89A,95A 'on':25A 'only':4A 'openai':35A,78A,148B 'or':93A 'partly':83A 'pay':100A 'people':2A,53A 'possible':125A 'powerful':134A 'problem':39A 'product':74A 'product-market':73A 'project':81A 's':79A,120A 'saying':66A 'seems':58A 'serving':90A 'strategically':118A 't':17A,31A,70A,99A 'talking':40A 'that':67A,141A 'the':26A,38A,47A,87A,91A,130A,139A 'their':33A,145A 'them':56A 'think':18A 'this':6A,113A,142A 'those':128A 'times':10A 'to':21A,59A,64A,126A 'users':96A,129A 'using':5A 'way':63A 'week':12A 'what':46A,52A 'which':57A 'who':97A 'will':143A 'with':23A,55A,106A 'work':115A 'you':68A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "How will OpenAI compete?"
}
blogmark 2026-02-25 21:06:53+00:00
{
  "id": 9315,
  "slug": "closed-tests",
  "link_url": "https://github.com/tldraw/tldraw/issues/8082",
  "link_title": "tldraw issue: Move tests to closed source repo",
  "via_url": "https://twitter.com/steveruizok/status/2026581824428753211",
  "via_title": "@steveruizok",
  "commentary": "It's become very apparent over the past few months that a comprehensive test suite is enough to build a completely fresh implementation of any open source library from scratch, potentially in a different language.\r\n\r\nThis has worrying implications for open source projects with commercial business models. Here's an example of a response: tldraw, the outstanding collaborative drawing library (see [previous coverage](https://simonwillison.net/2023/Nov/16/tldrawdraw-a-ui/)), are moving their test suite to a private repository - apparently in response to [Cloudflare's project to port Next.js to use Vite in a week using AI](https://blog.cloudflare.com/vinext/).\r\n\r\nThey also filed a joke issue, now closed to [Translate source code to Traditional Chinese](https://github.com/tldraw/tldraw/issues/8092):\r\n\r\n> The current tldraw codebase is in English, making it easy for external AI coding agents to replicate. It is imperative that we defend our intellectual property.\r\n\r\nWorth noting that tldraw aren't technically open source - their [custom license](https://github.com/tldraw/tldraw?tab=License-1-ov-file#readme) requires a commercial license if you want to use it in \"production environments\".\r\n\r\n**Update**: Well this is embarrassing, it turns out the issue I linked to about removing the tests was [a joke as well](https://github.com/tldraw/tldraw/issues/8082#issuecomment-3964650501):\r\n\r\n> Sorry folks, this issue was more of a joke (am I allowed to do that?) but I'll keep the issue open since there's some discussion here. Writing from mobile\r\n> \r\n> - moving our tests into another repo would complicate and slow down our development, and speed for us is more important than ever\r\n> - more canvas better, I know for sure that our decisions have inspired other products and that's fine and good\r\n> - tldraw itself may eventually be a vibe coded alternative to tldraw\r\n> - the value is in the ability to produce new and good product decisions for users / customers, however you choose to create the code",
  "created": "2026-02-25T21:06:53+00:00",
  "metadata": {},
  "search_document": "'/2023/nov/16/tldrawdraw-a-ui/)),':81C '/tldraw/tldraw/issues/8082#issuecomment-3964650501):':208C '/tldraw/tldraw/issues/8092):':129C '/tldraw/tldraw?tab=license-1-ov-file#readme)':170C '/vinext/).':111C 'a':27C,35C,48C,68C,88C,105C,115C,172C,202C,216C,287C 'ability':298C 'about':197C 'agents':144C 'ai':14B,108C,142C 'ai-ethics':13B 'allowed':220C 'also':113C 'alternative':290C 'am':218C 'an':65C 'and':248C,253C,276C,280C,302C 'another':244C 'any':40C 'apparent':20C 'apparently':91C 'are':82C 'aren':160C 'as':204C 'be':286C 'become':18C 'better':264C 'blog.cloudflare.com':110C 'blog.cloudflare.com/vinext/).':109C 'build':34C 'business':61C 'but':224C 'canvas':263C 'chinese':126C 'choose':311C 'closed':6A,119C 'cloudflare':12B,95C 'code':123C,315C 'codebase':133C 'coded':289C 'coding':143C 'collaborative':73C 'commercial':60C,173C 'completely':36C 'complicate':247C 'comprehensive':28C 'coverage':78C 'create':313C 'current':131C 'custom':166C 'customers':308C 'decisions':271C,305C 'defend':152C 'development':252C 'different':49C 'discussion':235C 'do':222C 'down':250C 'drawing':74C 'easy':139C 'embarrassing':188C 'english':136C 'enough':32C 'environments':183C 'ethics':15B 'eventually':285C 'ever':261C 'example':66C 'external':141C 'few':24C 'filed':114C 'fine':279C 'folks':210C 'for':55C,140C,255C,267C,306C 'fresh':37C 'from':44C,238C 'github.com':128C,169C,207C,316C 'github.com/tldraw/tldraw/issues/8082#issuecomment-3964650501):':206C 'github.com/tldraw/tldraw/issues/8092):':127C 'github.com/tldraw/tldraw?tab=license-1-ov-file#readme)':168C 'good':281C,303C 'has':52C 'have':272C 'here':63C,236C 'however':309C 'i':194C,219C,225C,265C 'if':175C 'imperative':149C 'implementation':38C 'implications':54C 'important':259C 'in':47C,92C,104C,135C,181C,296C 'inspired':273C 'intellectual':154C 'into':243C 'is':31C,134C,148C,187C,257C,295C 'issue':2A,117C,193C,212C,229C 'it':16C,138C,147C,180C,189C 'itself':283C 'joke':116C,203C,217C 'keep':227C 'know':266C 'language':50C 'library':43C,75C 'license':167C,174C 'linked':195C 'll':226C 'making':137C 'may':284C 'mobile':239C 'models':62C 'months':25C 'more':214C,258C,262C 'move':3A 'moving':83C,240C 'new':301C 'next.js':100C 'noting':157C 'now':118C 'of':39C,67C,215C 'open':10B,41C,56C,163C,230C 'open-source':9B 'other':274C 'our':153C,241C,251C,270C 'out':191C 'outstanding':72C 'over':21C 'past':23C 'port':99C 'potentially':46C 'previous':77C 'private':89C 'produce':300C 'product':304C 'production':182C 'products':275C 'project':97C 'projects':58C 'property':155C 'removing':198C 'replicate':146C 'repo':8A,245C 'repository':90C 'requires':171C 'response':69C,93C 's':17C,64C,96C,233C,278C 'scratch':45C 'see':76C 'simonwillison.net':80C 'simonwillison.net/2023/nov/16/tldrawdraw-a-ui/)),':79C 'since':231C 'slow':249C 'some':234C 'sorry':209C 'source':7A,11B,42C,57C,122C,164C 'speed':254C 'steveruizok':317C 'suite':30C,86C 'sure':268C 't':161C 'technically':162C 'test':29C,85C 'tests':4A,200C,242C 'than':260C 'that':26C,150C,158C,223C,269C,277C 'the':22C,71C,130C,192C,199C,228C,293C,297C,314C 'their':84C,165C 'there':232C 'they':112C 'this':51C,186C,211C 'tldraw':1A,70C,132C,159C,282C,292C 'to':5A,33C,87C,94C,98C,101C,120C,124C,145C,178C,196C,221C,291C,299C,312C 'traditional':125C 'translate':121C 'turns':190C 'update':184C 'us':256C 'use':102C,179C 'users':307C 'using':107C 'value':294C 'very':19C 'vibe':288C 'vite':103C 'want':177C 'was':201C,213C 'we':151C 'week':106C 'well':185C,205C 'with':59C 'worrying':53C 'worth':156C 'would':246C 'writing':237C 'you':176C,310C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-25 17:33:24+00:00
{
  "id": 9313,
  "slug": "claude-code-remote-control",
  "link_url": "https://code.claude.com/docs/en/remote-control",
  "link_title": "Claude Code Remote Control",
  "via_url": "https://twitter.com/claudeai/status/2026418433911603668",
  "via_title": "@claudeai",
  "commentary": "New Claude Code feature dropped yesterday: you can now run a \"remote control\" session on your computer and then use the Claude Code for web interfaces (on web, iOS and native desktop app) to send prompts to that session.\r\n\r\nIt's a little bit janky right now. Initially when I tried it I got the error \"Remote Control is not enabled for your account. Contact your administrator.\" (but I *am* my administrator?) - then I logged out and back into the Claude Code terminal app and it started working:\r\n\r\n    claude remote-control\r\n\r\nYou can only run one session on your machine at a time. If you upgrade the Claude iOS app it then shows up as \"Remote Control Session (Mac)\" in the Code tab.\r\n\r\nIt appears not to support the `--dangerously-skip-permissions` flag (I passed that to `claude remote-control` and it didn't reject the option, but it also appeared to have no effect) - which means you have to approve every new action it takes.\r\n\r\nI also managed to get it to a state where every prompt I tried was met by an API 500 error.\r\n\r\n<p style=\"text-align: center;\"><img src=\"https://static.simonwillison.net/static/2026/vampire-remote.jpg\" alt=\"Screenshot of a &quot;Remote Control session&quot; (Mac:dev:817b) chat interface. User message: &quot;Play vampire by Olivia Rodrigo in music app&quot;. Response shows an API Error: 500 {&quot;type&quot;:&quot;error&quot;,&quot;error&quot;:{&quot;type&quot;:&quot;api_error&quot;,&quot;message&quot;:&quot;Internal server error&quot;},&quot;request_id&quot;:&quot;req_011CYVBLH9yt2ze2qehrX8nk&quot;} with a &quot;Try again&quot; button. Below, the assistant responds: &quot;I&#39;ll play &quot;Vampire&quot; by Olivia Rodrigo in the Music app using AppleScript.&quot; A Bash command panel is open showing an osascript command: osascript -e &#39;tell application &quot;Music&quot; activate set searchResults to search playlist &quot;Library&quot; for &quot;vampire Olivia Rodrigo&quot; if (count of searchResults) &gt; 0 then play item 1 of searchResults else return &quot;Song not found in library&quot; end if end tell&#39;\" style=\"max-width: 80%;\" /></p>\r\n\r\nRestarting the program on the machine also causes existing sessions to start returning mysterious API errors rather than neatly explaining that the session has terminated.\r\n\r\nI expect they'll iron out all of these issues relatively quickly. It's interesting to then contrast this to solutions like OpenClaw, where one of the big selling points is the ability to control your personal device from your phone.\r\n\r\nClaude Code still doesn't have a documented mechanism for running things on a schedule, which is the other killer feature of the Claw category of software.\r\n\r\n**Update**: I spoke too soon: also today Anthropic announced [Schedule recurring tasks in Cowork](https://support.claude.com/en/articles/13854387-schedule-recurring-tasks-in-cowork), Claude Code's [general agent sibling](https://simonwillison.net/2026/Jan/12/claude-cowork/). These do include an important limitation:\r\n\r\n> Scheduled tasks only run while your computer is awake and the Claude Desktop app is open. If your computer is asleep or the app is closed when a task is scheduled to run, Cowork will skip the task, then run it automatically once your computer wakes up or you open the desktop app again.\r\n\r\nI really hope they're working on a Cowork Cloud product.",
  "created": "2026-02-25T17:33:24+00:00",
  "metadata": {},
  "search_document": "'/2026/jan/12/claude-cowork/).':328C '/en/articles/13854387-schedule-recurring-tasks-in-cowork),':319C '500':208C 'a':30C,61C,122C,196C,282C,289C,362C,396C 'ability':267C 'account':83C 'action':186C 'administrator':86C,91C 'again':388C 'agent':324C 'agents':15B 'ai':5B,8B 'all':241C 'also':172C,190C,216C,308C 'am':89C 'an':206C,332C 'and':37C,49C,96C,104C,163C,344C 'announced':311C 'anthropic':11B,310C 'api':207C,224C 'app':52C,103C,130C,348C,358C,387C 'appeared':173C 'appears':145C 'applescript':9B 'approve':183C 'as':135C 'asleep':355C 'at':121C 'automatically':376C 'awake':343C 'back':97C 'big':262C 'bit':63C 'but':87C,170C 'by':205C 'can':27C,113C 'category':300C 'causes':217C 'claude':1A,12B,17B,21C,41C,100C,108C,128C,159C,276C,320C,346C 'claude-code':16B 'claudeai':401C 'claw':299C 'closed':360C 'cloud':398C 'code':2A,18B,22C,42C,101C,142C,277C,321C 'code.claude.com':400C 'coding':14B 'coding-agents':13B 'computer':36C,341C,353C,379C 'contact':84C 'contrast':252C 'control':4A,32C,77C,111C,137C,162C,269C 'cowork':316C,368C,397C 'dangerously':151C 'dangerously-skip-permissions':150C 'desktop':51C,347C,386C 'device':272C 'didn':165C 'do':330C 'documented':283C 'doesn':279C 'dropped':24C 'effect':177C 'enabled':80C 'error':75C,209C 'errors':225C 'every':184C,199C 'existing':218C 'expect':236C 'explaining':229C 'feature':23C,296C 'flag':154C 'for':43C,81C,285C 'from':273C 'general':323C 'generative':7B 'generative-ai':6B 'get':193C 'got':73C 'has':233C 'have':175C,181C,281C 'hope':391C 'i':69C,72C,88C,93C,155C,189C,201C,235C,304C,389C 'if':124C,351C 'important':333C 'in':140C,315C 'include':331C 'initially':67C 'interesting':249C 'interfaces':45C 'into':98C 'ios':48C,129C 'iron':239C 'is':78C,265C,292C,342C,349C,354C,359C,364C 'issues':244C 'it':59C,71C,105C,131C,144C,164C,171C,187C,194C,247C,375C 'janky':64C 'killer':295C 'like':256C 'limitation':334C 'little':62C 'll':238C 'llms':10B 'logged':94C 'mac':139C 'machine':120C,215C 'managed':191C 'means':179C 'mechanism':284C 'met':204C 'my':90C 'mysterious':223C 'native':50C 'neatly':228C 'new':20C,185C 'no':176C 'not':79C,146C 'now':28C,66C 'of':242C,260C,297C,301C 'on':34C,46C,118C,213C,288C,395C 'once':377C 'one':116C,259C 'only':114C,337C 'open':350C,384C 'openclaw':19B,257C 'option':169C 'or':356C,382C 'other':294C 'out':95C,240C 'passed':156C 'permissions':153C 'personal':271C 'phone':275C 'points':264C 'product':399C 'program':212C 'prompt':200C 'prompts':55C 'quickly':246C 'rather':226C 're':393C 'really':390C 'recurring':313C 'reject':167C 'relatively':245C 'remote':3A,31C,76C,110C,136C,161C 'remote-control':109C,160C 'restarting':210C 'returning':222C 'right':65C 'run':29C,115C,338C,367C,374C 'running':286C 's':60C,248C,322C 'schedule':290C,312C 'scheduled':335C,365C 'selling':263C 'send':54C 'session':33C,58C,117C,138C,232C 'sessions':219C 'shows':133C 'sibling':325C 'simonwillison.net':327C 'simonwillison.net/2026/jan/12/claude-cowork/).':326C 'skip':152C,370C 'software':302C 'solutions':255C 'soon':307C 'spoke':305C 'start':221C 'started':106C 'state':197C 'still':278C 'support':148C 'support.claude.com':318C 'support.claude.com/en/articles/13854387-schedule-recurring-tasks-in-cowork),':317C 't':166C,280C 'tab':143C 'takes':188C 'task':363C,372C 'tasks':314C,336C 'terminal':102C 'terminated':234C 'than':227C 'that':57C,157C,230C 'the':40C,74C,99C,127C,141C,149C,168C,211C,214C,231C,261C,266C,293C,298C,345C,357C,371C,385C 'then':38C,92C,132C,251C,373C 'these':243C,329C 'they':237C,392C 'things':287C 'this':253C 'time':123C 'to':53C,56C,147C,158C,174C,182C,192C,195C,220C,250C,254C,268C,366C 'today':309C 'too':306C 'tried':70C,202C 'up':134C,381C 'update':303C 'upgrade':126C 'use':39C 'wakes':380C 'was':203C 'web':44C,47C 'when':68C,361C 'where':198C,258C 'which':178C,291C 'while':339C 'will':369C 'working':107C,394C 'yesterday':25C 'you':26C,112C,125C,180C,383C 'your':35C,82C,85C,119C,270C,274C,340C,352C,378C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-02-25 03:30:32+00:00
{
  "id": 2035,
  "slug": "kellan-elliott-mccrea",
  "quotation": "It\u2019s also reasonable for people who entered technology in the last couple of decades because it was good job, or because they enjoyed coding to look at this moment with a real feeling of loss. That feeling of loss though can be hard to understand emotionally for people my age who entered tech because we were addicted to feeling of agency it gave us. The web was objectively awful as a technology, and genuinely amazing, and nobody got into it because programming in Perl was somehow aesthetically delightful.",
  "source": "Kellan Elliott-McCrea",
  "source_url": "https://laughingmeme.org/2026/02/09/code-has-always-been-the-easy-part.html",
  "created": "2026-02-25T03:30:32+00:00",
  "metadata": {},
  "search_document": "'a':32A,72A 'addicted':58A 'aesthetically':88A 'age':51A 'agency':62A 'agentic':101B 'agentic-engineering':100B 'ai':95B,98B 'also':3A 'amazing':76A 'and':74A,77A 'as':71A 'at':28A 'awful':70A 'be':43A 'because':16A,22A,55A,82A 'blue':105B 'can':42A 'coding':25A 'couple':13A 'decades':15A 'deep':104B 'deep-blue':103B 'delightful':89A 'elliott':92B,108C 'elliott-mccrea':107C 'emotionally':47A 'engineering':102B 'enjoyed':24A 'entered':8A,53A 'feeling':34A,38A,60A 'for':5A,48A 'gave':64A 'generative':97B 'generative-ai':96B 'genuinely':75A 'good':19A 'got':79A 'hard':44A 'in':10A,84A 'into':80A 'it':1A,17A,63A,81A 'job':20A 'kellan':91B,106C 'kellan-elliott-mccrea':90B 'last':12A 'llms':99B 'look':27A 'loss':36A,40A 'mccrea':93B,109C 'moment':30A 'my':50A 'nobody':78A 'objectively':69A 'of':14A,35A,39A,61A 'or':21A 'people':6A,49A 'perl':85A,94B 'programming':83A 'real':33A 'reasonable':4A 's':2A 'somehow':87A 'tech':54A 'technology':9A,73A 'that':37A 'the':11A,66A 'they':23A 'this':29A 'though':41A 'to':26A,45A,59A 'understand':46A 'us':65A 'was':18A,68A,86A 'we':56A 'web':67A 'were':57A 'who':7A,52A 'with':31A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "Code has *always* been the easy part"
}
blogmark 2026-02-24 16:10:06+00:00
{
  "id": 9312,
  "slug": "go-size-analyzer",
  "link_url": "https://github.com/Zxilly/go-size-analyzer",
  "link_title": "go-size-analyzer",
  "via_url": "https://www.datadoghq.com/blog/engineering/agent-go-binaries/",
  "via_title": "Datadog: How we reduced the size of our Agent Go binaries by up to 77%",
  "commentary": "The Go ecosystem is *really* good at tooling. I just learned about this tool for analyzing the size of Go binaries using a pleasing treemap view of their bundled dependencies.\r\n\r\nYou can install and run the tool locally, but it's also compiled to WebAssembly and hosted at [gsa.zxilly.dev](https://gsa.zxilly.dev/) - which means you can open compiled Go binaries and analyze them directly in your browser.\r\n\r\nI tried it with a 8.1MB macOS compiled copy of my Go [Showboat](https://github.com/simonw/showboat) tool and got this:\r\n\r\n![Treemap visualization of a Go binary named \"showboat\" showing size breakdown across four major categories: \"Unknown Sections Size\" (containing __rodata __TEXT, __rodata __DATA_CONST, __data __DATA, and Debug Sections Size with __zdebug_line __DWARF, __zdebug_loc __DWARF, __zdebug_info __DWARF), \"Std Packages Size\" (showing standard library packages like runtime, net, crypto, reflect, math, os, fmt, strings, syscall, context, and many subpackages such as crypto/tls, crypto/x509, net/http, with individual .go files visible at deeper levels), \"Main Packages Size\" (showing main, showboat, cmd), and \"Generated Packages Size\" (showing <autogenerated>). A tooltip is visible over __zdebug_line __DWARF showing: Section: __zdebug_line __DWARF, Size: 404.44 KB, File Size: 404.44 KB, Known size: 0 B, Unknown size: 404.44 KB, Offset: 0x52814a \u2013 0x58d310, Address: 0x1005c014a \u2013 0x1005c5310, Memory: false, Debug: true. The treemap uses green for main/generated packages, blue-gray for unknown sections, and shades of purple/pink for standard library packages.](https://static.simonwillison.net/static/2026/showboat-treemap.jpg)",
  "created": "2026-02-24T16:10:06+00:00",
  "metadata": {},
  "search_document": "'/)':59C '/simonw/showboat)':91C '/static/2026/showboat-treemap.jpg)':243C '0':204C '0x1005c014a':214C '0x1005c5310':215C '0x52814a':211C '0x58d310':212C '404.44':196C,200C,208C '77':259C '8.1':80C 'a':30C,79C,99C,182C 'about':19C 'across':107C 'address':213C 'agent':253C 'also':49C 'analyze':69C 'analyzer':4A 'analyzing':23C 'and':41C,53C,68C,93C,122C,154C,177C,233C 'as':158C 'at':14C,55C,167C 'b':205C 'binaries':28C,67C,255C 'binary':101C 'blue':228C 'blue-gray':227C 'breakdown':106C 'browser':74C 'bundled':36C 'but':46C 'by':256C 'can':39C,63C 'categories':110C 'cmd':176C 'compiled':50C,65C,83C 'const':119C 'containing':114C 'context':153C 'copy':84C 'crypto':146C 'crypto/tls':159C 'crypto/x509':160C 'data':118C,120C,121C 'datadog':245C 'debug':123C,218C 'deeper':168C 'dependencies':37C 'directly':71C 'dwarf':129C,132C,135C,189C,194C 'ecosystem':10C 'false':217C 'file':198C 'files':165C 'fmt':150C 'for':22C,224C,230C,237C 'four':108C 'generated':178C 'github.com':90C,244C 'github.com/simonw/showboat)':89C 'go':2A,5B,9C,27C,66C,87C,100C,164C,254C 'go-size-analyzer':1A 'good':13C 'got':94C 'gray':229C 'green':223C 'gsa.zxilly.dev':56C,58C 'gsa.zxilly.dev/)':57C 'hosted':54C 'how':246C 'i':16C,75C 'in':72C 'individual':163C 'info':134C 'install':40C 'is':11C,184C 'it':47C,77C 'just':17C 'kb':197C,201C,209C 'known':202C 'learned':18C 'levels':169C 'library':141C,239C 'like':143C 'line':128C,188C,193C 'loc':131C 'locally':45C 'macos':82C 'main':170C,174C 'main/generated':225C 'major':109C 'many':155C 'math':148C 'mb':81C 'means':61C 'memory':216C 'my':86C 'named':102C 'net':145C 'net/http':161C 'of':26C,34C,85C,98C,235C,251C 'offset':210C 'open':64C 'os':149C 'our':252C 'over':186C 'packages':137C,142C,171C,179C,226C,240C 'pleasing':31C 'purple/pink':236C 'really':12C 'reduced':248C 'reflect':147C 'rodata':115C,117C 'run':42C 'runtime':144C 's':48C 'section':191C 'sections':112C,124C,232C 'shades':234C 'showboat':7B,88C,103C,175C 'showing':104C,139C,173C,181C,190C 'size':3A,25C,105C,113C,125C,138C,172C,180C,195C,199C,203C,207C,250C 'standard':140C,238C 'static.simonwillison.net':242C 'static.simonwillison.net/static/2026/showboat-treemap.jpg)':241C 'std':136C 'strings':151C 'subpackages':156C 'such':157C 'syscall':152C 'text':116C 'the':8C,24C,43C,220C,249C 'their':35C 'them':70C 'this':20C,95C 'to':51C,258C 'tool':21C,44C,92C 'tooling':15C 'tooltip':183C 'treemap':32C,96C,221C 'tried':76C 'true':219C 'unknown':111C,206C,231C 'up':257C 'uses':222C 'using':29C 'view':33C 'visible':166C,185C 'visualization':97C 'we':247C 'webassembly':6B,52C 'which':60C 'with':78C,126C,162C 'you':38C,62C 'your':73C 'zdebug':127C,130C,133C,187C,192C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/showboat-treemap.jpg",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-23 18:52:53+00:00
{
  "id": 9311,
  "slug": "ladybird-adopts-rust",
  "link_url": "https://ladybird.org/posts/adopting-rust/",
  "link_title": "Ladybird adopts Rust, with help from AI",
  "via_url": "https://news.ycombinator.com/item?id=47120899",
  "via_title": "Hacker News",
  "commentary": "Really interesting case-study from Andreas Kling on advanced, sophisticated use of coding agents for ambitious coding projects with critical code. After a few years hoping Swift's platform support outside of the Apple ecosystem would mature they switched tracks to Rust their memory-safe language of choice, starting with an AI-assisted port of a critical library:\r\n\r\n> Our first target was **LibJS** , Ladybird's JavaScript engine. The lexer, parser, AST, and bytecode generator are relatively self-contained and have extensive test coverage through [test262](https://github.com/tc39/test262), which made them a natural starting point.\r\n>\r\n> I used [Claude Code](https://docs.anthropic.com/en/docs/claude-code) and [Codex](https://openai.com/codex/) for the translation. This was human-directed, not autonomous code generation. I decided what to port, in what order, and what the Rust code should look like. It was hundreds of small prompts, steering the agents where things needed to go. [...]\r\n>\r\n> The requirement from the start was byte-for-byte identical output from both pipelines. The result was about 25,000 lines of Rust, and the entire port took about two weeks. The same work would have taken me multiple months to do by hand. We\u2019ve verified that every AST produced by the Rust parser is identical to the C++ one, and all bytecode generated by the Rust compiler is identical to the C++ compiler\u2019s output. Zero regressions across the board.\r\n\r\nHaving an existing conformance testing suite of the quality of `test262` is a huge unlock for projects of this magnitude, and the ability to compare output with an existing trusted implementation makes agentic engineering much more of a safe bet.",
  "created": "2026-02-23T18:52:53+00:00",
  "metadata": {},
  "search_document": "'/codex/)':144C '/en/docs/claude-code)':139C '/tc39/test262),':125C '000':207C '25':206C 'a':57C,92C,129C,282C,307C 'ability':292C 'about':205C,216C 'across':267C 'adopts':2A 'advanced':43C 'after':56C 'agentic':32B,302C 'agentic-engineering':31B 'agents':26B,48C,181C 'ai':7A,10B,14B,17B,88C 'ai-assisted':87C 'ai-assisted-programming':16B 'all':250C 'ambitious':50C 'an':86C,271C,297C 'and':108C,116C,140C,165C,211C,249C,290C 'andreas':21B,40C 'andreas-kling':20B 'apple':68C 'are':111C 'assisted':18B,89C 'ast':107C,237C 'autonomous':154C 'bet':309C 'board':269C 'both':200C 'browsers':8B 'by':230C,239C,253C 'byte':194C,196C 'byte-for-byte':193C 'bytecode':109C,251C 'c':247C,261C 'case':37C 'case-study':36C 'choice':83C 'claude':135C 'code':55C,136C,155C,169C 'codex':141C 'coding':25B,47C,51C 'coding-agents':24B 'compare':294C 'compiler':256C,262C 'conformance':29B,273C 'conformance-suites':28B 'contained':115C 'coverage':120C 'critical':54C,93C 'decided':158C 'directed':152C 'do':229C 'docs.anthropic.com':138C 'docs.anthropic.com/en/docs/claude-code)':137C 'ecosystem':69C 'engine':103C 'engineering':33B,303C 'entire':213C 'every':236C 'existing':272C,298C 'extensive':118C 'few':58C 'first':96C 'for':49C,145C,195C,285C 'from':6A,39C,189C,199C 'generated':252C 'generation':156C 'generative':13B 'generative-ai':12B 'generator':110C 'github.com':124C 'github.com/tc39/test262),':123C 'go':186C 'hacker':311C 'hand':231C 'have':117C,223C 'having':270C 'help':5A 'hoping':60C 'huge':283C 'human':151C 'human-directed':150C 'hundreds':175C 'i':133C,157C 'identical':197C,244C,258C 'implementation':300C 'in':162C 'interesting':35C 'is':243C,257C,281C 'it':173C 'javascript':9B,102C 'kling':22B,41C 'ladybird':1A,23B,100C 'ladybird.org':310C 'language':81C 'lexer':105C 'libjs':99C 'library':94C 'like':172C 'lines':208C 'llms':15B 'look':171C 'made':127C 'magnitude':289C 'makes':301C 'mature':71C 'me':225C 'memory':79C 'memory-safe':78C 'months':227C 'more':305C 'much':304C 'multiple':226C 'natural':130C 'needed':184C 'news':312C 'not':153C 'of':46C,66C,82C,91C,176C,209C,276C,279C,287C,306C 'on':42C 'one':248C 'openai.com':143C 'openai.com/codex/)':142C 'order':164C 'our':95C 'output':198C,264C,295C 'outside':65C 'parser':106C,242C 'pipelines':201C 'platform':63C 'point':132C 'port':90C,161C,214C 'produced':238C 'programming':19B 'projects':52C,286C 'prompts':178C 'quality':278C 'really':34C 'regressions':266C 'relatively':112C 'requirement':188C 'result':203C 'rust':3A,11B,76C,168C,210C,241C,255C 's':62C,101C,263C 'safe':80C,308C 'same':220C 'self':114C 'self-contained':113C 'should':170C 'small':177C 'sophisticated':44C 'start':191C 'starting':84C,131C 'steering':179C 'study':38C 'suite':275C 'suites':30B 'support':64C 'swift':27B,61C 'switched':73C 'taken':224C 'target':97C 'test':119C 'test262':122C,280C 'testing':274C 'that':235C 'the':67C,104C,146C,167C,180C,187C,190C,202C,212C,219C,240C,246C,254C,260C,268C,277C,291C 'their':77C 'them':128C 'they':72C 'things':183C 'this':148C,288C 'through':121C 'to':75C,160C,185C,228C,245C,259C,293C 'took':215C 'tracks':74C 'translation':147C 'trusted':299C 'two':217C 'unlock':284C 'use':45C 'used':134C 've':233C 'verified':234C 'was':98C,149C,174C,192C,204C 'we':232C 'weeks':218C 'what':159C,163C,166C 'where':182C 'which':126C 'with':4A,53C,85C,296C 'work':221C 'would':70C,222C 'years':59C 'zero':265C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-02-23 16:00:32+00:00
{
  "id": 2034,
  "slug": "paul-ford",
  "quotation": "The paper asked me to explain vibe coding, and I did so, because I think something big is coming there, and I'm deep in, and I worry that normal people are not able to see it and I want them to be prepared. But people can't just read something and hate you quietly; they can't see that you have provided them with a utility or a warning; they need their screech. You are distributed to millions of people, and become the local proxy for the emotions of maybe dozens of people, who disagree and demand your attention, and because you are the one in the paper you need to welcome them with a pastor's smile and deep empathy, and if you speak a word in your own defense they'll screech even louder.",
  "source": "Paul Ford",
  "source_url": "https://ftrain.com/leading-thoughts",
  "created": "2026-02-23T16:00:32+00:00",
  "metadata": {},
  "search_document": "'a':66A,69A,116A,127A 'able':34A 'and':9A,21A,26A,38A,52A,82A,97A,101A,120A,123A 'are':32A,76A,104A 'asked':3A 'attention':100A 'be':43A 'because':13A,102A 'become':83A 'big':17A 'but':45A 'can':47A,57A 'coding':8A,147B 'coming':19A 'deep':24A,121A 'defense':132A 'demand':98A 'did':11A 'disagree':96A 'distributed':77A 'dozens':92A 'emotions':89A 'empathy':122A 'even':136A 'explain':6A 'for':87A 'ford':144B,149C 'hate':53A 'have':62A 'i':10A,14A,22A,27A,39A 'if':124A 'in':25A,107A,129A 'is':18A 'it':37A 'just':49A 'll':134A 'local':85A 'louder':137A 'm':23A 'maybe':91A 'me':4A 'millions':79A 'need':72A,111A 'new':139B 'new-york-times':138B 'normal':30A 'not':33A 'of':80A,90A,93A 'one':106A 'or':68A 'own':131A 'paper':2A,109A 'pastor':117A 'paul':143B,148C 'paul-ford':142B 'people':31A,46A,81A,94A 'prepared':44A 'provided':63A 'proxy':86A 'quietly':55A 'read':50A 's':118A 'screech':74A,135A 'see':36A,59A 'smile':119A 'so':12A 'something':16A,51A 'speak':126A 't':48A,58A 'that':29A,60A 'the':1A,84A,88A,105A,108A 'their':73A 'them':41A,64A,114A 'there':20A 'they':56A,71A,133A 'think':15A 'times':141B 'to':5A,35A,42A,78A,112A 'utility':67A 'vibe':7A,146B 'vibe-coding':145B 'want':40A 'warning':70A 'welcome':113A 'who':95A 'with':65A,115A 'word':128A 'worry':28A 'york':140B 'you':54A,61A,75A,103A,110A,125A 'your':99A,130A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "on writing about vibe coding for the New York Times"
}
quotation 2026-02-23 13:01:13+00:00
{
  "id": 2033,
  "slug": "summer-yue",
  "quotation": "Nothing humbles you like telling your OpenClaw \u201cconfirm before acting\u201d and watching it speedrun deleting your inbox. I couldn\u2019t stop it from my phone. I had to RUN to my Mac mini like I was defusing a bomb.\r\n\r\n![Screenshot of a WhatsApp or similar messaging conversation showing a user repeatedly trying to stop an AI agent (appearing to be \"OpenClaw\") that is autonomously executing terminal commands to mass-delete emails. The agent sends messages prefixed with \"\ud83d\udee0 Exec:\" running commands like \"gog gmail search 'in:inbox' --max 20 -a\" and \"# Nuclear option: trash EVERYTHING in inbox older than Feb 15 that isn't already in my keep list\", while the user urgently responds with \"What's going on? Can you describe what you're doing\" at 6:00 PM, \"Do not do that\" at 6:01 PM, \"Stop don't do anything\" at 6:02 PM, and \"STOP OPENCLAW\" at 6:03 PM. The agent continues executing commands including setting ACCT variables with redacted email addresses and commenting \"# Get ALL remaining old stuff and nuke it\" and \"# Keep looping until we clear everything old\", ignoring the user's repeated requests to stop. Email addresses and account details are partially redacted with gray blocks.](https://static.simonwillison.net/static/2026/stop-openclaw.jpg)\r\n\r\nI said \u201cCheck this inbox too and suggest what you would archive or delete, don\u2019t action until I tell you to.\u201d This has been working well for my toy inbox, but my real inbox was too huge and triggered compaction. During the compaction, it lost my original instruction \ud83e\udd26\u200d\u2640\ufe0f",
  "source": "Summer Yue",
  "source_url": "https://twitter.com/summeryue0/status/2025836517831405980",
  "created": "2026-02-23T13:01:13+00:00",
  "metadata": {},
  "search_document": "'/static/2026/stop-openclaw.jpg)':207A '00':129A '01':137A '02':146A '03':153A '15':101A '20':89A '6':128A,136A,145A,152A 'a':38A,42A,49A,90A 'account':197A 'acct':162A 'acting':10A 'action':224A 'addresses':167A,195A 'agent':57A,74A,156A 'agents':264B 'ai':56A,257B,260B,263B,266B 'ai-agents':262B 'ai-ethics':265B 'all':171A 'already':105A 'an':55A 'and':11A,91A,148A,168A,175A,178A,196A,214A,246A 'anything':143A 'appearing':58A 'archive':219A 'are':199A 'at':127A,135A,144A,151A 'autonomously':64A 'be':60A 'been':232A 'before':9A 'blocks':204A 'bomb':39A 'but':239A 'can':120A 'check':210A 'clear':183A 'commands':67A,81A,159A 'commenting':169A 'compaction':248A,251A 'confirm':8A 'continues':157A 'conversation':47A 'couldn':19A 'defusing':37A 'delete':71A,221A 'deleting':15A 'describe':122A 'details':198A 'do':131A,133A,142A 'doing':126A 'don':140A,222A 'during':249A 'email':166A,194A 'emails':72A 'ethics':267B 'everything':95A,184A 'exec':79A 'executing':65A,158A 'feb':100A 'for':235A 'from':23A 'generative':259B 'generative-ai':258B 'get':170A 'gmail':84A 'gog':83A 'going':118A 'gray':203A 'had':27A 'has':231A 'huge':245A 'humbles':2A 'i':18A,26A,35A,208A,226A 'ignoring':186A 'in':86A,96A,106A 'inbox':17A,87A,97A,212A,238A,242A 'including':160A 'instruction':256A 'is':63A 'isn':103A 'it':13A,22A,177A,252A 'keep':108A,179A 'like':4A,34A,82A 'list':109A 'llms':261B 'looping':180A 'lost':253A 'mac':32A 'mass':70A 'mass-delete':69A 'max':88A 'messages':76A 'messaging':46A 'mini':33A 'my':24A,31A,107A,236A,240A,254A 'not':132A 'nothing':1A 'nuclear':92A 'nuke':176A 'of':41A 'old':173A,185A 'older':98A 'on':119A 'openclaw':7A,61A,150A,268B 'option':93A 'or':44A,220A 'original':255A 'partially':200A 'phone':25A 'pm':130A,138A,147A,154A 'prefixed':77A 're':125A 'real':241A 'redacted':165A,201A 'remaining':172A 'repeated':190A 'repeatedly':51A 'requests':191A 'responds':114A 'run':29A 'running':80A 's':117A,189A 'said':209A 'screenshot':40A 'search':85A 'sends':75A 'setting':161A 'showing':48A 'similar':45A 'speedrun':14A 'static.simonwillison.net':206A 'static.simonwillison.net/static/2026/stop-openclaw.jpg)':205A 'stop':21A,54A,139A,149A,193A 'stuff':174A 'suggest':215A 'summer':269C 't':20A,104A,141A,223A 'tell':227A 'telling':5A 'terminal':66A 'than':99A 'that':62A,102A,134A 'the':73A,111A,155A,187A,250A 'this':211A,230A 'to':28A,30A,53A,59A,68A,192A,229A 'too':213A,244A 'toy':237A 'trash':94A 'triggered':247A 'trying':52A 'until':181A,225A 'urgently':113A 'user':50A,112A,188A 'variables':163A 'was':36A,243A 'watching':12A 'we':182A 'well':234A 'what':116A,123A,216A 'whatsapp':43A 'while':110A 'with':78A,115A,164A,202A 'working':233A 'would':218A 'you':3A,121A,124A,217A,228A 'your':6A,16A 'yue':270C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": null
}
blogmark 2026-02-22 23:58:43+00:00
{
  "id": 9310,
  "slug": "ccc",
  "link_url": "https://www.modular.com/blog/the-claude-c-compiler-what-it-reveals-about-the-future-of-software",
  "link_title": "The Claude C Compiler: What It Reveals About the Future of Software",
  "via_url": null,
  "via_title": null,
  "commentary": "On February 5th Anthropic's Nicholas Carlini wrote about a project to use [parallel Claudes to build a C compiler](https://www.anthropic.com/engineering/building-c-compiler) on top of the brand new Opus 4.6\r\n\r\nChris Lattner (Swift, LLVM, Clang, Mojo) knows more about C compilers than most. He just published this review of the code.\r\n\r\nSome points that stood out to me:\r\n\r\n> - Good software depends on judgment, communication, and clear abstraction. AI has amplified this.\r\n> - AI coding is automation of implementation, so design and stewardship become more important.\r\n> - Manual rewrites and translation work are becoming AI-native tasks, automating a large category of engineering effort.\r\n\r\nChris is generally impressed with CCC (the Claude C Compiler):\r\n\r\n> Taken together, CCC looks less like an experimental research compiler and more like a competent textbook implementation, the sort of system a strong undergraduate team might build early in a project before years of refinement. That alone is remarkable.\r\n\r\nIt's a long way from being a production-ready compiler though:\r\n\r\n> Several design choices suggest optimization toward passing tests rather than building general abstractions like a human would. [...] These flaws are informative rather than surprising, suggesting that current AI systems excel at assembling known techniques and optimizing toward measurable success criteria, while struggling with the open-ended generalization required for production-quality systems.\r\n\r\nThe project also leads to deep open questions about how agentic engineering interacts with licensing and IP for both open source and proprietary code:\r\n\r\n> If AI systems trained on decades of publicly available code can reproduce familiar structures, patterns, and even specific implementations, where exactly is the boundary between learning and copying?",
  "created": "2026-02-22T23:58:43+00:00",
  "metadata": {},
  "search_document": "'/engineering/building-c-compiler)':56C '4.6':64C '5th':36C 'a':43C,51C,131C,160C,168C,176C,188C,193C,213C 'about':8A,42C,73C,261C 'abstraction':101C 'abstractions':211C 'agentic':32B,263C 'agentic-engineering':31B 'agents':30B 'ai':18B,20B,102C,106C,127C,226C,278C 'ai-assisted-programming':19B 'ai-native':126C 'alone':183C 'also':255C 'amplified':104C 'an':153C 'and':99C,114C,121C,157C,233C,268C,274C,292C,303C 'anthropic':23B,37C 'are':124C,218C 'assembling':230C 'assisted':21B 'at':229C 'automating':130C 'automation':109C 'available':285C 'become':116C 'becoming':125C 'before':178C 'being':192C 'between':301C 'both':271C 'boundary':300C 'brand':61C 'build':50C,173C 'building':209C 'c':3A,13B,52C,74C,145C 'can':287C 'carlini':27B,40C 'category':133C 'ccc':142C,149C 'choices':201C 'chris':65C,137C 'clang':69C 'claude':2A,24B,144C 'claudes':48C 'clear':100C 'code':85C,276C,286C 'coding':29B,107C 'coding-agents':28B 'communication':98C 'competent':161C 'compiler':4A,53C,146C,156C,197C 'compilers':14B,75C 'copying':304C 'criteria':238C 'current':225C 'decades':282C 'deep':258C 'depends':95C 'design':113C,200C 'early':174C 'effort':136C 'ended':245C 'engineering':33B,135C,264C 'even':293C 'exactly':297C 'excel':228C 'experimental':154C 'familiar':289C 'february':35C 'flaws':217C 'for':248C,270C 'from':191C 'future':10A 'general':210C 'generalization':246C 'generally':139C 'good':93C 'has':103C 'he':78C 'how':262C 'human':214C 'if':277C 'implementation':111C,163C 'implementations':295C 'important':118C 'impressed':140C 'in':175C 'informative':219C 'interacts':265C 'ip':269C 'is':108C,138C,184C,298C 'it':6A,186C 'judgment':97C 'just':79C 'known':231C 'knows':71C 'large':132C 'lattner':66C 'leads':256C 'learning':302C 'less':151C 'licensing':267C 'like':152C,159C,212C 'llvm':68C 'long':189C 'looks':150C 'manual':119C 'me':92C 'measurable':236C 'might':172C 'mojo':70C 'more':72C,117C,158C 'most':77C 'native':128C 'new':62C 'nicholas':26B,39C 'nicholas-carlini':25B 'of':11A,59C,83C,110C,134C,166C,180C,283C 'on':34C,57C,96C,281C 'open':16B,244C,259C,272C 'open-ended':243C 'open-source':15B 'optimization':203C 'optimizing':234C 'opus':63C 'out':90C 'parallel':47C 'passing':205C 'patterns':291C 'points':87C 'production':195C,250C 'production-quality':249C 'production-ready':194C 'programming':22B 'project':44C,177C,254C 'proprietary':275C 'publicly':284C 'published':80C 'quality':251C 'questions':260C 'rather':207C,220C 'ready':196C 'refinement':181C 'remarkable':185C 'reproduce':288C 'required':247C 'research':155C 'reveals':7A 'review':82C 'rewrites':120C 's':38C,187C 'several':199C 'so':112C 'software':12A,94C 'some':86C 'sort':165C 'source':17B,273C 'specific':294C 'stewardship':115C 'stood':89C 'strong':169C 'structures':290C 'struggling':240C 'success':237C 'suggest':202C 'suggesting':223C 'surprising':222C 'swift':67C 'system':167C 'systems':227C,252C,279C 'taken':147C 'tasks':129C 'team':171C 'techniques':232C 'tests':206C 'textbook':162C 'than':76C,208C,221C 'that':88C,182C,224C 'the':1A,9A,60C,84C,143C,164C,242C,253C,299C 'these':216C 'this':81C,105C 'though':198C 'to':45C,49C,91C,257C 'together':148C 'top':58C 'toward':204C,235C 'trained':280C 'translation':122C 'undergraduate':170C 'use':46C 'way':190C 'what':5A 'where':296C 'while':239C 'with':141C,241C,266C 'work':123C 'would':215C 'wrote':41C 'www.anthropic.com':55C 'www.anthropic.com/engineering/building-c-compiler)':54C 'www.modular.com':305C 'years':179C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-22 23:54:39+00:00
{
  "id": 9309,
  "slug": "raspberry-pi-openclaw",
  "link_url": "https://www.londonstockexchange.com/stock/RPI/raspberry-pi-holdings-plc/company-page",
  "link_title": "London Stock Exchange: Raspberry Pi Holdings plc",
  "via_url": null,
  "via_title": null,
  "commentary": "Striking graph illustrating stock in the UK Raspberry Pi holding company spiking on Tuesday:\r\n\r\n![Stock price line chart for RASPBERRY PI showing a 3-month daily view from 24 Nov to 16 Feb. The price trends downward from around 325 to a low near 260, then sharply spikes upward. A tooltip highlights \"RASPBERRY PI: 415.00, 16/02/2026\". The y-axis ranges from 240 to 420.](https://static.simonwillison.net/static/2026/raspberry-pi-plc.jpg)\r\n\r\nThe Telegraph [credited excitement around OpenClaw](https://finance.yahoo.com/news/british-computer-maker-soars-ai-141836041.html): \r\n\r\n> Raspberry Pi's stock price has surged 30pc in two days, amid chatter on social media that the company's tiny computers can be used to power a popular AI chatbot.\r\n>\r\n> Users have turned to Raspberry Pi's small computers to run a technology known as OpenClaw, [a viral AI personal assistant](https://www.telegraph.co.uk/business/2026/02/07/i-built-a-whatsapp-bot-and-now-it-runs-my-entire-life/). A flood of posts about the practice have been viewed millions of times since the weekend.\r\n\r\nReuters [also credit a stock purchase by CEO Eben Upton](https://finance.yahoo.com/news/raspberry-pi-soars-40-ceo-151342904.html):\r\n\r\n> Shares in Raspberry Pi rose as much as 42% on Tuesday in \u200ca record two\u2011day rally after CEO Eben Upton bought \u200cstock in the beaten\u2011down UK computer hardware firm, halting a months\u2011long slide, \u200bas chatter grew that its products could benefit from low\u2011cost artificial\u2011intelligence projects.\r\n>\r\n> Two London traders said the driver behind the surge was not clear, though the move followed a filing showing Upton bought \u200cabout 13,224 pounds \u2060worth of shares at around 282 pence each on Monday.",
  "created": "2026-02-22T23:54:39+00:00",
  "metadata": {},
  "search_document": "'/business/2026/02/07/i-built-a-whatsapp-bot-and-now-it-runs-my-entire-life/).':151C '/news/british-computer-maker-soars-ai-141836041.html):':96C '/news/raspberry-pi-soars-40-ceo-151342904.html):':180C '/static/2026/raspberry-pi-plc.jpg)':87C '13':253C '16':51C '16/02/2026':75C '224':254C '24':48C '240':82C '260':64C '282':261C '3':43C '30pc':104C '325':59C '415.00':74C '42':189C '420':84C 'a':42C,61C,69C,124C,139C,144C,152C,171C,193C,213C,247C 'about':156C,252C 'after':198C 'agents':18B 'ai':8B,11B,17B,126C,146C 'ai-agents':16B 'also':169C 'amid':108C 'around':58C,92C,260C 'artificial':228C 'as':142C,186C,188C,217C 'assistant':148C 'at':259C 'axis':79C 'be':120C 'beaten':206C 'been':160C 'behind':237C 'benefit':224C 'bought':202C,251C 'by':174C 'can':119C 'ceo':175C,199C 'chart':37C 'chatbot':127C 'chatter':109C,218C 'clear':242C 'company':30C,115C 'computer':209C 'computers':118C,136C 'cost':227C 'could':223C 'credit':170C 'credited':90C 'daily':45C 'day':196C 'days':107C 'down':207C 'downward':56C 'driver':236C 'each':263C 'eben':176C,200C 'exchange':3A 'excitement':91C 'feb':52C 'filing':248C 'finance.yahoo.com':95C,179C 'finance.yahoo.com/news/british-computer-maker-soars-ai-141836041.html):':94C 'finance.yahoo.com/news/raspberry-pi-soars-40-ceo-151342904.html):':178C 'firm':211C 'flood':153C 'followed':246C 'for':38C 'from':47C,57C,81C,225C 'generative':10B 'generative-ai':9B 'graph':21C 'grew':219C 'halting':212C 'hardware':210C 'has':102C 'have':129C,159C 'highlights':71C 'holding':29C 'holdings':6A 'illustrating':22C 'in':24C,105C,182C,192C,204C 'intelligence':229C 'its':221C 'known':141C 'line':36C 'llms':15B 'london':1A,232C 'long':215C 'low':62C,226C 'media':112C 'millions':162C 'monday':265C 'month':44C 'months':214C 'move':245C 'much':187C 'near':63C 'not':241C 'nov':49C 'of':154C,163C,257C 'on':32C,110C,190C,264C 'openclaw':19B,93C,143C 'pence':262C 'personal':147C 'pi':5A,14B,28C,40C,73C,98C,133C,184C 'plc':7A 'popular':125C 'posts':155C 'pounds':255C 'power':123C 'practice':158C 'price':35C,54C,101C 'products':222C 'projects':230C 'purchase':173C 'rally':197C 'ranges':80C 'raspberry':4A,13B,27C,39C,72C,97C,132C,183C 'raspberry-pi':12B 'record':194C 'reuters':168C 'rose':185C 'run':138C 's':99C,116C,134C 'said':234C 'shares':181C,258C 'sharply':66C 'showing':41C,249C 'since':165C 'slide':216C 'small':135C 'social':111C 'spikes':67C 'spiking':31C 'static.simonwillison.net':86C 'static.simonwillison.net/static/2026/raspberry-pi-plc.jpg)':85C 'stock':2A,23C,34C,100C,172C,203C 'striking':20C 'surge':239C 'surged':103C 'technology':140C 'telegraph':89C 'that':113C,220C 'the':25C,53C,76C,88C,114C,157C,166C,205C,235C,238C,244C 'then':65C 'though':243C 'times':164C 'tiny':117C 'to':50C,60C,83C,122C,131C,137C 'tooltip':70C 'traders':233C 'trends':55C 'tuesday':33C,191C 'turned':130C 'two':106C,195C,231C 'uk':26C,208C 'upton':177C,201C,250C 'upward':68C 'used':121C 'users':128C 'view':46C 'viewed':161C 'viral':145C 'was':240C 'weekend':167C 'worth':256C 'www.londonstockexchange.com':266C 'www.telegraph.co.uk':150C 'www.telegraph.co.uk/business/2026/02/07/i-built-a-whatsapp-bot-and-now-it-runs-my-entire-life/).':149C 'y':78C 'y-axis':77C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/raspberry-pi-plc.jpg",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-22 15:53:43+00:00
{
  "id": 9308,
  "slug": "how-i-think-about-codex",
  "link_url": "https://www.linkedin.com/pulse/how-i-think-codex-gabriel-chua-ukhic",
  "link_title": "How I think about Codex",
  "via_url": null,
  "via_title": null,
  "commentary": "Gabriel Chua (Developer Experience Engineer for APAC at OpenAI) provides his take on the confusing terminology behind the term \"Codex\", which can refer to a bunch of of different things within the OpenAI ecosystem:\r\n\r\n> In plain terms, Codex is OpenAI\u2019s software engineering agent, available through multiple interfaces, and an agent is a model plus instructions and tools, wrapped in a runtime that can execute tasks on your behalf. [...]\r\n> \r\n> At a high level, I see Codex as three parts working together:\r\n>\r\n> *Codex = Model + Harness + Surfaces* [...]\r\n>\r\n> - Model + Harness = the Agent\r\n> - Surfaces = how you interact with the Agent\r\n\r\nHe defines the harness as \"the collection of instructions and tools\", which is notably open source and lives in the [openai/codex](https://github.com/openai/codex) repository.\r\n\r\nGabriel also provides the first acknowledgment I've seen from an OpenAI insider that the Codex model family are directly trained for the Codex harness:\r\n\r\n> Codex models are trained in the presence of the harness. Tool use, execution loops, compaction, and iterative verification aren\u2019t bolted on behaviors \u2014 they\u2019re part of how the model learns to operate. The harness, in turn, is shaped around how the model plans, invokes tools, and recovers from failure.",
  "created": "2026-02-22T15:53:43+00:00",
  "metadata": {},
  "search_document": "'/openai/codex)':138C 'a':43C,71C,79C,89C 'about':4A 'acknowledgment':145C 'agent':62C,69C,107C,114C 'ai':10B,13B 'ai-assisted-programming':12B 'also':141C 'an':68C,150C 'and':67C,75C,124C,131C,180C,211C 'apac':25C 'are':158C,167C 'aren':183C 'around':204C 'as':95C,119C 'assisted':14B 'at':26C,88C 'available':63C 'behalf':87C 'behaviors':187C 'behind':35C 'bolted':185C 'bunch':44C 'can':40C,82C 'chua':20C 'cli':18B 'codex':5A,17B,38C,56C,94C,100C,155C,163C,165C 'codex-cli':16B 'collection':121C 'compaction':179C 'confusing':33C 'defines':116C 'definitions':6B 'developer':21C 'different':47C 'directly':159C 'ecosystem':52C 'engineer':23C 'engineering':61C 'execute':83C 'execution':177C 'experience':22C 'failure':214C 'family':157C 'first':144C 'for':24C,161C 'from':149C,213C 'gabriel':19C,140C 'generative':9B 'generative-ai':8B 'github.com':137C 'github.com/openai/codex)':136C 'harness':102C,105C,118C,164C,174C,199C 'he':115C 'high':90C 'his':29C 'how':1A,109C,192C,205C 'i':2A,92C,146C 'in':53C,78C,133C,169C,200C 'insider':152C 'instructions':74C,123C 'interact':111C 'interfaces':66C 'invokes':209C 'is':57C,70C,127C,202C 'iterative':181C 'learns':195C 'level':91C 'lives':132C 'llms':11B 'loops':178C 'model':72C,101C,104C,156C,194C,207C 'models':166C 'multiple':65C 'notably':128C 'of':45C,46C,122C,172C,191C 'on':31C,85C,186C 'open':129C 'openai':7B,27C,51C,58C,151C 'openai/codex':135C 'operate':197C 'part':190C 'parts':97C 'plain':54C 'plans':208C 'plus':73C 'presence':171C 'programming':15B 'provides':28C,142C 're':189C 'recovers':212C 'refer':41C 'repository':139C 'runtime':80C 's':59C 'see':93C 'seen':148C 'shaped':203C 'software':60C 'source':130C 'surfaces':103C,108C 't':184C 'take':30C 'tasks':84C 'term':37C 'terminology':34C 'terms':55C 'that':81C,153C 'the':32C,36C,50C,106C,113C,117C,120C,134C,143C,154C,162C,170C,173C,193C,198C,206C 'they':188C 'things':48C 'think':3A 'three':96C 'through':64C 'to':42C,196C 'together':99C 'tool':175C 'tools':76C,125C,210C 'trained':160C,168C 'turn':201C 'use':176C 've':147C 'verification':182C 'which':39C,126C 'with':112C 'within':49C 'working':98C 'wrapped':77C 'www.linkedin.com':215C 'you':110C 'your':86C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-02-21 01:30:21+00:00
{
  "id": 2032,
  "slug": "thibault-sottiaux",
  "quotation": "We\u2019ve made GPT-5.3-Codex-Spark about 30% faster. It is now serving at over 1200 tokens per second.",
  "source": "Thibault Sottiaux",
  "source_url": "https://twitter.com/thsottiaux/status/2024947946849186064",
  "created": "2026-02-21T01:30:21+00:00",
  "metadata": {},
  "search_document": "'-5.3':5A '1200':18A '30':10A 'about':9A 'ai':22B,26B 'at':16A 'codex':7A 'codex-spark':6A 'faster':11A 'generative':25B 'generative-ai':24B 'gpt':4A 'is':13A 'it':12A 'llm':29B 'llm-performance':28B 'llms':27B 'made':3A 'now':14A 'openai':23B 'over':17A 'per':20A 'performance':30B 'second':21A 'serving':15A 'sottiaux':32C 'spark':8A 'thibault':31C 'tokens':19A 've':2A 'we':1A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "OpenAI"
}
blogmark 2026-02-21 00:37:45+00:00
{
  "id": 9307,
  "slug": "claws",
  "link_url": "https://twitter.com/karpathy/status/2024987174077432126",
  "link_title": "Andrej Karpathy talks about \"Claws\"",
  "via_url": null,
  "via_title": null,
  "commentary": "Andrej Karpathy tweeted a mini-essay about buying a Mac Mini (\"The apple store person told me they are selling like hotcakes and everyone is confused\") to tinker with Claws:\r\n\r\n> I'm definitely a bit sus'd to run OpenClaw specifically [...] But I do love the concept and I think that just like LLM agents were a new layer on top of LLMs, Claws are now a new layer on top of LLM agents, taking the orchestration, scheduling, context, tool calls and a kind of persistence to a next level.\r\n>\r\n> Looking around, and given that the high level idea is clear, there are a lot of smaller Claws starting to pop out. For example, on a quick skim NanoClaw looks really interesting in that the core engine is ~4000 lines of code (fits into both my head and that of AI agents, so it feels manageable, auditable, flexible, etc.) and runs everything in containers by default. [...]\r\n>\r\n> Anyway there are many others - e.g. nanobot, zeroclaw, ironclaw, picoclaw (lol @ prefixes). [...]\r\n>\r\n> Not 100% sure what my setup ends up looking like just yet but Claws are an awesome, exciting new layer of the AI stack.\r\n\r\nAndrej has an ear for fresh terminology (see [vibe coding](https://simonwillison.net/2025/Mar/19/vibe-coding/), [agentic engineering](https://simonwillison.net/2026/Feb/11/glm-5/)) and I think he's right about this one, too: \"**Claw**\" is becoming a term of art for the entire category of OpenClaw-like agent systems - AI agents that generally run on personal hardware, communicate via messaging protocols and can both act on direct instructions and schedule tasks.\r\n\r\nIt even comes with an established emoji \ud83e\udd9e",
  "created": "2026-02-21T00:37:45+00:00",
  "metadata": {},
  "search_document": "'/2025/mar/19/vibe-coding/),':227C '/2026/feb/11/glm-5/))':232C '100':192C '4000':151C 'a':25C,31C,56C,79C,89C,105C,110C,126C,138C,246C 'about':4A,29C,239C 'act':275C 'agent':258C 'agentic':20B,228C 'agentic-engineering':19B 'agents':17B,77C,96C,164C,261C 'ai':7B,13B,16B,163C,213C,260C 'ai-agents':15B 'an':206C,217C,286C 'and':45C,70C,104C,115C,160C,172C,233C,272C,279C 'andrej':1A,9B,22C,215C 'andrej-karpathy':8B 'anyway':179C 'apple':35C 'are':41C,87C,125C,181C,205C 'around':114C 'art':249C 'auditable':169C 'awesome':207C 'becoming':245C 'bit':57C 'both':157C,274C 'but':64C,203C 'buying':30C 'by':177C 'calls':103C 'can':273C 'category':253C 'claw':243C 'claws':5A,52C,86C,130C,204C 'clear':123C 'code':154C 'coding':224C 'comes':284C 'communicate':268C 'concept':69C 'confused':48C 'containers':176C 'context':101C 'core':148C 'd':59C 'default':178C 'definitely':55C 'definitions':6B 'direct':277C 'do':66C 'e.g':184C 'ear':218C 'emoji':288C 'ends':197C 'engine':149C 'engineering':21B,229C 'entire':252C 'essay':28C 'established':287C 'etc':171C 'even':283C 'everyone':46C 'everything':174C 'example':136C 'exciting':208C 'feels':167C 'fits':155C 'flexible':170C 'for':135C,219C,250C 'fresh':220C 'generally':263C 'generative':12B 'generative-ai':11B 'given':116C 'hardware':267C 'has':216C 'he':236C 'head':159C 'high':119C 'hotcakes':44C 'i':53C,65C,71C,234C 'idea':121C 'in':145C,175C 'instructions':278C 'interesting':144C 'into':156C 'ironclaw':187C 'is':47C,122C,150C,244C 'it':166C,282C 'just':74C,201C 'karpathy':2A,10B,23C 'kind':106C 'layer':81C,91C,210C 'level':112C,120C 'like':43C,75C,200C,257C 'lines':152C 'llm':76C,95C 'llms':14B,85C 'lol':189C 'looking':113C,199C 'looks':142C 'lot':127C 'love':67C 'm':54C 'mac':32C 'manageable':168C 'many':182C 'me':39C 'messaging':270C 'mini':27C,33C 'mini-essay':26C 'my':158C,195C 'nanobot':185C 'nanoclaw':141C 'new':80C,90C,209C 'next':111C 'not':191C 'now':88C 'of':84C,94C,107C,128C,153C,162C,211C,248C,254C 'on':82C,92C,137C,265C,276C 'one':241C 'openclaw':18B,62C,256C 'openclaw-like':255C 'orchestration':99C 'others':183C 'out':134C 'persistence':108C 'person':37C 'personal':266C 'picoclaw':188C 'pop':133C 'prefixes':190C 'protocols':271C 'quick':139C 'really':143C 'right':238C 'run':61C,264C 'runs':173C 's':237C 'schedule':280C 'scheduling':100C 'see':222C 'selling':42C 'setup':196C 'simonwillison.net':226C,231C 'simonwillison.net/2025/mar/19/vibe-coding/),':225C 'simonwillison.net/2026/feb/11/glm-5/))':230C 'skim':140C 'smaller':129C 'so':165C 'specifically':63C 'stack':214C 'starting':131C 'store':36C 'sure':193C 'sus':58C 'systems':259C 'taking':97C 'talks':3A 'tasks':281C 'term':247C 'terminology':221C 'that':73C,117C,146C,161C,262C 'the':34C,68C,98C,118C,147C,212C,251C 'there':124C,180C 'they':40C 'think':72C,235C 'this':240C 'tinker':50C 'to':49C,60C,109C,132C 'told':38C 'too':242C 'tool':102C 'top':83C,93C 'tweeted':24C 'twitter.com':289C 'up':198C 'via':269C 'vibe':223C 'were':78C 'what':194C 'with':51C,285C 'yet':202C 'zeroclaw':186C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-20 22:10:04+00:00
{
  "id": 9306,
  "slug": "taalas",
  "link_url": "https://taalas.com/the-path-to-ubiquitous-ai/",
  "link_title": "Taalas serves Llama 3.1 8B at 17,000 tokens/second",
  "via_url": "https://news.ycombinator.com/item?id=47086181",
  "via_title": "Hacker News",
  "commentary": "This new Canadian hardware startup just announced their first product - a custom hardware implementation of the Llama 3.1 8B model (from [July 2024](https://simonwillison.net/2024/Jul/23/introducing-llama-31/)) that can run at a staggering 17,000 tokens/second.\r\n\r\nI was going to include a video of their demo but it's so fast it would look more like a screenshot. You can try it out at [chatjimmy.ai](https://chatjimmy.ai).\r\n\r\nThey describe their Silicon Llama as \u201caggressively quantized, combining 3-bit and 6-bit parameters.\u201d Their next generation will use 4-bit - presumably they have quite a long lead time for baking out new models!",
  "created": "2026-02-20T22:10:04+00:00",
  "metadata": {},
  "search_document": "'/2024/jul/23/introducing-llama-31/))':44C '000':8A,52C '17':7A,51C '2024':41C '3':93C '3.1':4A,36C '4':104C '6':96C '8b':5A,37C 'a':29C,49C,59C,74C,110C 'aggressively':90C 'ai':10B,13B 'and':95C 'announced':25C 'as':89C 'at':6A,48C,81C 'baking':115C 'bit':94C,97C,105C 'but':64C 'can':46C,77C 'canadian':21C 'chatjimmy.ai':82C,83C 'combining':92C 'custom':30C 'demo':63C 'describe':85C 'fast':68C 'first':27C 'for':114C 'from':39C 'generation':101C 'generative':12B 'generative-ai':11B 'going':56C 'hacker':120C 'hardware':22C,31C 'have':108C 'i':54C 'implementation':32C 'include':58C 'it':65C,69C,79C 'july':40C 'just':24C 'lead':112C 'like':73C 'llama':3A,14B,35C,88C 'llm':17B 'llm-performance':16B 'llms':15B 'long':111C 'look':71C 'model':38C 'models':118C 'more':72C 'new':20C,117C 'news':121C 'next':100C 'of':33C,61C 'out':80C,116C 'parameters':98C 'performance':18B 'presumably':106C 'product':28C 'quantized':91C 'quite':109C 'run':47C 's':66C 'screenshot':75C 'serves':2A 'silicon':87C 'simonwillison.net':43C 'simonwillison.net/2024/jul/23/introducing-llama-31/))':42C 'so':67C 'staggering':50C 'startup':23C 'taalas':1A 'taalas.com':119C 'that':45C 'the':34C 'their':26C,62C,86C,99C 'they':84C,107C 'this':19C 'time':113C 'to':57C 'tokens/second':9A,53C 'try':78C 'use':103C 'video':60C 'was':55C 'will':102C 'would':70C 'you':76C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-20 17:12:55+00:00
{
  "id": 9305,
  "slug": "ggmlai-joins-hugging-face",
  "link_url": "https://github.com/ggml-org/llama.cpp/discussions/19759",
  "link_title": "ggml.ai joins Hugging Face to ensure the long-term progress of Local AI",
  "via_url": "https://twitter.com/ggerganov/status/2024839991482777976",
  "via_title": "@ggerganov",
  "commentary": "I don't normally cover acquisition news like this, but I have some thoughts.\r\n\r\nIt's hard to overstate the impact Georgi Gerganov has had on the local model space. Back in March 2023 his release of [llama.cpp](https://github.com/ggml-org/llama.cpp) made it possible to run a local LLM on consumer hardware. The [original README](https://github.com/ggml-org/llama.cpp/blob/775328064e69db1ebd7e19ccb59d2a7fa6142470/README.md?plain=1#L7) said:\r\n\r\n> The main goal is to run the model using 4-bit quantization on a MacBook. [...] This was hacked in an evening - I have no idea if it works correctly.\r\n\r\nI wrote about trying llama.cpp out at the time in [Large language models are having their Stable Diffusion moment](https://simonwillison.net/2023/Mar/11/llama/#llama-cpp):\r\n\r\n> I used it to run the 7B LLaMA model on my laptop last night, and then this morning upgraded to the 13B model\u2014the one that Facebook claim is competitive with GPT-3.\r\n\r\nMeta's [original LLaMA release](https://github.com/meta-llama/llama/tree/llama_v1) depended on PyTorch and their [FairScale](https://github.com/facebookresearch/fairscale) PyTorch extension for running on multiple GPUs, and required CUDA and NVIDIA hardware. Georgi's work opened that up to a much wider range of hardware and kicked off the local model movement that has continued to grow since then.\r\n\r\nHugging Face are already responsible for the incredibly influential [Transformers](https://github.com/huggingface/transformers) library used by the majority of LLM releases today. They've proven themselves a good steward for that open source project, which makes me optimistic for the future of llama.cpp and related projects.\r\n\r\nThis section from the announcement looks particularly promising:\r\n\r\n> Going forward, our joint efforts will be geared towards the following objectives:\r\n>\r\n> - Towards seamless \"single-click\" integration with the [transformers](https://github.com/huggingface/transformers) library. The `transformers` framework has established itself as the 'source of truth' for AI model definitions. Improving the compatibility between the transformers and the ggml ecosystems is essential for wider model support and quality control.\r\n> - Better packaging and user experience of ggml-based software. As we enter the phase in which local inference becomes a meaningful and competitive alternative to cloud inference, it is crucial to improve and simplify the way in which casual users deploy and access local models. We will work towards making llama.cpp ubiquitous and readily available everywhere, and continue partnering with great downstream projects.\r\n\r\nGiven the influence of Transformers, this closer integration could lead to model releases that are compatible with the GGML ecosystem out of the box. That would be a big win for the local model ecosystem.\r\n\r\nI'm also excited to see investment in \"packaging and user experience of ggml-based software\". This has mostly been left to tools like [Ollama](https://ollama.com) and [LM Studio](https://lmstudio.ai). ggml-org released [LlamaBarn](https://github.com/ggml-org/LlamaBarn) last year - \"a macOS menu bar app for running local LLMs\" - and I'm hopeful that further investment in this area will result in more high quality open source tools for running local models from the team best placed to deliver them.",
  "created": "2026-02-20T17:12:55+00:00",
  "metadata": {},
  "search_document": "'-3':176C '/2023/mar/11/llama/#llama-cpp):':143C '/facebookresearch/fairscale)':193C '/ggml-org/llama.cpp)':74C '/ggml-org/llama.cpp/blob/775328064e69db1ebd7e19ccb59d2a7fa6142470/readme.md?plain=1#l7)':91C '/ggml-org/llamabarn)':484C '/huggingface/transformers)':246C,311C '/meta-llama/llama/tree/llama_v1)':184C '13b':165C '2023':67C '4':102C '7b':150C 'a':80C,106C,214C,260C,367C,438C,487C 'about':124C 'access':390C 'acquisition':39C 'ai':14A,19B,22B,325C 'already':237C 'also':448C 'alternative':371C 'an':112C 'and':158C,188C,201C,204C,220C,277C,334C,344C,349C,369C,380C,389C,400C,404C,455C,473C,496C 'announcement':284C 'app':491C 'are':135C,236C,425C 'area':505C 'as':319C,357C 'at':128C 'available':402C 'back':64C 'bar':490C 'based':355C,461C 'be':294C,437C 'becomes':366C 'been':466C 'best':522C 'better':347C 'between':331C 'big':439C 'bit':103C 'box':434C 'but':43C 'by':249C 'casual':386C 'claim':171C 'click':304C 'closer':417C 'cloud':373C 'compatibility':330C 'compatible':426C 'competitive':173C,370C 'consumer':84C 'continue':405C 'continued':229C 'control':346C 'correctly':121C 'could':419C 'cover':38C 'cpp':33B 'crucial':377C 'cuda':203C 'definitions':327C 'deliver':525C 'depended':185C 'deploy':388C 'diffusion':139C 'don':35C 'downstream':409C 'ecosystem':430C,445C 'ecosystems':337C 'efforts':292C 'ensure':6A 'enter':359C 'essential':339C 'established':317C 'evening':113C 'everywhere':403C 'excited':449C 'experience':351C,457C 'extension':195C 'face':4A,30B,235C 'facebook':170C 'fairscale':190C 'following':298C 'for':196C,239C,263C,272C,324C,340C,441C,492C,515C 'forward':289C 'framework':315C 'from':282C,519C 'further':501C 'future':274C 'geared':295C 'generative':21B 'generative-ai':20B 'georgi':55C,207C 'gerganov':56C 'ggerganov':528C 'ggml':336C,354C,429C,460C,478C 'ggml-based':353C,459C 'ggml-org':477C 'ggml.ai':1A 'github.com':73C,90C,183C,192C,245C,310C,483C,527C 'github.com/facebookresearch/fairscale)':191C 'github.com/ggml-org/llama.cpp)':72C 'github.com/ggml-org/llama.cpp/blob/775328064e69db1ebd7e19ccb59d2a7fa6142470/readme.md?plain=1#l7)':89C 'github.com/ggml-org/llamabarn)':482C 'github.com/huggingface/transformers)':244C,309C 'github.com/meta-llama/llama/tree/llama_v1)':182C 'given':411C 'goal':95C 'going':288C 'good':261C 'gpt':175C 'gpus':200C 'great':408C 'grow':231C 'hacked':110C 'had':58C 'hard':50C 'hardware':85C,206C,219C 'has':57C,228C,316C,464C 'have':45C,115C 'having':136C 'high':510C 'his':68C 'hopeful':499C 'hugging':3A,29B,234C 'hugging-face':28B 'i':34C,44C,114C,122C,144C,446C,497C 'idea':117C 'if':118C 'impact':54C 'improve':379C 'improving':328C 'in':65C,111C,131C,362C,384C,453C,503C,508C 'incredibly':241C 'inference':365C,374C 'influence':413C 'influential':242C 'integration':305C,418C 'investment':452C,502C 'is':96C,172C,338C,376C 'it':48C,76C,119C,146C,375C 'itself':318C 'joins':2A 'joint':291C 'kicked':221C 'language':133C 'laptop':155C 'large':132C 'last':156C,485C 'lead':420C 'left':467C 'library':247C,312C 'like':41C,470C 'llama':23B,32B,151C,180C 'llama-cpp':31B 'llama.cpp':71C,126C,276C,398C 'llamabarn':481C 'llm':82C,253C 'llms':26B,27B,495C 'lm':474C 'lmstudio.ai':476C 'local':13A,25B,61C,81C,224C,364C,391C,443C,494C,517C 'local-llms':24B 'long':9A 'long-term':8A 'looks':285C 'm':447C,498C 'macbook':107C 'macos':488C 'made':75C 'main':94C 'majority':251C 'makes':269C 'making':397C 'march':66C 'me':270C 'meaningful':368C 'menu':489C 'meta':177C 'model':62C,100C,152C,166C,225C,326C,342C,422C,444C 'models':134C,392C,518C 'moment':140C 'more':509C 'morning':161C 'mostly':465C 'movement':226C 'much':215C 'multiple':199C 'my':154C 'news':40C 'night':157C 'no':116C 'normally':37C 'nvidia':205C 'objectives':299C 'of':12A,70C,218C,252C,275C,322C,352C,414C,432C,458C 'off':222C 'ollama':471C 'ollama.com':472C 'on':59C,83C,105C,153C,186C,198C 'one':168C 'open':16B,265C,512C 'open-source':15B 'opened':210C 'optimistic':271C 'org':479C 'original':87C,179C 'our':290C 'out':127C,431C 'overstate':52C 'packaging':348C,454C 'particularly':286C 'partnering':406C 'phase':361C 'placed':523C 'possible':77C 'progress':11A 'project':267C 'projects':279C,410C 'promising':287C 'proven':258C 'pytorch':187C,194C 'quality':345C,511C 'quantization':104C 'range':217C 'readily':401C 'readme':88C 'related':278C 'release':69C,181C 'released':480C 'releases':254C,423C 'required':202C 'responsible':238C 'result':507C 'run':79C,98C,148C 'running':197C,493C,516C 's':49C,178C,208C 'said':92C 'seamless':301C 'section':281C 'see':451C 'simonwillison.net':142C 'simonwillison.net/2023/mar/11/llama/#llama-cpp):':141C 'simplify':381C 'since':232C 'single':303C 'single-click':302C 'software':356C,462C 'some':46C 'source':17B,266C,321C,513C 'space':63C 'stable':138C 'steward':262C 'studio':475C 'support':343C 't':36C 'team':521C 'term':10A 'that':169C,211C,227C,264C,424C,435C,500C 'the':7A,53C,60C,86C,93C,99C,129C,149C,164C,167C,223C,240C,250C,273C,283C,297C,307C,313C,320C,329C,332C,335C,360C,382C,412C,428C,433C,442C,520C 'their':137C,189C 'them':526C 'themselves':259C 'then':159C,233C 'they':256C 'this':42C,108C,160C,280C,416C,463C,504C 'thoughts':47C 'time':130C 'to':5A,51C,78C,97C,147C,163C,213C,230C,372C,378C,421C,450C,468C,524C 'today':255C 'tools':469C,514C 'towards':296C,300C,396C 'transformers':18B,243C,308C,314C,333C,415C 'truth':323C 'trying':125C 'ubiquitous':399C 'up':212C 'upgraded':162C 'used':145C,248C 'user':350C,456C 'users':387C 'using':101C 've':257C 'was':109C 'way':383C 'we':358C,393C 'which':268C,363C,385C 'wider':216C,341C 'will':293C,394C,506C 'win':440C 'with':174C,306C,407C,427C 'work':209C,395C 'works':120C 'would':436C 'wrote':123C 'year':486C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-02-20 07:13:19+00:00
{
  "id": 2031,
  "slug": "thariq-shihipar",
  "quotation": "Long running agentic products like Claude Code are made feasible by prompt caching which allows us to reuse computation from previous roundtrips and significantly decrease latency and cost. [...]\r\n\r\nAt Claude Code, we build our entire harness around prompt caching. A high prompt cache hit rate decreases costs and helps us create more generous rate limits for our subscription plans, so we run alerts on our prompt cache hit rate and declare SEVs if they're too low.",
  "source": "Thariq Shihipar",
  "source_url": "https://twitter.com/trq212/status/2024574133011673516",
  "created": "2026-02-20T07:13:19+00:00",
  "metadata": {},
  "search_document": "'a':40A 'agentic':3A 'agents':89B 'ai':78B,84B,88B 'ai-agents':87B 'alerts':63A 'allows':15A 'and':23A,27A,48A,70A 'anthropic':86B 'are':8A 'around':37A 'at':29A 'build':33A 'by':11A 'cache':43A,67A 'caching':13A,39A 'claude':6A,30A,91B 'claude-code':90B 'code':7A,31A,92B 'computation':19A 'cost':28A 'costs':47A 'create':51A 'declare':71A 'decrease':25A 'decreases':46A 'engineering':81B 'entire':35A 'feasible':10A 'for':56A 'from':20A 'generative':83B 'generative-ai':82B 'generous':53A 'harness':36A 'helps':49A 'high':41A 'hit':44A,68A 'if':73A 'latency':26A 'like':5A 'limits':55A 'llms':85B 'long':1A 'low':77A 'made':9A 'more':52A 'on':64A 'our':34A,57A,65A 'plans':59A 'previous':21A 'products':4A 'prompt':12A,38A,42A,66A,80B 'prompt-engineering':79B 'rate':45A,54A,69A 're':75A 'reuse':18A 'roundtrips':22A 'run':62A 'running':2A 'sevs':72A 'shihipar':94C 'significantly':24A 'so':60A 'subscription':58A 'thariq':93C 'they':74A 'to':17A 'too':76A 'us':16A,50A 'we':32A,61A 'which':14A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": null
}
blogmark 2026-02-19 17:58:37+00:00
{
  "id": 9304,
  "slug": "gemini-31-pro",
  "link_url": "https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-1-pro/",
  "link_title": "Gemini 3.1 Pro",
  "via_url": null,
  "via_title": null,
  "commentary": "The first in the Gemini 3.1 series, priced the same as Gemini 3 Pro ($2/million input, $12/million output under 200,000 tokens, $4/$18 for 200,000 to 1,000,000). That's less than half the price of Claude Opus 4.6 with very similar benchmark scores to that model.\r\n\r\nThey boast about its improved SVG animation performance compared to Gemini 3 Pro in the announcement!\r\n\r\nI tried \"Generate an SVG of a pelican riding a bicycle\" [in Google AI Studio](https://aistudio.google.com/app/prompts?state=%7B%22ids%22:%5B%221ugF9fBfLGxnNoe8_rLlluzo9NSPJDWuF%22%5D,%22action%22:%22open%22,%22userId%22:%22106366615678321494423%22,%22resourceKeys%22:%7B%7D%7D&usp=sharing) and it thought for 323.9 seconds ([thinking trace here](https://gist.github.com/simonw/03a755865021739a3659943a22c125ba#thinking-trace)) before producing this one:\r\n\r\n![Whimsical flat-style illustration of a pelican wearing a blue and white baseball cap, riding a red bicycle with yellow-rimmed wheels along a road. The pelican has a large orange bill and a green scarf. A small fish peeks out of a brown basket on the handlebars. The background features a light blue sky with a yellow sun, white clouds, and green hills.](https://static.simonwillison.net/static/2026/gemini-3.1-pro-pelican.png)\r\n\r\nIt's good to see the legs clearly depicted on both sides of the frame (should [satisfy Elon](https://twitter.com/elonmusk/status/2023833496804839808)), the fish in the basket is a nice touch and I appreciated this comment in [the SVG code](https://gist.github.com/simonw/03a755865021739a3659943a22c125ba#response):\r\n\r\n    <!-- Black Flight Feathers on Wing Tip -->\r\n    <path d=\"M 420 175 C 440 182, 460 187, 470 190 C 450 210, 430 208, 410 198 Z\" fill=\"#374151\" />\r\n\r\nI've [added](https://github.com/simonw/llm-gemini/issues/121) the two new model IDs `gemini-3.1-pro-preview` and `gemini-3.1-pro-preview-customtools` to my [llm-gemini plugin](https://github.com/simonw/llm-gemini) for [LLM](https://llm.datasette.io/). That \"custom tools\" one is [described here](https://ai.google.dev/gemini-api/docs/models/gemini-3.1-pro-preview#gemini-31-pro-preview-customtools) - apparently it may provide better tool performance than the default model in some situations.\r\n\r\nThe model appears to be *incredibly* slow right now - it took 104s to respond to a simple \"hi\" and a few of my other tests met \"Error: This model is currently experiencing high demand. Spikes in demand are usually temporary. Please try again later.\" or \"Error: Deadline expired before operation could complete\" errors. I'm assuming that's just teething problems on launch day.\r\n\r\nIt sounds like last week's [Deep Think release](https://simonwillison.net/2026/Feb/12/gemini-3-deep-think/) was our first exposure to the 3.1 family:\r\n\r\n> Last week, we released a major update to Gemini 3 Deep Think to solve modern challenges across science, research and engineering. Today, we\u2019re releasing the upgraded core intelligence that makes those breakthroughs possible: Gemini 3.1 Pro.\r\n\r\n**Update**: In [What happens if AI labs train for pelicans riding bicycles?](https://simonwillison.net/2025/nov/13/training-for-pelicans-riding-bicycles/) last November I said:\r\n\r\n> If a model finally comes out that produces an excellent SVG of a pelican riding a bicycle you can bet I\u2019m going to test it on all manner of creatures riding all sorts of transportation devices.\r\n\r\nGoogle's Gemini Lead Jeff Dean [tweeted this video](https://x.com/JeffDean/status/2024525132266688757) featuring an animated pelican riding a bicycle, plus a frog on a penny-farthing and a giraffe driving a tiny car and an ostrich on roller skates and a turtle kickflipping a skateboard and a dachshund driving a stretch limousine.\r\n\r\n<video style=\"margin-bottom: 1em\" poster=\"https://static.simonwillison.net/static/2026/gemini-animated-pelicans.jpg\" muted controls preload=\"none\" style=\"max-width: 100%\">\r\n  <source src=\"https://static.simonwillison.net/static/2026/gemini-animated-pelicans.mp4\" type=\"video/mp4\">\r\n</video>\r\n\r\nI've been saying for a while that I wish AI labs would highlight things that their new models can do that their older models could not, so top marks to the Gemini team for this video.\r\n\r\n**Update 2**: I used `llm-gemini` to run my [more detailed Pelican prompt](https://simonwillison.net/2025/Nov/18/gemini-3/#and-a-new-pelican-benchmark), with [this result](https://gist.github.com/simonw/a3bdd4ec9476ba9e9ba7aa61b46d8296):\r\n\r\n![Flat-style illustration of a brown pelican riding a teal bicycle with dark blue-rimmed wheels against a plain white background. Unlike the previous image's white cartoon pelican, this pelican has realistic brown plumage with detailed feather patterns, a dark maroon head, yellow eye, and a large pink-tinged pouch bill. The bicycle is a simpler design without a basket, and the scene lacks the colorful background elements like the sun, clouds, road, hills, cap, and scarf from the first illustration, giving it a more minimalist feel.](https://static.simonwillison.net/static/2026/gemini-3.1-pro-pelican-2.png)\r\n\r\nFrom the SVG comments:\r\n\r\n    <!-- Pouch Gradient (Breeding Plumage: Red to Olive/Green) -->\r\n    ...\r\n    <!-- Neck Gradient (Breeding Plumage: Chestnut Nape, White/Yellow Front) -->",
  "created": "2026-02-19T17:58:37+00:00",
  "metadata": {},
  "search_document": "'-3.1':244C,250C '/).':268C '/2025/nov/13/training-for-pelicans-riding-bicycles/)':428C '/2025/nov/18/gemini-3/#and-a-new-pelican-benchmark),':576C '/2026/feb/12/gemini-3-deep-think/)':368C '/app/prompts?state=%7b%22ids%22:%5b%221ugf9fbflgxnnoe8_rllluzo9nspjdwuf%22%5d,%22action%22:%22open%22,%22userid%22:%22106366615678321494423%22,%22resourcekeys%22:%7b%7d%7d&usp=sharing)':104C '/elonmusk/status/2023833496804839808)),':210C '/gemini-api/docs/models/gemini-3.1-pro-preview#gemini-31-pro-preview-customtools)':278C '/jeffdean/status/2024525132266688757)':481C '/simonw/03a755865021739a3659943a22c125ba#response):':231C '/simonw/03a755865021739a3659943a22c125ba#thinking-trace))':116C '/simonw/a3bdd4ec9476ba9e9ba7aa61b46d8296):':582C '/simonw/llm-gemini)':263C '/simonw/llm-gemini/issues/121)':237C '/static/2026/gemini-3.1-pro-pelican-2.png)':676C '/static/2026/gemini-3.1-pro-pelican.png)':189C '000':41C,47C,50C,51C '1':49C '104s':304C '12/million':37C '18':44C '2':561C '2/million':35C '200':40C,46C '3':33C,82C,386C '3.1':2A,26C,375C,412C '323.9':109C '4':43C '4.6':62C 'a':16B,93C,96C,127C,130C,137C,146C,151C,156C,159C,165C,174C,179C,217C,308C,312C,381C,434C,445C,448C,487C,490C,493C,498C,501C,511C,514C,517C,520C,528C,588C,592C,602C,624C,631C,641C,645C,670C 'about':73C 'across':393C 'added':234C 'again':335C 'against':601C 'ai':6B,9B,100C,419C,533C 'ai.google.dev':277C 'ai.google.dev/gemini-api/docs/models/gemini-3.1-pro-preview#gemini-31-pro-preview-customtools)':276C 'aistudio.google.com':103C 'aistudio.google.com/app/prompts?state=%7b%22ids%22:%5b%221ugf9fbflgxnnoe8_rllluzo9nspjdwuf%22%5d,%22action%22:%22open%22,%22userid%22:%22106366615678321494423%22,%22resourcekeys%22:%7b%7d%7d&usp=sharing)':102C 'all':460C,465C 'along':145C 'an':90C,441C,483C,505C 'and':105C,132C,155C,184C,220C,248C,311C,396C,497C,504C,510C,516C,630C,647C,662C 'animated':484C 'animation':77C 'announcement':86C 'apparently':279C 'appears':295C 'appreciated':222C 'are':330C 'as':31C 'assuming':348C 'background':172C,605C,653C 'baseball':134C 'basket':167C,215C,646C 'be':297C 'been':525C 'before':117C,341C 'benchmark':66C 'bet':452C 'better':283C 'bicycle':17B,97C,139C,449C,488C,594C,639C 'bicycles':425C 'bill':154C,637C 'blog.google':681C 'blue':131C,176C,598C 'blue-rimmed':597C 'boast':72C 'both':200C 'breakthroughs':409C 'brown':166C,589C,618C 'can':451C,542C 'cap':135C,661C 'car':503C 'cartoon':612C 'challenges':392C 'claude':60C 'clearly':197C 'clouds':183C,658C 'code':228C 'colorful':652C 'comes':437C 'comment':224C 'comments':680C 'compared':79C 'complete':344C 'core':404C 'could':343C,548C 'creatures':463C 'currently':323C 'custom':270C 'customtools':254C 'dachshund':518C 'dark':596C,625C 'day':356C 'deadline':339C 'dean':475C 'deep':363C,387C 'default':288C 'demand':326C,329C 'depicted':198C 'described':274C 'design':643C 'detailed':571C,621C 'devices':469C 'do':543C 'driving':500C,519C 'elements':654C 'elon':207C 'engineering':397C 'error':319C,338C 'errors':345C 'excellent':442C 'experiencing':324C 'expired':340C 'exposure':372C 'eye':629C 'family':376C 'farthing':496C 'feather':622C 'features':173C 'featuring':482C 'feel':673C 'few':313C 'finally':436C 'first':22C,371C,666C 'fish':161C,212C 'flat':123C,584C 'flat-style':122C,583C 'for':45C,108C,264C,422C,527C,557C 'frame':204C 'frog':491C 'from':664C,677C 'gemini':1A,12B,25C,32C,81C,243C,249C,259C,385C,411C,472C,555C,566C 'generate':89C 'generative':8B 'generative-ai':7B 'giraffe':499C 'gist.github.com':115C,230C,581C 'gist.github.com/simonw/03a755865021739a3659943a22c125ba#response):':229C 'gist.github.com/simonw/03a755865021739a3659943a22c125ba#thinking-trace))':114C 'gist.github.com/simonw/a3bdd4ec9476ba9e9ba7aa61b46d8296):':580C 'github.com':236C,262C 'github.com/simonw/llm-gemini)':261C 'github.com/simonw/llm-gemini/issues/121)':235C 'giving':668C 'going':455C 'good':192C 'google':4B,99C,470C 'green':157C,185C 'half':56C 'handlebars':170C 'happens':417C 'has':150C,616C 'head':627C 'here':113C,275C 'hi':310C 'high':325C 'highlight':536C 'hills':186C,660C 'i':87C,221C,232C,346C,431C,453C,523C,531C,562C 'ids':242C 'if':418C,433C 'illustration':125C,586C,667C 'image':609C 'improved':75C 'in':23C,84C,98C,213C,225C,290C,328C,415C 'incredibly':298C 'input':36C 'intelligence':405C 'is':216C,273C,322C,640C 'it':106C,190C,280C,302C,357C,458C,669C 'its':74C 'jeff':474C 'just':351C 'kickflipping':513C 'labs':420C,534C 'lacks':650C 'large':152C,632C 'last':360C,377C,429C 'later':336C 'launch':355C 'lead':473C 'legs':196C 'less':54C 'light':175C 'like':359C,655C 'limousine':522C 'llm':11B,19B,258C,265C,565C 'llm-gemini':257C,564C 'llm-release':18B 'llm.datasette.io':267C 'llm.datasette.io/).':266C 'llms':10B 'm':347C,454C 'major':382C 'makes':407C 'manner':461C 'marks':552C 'maroon':626C 'may':281C 'met':318C 'minimalist':672C 'model':70C,241C,289C,294C,321C,435C 'models':541C,547C 'modern':391C 'more':570C,671C 'my':256C,315C,569C 'new':240C,540C 'nice':218C 'not':549C 'november':430C 'now':301C 'of':59C,92C,126C,164C,202C,314C,444C,462C,467C,587C 'older':546C 'on':168C,199C,354C,459C,492C,507C 'one':120C,272C 'operation':342C 'opus':61C 'or':337C 'orange':153C 'ostrich':506C 'other':316C 'our':370C 'out':163C,438C 'output':38C 'patterns':623C 'peeks':162C 'pelican':14B,94C,128C,149C,446C,485C,572C,590C,613C,615C 'pelican-riding-a-bicycle':13B 'pelicans':423C 'penny':495C 'penny-farthing':494C 'performance':78C,285C 'pink':634C 'pink-tinged':633C 'plain':603C 'please':333C 'plugin':260C 'plumage':619C 'plus':489C 'possible':410C 'pouch':636C 'preview':247C,253C 'previous':608C 'price':58C 'priced':28C 'pro':3A,34C,83C,246C,252C,413C 'pro-preview':245C 'pro-preview-customtools':251C 'problems':353C 'produces':440C 'producing':118C 'prompt':573C 'provide':282C 're':400C 'realistic':617C 'red':138C 'release':20B,365C 'released':380C 'releasing':401C 'research':395C 'respond':306C 'result':579C 'riding':15B,95C,136C,424C,447C,464C,486C,591C 'right':300C 'rimmed':143C,599C 'road':147C,659C 'roller':508C 'run':568C 's':53C,191C,350C,362C,471C,610C 'said':432C 'same':30C 'satisfy':206C 'saying':526C 'scarf':158C,663C 'scene':649C 'science':394C 'scores':67C 'seconds':110C 'see':194C 'series':27C 'should':205C 'sides':201C 'similar':65C 'simonwillison.net':367C,427C,575C 'simonwillison.net/2025/nov/13/training-for-pelicans-riding-bicycles/)':426C 'simonwillison.net/2025/nov/18/gemini-3/#and-a-new-pelican-benchmark),':574C 'simonwillison.net/2026/feb/12/gemini-3-deep-think/)':366C 'simple':309C 'simpler':642C 'situations':292C 'skateboard':515C 'skates':509C 'sky':177C 'slow':299C 'small':160C 'so':550C 'solve':390C 'some':291C 'sorts':466C 'sounds':358C 'spikes':327C 'static.simonwillison.net':188C,675C 'static.simonwillison.net/static/2026/gemini-3.1-pro-pelican-2.png)':674C 'static.simonwillison.net/static/2026/gemini-3.1-pro-pelican.png)':187C 'stretch':521C 'studio':101C 'style':124C,585C 'sun':181C,657C 'svg':5B,76C,91C,227C,443C,679C 'teal':593C 'team':556C 'teething':352C 'temporary':332C 'test':457C 'tests':317C 'than':55C,286C 'that':52C,69C,269C,349C,406C,439C,530C,538C,544C 'the':21C,24C,29C,57C,85C,148C,169C,171C,195C,203C,211C,214C,226C,238C,287C,293C,374C,402C,554C,607C,638C,648C,651C,656C,665C,678C 'their':539C,545C 'they':71C 'things':537C 'think':364C,388C 'thinking':111C 'this':119C,223C,320C,477C,558C,578C,614C 'those':408C 'thought':107C 'tinged':635C 'tiny':502C 'to':48C,68C,80C,193C,255C,296C,305C,307C,373C,384C,389C,456C,553C,567C 'today':398C 'tokens':42C 'took':303C 'tool':284C 'tools':271C 'top':551C 'touch':219C 'trace':112C 'train':421C 'transportation':468C 'tried':88C 'try':334C 'turtle':512C 'tweeted':476C 'twitter.com':209C 'twitter.com/elonmusk/status/2023833496804839808)),':208C 'two':239C 'under':39C 'unlike':606C 'update':383C,414C,560C 'upgraded':403C 'used':563C 'usually':331C 've':233C,524C 'very':64C 'video':478C,559C 'was':369C 'we':379C,399C 'wearing':129C 'week':361C,378C 'what':416C 'wheels':144C,600C 'while':529C 'whimsical':121C 'white':133C,182C,604C,611C 'wish':532C 'with':63C,140C,178C,577C,595C,620C 'without':644C 'would':535C 'x.com':480C 'x.com/jeffdean/status/2024525132266688757)':479C 'yellow':142C,180C,628C 'yellow-rimmed':141C 'you':450C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/gemini-3.1-pro-card.jpg",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-19 04:48:47+00:00
{
  "id": 9303,
  "slug": "swe-bench",
  "link_url": "https://www.swebench.com/",
  "link_title": "SWE-bench February 2026 leaderboard update",
  "via_url": "https://twitter.com/KLieret/status/2024176335782826336",
  "via_title": "@KLieret",
  "commentary": "SWE-bench is one of the benchmarks that the labs love to list in their model releases. The official leaderboard is infrequently updated but they just did a full run of it against the current generation of models, which is notable because it's always good to see benchmark results like this that *weren't* self-reported by the labs.\r\n\r\nThe fresh results are for their \"Bash Only\" benchmark, which runs their [mini-swe-bench](https://github.com/SWE-agent/mini-swe-agent) agent (~9,000 lines of Python, [here are the prompts](https://github.com/SWE-agent/mini-swe-agent/blob/v2.2.1/src/minisweagent/config/benchmarks/swebench.yaml) they use) against the [SWE-bench](https://huggingface.co/datasets/princeton-nlp/SWE-bench) dataset of coding problems - 2,294 real-world examples pulled from 12 open source repos: [django/django](https://github.com/django/django) (850), [sympy/sympy](https://github.com/sympy/sympy) (386), [scikit-learn/scikit-learn](https://github.com/scikit-learn/scikit-learn) (229), [sphinx-doc/sphinx](https://github.com/sphinx-doc/sphinx) (187), [matplotlib/matplotlib](https://github.com/matplotlib/matplotlib) (184), [pytest-dev/pytest](https://github.com/pytest-dev/pytest) (119), [pydata/xarray](https://github.com/pydata/xarray) (110), [astropy/astropy](https://github.com/astropy/astropy) (95), [pylint-dev/pylint](https://github.com/pylint-dev/pylint) (57), [psf/requests](https://github.com/psf/requests) (44), [mwaskom/seaborn](https://github.com/mwaskom/seaborn) (22), [pallets/flask](https://github.com/pallets/flask) (11).\r\n\r\n**Correction**: *The Bash only benchmark runs against SWE-bench Verified, not original SWE-bench. Verified is a manually curated subset of 500 samples [described here](https://openai.com/index/introducing-swe-bench-verified/), funded by OpenAI. Here's [SWE-bench Verified](https://huggingface.co/datasets/princeton-nlp/SWE-bench_Verified) on Hugging Face - since it's just 2.1MB of Parquet it's easy to browse [using Datasette Lite](https://lite.datasette.io/?parquet=https%3A%2F%2Fhuggingface.co%2Fdatasets%2Fprinceton-nlp%2FSWE-bench_Verified%2Fresolve%2Fmain%2Fdata%2Ftest-00000-of-00001.parquet#/data/test-00000-of-00001?_facet=repo), which cuts those numbers down to django/django (231), sympy/sympy (75), sphinx-doc/sphinx (44), matplotlib/matplotlib (34), scikit-learn/scikit-learn (32), astropy/astropy (22), pydata/xarray (22), pytest-dev/pytest (19), pylint-dev/pylint (10), psf/requests (8), mwaskom/seaborn (2), pallets/flask (1)*.\r\n\r\nHere's how the top ten models performed:\r\n\r\n![Bar chart showing \"% Resolved\" by \"Model\". Bars in descending order: Claude 4.5 Opus (high reasoning) 76.8%, Gemini 3 Flash (high reasoning) 75.8%, MiniMax M2.5 (high reasoning) 75.8%, Claude Opus 4.6 75.6%, GLM-5 (high reasoning) 72.8%, GPT-5.2 (high reasoning) 72.8%, Claude 4.5 Sonnet (high reasoning) 72.8%, Kimi K2.5 (high reasoning) 71.4%, DeepSeek V3.2 (high reasoning) 70.8%, Claude 4.5 Haiku (high reasoning) 70.0%, and a partially visible final bar at 66.6%.](https://static.simonwillison.net/static/2026/swbench-feb-2026.jpg)\r\n\r\nIt's interesting to see Claude Opus 4.5 beat Opus 4.6, though only by about a percentage point. 4.5 Opus is top, then Gemini 3 Flash, then MiniMax M2.5 - a 229B model released [last week](https://www.minimax.io/news/minimax-m25) by Chinese lab MiniMax. GLM-5, Kimi K2.5 and DeepSeek V3.2 are three more Chinese models that make the top ten as well.\r\n\r\nOpenAI's GPT-5.2 is their highest performing model at position 6, but it's worth noting that their best coding model, GPT-5.3-Codex, is not represented - maybe because it's not yet available in the OpenAI API.\r\n\r\nThis benchmark uses the same system prompt for every model, which is important for a fair comparison but does mean that the quality of the different harnesses or optimized prompts is not being measured here.\r\n\r\nThe chart above is a screenshot from the SWE-bench website, but their charts don't include the actual percentage values visible on the bars. I successfully used Claude for Chrome to add these - [transcript here](https://claude.ai/share/81a0c519-c727-4caa-b0d4-0d866375d0da). My prompt sequence included:\r\n\r\n> Use claude in chrome to open https://www.swebench.com/\r\n\r\n> Click on \"Compare results\" and then select \"Select top 10\"\r\n\r\n> See those bar charts? I want them to display the percentage on each bar so I can take a better screenshot, modify the page like that\r\n\r\nI'm impressed at how well this worked - Claude injected custom JavaScript into the page to draw additional labels on top of the existing chart.\r\n\r\n![Screenshot of a Claude AI conversation showing browser automation. A thinking step reads \"Pivoted strategy to avoid recursion issues with chart labeling >\" followed by the message \"Good, the chart is back. Now let me carefully add the labels using an inline plugin on the chart instance to avoid the recursion issue.\" A collapsed \"Browser_evaluate\" section shows a browser_evaluate tool call with JavaScript code using Chart.js canvas context to draw percentage labels on bars: meta.data.forEach((bar, index) => { const value = dataset.data[index]; if (value !== undefined && value !== null) { ctx.save(); ctx.textAlign = 'center'; ctx.textBaseline = 'bottom'; ctx.fillStyle = '#333'; ctx.font = 'bold 12px sans-serif'; ctx.fillText(value.toFixed(1) + '%', bar.x, bar.y - 5); A pending step reads \"Let me take a screenshot to see if it worked.\" followed by a completed \"Done\" step, and the message \"Let me take a screenshot to check the result.\"](https://static.simonwillison.net/static/2026/claude-chrome-draw-on-chart.jpg)\r\n\r\n**Update**: If you look at the transcript Claude claims to have switched to Playwright, which is confusing because I didn't think I had that configured.",
  "created": "2026-02-19T04:48:47+00:00",
  "metadata": {},
  "search_document": "'-5':367C,452C '-5.2':372C,473C '-5.3':493C '/?parquet=https%3a%2f%2fhuggingface.co%2fdatasets%2fprinceton-nlp%2fswe-bench_verified%2fresolve%2fmain%2fdata%2ftest-00000-of-00001.parquet#/data/test-00000-of-00001?_facet=repo),':284C '/astropy/astropy)':196C '/datasets/princeton-nlp/swe-bench)':132C '/datasets/princeton-nlp/swe-bench_verified)':262C '/django/django)':152C '/index/introducing-swe-bench-verified/),':250C '/matplotlib/matplotlib)':178C '/mwaskom/seaborn)':214C '/news/minimax-m25)':446C '/pallets/flask)':219C '/psf/requests)':209C '/pydata/xarray)':191C '/pylint':201C,319C '/pylint-dev/pylint)':204C '/pytest':183C,314C '/pytest-dev/pytest)':186C '/scikit-learn':162C,305C '/scikit-learn/scikit-learn)':165C '/share/81a0c519-c727-4caa-b0d4-0d866375d0da).':583C '/sphinx':170C,298C '/sphinx-doc/sphinx)':173C '/static/2026/claude-chrome-draw-on-chart.jpg)':796C '/static/2026/swbench-feb-2026.jpg)':408C '/swe-agent/mini-swe-agent)':109C '/swe-agent/mini-swe-agent/blob/v2.2.1/src/minisweagent/config/benchmarks/swebench.yaml)':122C '/sympy/sympy)':157C '000':112C '1':326C,758C '10':320C,604C '11':220C '110':192C '119':187C '12':145C '12px':752C '184':179C '187':174C '19':315C '2':137C,324C '2.1':270C '2026':5A '22':215C,308C,310C '229':166C '229b':439C '231':292C '294':138C '3':352C,433C '32':306C '333':749C '34':301C '386':158C '4.5':346C,377C,393C,416C,427C '4.6':364C,419C '44':210C,299C '5':761C '500':244C '57':205C '6':481C '66.6':405C '70.0':397C '70.8':391C '71.4':386C '72.8':370C,375C,381C '75':294C '75.6':365C '75.8':356C,361C '76.8':350C '8':322C '850':153C '9':111C '95':197C 'a':57C,239C,399C,424C,438C,523C,548C,623C,658C,665C,707C,713C,762C,769C,778C,788C 'about':423C 'above':546C 'actual':563C 'add':577C,691C 'additional':648C 'against':62C,125C,227C 'agent':110C 'agents':20B,27B 'ai':10B,14B,22B,660C 'ai-in-china':21B 'always':74C 'an':695C 'and':398C,455C,599C,782C 'anthropic':16B 'api':508C 'are':94C,117C,458C 'as':468C 'astropy/astropy':193C,307C 'at':404C,479C,634C,801C 'automation':664C 'available':504C 'avoid':672C,703C 'back':686C 'bar':335C,403C,607C,618C,732C 'bar.x':759C 'bar.y':760C 'bars':341C,569C,730C 'bash':97C,223C 'beat':417C 'because':71C,499C,814C 'being':541C 'bench':3A,31C,106C,129C,230C,236C,258C,554C 'benchmark':78C,99C,225C,510C 'benchmarks':8B,36C 'best':489C 'better':624C 'bold':751C 'bottom':747C 'browse':278C 'browser':26B,663C,709C,714C 'browser-agents':25B 'but':53C,482C,526C,556C 'by':88C,252C,339C,422C,447C,679C,777C 'call':717C 'can':621C 'canvas':723C 'carefully':690C 'center':745C 'chart':336C,545C,655C,676C,684C,700C 'chart.js':722C 'charts':558C,608C 'check':791C 'china':24B 'chinese':448C,461C 'chrome':575C,591C 'claims':805C 'claude':17B,345C,362C,376C,392C,414C,573C,589C,639C,659C,804C 'claude.ai':582C 'claude.ai/share/81a0c519-c727-4caa-b0d4-0d866375d0da).':581C 'click':595C 'code':720C 'codex':494C 'coding':19B,135C,490C 'coding-agents':18B 'collapsed':708C 'compare':597C 'comparison':525C 'completed':779C 'configured':822C 'confusing':813C 'const':734C 'context':724C 'conversation':661C 'correction':221C 'ctx.fillstyle':748C 'ctx.filltext':756C 'ctx.font':750C 'ctx.save':743C 'ctx.textalign':744C 'ctx.textbaseline':746C 'curated':241C 'current':64C 'custom':641C 'cuts':286C 'dataset':133C 'dataset.data':736C 'datasette':280C 'deepseek':387C,456C 'descending':343C 'described':246C 'dev':182C,200C,313C,318C 'did':56C 'didn':816C 'different':534C 'display':613C 'django':9B 'django/django':149C,291C 'doc':169C,297C 'does':527C 'don':559C 'done':780C 'down':289C 'draw':647C,726C 'each':617C 'easy':276C 'evaluate':710C,715C 'every':517C 'examples':142C 'existing':654C 'face':265C 'fair':524C 'february':4A 'final':402C 'flash':353C,434C 'followed':678C,776C 'for':95C,516C,522C,574C 'fresh':92C 'from':144C,550C 'full':58C 'funded':251C 'gemini':351C,432C 'generation':65C 'generative':13B 'generative-ai':12B 'github.com':108C,121C,151C,156C,164C,172C,177C,185C,190C,195C,203C,208C,213C,218C 'github.com/astropy/astropy)':194C 'github.com/django/django)':150C 'github.com/matplotlib/matplotlib)':176C 'github.com/mwaskom/seaborn)':212C 'github.com/pallets/flask)':217C 'github.com/psf/requests)':207C 'github.com/pydata/xarray)':189C 'github.com/pylint-dev/pylint)':202C 'github.com/pytest-dev/pytest)':184C 'github.com/scikit-learn/scikit-learn)':163C 'github.com/sphinx-doc/sphinx)':171C 'github.com/swe-agent/mini-swe-agent)':107C 'github.com/swe-agent/mini-swe-agent/blob/v2.2.1/src/minisweagent/config/benchmarks/swebench.yaml)':120C 'github.com/sympy/sympy)':155C 'glm':366C,451C 'good':75C,682C 'gpt':371C,472C,492C 'had':820C 'haiku':394C 'harnesses':535C 'have':807C 'here':116C,247C,254C,327C,543C,580C 'high':348C,354C,359C,368C,373C,379C,384C,389C,395C 'highest':476C 'how':329C,635C 'hugging':264C 'huggingface.co':131C,261C 'huggingface.co/datasets/princeton-nlp/swe-bench)':130C 'huggingface.co/datasets/princeton-nlp/swe-bench_verified)':260C 'i':570C,609C,620C,631C,815C,819C 'if':738C,773C,798C 'important':521C 'impressed':633C 'in':23B,43C,342C,505C,590C 'include':561C 'included':587C 'index':733C,737C 'infrequently':51C 'injected':640C 'inline':696C 'instance':701C 'interesting':411C 'into':643C 'is':32C,50C,69C,238C,429C,474C,495C,520C,539C,547C,685C,812C 'issue':706C 'issues':674C 'it':61C,72C,267C,274C,409C,483C,500C,774C 'javascript':642C,719C 'just':55C,269C 'k2.5':383C,454C 'kimi':382C,453C 'klieret':824C 'lab':449C 'labeling':677C 'labels':649C,693C,728C 'labs':39C,90C 'last':442C 'leaderboard':6A,49C 'learn':161C,304C 'let':688C,766C,785C 'like':80C,629C 'lines':113C 'list':42C 'lite':281C 'lite.datasette.io':283C 'lite.datasette.io/?parquet=https%3a%2f%2fhuggingface.co%2fdatasets%2fprinceton-nlp%2fswe-bench_verified%2fresolve%2fmain%2fdata%2ftest-00000-of-00001.parquet#/data/test-00000-of-00001?_facet=repo),':282C 'llms':15B 'look':800C 'love':40C 'm':632C 'm2.5':358C,437C 'make':464C 'manually':240C 'matplotlib/matplotlib':175C,300C 'maybe':498C 'mb':271C 'me':689C,767C,786C 'mean':528C 'measured':542C 'message':681C,784C 'meta.data.foreach':731C 'mini':104C 'mini-swe-bench':103C 'minimax':28B,357C,436C,450C 'model':45C,340C,440C,478C,491C,518C 'models':67C,333C,462C 'modify':626C 'more':460C 'mwaskom/seaborn':211C,323C 'my':584C 'not':232C,496C,502C,540C 'notable':70C 'noting':486C 'now':687C 'null':742C 'numbers':288C 'of':34C,60C,66C,114C,134C,243C,272C,532C,652C,657C 'official':48C 'on':263C,567C,596C,616C,650C,698C,729C 'one':33C 'only':98C,224C,421C 'open':146C,593C 'openai':11B,253C,470C,507C 'openai.com':249C 'openai.com/index/introducing-swe-bench-verified/),':248C 'optimized':537C 'opus':347C,363C,415C,418C,428C 'or':536C 'order':344C 'original':233C 'page':628C,645C 'pallets/flask':216C,325C 'parquet':273C 'partially':400C 'pending':763C 'percentage':425C,564C,615C,727C 'performed':334C 'performing':477C 'pivoted':669C 'playwright':810C 'plugin':697C 'point':426C 'position':480C 'problems':136C 'prompt':515C,585C 'prompts':119C,538C 'psf/requests':206C,321C 'pulled':143C 'pydata/xarray':188C,309C 'pylint':199C,317C 'pylint-dev':198C,316C 'pytest':181C,312C 'pytest-dev':180C,311C 'python':115C 'quality':531C 'reads':668C,765C 'real':140C 'real-world':139C 'reasoning':349C,355C,360C,369C,374C,380C,385C,390C,396C 'recursion':673C,705C 'released':441C 'releases':46C 'reported':87C 'repos':148C 'represented':497C 'resolved':338C 'result':793C 'results':79C,93C,598C 'run':59C 'runs':101C,226C 's':73C,255C,268C,275C,328C,410C,471C,484C,501C 'same':513C 'samples':245C 'sans':754C 'sans-serif':753C 'scikit':160C,303C 'scikit-learn':159C,302C 'screenshot':549C,625C,656C,770C,789C 'section':711C 'see':77C,413C,605C,772C 'select':601C,602C 'self':86C 'self-reported':85C 'sequence':586C 'serif':755C 'showing':337C,662C 'shows':712C 'since':266C 'so':619C 'sonnet':378C 'source':147C 'sphinx':168C,296C 'sphinx-doc':167C,295C 'static.simonwillison.net':407C,795C 'static.simonwillison.net/static/2026/claude-chrome-draw-on-chart.jpg)':794C 'static.simonwillison.net/static/2026/swbench-feb-2026.jpg)':406C 'step':667C,764C,781C 'strategy':670C 'subset':242C 'successfully':571C 'swe':2A,30C,105C,128C,229C,235C,257C,553C 'swe-bench':1A,29C,127C,228C,234C,256C,552C 'switched':808C 'sympy/sympy':154C,293C 'system':514C 't':84C,560C,817C 'take':622C,768C,787C 'ten':332C,467C 'that':37C,82C,463C,487C,529C,630C,821C 'the':35C,38C,47C,63C,89C,91C,118C,126C,222C,330C,465C,506C,512C,530C,533C,544C,551C,562C,568C,614C,627C,644C,653C,680C,683C,692C,699C,704C,783C,792C,802C 'their':44C,96C,102C,475C,488C,557C 'them':611C 'then':431C,435C,600C 'these':578C 'they':54C,123C 'think':818C 'thinking':666C 'this':81C,509C,637C 'those':287C,606C 'though':420C 'three':459C 'to':41C,76C,277C,290C,412C,576C,592C,612C,646C,671C,702C,725C,771C,790C,806C,809C 'tool':716C 'top':331C,430C,466C,603C,651C 'transcript':579C,803C 'undefined':740C 'update':7A,797C 'updated':52C 'use':124C,588C 'used':572C 'uses':511C 'using':279C,694C,721C 'v3.2':388C,457C 'value':735C,739C,741C 'value.tofixed':757C 'values':565C 'verified':231C,237C,259C 'visible':401C,566C 'want':610C 'website':555C 'week':443C 'well':469C,636C 'weren':83C 'which':68C,100C,285C,519C,811C 'with':675C,718C 'worked':638C,775C 'world':141C 'worth':485C 'www.minimax.io':445C 'www.minimax.io/news/minimax-m25)':444C 'www.swebench.com':594C,823C 'yet':503C 'you':799C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/swe-bench-card.jpg",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-19 01:25:33+00:00
{
  "id": 9302,
  "slug": "ladybird",
  "link_url": "https://github.com/LadybirdBrowser/ladybird/commit/e87f889e31afbb5fa32c910603c7f5e781c97afd",
  "link_title": "LadybirdBrowser/ladybird: Abandon Swift adoption",
  "via_url": "https://news.ycombinator.com/item?id=47067678",
  "via_title": "Hacker News",
  "commentary": "Back [in August 2024](https://simonwillison.net/2024/Aug/11/ladybird-set-to-adopt-swift/) the Ladybird browser project announced an intention to adopt Swift as their memory-safe language of choice.\r\n\r\nAs of [this commit](https://github.com/LadybirdBrowser/ladybird/commit/e87f889e31afbb5fa32c910603c7f5e781c97afd) it looks like they've changed their mind:\r\n\r\n> **Everywhere: Abandon Swift adoption**\r\n>\r\n> After making no progress on this for a very long time, let's acknowledge it's not going anywhere and remove it from the codebase.\r\n\r\n**Update 23rd February 2025**: They've [adopted Rust](https://ladybird.org/posts/adopting-rust/) instead.",
  "created": "2026-02-19T01:25:33+00:00",
  "metadata": {},
  "search_document": "'/2024/aug/11/ladybird-set-to-adopt-swift/)':15C '/ladybirdbrowser/ladybird/commit/e87f889e31afbb5fa32c910603c7f5e781c97afd)':40C '/posts/adopting-rust/)':88C '2024':12C '2025':81C '23rd':79C 'a':60C 'abandon':2A,50C 'acknowledge':66C 'adopt':24C 'adopted':84C 'adoption':4A,52C 'after':53C 'an':21C 'and':72C 'announced':20C 'anywhere':71C 'as':26C,34C 'august':11C 'back':9C 'browser':18C 'browsers':5B 'changed':46C 'choice':33C 'codebase':77C 'commit':37C 'everywhere':49C 'february':80C 'for':59C 'from':75C 'github.com':39C,90C 'github.com/ladybirdbrowser/ladybird/commit/e87f889e31afbb5fa32c910603c7f5e781c97afd)':38C 'going':70C 'hacker':91C 'in':10C 'instead':89C 'intention':22C 'it':41C,67C,74C 'ladybird':7B,17C 'ladybird.org':87C 'ladybird.org/posts/adopting-rust/)':86C 'ladybirdbrowser/ladybird':1A 'language':31C 'let':64C 'like':43C 'long':62C 'looks':42C 'making':54C 'memory':29C 'memory-safe':28C 'mind':48C 'news':92C 'no':55C 'not':69C 'of':32C,35C 'on':57C 'progress':56C 'project':19C 'remove':73C 'rust':6B,85C 's':65C,68C 'safe':30C 'simonwillison.net':14C 'simonwillison.net/2024/aug/11/ladybird-set-to-adopt-swift/)':13C 'swift':3A,8B,25C,51C 'the':16C,76C 'their':27C,47C 'they':44C,82C 'this':36C,58C 'time':63C 'to':23C 'update':78C 've':45C,83C 'very':61C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-18 17:07:31+00:00
{
  "id": 9301,
  "slug": "the-ai-disruption",
  "link_url": "https://www.nytimes.com/2026/02/18/opinion/ai-software.html?unlocked_article_code=1.NFA.UkLv.r-XczfzYRdXJ&smid=url-share",
  "link_title": "The A.I. Disruption We\u2019ve Been Waiting for Has Arrived",
  "via_url": null,
  "via_title": null,
  "commentary": "New opinion piece from Paul Ford in the New York Times. Unsurprisingly for a piece by Paul it's packed with quoteworthy snippets, but a few stood out for me in particular.\r\n\r\nPaul describes the [November moment](https://simonwillison.net/2026/Jan/4/inflection/) that so many other programmers have observed, and highlights Claude Code's ability to revive old side projects:\r\n\r\n> [Claude Code] was always a helpful coding assistant, but in November it suddenly got much better, and ever since I\u2019ve been knocking off side projects that had sat in folders for a decade or longer. It\u2019s fun to see old ideas come to life, so I keep a steady flow. Maybe it adds up to a half-hour a day of my time, and an hour of Claude\u2019s.\r\n>\r\n> November was, for me and many others in tech, a great surprise. Before, A.I. coding tools were often useful, but halting and clumsy. Now, the bot can run for a full hour and make whole, designed websites and apps that may be flawed, but credible. I spent an entire session of therapy talking about it.\r\n\r\nAnd as the former CEO of a respected consultancy firm (Postlight) he's well positioned to evaluate the potential impact:\r\n\r\n> When you watch a large language model slice through some horrible, expensive problem \u2014 like migrating data from an old platform to a modern one \u2014 you feel the earth shifting. I was the chief executive of a software services firm, which made me a professional software cost estimator. When I rebooted my messy personal website a few weeks ago, I realized: I would have paid $25,000 for someone else to do this. When a friend asked me to convert a large, thorny data set, I downloaded it, cleaned it up and made it pretty and easy to explore. In the past I would have charged $350,000.\r\n>\r\n> That last price is full 2021 retail \u2014 it implies a product manager, a designer, two engineers (one senior) and four to six months of design, coding and testing. Plus maintenance. Bespoke software is joltingly expensive. Today, though, when the stars align and my prompts work out, I can do hundreds of thousands of dollars worth of work for fun (fun for me) over weekends and evenings, for the price of the Claude $200-a-month plan.\r\n\r\nHe also neatly captures the inherent community tension involved in exploring this technology:\r\n\r\n> All of the people I love hate this stuff, and all the people I hate love it. And yet, likely because of the same personality flaws that drew me to technology in the first place, I am annoyingly excited.",
  "created": "2026-02-18T17:07:31+00:00",
  "metadata": {},
  "search_document": "'-2025':38B '/2026/jan/4/inflection/)':79C '000':310C,351C '200':424C '2021':357C '25':309C '350':350C 'a':53C,64C,102C,130C,147C,155C,159C,179C,199C,231C,248C,266C,280C,287C,299C,318C,324C,361C,364C,426C 'a-month':425C 'a.i':2A,183C 'ability':92C 'about':223C 'adds':152C 'agents':33B 'ago':302C 'ai':19B,22B,25B,29B 'ai-assisted-programming':24B 'ai-ethics':28B 'align':392C 'all':442C,452C 'also':430C 'always':101C 'am':478C 'an':165C,217C,262C 'and':87C,114C,164C,174C,191C,202C,207C,225C,335C,339C,370C,378C,393C,416C,451C,459C 'annoyingly':479C 'apps':208C 'arrived':10A 'as':226C 'asked':320C 'assistant':105C 'assisted':26B 'be':211C 'because':462C 'been':6A,119C 'before':182C 'bespoke':382C 'better':113C 'bot':195C 'but':63C,106C,189C,213C 'by':55C 'can':196C,399C 'captures':432C 'careers':18B 'ceo':229C 'charged':349C 'chief':277C 'claude':35B,89C,98C,168C,423C 'claude-code':34B 'cleaned':332C 'clumsy':192C 'code':36B,90C,99C 'coding':32B,104C,184C,377C 'coding-agents':31B 'come':141C 'community':435C 'consultancy':233C 'convert':323C 'cost':290C 'credible':214C 'data':260C,327C 'day':160C 'decade':131C 'describes':73C 'design':376C 'designed':205C 'designer':365C 'disruption':3A 'do':315C,400C 'dollars':405C 'downloaded':330C 'drew':469C 'earth':272C 'easy':340C 'else':313C 'engineers':367C 'entire':218C 'estimator':291C 'ethics':30B 'evaluate':241C 'evenings':417C 'ever':115C 'excited':480C 'executive':278C 'expensive':256C,386C 'explore':342C 'exploring':439C 'feel':270C 'few':65C,300C 'firm':234C,283C 'first':475C 'flawed':212C 'flaws':467C 'flow':149C 'folders':128C 'for':8A,52C,68C,129C,172C,198C,311C,409C,412C,418C 'ford':17B,45C 'former':228C 'four':371C 'friend':319C 'from':43C,261C 'full':200C,356C 'fun':136C,410C,411C 'generative':21B 'generative-ai':20B 'got':111C 'great':180C 'had':125C 'half':157C 'half-hour':156C 'halting':190C 'has':9A 'hate':448C,456C 'have':85C,307C,348C 'he':236C,429C 'helpful':103C 'highlights':88C 'horrible':255C 'hour':158C,166C,201C 'hundreds':401C 'i':117C,145C,215C,274C,293C,303C,305C,329C,346C,398C,446C,455C,477C 'ideas':140C 'impact':244C 'implies':360C 'in':46C,70C,107C,127C,177C,343C,438C,473C 'inflection':39B 'inherent':434C 'involved':437C 'is':355C,384C 'it':57C,109C,134C,151C,224C,331C,333C,337C,359C,458C 'joltingly':385C 'keep':146C 'knocking':120C 'language':250C 'large':249C,325C 'last':353C 'life':143C 'like':258C 'likely':461C 'llms':23B 'longer':133C 'love':447C,457C 'made':285C,336C 'maintenance':381C 'make':203C 'manager':363C 'many':82C,175C 'may':210C 'maybe':150C 'me':69C,173C,286C,321C,413C,470C 'messy':296C 'migrating':259C 'model':251C 'modern':267C 'moment':76C 'month':427C 'months':374C 'much':112C 'my':162C,295C,394C 'neatly':431C 'new':12B,40C,48C 'new-york-times':11B 'november':37B,75C,108C,170C 'now':193C 'observed':86C 'of':161C,167C,220C,230C,279C,375C,402C,404C,407C,421C,443C,463C 'off':121C 'often':187C 'old':95C,139C,263C 'one':268C,368C 'opinion':41C 'or':132C 'other':83C 'others':176C 'out':67C,397C 'over':414C 'packed':59C 'paid':308C 'particular':71C 'past':345C 'paul':16B,44C,56C,72C 'paul-ford':15B 'people':445C,454C 'personal':297C 'personality':466C 'piece':42C,54C 'place':476C 'plan':428C 'platform':264C 'plus':380C 'positioned':239C 'postlight':235C 'potential':243C 'pretty':338C 'price':354C,420C 'problem':257C 'product':362C 'professional':288C 'programmers':84C 'programming':27B 'projects':97C,123C 'prompts':395C 'quoteworthy':61C 'realized':304C 'rebooted':294C 'respected':232C 'retail':358C 'revive':94C 'run':197C 's':58C,91C,135C,169C,237C 'same':465C 'sat':126C 'see':138C 'senior':369C 'services':282C 'session':219C 'set':328C 'shifting':273C 'side':96C,122C 'simonwillison.net':78C 'simonwillison.net/2026/jan/4/inflection/)':77C 'since':116C 'six':373C 'slice':252C 'snippets':62C 'so':81C,144C 'software':281C,289C,383C 'some':254C 'someone':312C 'spent':216C 'stars':391C 'steady':148C 'stood':66C 'stuff':450C 'suddenly':110C 'surprise':181C 'talking':222C 'tech':178C 'technology':441C,472C 'tension':436C 'testing':379C 'that':80C,124C,209C,352C,468C 'the':1A,47C,74C,194C,227C,242C,271C,276C,344C,390C,419C,422C,433C,444C,453C,464C,474C 'therapy':221C 'this':316C,440C,449C 'thorny':326C 'though':388C 'thousands':403C 'through':253C 'time':163C 'times':14B,50C 'to':93C,137C,142C,154C,240C,265C,314C,322C,341C,372C,471C 'today':387C 'tools':185C 'two':366C 'unsurprisingly':51C 'up':153C,334C 'useful':188C 've':5A,118C 'waiting':7A 'was':100C,171C,275C 'watch':247C 'we':4A 'website':298C 'websites':206C 'weekends':415C 'weeks':301C 'well':238C 'were':186C 'when':245C,292C,317C,389C 'which':284C 'whole':204C 'with':60C 'work':396C,408C 'worth':406C 'would':306C,347C 'www.nytimes.com':481C 'yet':460C 'york':13B,49C 'you':246C,269C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-02-18 16:50:07+00:00
{
  "id": 2030,
  "slug": "martin-fowler",
  "quotation": "LLMs are eating specialty skills. There will be less use of specialist front-end and back-end developers as the LLM-driving skills become more important than the details of platform usage. Will this lead to a greater recognition of the role of [Expert Generalists](https://martinfowler.com/articles/expert-generalist.html)? Or will the ability of LLMs to write lots of code mean they code around the silos rather than eliminating them?",
  "source": "Martin Fowler",
  "source_url": "https://martinfowler.com/fragments/2026-02-18.html",
  "created": "2026-02-18T16:50:07+00:00",
  "metadata": {},
  "search_document": "'/articles/expert-generalist.html)?':51A 'a':40A 'ability':55A 'ai':74B,77B,80B 'ai-assisted-programming':79B 'and':16A 'are':2A 'around':66A 'as':21A 'assisted':81B 'back':18A 'back-end':17A 'be':8A 'become':27A 'careers':73B 'code':62A,65A 'details':32A 'developers':20A 'driving':25A 'eating':3A 'eliminating':71A 'end':15A,19A 'expert':47A 'fowler':85B,87C 'front':14A 'front-end':13A 'generalists':48A 'generative':76B 'generative-ai':75B 'greater':41A 'important':29A 'lead':38A 'less':9A 'llm':24A 'llm-driving':23A 'llms':1A,57A,78B 'lots':60A 'martin':84B,86C 'martin-fowler':83B 'martinfowler.com':50A 'martinfowler.com/articles/expert-generalist.html)?':49A 'mean':63A 'more':28A 'of':11A,33A,43A,46A,56A,61A 'or':52A 'platform':34A 'programming':82B 'rather':69A 'recognition':42A 'role':45A 'silos':68A 'skills':5A,26A 'specialist':12A 'specialty':4A 'than':30A,70A 'the':22A,31A,44A,54A,67A 'them':72A 'there':6A 'they':64A 'this':37A 'to':39A,58A 'usage':35A 'use':10A 'will':7A,36A,53A 'write':59A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "tidbits from the Thoughtworks Future of Software Development Retreat, [via HN](https://news.ycombinator.com/item?id=47062534))"
}
blogmark 2026-02-17 23:58:58+00:00
{
  "id": 9300,
  "slug": "claude-sonnet-46",
  "link_url": "https://www.anthropic.com/news/claude-sonnet-4-6",
  "link_title": "Introducing Claude Sonnet 4.6",
  "via_url": "https://news.ycombinator.com/item?id=47050488",
  "via_title": "Hacker News",
  "commentary": "Sonnet 4.6 is out today, and Anthropic claim it offers similar performance to [November's Opus 4.5](https://simonwillison.net/2025/Nov/24/claude-opus/) while maintaining the Sonnet pricing of $3/million input and $15/million output tokens (the Opus models are $5/$25). Here's [the system card PDF](https://www-cdn.anthropic.com/78073f739564e986ff3e28522761a7a0b4484f84.pdf).\r\n\r\nSonnet 4.6 has a \"reliable knowledge cutoff\" of August 2025, compared to Opus 4.6's May 2025 and Haiku 4.5's February 2025. Both Opus and Sonnet default to 200,000 max input tokens but can stretch to 1 million in beta and at a higher cost.\r\n\r\nI just released [llm-anthropic 0.24](https://github.com/simonw/llm-anthropic/releases/tag/0.24) with support for both Sonnet 4.6 and Opus 4.6. Claude Code [did most of the work](https://github.com/simonw/llm-anthropic/pull/65) - the new models had a fiddly amount of extra details around adaptive thinking and no longer supporting prefixes, as described [in Anthropic's migration guide](https://platform.claude.com/docs/en/about-claude/models/migration-guide).\r\n\r\nHere's [what I got](https://gist.github.com/simonw/b185576a95e9321b441f0a4dfc0e297c) from:\r\n\r\n    uvx --with llm-anthropic llm 'Generate an SVG of a pelican riding a bicycle' -m claude-sonnet-4.6\r\n\r\n![The pelican has a jaunty top hat with a red band. There is a string between the upper and lower beaks for some reason. The bicycle frame is warped in the wrong way.](https://static.simonwillison.net/static/2026/pelican-sonnet-4.6.png)\r\n\r\nThe SVG comments include:\r\n\r\n    <!-- Hat (fun accessory) -->\r\n\r\nI tried a second time and also got a top hat. Sonnet 4.6 apparently loves top hats!\r\n\r\nFor comparison, here's the pelican Opus 4.5 drew me [in November]((https://simonwillison.net/2025/Nov/24/claude-opus/)):\r\n\r\n![The pelican is cute and looks pretty good. The bicycle is not great - the frame is wrong and the pelican is facing backwards when the handlebars appear to be forwards.There is also something that looks a bit like an egg on the handlebars.](https://static.simonwillison.net/static/2025/claude-opus-4.5-pelican.jpg)\r\n\r\nAnd here's Anthropic's current best pelican, drawn by Opus 4.6 [on February 5th](https://simonwillison.net/2026/Feb/5/two-new-models/):\r\n\r\n![Slightly wonky bicycle frame but an excellent pelican, very clear beak and pouch, nice feathers.](https://static.simonwillison.net/static/2026/opus-4.6-pelican.png)\r\n\r\nOpus 4.6 produces the best pelican beak/pouch. I do think the top hat from Sonnet 4.6 is a nice touch though.",
  "created": "2026-02-17T23:58:58+00:00",
  "metadata": {},
  "search_document": "'/2025/nov/24/claude-opus/)':46C '/2025/nov/24/claude-opus/)):':278C '/2026/feb/5/two-new-models/):':342C '/78073f739564e986ff3e28522761a7a0b4484f84.pdf).':73C '/docs/en/about-claude/models/migration-guide).':177C '/simonw/b185576a95e9321b441f0a4dfc0e297c)':185C '/simonw/llm-anthropic/pull/65)':149C '/simonw/llm-anthropic/releases/tag/0.24)':130C '/static/2025/claude-opus-4.5-pelican.jpg)':324C '/static/2026/opus-4.6-pelican.png)':360C '/static/2026/pelican-sonnet-4.6.png)':242C '0.24':127C '000':104C '1':112C '15/million':56C '200':103C '2025':83C,90C,96C '25':64C '3/million':53C '4.5':43C,93C,271C '4.6':4A,28C,75C,87C,136C,139C,206C,259C,336C,362C,376C '5':63C '5th':339C 'a':19B,77C,118C,154C,197C,200C,210C,215C,220C,249C,255C,314C,378C 'adaptive':161C 'ai':5B,8B 'also':253C,310C 'amount':156C 'an':194C,317C,348C 'and':32C,55C,91C,99C,116C,137C,163C,225C,252C,283C,296C,325C,354C 'anthropic':11B,33C,126C,171C,191C,328C 'apparently':260C 'appear':305C 'are':62C 'around':160C 'as':168C 'at':117C 'august':82C 'backwards':301C 'band':217C 'be':307C 'beak':353C 'beak/pouch':367C 'beaks':227C 'best':331C,365C 'beta':115C 'between':222C 'bicycle':20B,201C,232C,288C,345C 'bit':315C 'both':97C,134C 'but':108C,347C 'by':334C 'can':109C 'card':69C 'claim':34C 'claude':2A,12B,25B,140C,204C 'claude-code':24B 'claude-sonnet':203C 'clear':352C 'code':26B,141C 'comments':245C 'compared':84C 'comparison':265C 'cost':120C 'current':330C 'cute':282C 'cutoff':80C 'default':101C 'described':169C 'details':159C 'did':142C 'do':369C 'drawn':333C 'drew':272C 'egg':318C 'excellent':349C 'extra':158C 'facing':300C 'feathers':357C 'february':95C,338C 'fiddly':155C 'for':133C,228C,264C 'forwards.there':308C 'frame':233C,293C,346C 'from':186C,374C 'generate':193C 'generative':7B 'generative-ai':6B 'gist.github.com':184C 'gist.github.com/simonw/b185576a95e9321b441f0a4dfc0e297c)':183C 'github.com':129C,148C 'github.com/simonw/llm-anthropic/pull/65)':147C 'github.com/simonw/llm-anthropic/releases/tag/0.24)':128C 'good':286C 'got':182C,254C 'great':291C 'guide':174C 'hacker':383C 'had':153C 'haiku':92C 'handlebars':304C,321C 'has':76C,209C 'hat':213C,257C,373C 'hats':263C 'here':65C,178C,266C,326C 'higher':119C 'i':121C,181C,247C,368C 'in':114C,170C,236C,274C 'include':246C 'input':54C,106C 'introducing':1A 'is':29C,219C,234C,281C,289C,294C,299C,309C,377C 'it':35C 'jaunty':211C 'just':122C 'knowledge':79C 'like':316C 'llm':10B,14B,22B,125C,190C,192C 'llm-anthropic':124C,189C 'llm-pricing':13B 'llm-release':21B 'llms':9B 'longer':165C 'looks':284C,313C 'loves':261C 'lower':226C 'm':202C 'maintaining':48C 'max':105C 'may':89C 'me':273C 'migration':173C 'million':113C 'models':61C,152C 'most':143C 'new':151C 'news':384C 'nice':356C,379C 'no':164C 'not':290C 'november':40C,275C 'of':52C,81C,144C,157C,196C 'offers':36C 'on':319C,337C 'opus':42C,60C,86C,98C,138C,270C,335C,361C 'out':30C 'output':57C 'pdf':70C 'pelican':17B,198C,208C,269C,280C,298C,332C,350C,366C 'pelican-riding-a-bicycle':16B 'performance':38C 'platform.claude.com':176C 'platform.claude.com/docs/en/about-claude/models/migration-guide).':175C 'pouch':355C 'prefixes':167C 'pretty':285C 'pricing':15B,51C 'produces':363C 'reason':230C 'red':216C 'release':23B 'released':123C 'reliable':78C 'riding':18B,199C 's':41C,66C,88C,94C,172C,179C,267C,327C,329C 'second':250C 'similar':37C 'simonwillison.net':45C,277C,341C 'simonwillison.net/2025/nov/24/claude-opus/)':44C 'simonwillison.net/2025/nov/24/claude-opus/)):':276C 'simonwillison.net/2026/feb/5/two-new-models/):':340C 'slightly':343C 'some':229C 'something':311C 'sonnet':3A,27C,50C,74C,100C,135C,205C,258C,375C 'static.simonwillison.net':241C,323C,359C 'static.simonwillison.net/static/2025/claude-opus-4.5-pelican.jpg)':322C 'static.simonwillison.net/static/2026/opus-4.6-pelican.png)':358C 'static.simonwillison.net/static/2026/pelican-sonnet-4.6.png)':240C 'stretch':110C 'string':221C 'support':132C 'supporting':166C 'svg':195C,244C 'system':68C 'that':312C 'the':49C,59C,67C,145C,150C,207C,223C,231C,237C,243C,268C,279C,287C,292C,297C,303C,320C,364C,371C 'there':218C 'think':370C 'thinking':162C 'though':381C 'time':251C 'to':39C,85C,102C,111C,306C 'today':31C 'tokens':58C,107C 'top':212C,256C,262C,372C 'touch':380C 'tried':248C 'upper':224C 'uvx':187C 'very':351C 'warped':235C 'way':239C 'what':180C 'when':302C 'while':47C 'with':131C,188C,214C 'wonky':344C 'work':146C 'wrong':238C,295C 'www-cdn.anthropic.com':72C 'www-cdn.anthropic.com/78073f739564e986ff3e28522761a7a0b4484f84.pdf).':71C 'www.anthropic.com':382C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/pelican-sonnet-4.6.png",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-17 23:02:33+00:00
{
  "id": 9299,
  "slug": "rodney",
  "link_url": "https://github.com/simonw/rodney/releases/tag/v0.4.0",
  "link_title": "Rodney v0.4.0",
  "via_url": null,
  "via_title": null,
  "commentary": "My [Rodney](https://github.com/simonw/rodney) CLI tool for browser automation attracted quite the flurry of PRs since I announced it [last week](https://simonwillison.net/2026/Feb/10/showboat-and-rodney/#rodney-cli-browser-automation-designed-to-work-with-showboat). Here are the release notes for the just-released v0.4.0:\r\n\r\n> - Errors now use exit code 2, which means exit code 1 is just for for check failures. [#15](https://github.com/simonw/rodney/pull/15)\r\n> - New `rodney assert` command for running JavaScript tests, exit code 1 if they fail. [#19](https://github.com/simonw/rodney/issues/19)\r\n> - New directory-scoped sessions with `--local`/`--global` flags. [#14](https://github.com/simonw/rodney/pull/14)\r\n> - New `reload --hard` and `clear-cache` commands. [#17](https://github.com/simonw/rodney/pull/17)\r\n> - New `rodney start --show` option to make the browser window visible. Thanks, [Antonio Cuni](https://github.com/antocuni). [#13](https://github.com/simonw/rodney/paull/13)\r\n> - New `rodney connect PORT` command to debug an already-running Chrome instance. Thanks, [Peter Fraenkel](https://github.com/pnf). [#12](https://github.com/simonw/rodney/pull/12)\r\n> - New `RODNEY_HOME` environment variable to support custom state directories. Thanks, [Senko Ra\u0161i\u0107](https://github.com/senko). [#11](https://github.com/simonw/rodney/pull/11)\r\n> - New `--insecure` flag to ignore certificate errors. Thanks, [Jakub Zgoli\u0144ski](https://github.com/zgolus). [#10](https://github.com/simonw/rodney/pull/10)\r\n> - Windows support: avoid `Setsid` on Windows via build-tag helpers. Thanks, [adm1neca](https://github.com/adm1neca). [#18](https://github.com/simonw/rodney/pull/18)\r\n> - Tests now run on `windows-latest` and `macos-latest` in addition to Linux.\r\n\r\nI've been using [Showboat](https://github.com/simonw/showboat) to create demos of new features - here those are for [rodney assert](https://github.com/simonw/rodney/tree/v0.4.0/notes/assert-command-demo), [rodney reload --hard](https://github.com/simonw/rodney/tree/v0.4.0/notes/clear-cache-demo), [rodney exit codes](https://github.com/simonw/rodney/tree/v0.4.0/notes/error-codes-demo), and [rodney start --local](https://github.com/simonw/rodney/tree/v0.4.0/notes/local-sessions-demo).\r\n\r\nThe `rodney assert` command is pretty neat: you can now Rodney to test a web app through multiple steps in a shell script that looks something like this (adapted from [the README](https://github.com/simonw/rodney/blob/v0.4.0/README.md#combining-checks-in-a-shell-script)):\r\n\r\n<div class=\"highlight highlight-source-shell\"><pre><span class=\"pl-c\"><span class=\"pl-c\">#!</span>/bin/bash</span>\r\n<span class=\"pl-c1\">set</span> -euo pipefail\r\n\r\nFAIL=0\r\n\r\n<span class=\"pl-en\">check</span>() {\r\n    <span class=\"pl-k\">if</span> <span class=\"pl-k\">!</span> <span class=\"pl-s\"><span class=\"pl-pds\">\"</span><span class=\"pl-smi\">$@</span><span class=\"pl-pds\">\"</span></span><span class=\"pl-k\">;</span> <span class=\"pl-k\">then</span>\r\n        <span class=\"pl-c1\">echo</span> <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>FAIL: <span class=\"pl-smi\">$*</span><span class=\"pl-pds\">\"</span></span>\r\n        FAIL=1\r\n    <span class=\"pl-k\">fi</span>\r\n}\r\n\r\nrodney start\r\nrodney open <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>https://example.com<span class=\"pl-pds\">\"</span></span>\r\nrodney waitstable\r\n\r\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> Assert elements exist</span>\r\ncheck rodney exists <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>h1<span class=\"pl-pds\">\"</span></span>\r\n\r\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> Assert key elements are visible</span>\r\ncheck rodney visible <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>h1<span class=\"pl-pds\">\"</span></span>\r\ncheck rodney visible <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>#main-content<span class=\"pl-pds\">\"</span></span>\r\n\r\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> Assert JS expressions</span>\r\ncheck rodney assert <span class=\"pl-s\"><span class=\"pl-pds\">'</span>document.title<span class=\"pl-pds\">'</span></span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>Example Domain<span class=\"pl-pds\">'</span></span>\r\ncheck rodney assert <span class=\"pl-s\"><span class=\"pl-pds\">'</span>document.querySelectorAll(\"p\").length<span class=\"pl-pds\">'</span></span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>2<span class=\"pl-pds\">'</span></span>\r\n\r\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> Assert accessibility requirements</span>\r\ncheck rodney ax-find --role navigation\r\n\r\nrodney stop\r\n\r\n<span class=\"pl-k\">if</span> [ <span class=\"pl-s\"><span class=\"pl-pds\">\"</span><span class=\"pl-smi\">$FAIL</span><span class=\"pl-pds\">\"</span></span> <span class=\"pl-k\">-ne</span> 0 ]<span class=\"pl-k\">;</span> <span class=\"pl-k\">then</span>\r\n    <span class=\"pl-c1\">echo</span> <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>Some checks failed<span class=\"pl-pds\">\"</span></span>\r\n    <span class=\"pl-c1\">exit</span> 1\r\n<span class=\"pl-k\">fi</span>\r\n<span class=\"pl-c1\">echo</span> <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>All checks passed<span class=\"pl-pds\">\"</span></span></pre></div>",
  "created": "2026-02-17T23:02:33+00:00",
  "metadata": {},
  "search_document": "'/2026/feb/10/showboat-and-rodney/#rodney-cli-browser-automation-designed-to-work-with-showboat).':35C '/adm1neca).':207C '/antocuni).':127C '/bin/bash':304C '/pnf).':150C '/senko).':170C '/simonw/rodney)':15C '/simonw/rodney/blob/v0.4.0/readme.md#combining-checks-in-a-shell-script)):':303C '/simonw/rodney/issues/19)':85C '/simonw/rodney/paull/13)':131C '/simonw/rodney/pull/10)':191C '/simonw/rodney/pull/11)':174C '/simonw/rodney/pull/12)':154C '/simonw/rodney/pull/14)':98C '/simonw/rodney/pull/15)':67C '/simonw/rodney/pull/17)':110C '/simonw/rodney/pull/18)':211C '/simonw/rodney/tree/v0.4.0/notes/assert-command-demo),':249C '/simonw/rodney/tree/v0.4.0/notes/clear-cache-demo),':255C '/simonw/rodney/tree/v0.4.0/notes/error-codes-demo),':261C '/simonw/rodney/tree/v0.4.0/notes/local-sessions-demo).':268C '/simonw/showboat)':234C '/zgolus).':187C '0':309C,378C '1':57C,78C,316C,385C '10':188C '11':171C '12':151C '13':128C '14':95C '15':64C '17':107C '18':208C '19':82C '2':52C,362C 'a':282C,289C 'accessibility':364C 'adapted':297C 'addition':224C 'adm1neca':204C 'all':388C 'already':141C 'already-running':140C 'an':139C 'and':102C,219C,262C 'annotated':7B 'annotated-release-notes':6B 'announced':29C 'antonio':123C 'app':284C 'are':37C,243C,335C 'assert':70C,246C,271C,325C,332C,347C,352C,358C,363C 'attracted':21C 'automation':20C 'avoid':194C 'ax':369C 'ax-find':368C 'been':229C 'browser':19C,119C 'browsers':3B 'build':200C 'build-tag':199C 'cache':105C 'can':277C 'certificate':180C 'check':62C,310C,328C,337C,341C,350C,356C,366C 'checks':382C,389C 'chrome':143C 'clear':104C 'clear-cache':103C 'cli':16C 'code':51C,56C,77C 'codes':258C 'command':71C,136C,272C 'commands':106C 'connect':134C 'content':346C 'create':236C 'cuni':124C 'custom':162C 'debug':138C 'demos':237C 'directories':164C 'directory':88C 'directory-scoped':87C 'document.queryselectorall':359C 'document.title':353C 'domain':355C 'echo':313C,380C,387C 'elements':326C,334C 'environment':158C 'errors':47C,181C 'euo':306C 'example':354C 'example.com':322C 'exist':327C 'exists':330C 'exit':50C,55C,76C,257C,384C 'expressions':349C 'fail':81C,308C,314C,315C,376C 'failed':383C 'failures':63C 'features':240C 'fi':317C,386C 'find':370C 'flag':177C 'flags':94C 'flurry':24C 'for':18C,41C,60C,61C,72C,244C 'fraenkel':147C 'from':298C 'github.com':14C,66C,84C,97C,109C,126C,130C,149C,153C,169C,173C,186C,190C,206C,210C,233C,248C,254C,260C,267C,302C,391C 'github.com/adm1neca).':205C 'github.com/antocuni).':125C 'github.com/pnf).':148C 'github.com/senko).':168C 'github.com/simonw/rodney)':13C 'github.com/simonw/rodney/blob/v0.4.0/readme.md#combining-checks-in-a-shell-script)):':301C 'github.com/simonw/rodney/issues/19)':83C 'github.com/simonw/rodney/paull/13)':129C 'github.com/simonw/rodney/pull/10)':189C 'github.com/simonw/rodney/pull/11)':172C 'github.com/simonw/rodney/pull/12)':152C 'github.com/simonw/rodney/pull/14)':96C 'github.com/simonw/rodney/pull/15)':65C 'github.com/simonw/rodney/pull/17)':108C 'github.com/simonw/rodney/pull/18)':209C 'github.com/simonw/rodney/tree/v0.4.0/notes/assert-command-demo),':247C 'github.com/simonw/rodney/tree/v0.4.0/notes/clear-cache-demo),':253C 'github.com/simonw/rodney/tree/v0.4.0/notes/error-codes-demo),':259C 'github.com/simonw/rodney/tree/v0.4.0/notes/local-sessions-demo).':266C 'github.com/simonw/showboat)':232C 'github.com/zgolus).':185C 'global':93C 'h1':331C,340C 'hard':101C,252C 'helpers':202C 'here':36C,241C 'home':157C 'i':28C,227C 'if':79C,311C,375C 'ignore':179C 'in':223C,288C 'insecure':176C 'instance':144C 'is':58C,273C 'it':30C 'jakub':183C 'javascript':74C 'js':348C 'just':44C,59C 'just-released':43C 'key':333C 'last':31C 'latest':218C,222C 'length':361C 'like':295C 'linux':226C 'local':92C,265C 'looks':293C 'macos':221C 'macos-latest':220C 'main':345C 'main-content':344C 'make':117C 'means':54C 'multiple':286C 'my':11C 'navigation':372C 'ne':377C 'neat':275C 'new':68C,86C,99C,111C,132C,155C,175C,239C 'notes':9B,40C 'now':48C,213C,278C 'of':25C,238C 'on':196C,215C 'open':321C 'option':115C 'p':360C 'passed':390C 'peter':146C 'pipefail':307C 'port':135C 'pretty':274C 'projects':4B 'prs':26C 'quite':22C 'ra\u0161i\u0107':167C 'readme':300C 'release':8B,39C 'released':45C 'reload':100C,251C 'requirements':365C 'rodney':1A,10B,12C,69C,112C,133C,156C,245C,250C,256C,263C,270C,279C,318C,320C,323C,329C,338C,342C,351C,357C,367C,373C 'role':371C 'run':214C 'running':73C,142C 'scoped':89C 'script':291C 'senko':166C 'sessions':90C 'set':305C 'setsid':195C 'shell':290C 'show':114C 'showboat':231C 'simonwillison.net':34C 'simonwillison.net/2026/feb/10/showboat-and-rodney/#rodney-cli-browser-automation-designed-to-work-with-showboat).':33C 'since':27C 'some':381C 'something':294C 'start':113C,264C,319C 'state':163C 'steps':287C 'stop':374C 'support':161C,193C 'tag':201C 'test':281C 'testing':5B 'tests':75C,212C 'thanks':122C,145C,165C,182C,203C 'that':292C 'the':23C,38C,42C,118C,269C,299C 'then':312C,379C 'they':80C 'this':296C 'those':242C 'through':285C 'to':116C,137C,160C,178C,225C,235C,280C 'tool':17C 'use':49C 'using':230C 'v0.4.0':2A,46C 'variable':159C 've':228C 'via':198C 'visible':121C,336C,339C,343C 'waitstable':324C 'web':283C 'week':32C 'which':53C 'window':120C 'windows':192C,197C,217C 'windows-latest':216C 'with':91C 'you':276C 'zgoli\u0144ski':184C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-02-17 14:49:04+00:00
{
  "id": 2029,
  "slug": "rough-draft-8266",
  "quotation": "This is the story of the United Space Ship Enterprise. Assigned a five year patrol of our galaxy, the giant starship visits Earth colonies, regulates commerce, and explores strange new worlds and civilizations. These are its voyages... and its adventures.",
  "source": "ROUGH DRAFT 8/2/66",
  "source_url": "https://www.neatorama.com/2026/02/11/The-Original-Drafts-for-Star-Treks-Opening-Narration/",
  "created": "2026-02-17T14:49:04+00:00",
  "metadata": {},
  "search_document": "'8/2/66':49C 'a':12A 'adventures':40A 'and':27A,32A,38A 'are':35A 'assigned':11A 'civilizations':33A 'colonies':24A 'commerce':26A 'draft':48C 'earth':23A 'enterprise':10A 'explores':28A 'fiction':43B 'five':13A 'galaxy':18A 'giant':20A 'is':2A 'its':36A,39A 'new':30A 'of':5A,16A 'our':17A 'patrol':15A 'regulates':25A 'rough':47C 'science':42B 'science-fiction':41B 'screen':45B 'screen-writing':44B 'ship':9A 'space':8A 'starship':21A 'story':4A 'strange':29A 'the':3A,6A,19A 'these':34A 'this':1A 'united':7A 'visits':22A 'voyages':37A 'worlds':31A 'writing':46B 'year':14A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "before the Star Trek opening narration reached its final form"
}
blogmark 2026-02-17 14:09:43+00:00
{
  "id": 9298,
  "slug": "first-kakapo-chick-in-four-years",
  "link_url": "https://www.doc.govt.nz/news/media-releases/2026-media-releases/first-kakapo-chick-in-four-years-hatches-on-valentines-day/",
  "link_title": "First k\u0101k\u0101p\u014d chick in four years hatches on Valentine's Day",
  "via_url": "https://www.metafilter.com/212231/Happy-Valen-Kkp-Tines",
  "via_title": "MetaFilter",
  "commentary": "First chick of [the 2026 breeding season](https://simonwillison.net/2026/Jan/8/llm-predictions-for-2026/#1-year-k-k-p-parrots-will-have-an-outstanding-breeding-season)!\r\n\r\n> K\u0101k\u0101p\u014d Yasmine hatched an egg fostered from k\u0101k\u0101p\u014d T\u012bwhiri on Valentine's Day, bringing the total number of k\u0101k\u0101p\u014d to 237 \u2013 though it won\u2019t be officially added to the population until it fledges.\r\n\r\nHere's why the egg was fostered:\r\n\r\n> \"K\u0101k\u0101p\u014d mums typically have the best outcomes when raising a maximum of two chicks. Biological mum T\u012bwhiri has four fertile eggs this season already, while Yasmine, an experienced foster mum, had no fertile eggs.\"\r\n\r\nAnd an [update from conservation biologist Andrew Digby](https://bsky.app/profile/digs.bsky.social/post/3mf25glzt2c2b) - a second chick hatched this morning!\r\n\r\n> The second #kakapo chick of the #kakapo2026 breeding season hatched this morning: Hine Taumai-A1-2026 on Ako's nest on Te K\u0101kahu. We transferred the egg from Anchor two nights ago. This is Ako's first-ever chick, which is just a few hours old in this video.\r\n\r\nThat post [has a video](https://bsky.app/profile/digs.bsky.social/post/3mf25glzt2c2b) of mother and chick.\r\n\r\n![A beautiful charismatic green K\u0101k\u0101p feeding a little grey chick](https://static.simonwillison.net/static/2026/kakapo-plus-chick.jpg)",
  "created": "2026-02-17T14:09:43+00:00",
  "metadata": {},
  "search_document": "'/2026/jan/8/llm-predictions-for-2026/#1-year-k-k-p-parrots-will-have-an-outstanding-breeding-season)!':22C '/profile/digs.bsky.social/post/3mf25glzt2c2b)':108C,173C '/static/2026/kakapo-plus-chick.jpg)':190C '2026':17C,131C '237':43C 'a':73C,109C,159C,169C,178C,184C 'a1':130C 'added':50C 'ago':147C 'ako':133C,150C 'already':87C 'an':26C,90C,99C 'anchor':144C 'and':98C,176C 'andrew':104C 'be':48C 'beautiful':179C 'best':69C 'biological':78C 'biologist':103C 'breeding':18C,122C 'bringing':36C 'bsky.app':107C,172C 'bsky.app/profile/digs.bsky.social/post/3mf25glzt2c2b)':106C,171C 'charismatic':180C 'chick':3A,14C,111C,118C,155C,177C,187C 'chicks':77C 'conservation':102C 'day':11A,35C 'digby':105C 'egg':27C,61C,142C 'eggs':84C,97C 'ever':154C 'experienced':91C 'feeding':183C 'fertile':83C,96C 'few':160C 'first':1A,13C,153C 'first-ever':152C 'fledges':56C 'foster':92C 'fostered':28C,63C 'four':5A,82C 'from':29C,101C,143C 'green':181C 'grey':186C 'had':94C 'has':81C,168C 'hatched':25C,112C,124C 'hatches':7A 'have':67C 'here':57C 'hine':127C 'hours':161C 'in':4A,163C 'is':149C,157C 'it':45C,55C 'just':158C 'kakapo':12B,117C 'kakapo2026':121C 'k\u0101kahu':138C 'k\u0101k\u0101p':182C 'k\u0101k\u0101p\u014d':2A,23C,30C,41C,64C 'little':185C 'maximum':74C 'metafilter':192C 'morning':114C,126C 'mother':175C 'mum':79C,93C 'mums':65C 'nest':135C 'nights':146C 'no':95C 'number':39C 'of':15C,40C,75C,119C,174C 'officially':49C 'old':162C 'on':8A,32C,132C,136C 'outcomes':70C 'population':53C 'post':167C 'raising':72C 's':10A,34C,58C,134C,151C 'season':19C,86C,123C 'second':110C,116C 'simonwillison.net':21C 'simonwillison.net/2026/jan/8/llm-predictions-for-2026/#1-year-k-k-p-parrots-will-have-an-outstanding-breeding-season)!':20C 'static.simonwillison.net':189C 'static.simonwillison.net/static/2026/kakapo-plus-chick.jpg)':188C 't':47C 'taumai':129C 'taumai-a1':128C 'te':137C 'that':166C 'the':16C,37C,52C,60C,68C,115C,120C,141C 'this':85C,113C,125C,148C,164C 'though':44C 'to':42C,51C 'total':38C 'transferred':140C 'two':76C,145C 'typically':66C 't\u012bwhiri':31C,80C 'until':54C 'update':100C 'valentine':9A,33C 'video':165C,170C 'was':62C 'we':139C 'when':71C 'which':156C 'while':88C 'why':59C 'won':46C 'www.doc.govt.nz':191C 'yasmine':24C,89C 'years':6A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-02-17 14:04:44+00:00
{
  "id": 2028,
  "slug": "dimitris-papailiopoulos",
  "quotation": "But the intellectually interesting part for me is something else. **I now have something close to a magic box where I throw in a question and a first answer comes back basically for free, in terms of human effort**. Before this, the way I'd explore a new idea is to either clumsily put something together myself or ask a student to run something short for signal, and if it's there, we\u2019d go deeper. That quick signal step, i.e., finding out if a question has any meat to it, is what I can now do without taking up anyone else's time. It\u2019s now between just me, Claude Code, and a few days of GPU time.\r\n\r\nI don\u2019t know what this means for how we do research long term. I don\u2019t think anyone does yet. But **the distance between a question and a first answer just got very small**.",
  "source": "Dimitris Papailiopoulos",
  "source_url": "https://twitter.com/dimitrispapail/status/2023080289828831349",
  "created": "2026-02-17T14:04:44+00:00",
  "metadata": {},
  "search_document": "'a':17A,24A,27A,47A,60A,85A,114A,145A,148A 'agents':163B 'ai':156B,159B 'and':26A,68A,113A,147A 'answer':29A,150A 'any':88A 'anyone':101A,138A 'ask':59A 'back':31A 'basically':32A 'before':40A 'between':108A,144A 'box':19A 'but':1A,141A 'can':95A 'claude':111A,165B 'claude-code':164B 'close':15A 'clumsily':53A 'code':112A,166B 'coding':162B 'coding-agents':161B 'comes':30A 'd':45A,74A 'days':116A 'deeper':76A 'dimitris':167C 'distance':143A 'do':97A,130A 'does':139A 'don':121A,135A 'effort':39A 'either':52A 'else':10A,102A 'explore':46A 'few':115A 'finding':82A 'first':28A,149A 'for':6A,33A,66A,127A 'free':34A 'generative':158B 'generative-ai':157B 'go':75A 'got':152A 'gpu':118A 'has':87A 'have':13A 'how':128A 'human':38A 'i':11A,21A,44A,94A,120A,134A 'i.e':81A 'idea':49A 'if':69A,84A 'in':23A,35A 'intellectually':3A 'interesting':4A 'is':8A,50A,92A 'it':70A,91A,105A 'just':109A,151A 'know':123A 'llms':160B 'long':132A 'magic':18A 'me':7A,110A 'means':126A 'meat':89A 'myself':57A 'new':48A 'now':12A,96A,107A 'of':37A,117A 'or':58A 'out':83A 'papailiopoulos':168C 'part':5A 'put':54A 'question':25A,86A,146A 'quick':78A 'research':131A,155B 'run':63A 's':71A,103A,106A 'short':65A 'signal':67A,79A 'small':154A 'something':9A,14A,55A,64A 'step':80A 'student':61A 't':122A,136A 'taking':99A 'term':133A 'terms':36A 'that':77A 'the':2A,42A,142A 'there':72A 'think':137A 'this':41A,125A 'throw':22A 'time':104A,119A 'to':16A,51A,62A,90A 'together':56A 'up':100A 'very':153A 'way':43A 'we':73A,129A 'what':93A,124A 'where':20A 'without':98A 'yet':140A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "on running research questions though Claude Code"
}
blogmark 2026-02-17 04:30:57+00:00
{
  "id": 9297,
  "slug": "qwen35",
  "link_url": "https://qwen.ai/blog?id=qwen3.5",
  "link_title": "Qwen3.5: Towards Native Multimodal Agents",
  "via_url": null,
  "via_title": null,
  "commentary": "Alibaba's Qwen just released the first two models in the Qwen 3.5 series - one open weights, one proprietary. Both are multi-modal for vision input.\r\n\r\nThe open weight one is a Mixture of Experts model called Qwen3.5-397B-A17B. Interesting to see Qwen call out serving efficiency as a benefit of that architecture:\r\n\r\n> Built on an innovative hybrid architecture that fuses linear attention (via Gated Delta Networks) with a sparse mixture-of-experts, the model attains remarkable inference efficiency: although it comprises 397 billion total parameters, just 17 billion are activated per forward pass, optimizing both speed and cost without sacrificing capability.\r\n\r\nIt's [807GB on Hugging Face](https://huggingface.co/Qwen/Qwen3.5-397B-A17B), and Unsloth have a [collection of smaller GGUFs](https://huggingface.co/unsloth/Qwen3.5-397B-A17B-GGUF) ranging in size from 94.2GB 1-bit to 462GB Q8_K_XL.\r\n\r\nI got this [pelican](https://simonwillison.net/tags/pelican-riding-a-bicycle/) from the [OpenRouter hosted model](https://openrouter.ai/qwen/qwen3.5-397b-a17b) ([transcript](https://gist.github.com/simonw/625546cf6b371f9c0040e64492943b82)):\r\n\r\n![Pelican is quite good although the neck lacks an outline for some reason. Bicycle is very basic with an incomplete frame](https://static.simonwillison.net/static/2026/qwen3.5-397b-a17b.png)\r\n\r\nThe proprietary hosted model is called Qwen3.5 Plus 2026-02-15, and is a little confusing. Qwen researcher [Junyang Lin  says](https://twitter.com/JustinLin610/status/2023340126479569140):\r\n\r\n> Qwen3-Plus is a hosted API version of 397B. As the model natively supports 256K tokens, Qwen3.5-Plus supports 1M token context length. Additionally it supports search and code interpreter, which you can use on Qwen Chat with Auto mode.\r\n\r\nHere's [its pelican](https://gist.github.com/simonw/9507dd47483f78dc1195117735273e20), which is similar in quality to the open weights model:\r\n\r\n![Similar quality pelican. The bicycle is taller and has a better frame shape. They are visually quite similar.](https://static.simonwillison.net/static/2026/qwen3.5-plus-02-15.png)",
  "created": "2026-02-17T04:30:57+00:00",
  "metadata": {},
  "search_document": "'-02':216C '-15':217C '/justinlin610/status/2023340126479569140):':230C '/qwen/qwen3.5-397b-a17b)':178C '/qwen/qwen3.5-397b-a17b),':139C '/simonw/625546cf6b371f9c0040e64492943b82)):':182C '/simonw/9507dd47483f78dc1195117735273e20),':277C '/static/2026/qwen3.5-397b-a17b.png)':206C '/static/2026/qwen3.5-plus-02-15.png)':308C '/tags/pelican-riding-a-bicycle/)':170C '/unsloth/qwen3.5-397b-a17b-gguf)':150C '1':157C '17':116C '1m':250C '2026':215C '256k':246C '3.5':40C '397':111C '397b':240C '462gb':160C '807gb':133C '94.2':155C 'a':18B,60C,76C,96C,143C,220C,235C,297C 'activated':119C 'additionally':254C 'agents':5A 'ai':6B,9B,25B 'ai-in-china':24B 'alibaba':28C 'although':108C,187C 'an':83C,191C,201C 'and':126C,140C,218C,258C,295C 'api':237C 'architecture':80C,86C 'are':48C,118C,302C 'as':75C,241C 'attains':104C 'attention':90C 'auto':269C 'basic':199C 'benefit':77C 'better':298C 'bicycle':19B,196C,292C 'billion':112C,117C 'bit':158C 'both':47C,124C 'built':81C 'call':71C 'called':65C,212C 'can':263C 'capability':130C 'chat':267C 'china':27B 'code':259C 'collection':144C 'comprises':110C 'confusing':222C 'context':252C 'cost':127C 'delta':93C 'efficiency':74C,107C 'experts':63C,101C 'face':136C 'first':34C 'for':52C,193C 'forward':121C 'frame':203C,299C 'from':154C,171C 'fuses':88C 'gated':92C 'gb':156C 'generative':8B 'generative-ai':7B 'ggufs':147C 'gist.github.com':181C,276C 'gist.github.com/simonw/625546cf6b371f9c0040e64492943b82)):':180C 'gist.github.com/simonw/9507dd47483f78dc1195117735273e20),':275C 'good':186C 'got':165C 'has':296C 'have':142C 'here':271C 'hosted':174C,209C,236C 'hugging':135C 'huggingface.co':138C,149C 'huggingface.co/qwen/qwen3.5-397b-a17b),':137C 'huggingface.co/unsloth/qwen3.5-397b-a17b-gguf)':148C 'hybrid':85C 'i':164C 'in':26B,37C,152C,281C 'incomplete':202C 'inference':106C 'innovative':84C 'input':54C 'interesting':67C 'interpreter':260C 'is':59C,184C,197C,211C,219C,234C,279C,293C 'it':109C,131C,255C 'its':273C 'junyang':225C 'just':31C,115C 'k':162C 'lacks':190C 'length':253C 'lin':226C 'linear':89C 'little':221C 'llm':21B 'llm-release':20B 'llms':10B,13B 'mixture':61C,99C 'mixture-of-experts':98C 'modal':51C 'mode':270C 'model':64C,103C,175C,210C,243C,287C 'models':36C 'multi':50C 'multi-modal':49C 'multimodal':4A 'native':3A 'natively':244C 'neck':189C 'networks':94C 'of':62C,78C,100C,145C,239C 'on':82C,134C,265C 'one':42C,45C,58C 'open':43C,56C,285C 'openrouter':23B,173C 'openrouter.ai':177C 'openrouter.ai/qwen/qwen3.5-397b-a17b)':176C 'optimizing':123C 'out':72C 'outline':192C 'parameters':114C 'pass':122C 'pelican':16B,167C,183C,274C,290C 'pelican-riding-a-bicycle':15B 'per':120C 'plus':214C,233C 'proprietary':46C,208C 'q8':161C 'quality':282C,289C 'quite':185C,304C 'qwen':14B,30C,39C,70C,223C,266C 'qwen.ai':309C 'qwen3':232C 'qwen3-plus':231C 'qwen3.5':1A,213C 'qwen3.5-397b-a17b':66C 'qwen3.5-plus':248C 'ranging':151C 'reason':195C 'release':22B 'released':32C 'remarkable':105C 'researcher':224C 'riding':17B 's':29C,132C,272C 'sacrificing':129C 'says':227C 'search':257C 'see':69C 'series':41C 'serving':73C 'shape':300C 'similar':280C,288C,305C 'simonwillison.net':169C 'simonwillison.net/tags/pelican-riding-a-bicycle/)':168C 'size':153C 'smaller':146C 'some':194C 'sparse':97C 'speed':125C 'static.simonwillison.net':205C,307C 'static.simonwillison.net/static/2026/qwen3.5-397b-a17b.png)':204C 'static.simonwillison.net/static/2026/qwen3.5-plus-02-15.png)':306C 'supports':245C,249C,256C 'taller':294C 'that':79C,87C 'the':33C,38C,55C,102C,172C,188C,207C,242C,284C,291C 'they':301C 'this':166C 'to':68C,159C,283C 'token':251C 'tokens':247C 'total':113C 'towards':2A 'transcript':179C 'twitter.com':229C 'twitter.com/justinlin610/status/2023340126479569140):':228C 'two':35C 'unsloth':141C 'use':264C 'version':238C 'very':198C 'via':91C 'vision':12B,53C 'vision-llms':11B 'visually':303C 'weight':57C 'weights':44C,286C 'which':261C,278C 'with':95C,200C,268C 'without':128C 'xl':163C 'you':262C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/qwen3.5-plus-02-15.png",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-15 23:59:36+00:00
{
  "id": 9296,
  "slug": "the-ai-vampire",
  "link_url": "https://steve-yegge.medium.com/the-ai-vampire-eda6e4f07163",
  "link_title": "The AI Vampire",
  "via_url": "https://cosocial.ca/@timbray/116076167774984883",
  "via_title": "Tim Bray",
  "commentary": "Steve Yegge's take on agent fatigue, and its relationship to burnout.\r\n\r\n> Let's pretend you're the only person at your company using AI.\r\n> \r\n> In Scenario A, you decide you're going to impress your employer, and work for 8 hours a day at 10x productivity. You knock it out of the park and make everyone else look terrible by comparison.\r\n> \r\n> In that scenario, your employer captures 100% of the value from *you* adopting AI. You get nothing, or at any rate, it ain't gonna be 9x your salary. And everyone hates you now.\r\n> \r\n> And you're *exhausted.* You're tired, Boss. You got nothing for it.\r\n> \r\n> Congrats, you were just drained by a company. I've been drained to the point of burnout several times in my career, even at Google once or twice. But now with AI, it's oh, so much easier.\r\n\r\nSteve reports needing more sleep due to the cognitive burden involved in agentic engineering, and notes that four hours of agent work a day is a more realistic pace:\r\n\r\n> I\u2019ve argued that AI has turned us all into Jeff Bezos, by automating the easy work, and leaving us with all the difficult decisions, summaries, and problem-solving. I find that I am only really comfortable working at that pace for short bursts of a few hours once or occasionally twice a day, even with lots of practice.",
  "created": "2026-02-15T23:59:36+00:00",
  "metadata": {},
  "search_document": "'100':96C '10x':73C '8':68C '9x':116C 'a':55C,70C,143C,197C,200C,250C,257C 'adopting':102C 'agent':33C,195C 'agentic':26B,187C 'agentic-engineering':25B 'agents':21B 'ai':2A,7B,10B,13B,17B,52C,103C,168C,208C 'ai-assisted-programming':12B 'ai-ethics':16B 'ain':112C 'all':212C,225C 'am':238C 'and':35C,65C,82C,119C,124C,189C,221C,230C 'any':109C 'argued':206C 'assisted':14B 'at':48C,72C,108C,160C,243C 'automating':217C 'be':115C 'been':147C 'bezos':215C 'boss':131C 'bray':266C 'burden':184C 'burnout':39C,153C 'bursts':248C 'but':165C 'by':88C,142C,216C 'captures':95C 'career':158C 'coding':20B 'coding-agents':19B 'cognitive':23B,183C 'cognitive-debt':22B 'comfortable':241C 'company':50C,144C 'comparison':89C 'congrats':137C 'day':71C,198C,258C 'debt':24B 'decide':57C 'decisions':228C 'difficult':227C 'drained':141C,148C 'due':180C 'easier':174C 'easy':219C 'else':85C 'employer':64C,94C 'engineering':27B,188C 'ethics':18B 'even':159C,259C 'everyone':84C,120C 'exhausted':127C 'fatigue':34C 'few':251C 'find':235C 'for':67C,135C,246C 'four':192C 'from':100C 'generative':9B 'generative-ai':8B 'get':105C 'going':60C 'gonna':114C 'google':161C 'got':133C 'has':209C 'hates':121C 'hours':69C,193C,252C 'i':145C,204C,234C,237C 'impress':62C 'in':53C,90C,156C,186C 'into':213C 'involved':185C 'is':199C 'it':77C,111C,136C,169C 'its':36C 'jeff':214C 'just':140C 'knock':76C 'leaving':222C 'let':40C 'llms':11B 'look':86C 'lots':261C 'make':83C 'more':178C,201C 'much':173C 'my':157C 'needing':177C 'notes':190C 'nothing':106C,134C 'now':123C,166C 'occasionally':255C 'of':79C,97C,152C,194C,249C,262C 'oh':171C 'on':32C 'once':162C,253C 'only':46C,239C 'or':107C,163C,254C 'out':78C 'pace':203C,245C 'park':81C 'person':47C 'point':151C 'practice':263C 'pretend':42C 'problem':232C 'problem-solving':231C 'productivity':74C 'programming':15B 'rate':110C 're':44C,59C,126C,129C 'realistic':202C 'really':240C 'relationship':37C 'reports':176C 's':30C,41C,170C 'salary':118C 'scenario':54C,92C 'several':154C 'short':247C 'sleep':179C 'so':172C 'solving':233C 'steve':5B,28C,175C 'steve-yegge':4B 'steve-yegge.medium.com':264C 'summaries':229C 't':113C 'take':31C 'terrible':87C 'that':91C,191C,207C,236C,244C 'the':1A,45C,80C,98C,150C,182C,218C,226C 'tim':265C 'times':155C 'tired':130C 'to':38C,61C,149C,181C 'turned':210C 'twice':164C,256C 'us':211C,223C 'using':51C 'value':99C 'vampire':3A 've':146C,205C 'were':139C 'with':167C,224C,260C 'work':66C,196C,220C 'working':242C 'yegge':6B,29C 'you':43C,56C,58C,75C,101C,104C,122C,125C,128C,132C,138C 'your':49C,63C,93C,117C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-15 18:26:08+00:00
{
  "id": 9295,
  "slug": "gwtar",
  "link_url": "https://gwern.net/gwtar",
  "link_title": "Gwtar: a static efficient single-file HTML format",
  "via_url": "https://news.ycombinator.com/item?id=47024506",
  "via_title": "Hacker News",
  "commentary": "Fascinating new project from Gwern Branwen and Said Achmiz that targets the challenge of combining large numbers of assets into a single archived HTML file without that file being inconvenient to view in a browser.\r\n\r\nThe key trick it uses is to fire [window.stop()](https://developer.mozilla.org/en-US/docs/Web/API/Window/stop) early in the page to prevent the browser from downloading the whole thing, then following that call with inline tar uncompressed content.\r\n\r\nIt can then make HTTP range requests to fetch content from that tar data on-demand when it is needed by the page.\r\n\r\nThe JavaScript that has already loaded rewrites asset URLs to point to `https://localhost/` purely so that they will fail to load. Then it uses a [PerformanceObserver](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceObserver) to catch those attempted loads:\r\n\r\n    let perfObserver = new PerformanceObserver((entryList, observer) => {\r\n        resourceURLStringsHandler(entryList.getEntries().map(entry => entry.name));\r\n    });\r\n    perfObserver.observe({ entryTypes: [ \"resource\" ] });\r\n\r\nThat `resourceURLStringsHandler` callback finds the resource if it is already loaded or fetches it with an HTTP range request otherwise and then inserts the resource in the right place using a `blob:` URL.\r\n\r\nHere's what the `window.stop()` portion of the document looks like if you view the source:\r\n\r\n![Screenshot of a macOS terminal window titled \"gw \u2014 more big.html \u2014 123\u00d746\" showing the source code of a gwtar (self-extracting HTML archive) file. The visible code includes JavaScript with `requestIdleCallback(getMainPageHTML);`, a ` noscript ` block with warnings: a \"js-disabled-warning\" stating \"This HTML page requires JavaScript to be enabled to render, as it is a self-extracting gwtar HTML file,\" a description of gwtar as \"a portable self-contained standalone HTML file which is designed to nevertheless support efficient lazy loading of all assets such as large media files,\" with a link to https://gwern.net/gwtar, a \"local-file-warning\" with a shell command `perl -ne'print $_ if $x; $x=1 if /<!-- GWTAR END/' &lt; foo.gwtar.html | tar --extract`, and a \"server-fail-warning\" about misconfigured servers. Below the HTML closing tags and `<!-- GWTAR END` comment is binary tar archive data with the filename `2010-02-brianmoriarty-thesecretofpsalm46.html`, showing null-padded tar header fields including `ustar^@00root` and octal size/permission values. At the bottom, a SingleFile metadata comment shows `url: https://web.archive.org/web/20230512001411/http://ludix.com/moriarty/psalm46.html` and `saved date: Sat Jan 17 2026 19:26:49 GMT-0800 (Pacific Standard Time)`.](https://static.simonwillison.net/static/2026/gwtar.jpg)\r\n\r\nAmusingly for an archive format it doesn't actually work if you open the file directly on your own computer. Here's what you see if you try to do that:\r\n\r\n> You are seeing this message, instead of the page you should be seeing, because `gwtar` files **cannot be opened locally** (due to web browser security restrictions).\r\n> \r\n> To open this page on your computer, use the following shell command:\r\n> \r\n> `perl -ne'print $_ if $x; $x=1 if /<!-- GWTAR END/' < foo.gwtar.html | tar --extract`\r\n> \r\n> Then open the file `foo.html` in any web browser.",
  "created": "2026-02-15T18:26:08+00:00",
  "metadata": {},
  "search_document": "'-0800':394C '/en-us/docs/web/api/performanceobserver)':138C '/en-us/docs/web/api/window/stop)':63C '/gwtar,':307C '/static/2026/gwtar.jpg)':400C '/web/20230512001411/http://ludix.com/moriarty/psalm46.html':382C '00root':366C '1':323C,476C '123':217C '17':388C '19':390C '2010-02-brianmoriarty-thesecretofpsalm46.html':356C '2026':389C '26':391C '46':218C '49':392C 'a':2A,37C,50C,134C,188C,209C,224C,240C,245C,264C,271C,276C,302C,308C,314C,331C,374C 'about':336C 'achmiz':25C 'actually':409C 'all':294C 'already':114C,167C 'amusingly':401C 'an':173C,403C 'and':23C,178C,330C,344C,367C,383C 'any':489C 'archive':230C,351C,404C 'archived':39C 'archiving':10B 'are':433C 'as':261C,275C,297C 'asset':117C 'assets':35C,295C 'at':371C 'attempted':142C 'be':257C,443C,449C 'because':445C 'being':45C 'below':339C 'big.html':216C 'binary':349C 'blob':189C 'block':242C 'bottom':373C 'branwen':22C 'browser':51C,71C,455C,491C 'by':107C 'call':80C 'callback':160C 'can':87C 'cannot':448C 'catch':140C 'challenge':29C 'closing':342C 'code':222C,234C 'combining':31C 'command':316C,469C 'comment':347C,377C 'computer':420C,464C 'contained':280C 'content':85C,95C 'data':99C,352C 'date':385C 'demand':102C 'description':272C 'designed':286C 'developer.mozilla.org':62C,137C 'developer.mozilla.org/en-us/docs/web/api/performanceobserver)':136C 'developer.mozilla.org/en-us/docs/web/api/window/stop)':61C 'directly':416C 'disabled':248C 'do':430C 'document':199C 'doesn':407C 'downloading':73C 'due':452C 'early':64C 'efficient':4A,290C 'enabled':258C 'end':326C,346C,479C 'entry':153C 'entry.name':154C 'entrylist':148C 'entrylist.getentries':151C 'entrytypes':156C 'extract':329C,482C 'extracting':228C,267C 'fail':128C,334C 'fascinating':17C 'fetch':94C 'fetches':170C 'fields':363C 'file':7A,41C,44C,231C,270C,283C,311C,415C,486C 'filename':355C 'files':300C,447C 'finds':161C 'fire':59C 'following':78C,467C 'foo.gwtar.html':327C,480C 'foo.html':487C 'for':402C 'format':9A,405C 'from':20C,72C,96C 'getmainpagehtml':239C 'gmt':393C 'gw':214C 'gwern':21C 'gwern.net':306C,492C 'gwern.net/gwtar,':305C 'gwtar':1A,225C,268C,274C,325C,345C,446C,478C 'hacker':493C 'has':113C 'header':362C 'here':191C,421C 'html':8A,11B,40C,229C,252C,269C,282C,341C 'http':14B,90C,174C 'http-range-requests':13B 'if':164C,202C,320C,324C,411C,426C,473C,477C 'in':49C,65C,183C,488C 'includes':235C 'including':364C 'inconvenient':46C 'inline':82C 'inserts':180C 'instead':437C 'into':36C 'is':57C,105C,166C,263C,285C,348C 'it':55C,86C,104C,132C,165C,171C,262C,406C 'jan':387C 'javascript':12B,111C,236C,255C 'js':247C 'js-disabled-warning':246C 'key':53C 'large':32C,298C 'lazy':291C 'let':144C 'like':201C 'link':303C 'load':130C 'loaded':115C,168C 'loading':292C 'loads':143C 'local':310C 'local-file-warning':309C 'localhost':122C 'locally':451C 'looks':200C 'macos':210C 'make':89C 'map':152C 'media':299C 'message':436C 'metadata':376C 'misconfigured':337C 'more':215C 'ne':318C,471C 'needed':106C 'nevertheless':288C 'new':18C,146C 'news':494C 'noscript':241C 'null':359C 'null-padded':358C 'numbers':33C 'observer':149C 'octal':368C 'of':30C,34C,197C,208C,223C,273C,293C,438C 'on':101C,417C,462C 'on-demand':100C 'open':413C,459C,484C 'opened':450C 'or':169C 'otherwise':177C 'own':419C 'pacific':395C 'padded':360C 'page':67C,109C,253C,440C,461C 'perfobserver':145C 'perfobserver.observe':155C 'performanceobserver':135C,147C 'perl':317C,470C 'place':186C 'point':120C 'portable':277C 'portion':196C 'prevent':69C 'print':319C,472C 'project':19C 'purely':123C 'range':15B,91C,175C 'render':260C 'request':176C 'requestidlecallback':238C 'requests':16B,92C 'requires':254C 'resource':157C,163C,182C 'resourceurlstringshandler':150C,159C 'restrictions':457C 'rewrites':116C 'right':185C 's':192C,422C 'said':24C 'sat':386C 'saved':384C 'screenshot':207C 'security':456C 'see':425C 'seeing':434C,444C 'self':227C,266C,279C 'self-contained':278C 'self-extracting':226C,265C 'server':333C 'server-fail-warning':332C 'servers':338C 'shell':315C,468C 'should':442C 'showing':219C,357C 'shows':378C 'single':6A,38C 'single-file':5A 'singlefile':375C 'size/permission':369C 'so':124C 'source':206C,221C 'standalone':281C 'standard':396C 'static':3A 'static.simonwillison.net':399C 'static.simonwillison.net/static/2026/gwtar.jpg)':398C 'stating':250C 'such':296C 'support':289C 't':408C 'tags':343C 'tar':83C,98C,328C,350C,361C,481C 'targets':27C 'terminal':211C 'that':26C,43C,79C,97C,112C,125C,158C,431C 'the':28C,52C,66C,70C,74C,108C,110C,162C,181C,184C,194C,198C,205C,220C,232C,340C,354C,372C,414C,439C,466C,485C 'then':77C,88C,131C,179C,483C 'they':126C 'thing':76C 'this':251C,435C,460C 'those':141C 'time':397C 'titled':213C 'to':47C,58C,68C,93C,119C,121C,129C,139C,256C,259C,287C,304C,429C,453C,458C 'trick':54C 'try':428C 'uncompressed':84C 'url':190C,379C 'urls':118C 'use':465C 'uses':56C,133C 'using':187C 'ustar':365C 'values':370C 'view':48C,204C 'visible':233C 'warning':249C,312C,335C 'warnings':244C 'web':454C,490C 'web.archive.org':381C 'web.archive.org/web/20230512001411/http://ludix.com/moriarty/psalm46.html':380C 'what':193C,423C 'when':103C 'which':284C 'whole':75C 'will':127C 'window':212C 'window.stop':60C,195C 'with':81C,172C,237C,243C,301C,313C,353C 'without':42C 'work':410C 'x':321C,322C,474C,475C 'you':203C,412C,424C,427C,432C,441C 'your':418C,463C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/gwtar.jpg",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-02-15 13:36:20+00:00
{
  "id": 2027,
  "slug": "eric-meyer",
  "quotation": "I saw yet another \u201cCSS is a massively bloated mess\u201d whine and I\u2019m like.  My dude.  My brother in Chromium.  It is trying as hard as it can to express the totality of visual presentation and layout design and typography and animation and digital interactivity and a few other things in a human-readable text format.  It\u2019s not bloated, it\u2019s fantastically ambitious.  Its reach is greater than most of us can hope to grasp.  Put some *respect* on its *name*.",
  "source": "Eric Meyer",
  "source_url": "https://mastodon.social/@Meyerweb/116065151451468199",
  "created": "2026-02-15T13:36:20+00:00",
  "metadata": {},
  "search_document": "'a':7A,48A,53A 'ambitious':66A 'and':12A,37A,40A,42A,44A,47A 'animation':43A 'another':4A 'as':25A,27A 'bloated':9A,62A 'brother':19A 'can':29A,75A 'chromium':21A 'css':5A,85B 'design':39A 'digital':45A 'dude':17A 'eric':87B,92C 'eric-meyer':86B 'express':31A 'fantastically':65A 'few':49A 'format':58A 'grasp':78A 'greater':70A 'hard':26A 'hope':76A 'human':55A 'human-readable':54A 'i':1A,13A 'in':20A,52A 'interactivity':46A 'is':6A,23A,69A 'it':22A,28A,59A,63A 'its':67A,83A 'layout':38A 'like':15A 'm':14A 'massively':8A 'mess':10A 'meyer':88B,93C 'most':72A 'my':16A,18A 'name':84A 'not':61A 'of':34A,73A 'on':82A 'other':50A 'presentation':36A 'put':79A 'reach':68A 'readable':56A 'respect':81A 's':60A,64A 'saw':2A 'some':80A 'standards':91B 'text':57A 'than':71A 'the':32A 'things':51A 'to':30A,77A 'totality':33A 'trying':24A 'typography':41A 'us':74A 'visual':35A 'web':90B 'web-standards':89B 'whine':11A 'yet':3A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": null
}
blogmark 2026-02-15 05:20:11+00:00
{
  "id": 9294,
  "slug": "cognitive-debt",
  "link_url": "https://margaretstorey.com/blog/2026/02/09/cognitive-debt/",
  "link_title": "How Generative and Agentic AI Shift Concern from Technical Debt to Cognitive Debt",
  "via_url": "https://martinfowler.com/fragments/2026-02-13.html",
  "via_title": "Martin Fowler",
  "commentary": "This piece by Margaret-Anne Storey is the best explanation of the term **cognitive debt** I've seen so far.\r\n\r\n> *Cognitive debt*, a term gaining [traction](https://www.media.mit.edu/publications/your-brain-on-chatgpt/) recently, instead communicates the notion that the debt compounded from going fast lives in the brains of the developers and affects their lived experiences and abilities to \u201cgo fast\u201d or to make changes. Even if AI agents produce code that could be easy to understand, the humans involved may have simply lost the plot and may not understand what the program is supposed to do, how their intentions were implemented, or how to possibly change it.\r\n\r\nMargaret-Anne expands on this further with an anecdote about a student team she coached:\r\n\r\n> But by weeks 7 or 8, one team hit a wall. They could no longer make even simple changes without breaking something unexpected. When I met with them, the team initially blamed technical debt: messy code, poor architecture, hurried implementations. But as we dug deeper, the real problem emerged: no one on the team could explain why certain design decisions had been made or how different parts of the system were supposed to work together. The code might have been messy, but the bigger issue was that the theory of the system, their shared understanding, had fragmented or disappeared entirely. They had accumulated cognitive debt faster than technical debt, and it paralyzed them.\r\n\r\nI've experienced this myself on some of my more ambitious vibe-code-adjacent projects. I've been experimenting with prompting entire new features into existence without reviewing their implementations and, while it works surprisingly well, I've found myself getting lost in my own projects.\r\n\r\nI no longer have a firm mental model of what they can do and how they work, which means each additional feature becomes harder to reason about, eventually leading me to lose the ability to make confident decisions about where to go next.",
  "created": "2026-02-15T05:20:11+00:00",
  "metadata": {},
  "search_document": "'/publications/your-brain-on-chatgpt/)':59C '7':155C '8':157C 'a':53C,147C,161C,316C 'abilities':85C 'ability':345C 'about':146C,338C,350C 'accumulated':254C 'additional':332C 'adjacent':279C 'affects':80C 'agentic':4A 'agents':96C 'ai':5A,15B,18B,21B,95C 'ai-assisted-programming':20B 'ambitious':275C 'an':144C 'and':3A,79C,84C,114C,261C,296C,325C 'anecdote':145C 'anne':35C,138C 'architecture':189C 'as':193C 'assisted':22B 'be':101C 'becomes':334C 'been':213C,231C,283C 'best':39C 'bigger':235C 'blamed':183C 'brains':75C 'breaking':172C 'but':152C,192C,233C 'by':32C,153C 'can':323C 'certain':209C 'change':134C 'changes':92C,170C 'coached':151C 'code':98C,187C,228C,278C 'coding':26B 'cognitive':12A,28B,44C,51C,255C 'cognitive-debt':27B 'communicates':62C 'compounded':68C 'concern':7A 'confident':348C 'could':100C,164C,206C 'debt':10A,13A,29B,45C,52C,67C,185C,256C,260C 'decisions':211C,349C 'deeper':196C 'definitions':14B 'design':210C 'developers':78C 'different':217C 'disappeared':250C 'do':124C,324C 'dug':195C 'each':331C 'easy':102C 'emerged':200C 'entire':287C 'entirely':251C 'even':93C,168C 'eventually':339C 'existence':291C 'expands':139C 'experienced':267C 'experiences':83C 'experimenting':284C 'explain':207C 'explanation':40C 'far':50C 'fast':71C,88C 'faster':257C 'feature':333C 'features':289C 'firm':317C 'found':304C 'fowler':357C 'fragmented':248C 'from':8A,69C 'further':142C 'gaining':55C 'generative':2A,17B 'generative-ai':16B 'getting':306C 'go':87C,353C 'going':70C 'had':212C,247C,253C 'harder':335C 'have':109C,230C,315C 'hit':160C 'how':1A,125C,131C,216C,326C 'humans':106C 'hurried':190C 'i':46C,176C,265C,281C,302C,312C 'if':94C 'implementations':191C,295C 'implemented':129C 'in':73C,308C 'initially':182C 'instead':61C 'intentions':127C 'into':290C 'involved':107C 'is':37C,121C 'issue':236C 'it':135C,262C,298C 'leading':340C 'lived':82C 'lives':72C 'llms':19B 'longer':166C,314C 'lose':343C 'lost':111C,307C 'made':214C 'make':91C,167C,347C 'margaret':34C,137C 'margaret-anne':33C,136C 'margaretstorey.com':355C 'martin':356C 'may':108C,115C 'me':341C 'means':330C 'mental':318C 'messy':186C,232C 'met':177C 'might':229C 'model':319C 'more':274C 'my':273C,309C 'myself':269C,305C 'new':288C 'next':354C 'no':165C,201C,313C 'not':116C 'notion':64C 'of':41C,76C,219C,241C,272C,320C 'on':140C,203C,270C 'one':158C,202C 'or':89C,130C,156C,215C,249C 'own':310C 'paralyzed':263C 'parts':218C 'piece':31C 'plot':113C 'poor':188C 'possibly':133C 'problem':199C 'produce':97C 'program':120C 'programming':23B 'projects':280C,311C 'prompting':286C 'real':198C 'reason':337C 'recently':60C 'reviewing':293C 'seen':48C 'shared':245C 'she':150C 'shift':6A 'simple':169C 'simply':110C 'so':49C 'some':271C 'something':173C 'storey':36C 'student':148C 'supposed':122C,223C 'surprisingly':300C 'system':221C,243C 'team':149C,159C,181C,205C 'technical':9A,184C,259C 'term':43C,54C 'than':258C 'that':65C,99C,238C 'the':38C,42C,63C,66C,74C,77C,105C,112C,119C,180C,197C,204C,220C,227C,234C,239C,242C,344C 'their':81C,126C,244C,294C 'them':179C,264C 'theory':240C 'they':163C,252C,322C,327C 'this':30C,141C,268C 'to':11A,86C,90C,103C,123C,132C,224C,336C,342C,346C,352C 'together':226C 'traction':56C 'understand':104C,117C 'understanding':246C 'unexpected':174C 've':47C,266C,282C,303C 'vibe':25B,277C 'vibe-code-adjacent':276C 'vibe-coding':24B 'wall':162C 'was':237C 'we':194C 'weeks':154C 'well':301C 'were':128C,222C 'what':118C,321C 'when':175C 'where':351C 'which':329C 'while':297C 'why':208C 'with':143C,178C,285C 'without':171C,292C 'work':225C,328C 'works':299C 'www.media.mit.edu':58C 'www.media.mit.edu/publications/your-brain-on-chatgpt/)':57C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-15 04:33:22+00:00
{
  "id": 9293,
  "slug": "interop-2026",
  "link_url": "https://hacks.mozilla.org/2026/02/launching-interop-2026/",
  "link_title": "Launching Interop 2026",
  "via_url": null,
  "via_title": null,
  "commentary": "Jake Archibald reports on Interop 2026, the initiative between Apple, Google, Igalia, Microsoft, and Mozilla to collaborate on ensuring a targeted set of web platform features reach cross-browser parity over the course of the year.\r\n\r\nI hadn't realized how influential and successful the Interop series has been. It started back in 2021 as [Compat 2021](https://web.dev/blog/compat2021) before being rebranded to Interop [in 2022](https://blogs.windows.com/msedgedev/2022/03/03/microsoft-edge-and-interop-2022/).\r\n\r\nThe dashboards for each year can be seen here, and they demonstrate how wildly effective the program has been: [2021](https://wpt.fyi/interop-2021), [2022](https://wpt.fyi/interop-2022), [2023](https://wpt.fyi/interop-2023), [2024](https://wpt.fyi/interop-2024), [2025](https://wpt.fyi/interop-2025), [2026](https://wpt.fyi/interop-2026).\r\n\r\nHere's the progress chart for 2025, which shows every browser vendor racing towards a 95%+ score by the end of the year:\r\n\r\n![Line chart showing Interop 2025 browser compatibility scores over the year (Jan\u2013Dec) for Chrome, Edge, Firefox, Safari, and Interop. Y-axis ranges from 0% to 100%. Chrome (yellow) and Edge (green) lead, starting around 80% and reaching near 100% by Dec. Firefox (orange) starts around 48% and climbs to ~98%. Safari (blue) starts around 45% and reaches ~96%. The Interop line (dark green/black) starts lowest around 29% and rises to ~95% by Dec. All browsers converge near 95\u2013100% by year's end.](https://static.simonwillison.net/static/2026/interop-2025.jpg)\r\n\r\nThe feature I'm most excited about in 2026 is [Cross-document View Transitions](https://developer.mozilla.org/docs/Web/API/View_Transition_API/Using#basic_mpa_view_transition), building on the successful 2025 target of [Same-Document View Transitions](https://developer.mozilla.org/docs/Web/API/View_Transition_API/Using). This will provide fancy SPA-style transitions between pages on websites with no JavaScript at all.\r\n\r\nAs a keen WebAssembly tinkerer I'm also intrigued by this one:\r\n\r\n> [JavaScript Promise Integration for Wasm](https://github.com/WebAssembly/js-promise-integration/blob/main/proposals/js-promise-integration/Overview.md) allows WebAssembly to asynchronously 'suspend', waiting on the result of an external promise. This simplifies the compilation of languages like C/C++ which expect APIs to run synchronously.",
  "created": "2026-02-15T04:33:22+00:00",
  "metadata": {},
  "search_document": "'/blog/compat2021)':74C '/docs/web/api/view_transition_api/using#basic_mpa_view_transition),':256C '/docs/web/api/view_transition_api/using).':271C '/interop-2021),':107C '/interop-2022),':111C '/interop-2023),':115C '/interop-2024),':119C '/interop-2025),':123C '/interop-2026).':127C '/msedgedev/2022/03/03/microsoft-edge-and-interop-2022/).':84C '/static/2026/interop-2025.jpg)':238C '/webassembly/js-promise-integration/blob/main/proposals/js-promise-integration/overview.md)':308C '0':176C '100':178C,191C,231C '2021':68C,71C,104C '2022':81C,108C '2023':112C '2024':116C '2025':120C,134C,155C,261C '2026':3A,19C,124C,247C '29':219C '45':207C '48':198C '80':187C '95':143C,223C,230C '96':210C '98':202C 'a':33C,142C,290C 'about':245C 'all':226C,288C 'allows':309C 'also':296C 'an':319C 'and':27C,57C,94C,169C,181C,188C,199C,208C,220C 'apis':332C 'apple':23C 'archibald':13B,15C 'around':186C,197C,206C,218C 'as':69C,289C 'asynchronously':312C 'at':287C 'axis':173C 'back':66C 'be':91C 'been':63C,103C 'before':75C 'being':76C 'between':22C,280C 'blogs.windows.com':83C 'blogs.windows.com/msedgedev/2022/03/03/microsoft-edge-and-interop-2022/).':82C 'blue':204C 'browser':43C,138C,156C 'browsers':4B,227C 'building':257C 'by':145C,192C,224C,232C,298C 'c/c':329C 'can':90C 'chart':132C,152C 'chrome':165C,179C 'climbs':200C 'collaborate':30C 'compat':70C 'compatibility':157C 'compilation':325C 'converge':228C 'course':47C 'cross':42C,250C 'cross-browser':41C 'cross-document':249C 'css':5B 'dark':214C 'dashboards':86C 'dec':163C,193C,225C 'demonstrate':96C 'developer.mozilla.org':255C,270C 'developer.mozilla.org/docs/web/api/view_transition_api/using#basic_mpa_view_transition),':254C 'developer.mozilla.org/docs/web/api/view_transition_api/using).':269C 'document':251C,266C 'each':88C 'edge':166C,182C 'effective':99C 'end':147C,235C 'ensuring':32C 'every':137C 'excited':244C 'expect':331C 'external':320C 'fancy':275C 'feature':240C 'features':39C 'firefox':167C,194C 'for':87C,133C,164C,304C 'from':175C 'github.com':307C 'github.com/webassembly/js-promise-integration/blob/main/proposals/js-promise-integration/overview.md)':306C 'google':24C 'green':183C 'green/black':215C 'hacks.mozilla.org':336C 'hadn':52C 'has':62C,102C 'here':93C,128C 'how':55C,97C 'i':51C,241C,294C 'igalia':25C 'in':67C,80C,246C 'influential':56C 'initiative':21C 'integration':303C 'interop':2A,18C,60C,79C,154C,170C,212C 'intrigued':297C 'is':248C 'it':64C 'jake':12B,14C 'jake-archibald':11B 'jan':162C 'javascript':6B,286C,301C 'keen':291C 'languages':327C 'launching':1A 'lead':184C 'like':328C 'line':151C,213C 'lowest':217C 'm':242C,295C 'microsoft':26C 'most':243C 'mozilla':28C 'near':190C,229C 'no':285C 'of':36C,48C,148C,263C,318C,326C 'on':17C,31C,258C,282C,315C 'one':300C 'orange':195C 'over':45C,159C 'pages':281C 'parity':44C 'platform':38C 'program':101C 'progress':131C 'promise':302C,321C 'provide':274C 'racing':140C 'ranges':174C 'reach':40C 'reaches':209C 'reaching':189C 'realized':54C 'rebranded':77C 'reports':16C 'result':317C 'rises':221C 'run':334C 's':129C,234C 'safari':168C,203C 'same':265C 'same-document':264C 'score':144C 'scores':158C 'seen':92C 'series':61C 'set':35C 'showing':153C 'shows':136C 'simplifies':323C 'spa':277C 'spa-style':276C 'standards':9B 'started':65C 'starting':185C 'starts':196C,205C,216C 'static.simonwillison.net':237C 'static.simonwillison.net/static/2026/interop-2025.jpg)':236C 'style':278C 'successful':58C,260C 'suspend':313C 'synchronously':335C 't':53C 'target':262C 'targeted':34C 'the':20C,46C,49C,59C,85C,100C,130C,146C,149C,160C,211C,239C,259C,316C,324C 'they':95C 'this':272C,299C,322C 'tinkerer':293C 'to':29C,78C,177C,201C,222C,311C,333C 'towards':141C 'transitions':253C,268C,279C 'vendor':139C 'view':252C,267C 'waiting':314C 'wasm':305C 'web':8B,37C 'web-standards':7B 'web.dev':73C 'web.dev/blog/compat2021)':72C 'webassembly':10B,292C,310C 'websites':283C 'which':135C,330C 'wildly':98C 'will':273C 'with':284C 'wpt.fyi':106C,110C,114C,118C,122C,126C 'wpt.fyi/interop-2021),':105C 'wpt.fyi/interop-2022),':109C 'wpt.fyi/interop-2023),':113C 'wpt.fyi/interop-2024),':117C 'wpt.fyi/interop-2025),':121C 'wpt.fyi/interop-2026).':125C 'y':172C 'y-axis':171C 'year':50C,89C,150C,161C,233C 'yellow':180C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/interop-2025.jpg",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-02-14 23:59:09+00:00
{
  "id": 2022,
  "slug": "boris",
  "quotation": "Someone has to prompt the Claudes, talk to customers, coordinate with other teams, decide what to build next. Engineering is changing and great engineers are more important than ever.",
  "source": "Boris Cherny",
  "source_url": "https://twitter.com/bcherny/status/2022762422302576970",
  "created": "2026-02-14T23:59:09+00:00",
  "metadata": {},
  "search_document": "'agents':43B 'ai':31B,34B,37B 'ai-assisted-programming':36B 'and':22A 'anthropic':40B 'are':25A 'assisted':38B 'boris':47C 'build':17A 'careers':30B 'changing':21A 'cherny':48C 'claude':45B 'claude-code':44B 'claudes':6A 'code':46B 'coding':42B 'coding-agents':41B 'coordinate':10A 'customers':9A 'decide':14A 'engineering':19A 'engineers':24A 'ever':29A 'generative':33B 'generative-ai':32B 'great':23A 'has':2A 'important':27A 'is':20A 'llms':35B 'more':26A 'next':18A 'other':12A 'programming':39B 'prompt':4A 'someone':1A 'talk':7A 'teams':13A 'than':28A 'the':5A 'to':3A,8A,16A 'what':15A 'with':11A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "Claude Code creator, on why Anthropic are still hiring developers"
}
quotation 2026-02-14 04:54:41+00:00
{
  "id": 2021,
  "slug": "thoughtworks",
  "quotation": "The retreat challenged the narrative that AI eliminates the need for junior developers. Juniors are more profitable than they have ever been. AI tools get them past the awkward initial net-negative phase faster. They serve as a call option on future productivity. And they are better at AI tools than senior engineers, having never developed the habits and assumptions that slow adoption.\r\n\r\nThe real concern is mid-level engineers who came up during the decade-long hiring boom and may not have developed the fundamentals needed to thrive in the new environment. This population represents the bulk of the industry by volume, and retraining them is genuinely difficult. The retreat discussed whether apprenticeship models, rotation programs and lifelong learning structures could address this gap, but acknowledged that no organization has solved it yet.",
  "source": "Thoughtworks",
  "source_url": "https://www.thoughtworks.com/content/dam/thoughtworks/documents/report/tw_future%20_of_software_development_retreat_%20key_takeaways.pdf",
  "created": "2026-02-14T04:54:41+00:00",
  "metadata": {},
  "search_document": "'a':39A 'acknowledged':130A 'address':126A 'adoption':64A 'ai':7A,23A,50A,139B,141B 'ai-assisted-programming':140B 'and':45A,60A,83A,107A,121A 'apprenticeship':117A 'are':15A,47A 'as':38A 'assisted':142B 'assumptions':61A 'at':49A 'awkward':29A 'been':22A 'better':48A 'boom':82A 'bulk':101A 'but':129A 'by':105A 'call':40A 'came':74A 'careers':138B 'challenged':3A 'concern':67A 'could':125A 'decade':79A 'decade-long':78A 'developed':57A,87A 'developers':13A 'difficult':112A 'discussed':115A 'during':76A 'eliminates':8A 'engineers':54A,72A 'environment':96A 'ever':21A 'faster':35A 'for':11A 'fundamentals':89A 'future':43A 'gap':128A 'genuinely':111A 'get':25A 'habits':59A 'has':134A 'have':20A,86A 'having':55A 'hiring':81A 'in':93A 'industry':104A 'initial':30A 'is':68A,110A 'it':136A 'junior':12A 'juniors':14A 'learning':123A 'level':71A 'lifelong':122A 'long':80A 'may':84A 'mid':70A 'mid-level':69A 'models':118A 'more':16A 'narrative':5A 'need':10A 'needed':90A 'negative':33A 'net':32A 'net-negative':31A 'never':56A 'new':95A 'no':132A 'not':85A 'of':102A 'on':42A 'option':41A 'organization':133A 'past':27A 'phase':34A 'population':98A 'productivity':44A 'profitable':17A 'programming':143B 'programs':120A 'real':66A 'represents':99A 'retraining':108A 'retreat':2A,114A 'rotation':119A 'senior':53A 'serve':37A 'slow':63A 'solved':135A 'structures':124A 'than':18A,52A 'that':6A,62A,131A 'the':1A,4A,9A,28A,58A,65A,77A,88A,94A,100A,103A,113A 'them':26A,109A 'they':19A,36A,46A 'this':97A,127A 'thoughtworks':144C 'thrive':92A 'to':91A 'tools':24A,51A 'up':75A 'volume':106A 'whether':116A 'who':73A 'yet':137A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "findings from a retreat concerning \"the future of software engineering\", conducted under Chatham House rules"
}
blogmark 2026-02-12 21:16:07+00:00
{
  "id": 9286,
  "slug": "codex-spark",
  "link_url": "https://openai.com/index/introducing-gpt-5-3-codex-spark/",
  "link_title": "Introducing GPT\u20115.3\u2011Codex\u2011Spark",
  "via_url": null,
  "via_title": null,
  "commentary": "OpenAI announced a partnership with Cerebras [on January 14th](https://openai.com/index/cerebras-partnership/). Four weeks later they're already launching the first integration, \"an ultra-fast model for real-time coding in Codex\".\r\n\r\nDespite being named GPT-5.3-Codex-Spark it's not purely an accelerated alternative to GPT-5.3-Codex - the blog post calls it \"a smaller version of GPT\u20115.3-Codex\" and clarifies that \"at launch, Codex-Spark has a 128k context window and is text-only.\"\r\n\r\nI had some preview access to this model and I can confirm that it's significantly faster than their other models.\r\n\r\nHere's what that speed looks like running in Codex CLI:\r\n\r\n<div style=\"max-width: 100%;\">\r\n    <video \r\n        controls \r\n        preload=\"none\"\r\n        poster=\"https://static.simonwillison.net/static/2026/gpt-5.3-codex-spark-medium-last.jpg\"\r\n        style=\"width: 100%; height: auto;\">\r\n        <source src=\"https://static.simonwillison.net/static/2026/gpt-5.3-codex-spark-medium.mp4\" type=\"video/mp4\">\r\n    </video>\r\n</div>\r\n\r\nThat was the \"Generate an SVG of a pelican riding a bicycle\" prompt - here's the rendered result:\r\n\r\n![Whimsical flat illustration of an orange duck merged with a bicycle, where the duck's body forms the seat and frame area while its head extends forward over the handlebars, set against a simple light blue sky and green grass background.](https://static.simonwillison.net/static/2026/gpt-5.3-codex-spark-pelican.png)\r\n\r\nCompare that to the speed of regular GPT-5.3 Codex medium:\r\n\r\n<div style=\"max-width: 100%;\">\r\n    <video \r\n        controls \r\n        preload=\"none\"\r\n        poster=\"https://static.simonwillison.net/static/2026/gpt-5.3-codex-medium-last.jpg\"\r\n        style=\"width: 100%; height: auto;\">\r\n        <source src=\"https://static.simonwillison.net/static/2026/gpt-5.3-codex-medium.mp4\" type=\"video/mp4\">\r\n    </video>\r\n</div>\r\n\r\nSignificantly slower, but the pelican is a lot better:\r\n\r\n![Whimsical flat illustration of a white pelican riding a dark blue bicycle at speed, with motion lines behind it, its long orange beak streaming back in the wind, set against a light blue sky and green grass background.](https://static.simonwillison.net/static/2026/gpt-5.3-codex-pelican.png)\r\n\r\nWhat's interesting about this model isn't the quality though, it's the *speed*. When a model responds this fast you can stay in flow state and iterate with the model much more productively.\r\n\r\nI showed a demo of Cerebras running Llama 3.1 70 B at 2,000 tokens/second against Val Town [back in October 2024](https://simonwillison.net/2024/Oct/31/cerebras-coder/). OpenAI claim 1,000 tokens/second for their new model, and I expect it will prove to be a ferociously useful partner for hands-on iterative coding sessions.\r\n\r\nIt's not yet clear what the pricing will look like for this new model.",
  "created": "2026-02-12T21:16:07+00:00",
  "metadata": {},
  "search_document": "'-5.3':65C,78C,212C '/2024/oct/31/cerebras-coder/).':324C '/index/cerebras-partnership/).':38C '/static/2026/gpt-5.3-codex-pelican.png)':264C '/static/2026/gpt-5.3-codex-spark-pelican.png)':203C '000':313C,328C '1':327C '128k':102C '14th':35C '2':312C '2024':321C '3.1':308C '5.3':3A,90C '70':309C 'a':16B,29C,85C,101C,149C,152C,169C,192C,221C,228C,232C,254C,281C,302C,342C 'about':268C 'accelerated':74C 'access':114C 'against':191C,253C,315C 'ai':6B,10B 'already':44C 'alternative':75C 'an':49C,73C,146C,164C 'and':92C,105C,118C,179C,197C,258C,292C,334C 'announced':28C 'area':181C 'at':95C,236C,311C 'b':310C 'back':248C,318C 'background':200C,261C 'be':341C 'beak':246C 'behind':241C 'being':62C 'better':223C 'bicycle':17B,153C,170C,235C 'blog':81C 'blue':195C,234C,256C 'body':175C 'but':217C 'calls':83C 'can':120C,287C 'cerebras':12B,32C,305C 'claim':326C 'clarifies':93C 'clear':357C 'cli':23B,141C 'codex':4A,22B,60C,67C,79C,91C,98C,140C,213C 'codex-cli':21B 'codex-spark':66C,97C 'coding':58C,351C 'compare':204C 'confirm':121C 'context':103C 'dark':233C 'demo':303C 'despite':61C 'duck':166C,173C 'expect':336C 'extends':185C 'fast':52C,285C 'faster':126C 'ferociously':343C 'first':47C 'flat':161C,225C 'flow':290C 'for':54C,330C,346C,364C 'forms':176C 'forward':186C 'four':39C 'frame':180C 'generate':145C 'generative':9B 'generative-ai':8B 'gpt':2A,64C,77C,89C,211C 'grass':199C,260C 'green':198C,259C 'had':111C 'handlebars':189C 'hands':348C 'hands-on':347C 'has':100C 'head':184C 'here':131C,155C 'i':110C,119C,300C,335C 'illustration':162C,226C 'in':59C,139C,249C,289C,319C 'integration':48C 'interesting':267C 'introducing':1A 'is':106C,220C 'isn':271C 'it':69C,84C,123C,242C,276C,337C,353C 'iterate':293C 'iterative':350C 'its':183C,243C 'january':34C 'later':41C 'launch':96C 'launching':45C 'light':194C,255C 'like':137C,363C 'lines':240C 'llama':307C 'llm':19B,25B 'llm-performance':24B 'llm-release':18B 'llms':11B 'long':244C 'look':362C 'looks':136C 'lot':222C 'medium':214C 'merged':167C 'model':53C,117C,270C,282C,296C,333C,367C 'models':130C 'more':298C 'motion':239C 'much':297C 'named':63C 'new':332C,366C 'not':71C,355C 'october':320C 'of':88C,148C,163C,209C,227C,304C 'on':33C,349C 'only':109C 'openai':7B,27C,325C 'openai.com':37C,368C 'openai.com/index/cerebras-partnership/).':36C 'orange':165C,245C 'other':129C 'over':187C 'partner':345C 'partnership':30C 'pelican':14B,150C,219C,230C 'pelican-riding-a-bicycle':13B 'performance':26B 'post':82C 'preview':113C 'pricing':360C 'productively':299C 'prompt':154C 'prove':339C 'purely':72C 'quality':274C 're':43C 'real':56C 'real-time':55C 'regular':210C 'release':20B 'rendered':158C 'responds':283C 'result':159C 'riding':15B,151C,231C 'running':138C,306C 's':70C,124C,132C,156C,174C,266C,277C,354C 'seat':178C 'sessions':352C 'set':190C,252C 'showed':301C 'significantly':125C,215C 'simonwillison.net':323C 'simonwillison.net/2024/oct/31/cerebras-coder/).':322C 'simple':193C 'sky':196C,257C 'slower':216C 'smaller':86C 'some':112C 'spark':5A,68C,99C 'speed':135C,208C,237C,279C 'state':291C 'static.simonwillison.net':202C,263C 'static.simonwillison.net/static/2026/gpt-5.3-codex-pelican.png)':262C 'static.simonwillison.net/static/2026/gpt-5.3-codex-spark-pelican.png)':201C 'stay':288C 'streaming':247C 'svg':147C 't':272C 'text':108C 'text-only':107C 'than':127C 'that':94C,122C,134C,142C,205C 'the':46C,80C,144C,157C,172C,177C,188C,207C,218C,250C,273C,278C,295C,359C 'their':128C,331C 'they':42C 'this':116C,269C,284C,365C 'though':275C 'time':57C 'to':76C,115C,206C,340C 'tokens/second':314C,329C 'town':317C 'ultra':51C 'ultra-fast':50C 'useful':344C 'val':316C 'version':87C 'was':143C 'weeks':40C 'what':133C,265C,358C 'when':280C 'where':171C 'while':182C 'whimsical':160C,224C 'white':229C 'will':338C,361C 'wind':251C 'window':104C 'with':31C,168C,238C,294C 'yet':356C 'you':286C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-02-12 20:22:14+00:00
{
  "id": 2020,
  "slug": "anthropic",
  "quotation": "Claude Code was made available to the general public in May 2025. Today, Claude Code\u2019s run-rate revenue has grown to over $2.5 billion; this figure has more than doubled since the beginning of 2026. The number of weekly active Claude Code users has also doubled since January 1 [*six weeks ago*].",
  "source": "Anthropic",
  "source_url": "https://www.anthropic.com/news/anthropic-raises-30-billion-series-g-funding-380-billion-post-money-valuation",
  "created": "2026-02-12T20:22:14+00:00",
  "metadata": {},
  "search_document": "'1':51A '2.5':25A '2025':12A '2026':37A 'active':42A 'agents':63B,66B 'ago':54A 'ai':55B,58B,62B 'ai-agents':61B 'also':47A 'anthropic':60B,70C 'available':5A 'beginning':35A 'billion':26A 'claude':1A,14A,43A,68B 'claude-code':67B 'code':2A,15A,44A,69B 'coding':65B 'coding-agents':64B 'doubled':32A,48A 'figure':28A 'general':8A 'generative':57B 'generative-ai':56B 'grown':22A 'has':21A,29A,46A 'in':10A 'january':50A 'llms':59B 'made':4A 'may':11A 'more':30A 'number':39A 'of':36A,40A 'over':24A 'public':9A 'rate':19A 'revenue':20A 'run':18A 'run-rate':17A 's':16A 'since':33A,49A 'six':52A 'than':31A 'the':7A,34A,38A 'this':27A 'to':6A,23A 'today':13A 'users':45A 'was':3A 'weekly':41A 'weeks':53A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "announcing their $30 billion series G"
}
blogmark 2026-02-12 20:01:23+00:00
{
  "id": 9285,
  "slug": "covering-electricity-price-increases",
  "link_url": "https://www.anthropic.com/news/covering-electricity-price-increases",
  "link_title": "Covering electricity price increases from our data centers",
  "via_url": "https://x.com/anthropicai/status/2021694494215901314",
  "via_title": "@anthropicai",
  "commentary": "One of the sub-threads of the AI energy usage discourse has been the impact new data centers have on the cost of electricity to nearby residents. Here's [detailed analysis from Bloomberg in September](https://www.bloomberg.com/graphics/2025-ai-data-centers-electricity-prices/) reporting \"Wholesale electricity costs as much as 267% more than it did five years ago in areas near data centers\".\r\n\r\nAnthropic appear to be taking on this aspect of the problem directly, promising to cover 100% of necessary grid upgrade costs and also saying:\r\n\r\n> We will work to bring net-new power generation online to match our data centers\u2019 electricity needs. Where new generation isn\u2019t online, we\u2019ll work with utilities and external experts to estimate and cover demand-driven price effects from our data centers.\r\n\r\nI look forward to genuine energy industry experts picking this apart to judge if it will actually have the claimed impact on consumers.\r\n\r\nAs always, I remain frustrated at the refusal of the major AI labs to fully quantify their energy usage. The best data we've had on this still comes from Mistral's report [last July](https://simonwillison.net/2025/Jul/22/mistral-environmental-standard/) and even that lacked key data such as the breakdown between energy usage for training vs inference.",
  "created": "2026-02-12T20:01:23+00:00",
  "metadata": {},
  "search_document": "'/2025/jul/22/mistral-environmental-standard/)':206C '/graphics/2025-ai-data-centers-electricity-prices/)':56C '100':92C '267':64C 'actually':162C 'ago':71C 'ai':9B,12B,15B,26C,180C 'ai-energy-usage':14B 'ai-ethics':11B 'also':99C 'always':170C 'analysis':49C 'and':98C,130C,135C,207C 'anthropic':10B,77C 'anthropicai':225C 'apart':156C 'appear':78C 'areas':73C 'as':61C,63C,169C,214C 'aspect':84C 'at':174C 'be':80C 'been':31C 'best':189C 'between':217C 'bloomberg':51C 'breakdown':216C 'bring':105C 'centers':8A,36C,76C,116C,145C 'claimed':165C 'comes':197C 'consumers':168C 'cost':40C 'costs':60C,97C 'cover':91C,136C 'covering':1A 'data':7A,35C,75C,115C,144C,190C,212C 'demand':138C 'demand-driven':137C 'detailed':48C 'did':68C 'directly':88C 'discourse':29C 'driven':139C 'effects':141C 'electricity':2A,42C,59C,117C 'energy':16B,27C,151C,186C,218C 'estimate':134C 'ethics':13B 'even':208C 'experts':132C,153C 'external':131C 'five':69C 'for':220C 'forward':148C 'from':5A,50C,142C,198C 'frustrated':173C 'fully':183C 'generation':110C,121C 'genuine':150C 'grid':95C 'had':193C 'has':30C 'have':37C,163C 'here':46C 'i':146C,171C 'if':159C 'impact':33C,166C 'in':52C,72C 'increases':4A 'industry':152C 'inference':223C 'isn':122C 'it':67C,160C 'judge':158C 'july':203C 'key':211C 'labs':181C 'lacked':210C 'last':202C 'll':126C 'look':147C 'major':179C 'match':113C 'mistral':199C 'more':65C 'much':62C 'near':74C 'nearby':44C 'necessary':94C 'needs':118C 'net':107C 'net-new':106C 'new':34C,108C,120C 'of':19C,24C,41C,85C,93C,177C 'on':38C,82C,167C,194C 'one':18C 'online':111C,124C 'our':6A,114C,143C 'picking':154C 'power':109C 'price':3A,140C 'problem':87C 'promising':89C 'quantify':184C 'refusal':176C 'remain':172C 'report':201C 'reporting':57C 'residents':45C 's':47C,200C 'saying':100C 'september':53C 'simonwillison.net':205C 'simonwillison.net/2025/jul/22/mistral-environmental-standard/)':204C 'still':196C 'sub':22C 'sub-threads':21C 'such':213C 't':123C 'taking':81C 'than':66C 'that':209C 'the':20C,25C,32C,39C,86C,164C,175C,178C,188C,215C 'their':185C 'this':83C,155C,195C 'threads':23C 'to':43C,79C,90C,104C,112C,133C,149C,157C,182C 'training':221C 'upgrade':96C 'usage':17B,28C,187C,219C 'utilities':129C 've':192C 'vs':222C 'we':101C,125C,191C 'where':119C 'wholesale':58C 'will':102C,161C 'with':128C 'work':103C,127C 'www.anthropic.com':224C 'www.bloomberg.com':55C 'www.bloomberg.com/graphics/2025-ai-data-centers-electricity-prices/)':54C 'years':70C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-12 18:12:17+00:00
{
  "id": 9284,
  "slug": "gemini-3-deep-think",
  "link_url": "https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-deep-think/",
  "link_title": "Gemini 3 Deep Think",
  "via_url": "https://news.ycombinator.com/item?id=46991240",
  "via_title": "Hacker News",
  "commentary": "New from Google. They say it's \"built to push the frontier of intelligence and solve modern challenges across science, research, and engineering\".\r\n\r\nIt drew me a *really good* [SVG of a pelican riding a bicycle](https://gist.github.com/simonw/7e317ebb5cf8e75b2fcec4d0694a8199)! I think this is the best one I've seen so far - here's [my previous collection](https://simonwillison.net/tags/pelican-riding-a-bicycle/).\r\n\r\n![This alt text also generated by Gemini 3 Deep Think: A highly detailed, colorful, flat vector illustration with thick dark blue outlines depicting a stylized white pelican riding a bright cyan blue bicycle from left to right across a sandy beige beach with white speed lines indicating forward motion. The pelican features a light blue eye, a pink cheek blush, a massive bill with a vertical gradient from yellow to orange, a backward magenta cap with a cyan brim and a small yellow top button, and a matching magenta scarf blowing backward in the wind. Its white wing, accented with a grey mid-section and dark blue feather tips, reaches forward to grip the handlebars, while its long tan leg and orange foot press down on an orange pedal. Attached to the front handlebars is a white wire basket carrying a bright blue cartoon fish that is pointing upwards and forwards. The bicycle itself has a cyan frame, dark blue tires, striking neon pink inner rims, cyan spokes, a white front chainring, and a dark blue chain. Behind the pelican, a grey trapezoidal pier extends from the sand toward a horizontal band of deep blue ocean water detailed with light cyan wavy lines. A massive, solid yellow-orange semi-circle sun sits on the horizon line, setting directly behind the bicycle frame. The background sky is a smooth vertical gradient transitioning from soft pink at the top to warm golden-yellow at the horizon, decorated with stylized pale peach fluffy clouds, thin white horizontal wind streaks, twinkling four-pointed white stars, and small brown v-shaped silhouettes of distant flying birds.](https://static.simonwillison.net/static/2026/gemini-3-deep-think-pelican.png)\r\n\r\n(And since it's an FAQ, here's my answer to [What happens if AI labs train for pelicans riding bicycles?](https://simonwillison.net/2025/Nov/13/training-for-pelicans-riding-bicycles/))\r\n\r\nSince it did so well on my basic `Generate an SVG of a pelican riding a bicycle` I decided to try the [more challenging version](https://simonwillison.net/2025/Nov/18/gemini-3/#and-a-new-pelican-benchmark) as well:\r\n\r\n> `Generate an SVG of a California brown pelican riding a bicycle. The bicycle must have spokes and a correctly shaped bicycle frame. The pelican must have its characteristic large pouch, and there should be a clear indication of feathers. The pelican must be clearly pedaling the bicycle. The image should show the full breeding plumage of the California brown pelican.`\r\n\r\nHere's [what I got](https://gist.github.com/simonw/154c0cc7b4daed579f6a5e616250ecc8):\r\n\r\n![Also described by Gemini 3 Deep Think: A highly detailed, vibrant, and stylized vector illustration of a whimsical bird resembling a mix between a pelican and a frigatebird enthusiastically riding a bright cyan bicycle from left to right across a flat tan and brown surface. The bird leans horizontally over the frame in an aerodynamic racing posture, with thin, dark brown wing-like arms reaching forward to grip the silver handlebars and a single thick brown leg, patterned with white V-shapes, stretching down to press on a black pedal. The bird's most prominent and striking feature is an enormous, vividly bright red, inflated throat pouch hanging beneath a long, straight grey upper beak that ends in a small orange hook. Its head is mostly white with a small pink patch surrounding the eye, a dark brown stripe running down the back of its neck, and a distinctive curly pale yellow crest on the very top. The bird's round, dark brown body shares the same repeating white V-shaped feather pattern as its leg and is accented by a folded wing resting on its side, made up of cleanly layered light blue and grey feathers. A tail composed of four stiff, straight dark brown feathers extends directly backward. Thin white horizontal speed lines trail behind the back wheel and the bird's tail, emphasizing swift forward motion. The bicycle features a classic diamond frame, large wheels with thin black tires, grey rims, and detailed silver spokes, along with a clearly visible front chainring, silver chain, and rear cog. The whimsical scene is set against a clear light blue sky featuring two small, fluffy white clouds on the left and a large, pale yellow sun in the upper right corner that radiates soft, concentric, semi-transparent pastel green and yellow halos. A solid, darker brown shadow is cast directly beneath the bicycle's wheels on the minimalist two-toned brown ground.](https://static.simonwillison.net/static/2026/gemini-3-deep-think-complex-pelican.png)",
  "created": "2026-02-12T18:12:17+00:00",
  "metadata": {},
  "search_document": "'/2025/nov/13/training-for-pelicans-riding-bicycles/))':385C '/2025/nov/18/gemini-3/#and-a-new-pelican-benchmark)':413C '/simonw/154c0cc7b4daed579f6a5e616250ecc8):':483C '/simonw/7e317ebb5cf8e75b2fcec4d0694a8199)!':61C '/static/2026/gemini-3-deep-think-complex-pelican.png)':813C '/static/2026/gemini-3-deep-think-pelican.png)':361C '/tags/pelican-riding-a-bicycle/).':81C '3':2A,89C,488C 'a':15B,49C,54C,57C,92C,105C,110C,120C,134C,138C,142C,146C,153C,158C,162C,168C,182C,218C,223C,238C,251C,256C,263C,272C,286C,311C,398C,401C,420C,425C,433C,450C,491C,500C,504C,507C,510C,514C,523C,557C,573C,595C,604C,614C,621C,633C,667C,684C,719C,737C,753C,768C,790C 'accented':180C,665C 'across':41C,119C,522C 'aerodynamic':538C 'against':752C 'ai':6B,9B,376C 'along':735C 'also':85C,484C 'alt':83C 'an':209C,366C,395C,417C,537C,585C 'and':37C,44C,161C,167C,187C,203C,232C,255C,348C,362C,432C,446C,495C,509C,526C,556C,581C,632C,663C,681C,707C,731C,744C,767C,787C 'answer':371C 'arms':548C 'as':414C,660C 'at':319C,327C 'attached':212C 'back':628C,705C 'background':308C 'backward':154C,173C,696C 'band':274C 'basic':393C 'basket':221C 'be':449C,458C 'beach':123C 'beak':600C 'behind':260C,303C,703C 'beige':122C 'beneath':594C,798C 'best':67C 'between':506C 'bicycle':16B,58C,114C,235C,305C,402C,426C,428C,436C,462C,517C,717C,800C 'bicycles':382C 'bill':144C 'bird':502C,530C,577C,644C,709C 'birds':358C 'black':574C,727C 'blog.google':814C 'blowing':172C 'blue':102C,113C,136C,189C,225C,242C,258C,277C,680C,756C 'blush':141C 'body':649C 'breeding':469C 'bright':111C,224C,515C,588C 'brim':160C 'brown':350C,422C,474C,527C,544C,560C,623C,648C,692C,793C,809C 'built':30C 'button':166C 'by':87C,486C,666C 'california':421C,473C 'cap':156C 'carrying':222C 'cartoon':226C 'cast':796C 'chain':259C,743C 'chainring':254C,741C 'challenges':40C 'challenging':409C 'characteristic':443C 'cheek':140C 'circle':294C 'classic':720C 'cleanly':677C 'clear':451C,754C 'clearly':459C,738C 'clouds':336C,763C 'cog':746C 'collection':78C 'colorful':95C 'composed':686C 'concentric':781C 'corner':777C 'correctly':434C 'crest':638C 'curly':635C 'cyan':112C,159C,239C,249C,283C,516C 'dark':101C,188C,241C,257C,543C,622C,647C,691C 'darker':792C 'decided':404C 'decorated':330C 'deep':3A,90C,276C,489C 'depicting':104C 'described':485C 'detailed':94C,280C,493C,732C 'diamond':721C 'did':388C 'directly':302C,695C,797C 'distant':356C 'distinctive':634C 'down':207C,569C,626C 'drew':47C 'emphasizing':712C 'ends':602C 'engineering':45C 'enormous':586C 'enthusiastically':512C 'extends':267C,694C 'eye':137C,620C 'faq':367C 'far':73C 'feather':190C,658C 'feathers':454C,683C,693C 'feature':583C 'features':133C,718C 'featuring':758C 'fish':227C 'flat':96C,524C 'fluffy':335C,761C 'flying':357C 'folded':668C 'foot':205C 'for':379C 'forward':129C,193C,550C,714C 'forwards':233C 'four':344C,688C 'four-pointed':343C 'frame':240C,306C,437C,535C,722C 'frigatebird':511C 'from':24C,115C,149C,268C,316C,518C 'front':215C,253C,740C 'frontier':34C 'full':468C 'gemini':1A,11B,88C,487C 'generate':394C,416C 'generated':86C 'generative':8B 'generative-ai':7B 'gist.github.com':60C,482C 'gist.github.com/simonw/154c0cc7b4daed579f6a5e616250ecc8):':481C 'gist.github.com/simonw/7e317ebb5cf8e75b2fcec4d0694a8199)!':59C 'golden':325C 'golden-yellow':324C 'good':51C 'google':5B,25C 'got':480C 'gradient':148C,314C 'green':786C 'grey':183C,264C,598C,682C,729C 'grip':195C,552C 'ground':810C 'hacker':815C 'halos':789C 'handlebars':197C,216C,555C 'hanging':593C 'happens':374C 'has':237C 'have':430C,441C 'head':609C 'here':74C,368C,476C 'highly':93C,492C 'hook':607C 'horizon':299C,329C 'horizontal':273C,339C,699C 'horizontally':532C 'i':62C,69C,403C,479C 'if':375C 'illustration':98C,498C 'image':464C 'in':174C,536C,603C,773C 'indicating':128C 'indication':452C 'inflated':590C 'inner':247C 'intelligence':36C 'is':65C,217C,229C,310C,584C,610C,664C,750C,795C 'it':28C,46C,364C,387C 'its':177C,199C,442C,608C,630C,661C,672C 'itself':236C 'labs':377C 'large':444C,723C,769C 'layered':678C 'leans':531C 'left':116C,519C,766C 'leg':202C,561C,662C 'light':135C,282C,679C,755C 'like':547C 'line':300C 'lines':127C,285C,701C 'llm':18B,21B 'llm-reasoning':17B 'llm-release':20B 'llms':10B 'long':200C,596C 'made':674C 'magenta':155C,170C 'massive':143C,287C 'matching':169C 'me':48C 'mid':185C 'mid-section':184C 'minimalist':805C 'mix':505C 'modern':39C 'more':408C 'most':579C 'mostly':611C 'motion':130C,715C 'must':429C,440C,457C 'my':76C,370C,392C 'neck':631C 'neon':245C 'new':23C 'news':816C 'ocean':278C 'of':35C,53C,275C,355C,397C,419C,453C,471C,499C,629C,676C,687C 'on':208C,297C,391C,572C,639C,671C,764C,803C 'one':68C 'orange':152C,204C,210C,291C,606C 'outlines':103C 'over':533C 'pale':333C,636C,770C 'pastel':785C 'patch':617C 'pattern':659C 'patterned':562C 'peach':334C 'pedal':211C,575C 'pedaling':460C 'pelican':13B,55C,108C,132C,262C,399C,423C,439C,456C,475C,508C 'pelican-riding-a-bicycle':12B 'pelicans':380C 'pier':266C 'pink':139C,246C,318C,616C 'plumage':470C 'pointed':345C 'pointing':230C 'posture':540C 'pouch':445C,592C 'press':206C,571C 'previous':77C 'prominent':580C 'push':32C 'racing':539C 'radiates':779C 'reaches':192C 'reaching':549C 'really':50C 'rear':745C 'reasoning':19B 'red':589C 'release':22B 'repeating':653C 'research':43C 'resembling':503C 'resting':670C 'riding':14B,56C,109C,381C,400C,424C,513C 'right':118C,521C,776C 'rims':248C,730C 'round':646C 'running':625C 's':29C,75C,365C,369C,477C,578C,645C,710C,801C 'same':652C 'sand':270C 'sandy':121C 'say':27C 'scarf':171C 'scene':749C 'science':42C 'section':186C 'seen':71C 'semi':293C,783C 'semi-circle':292C 'semi-transparent':782C 'set':751C 'setting':301C 'shadow':794C 'shaped':353C,435C,657C 'shapes':567C 'shares':650C 'should':448C,465C 'show':466C 'side':673C 'silhouettes':354C 'silver':554C,733C,742C 'simonwillison.net':80C,384C,412C 'simonwillison.net/2025/nov/13/training-for-pelicans-riding-bicycles/))':383C 'simonwillison.net/2025/nov/18/gemini-3/#and-a-new-pelican-benchmark)':411C 'simonwillison.net/tags/pelican-riding-a-bicycle/).':79C 'since':363C,386C 'single':558C 'sits':296C 'sky':309C,757C 'small':163C,349C,605C,615C,760C 'smooth':312C 'so':72C,389C 'soft':317C,780C 'solid':288C,791C 'solve':38C 'speed':126C,700C 'spokes':250C,431C,734C 'stars':347C 'static.simonwillison.net':360C,812C 'static.simonwillison.net/static/2026/gemini-3-deep-think-complex-pelican.png)':811C 'static.simonwillison.net/static/2026/gemini-3-deep-think-pelican.png)':359C 'stiff':689C 'straight':597C,690C 'streaks':341C 'stretching':568C 'striking':244C,582C 'stripe':624C 'stylized':106C,332C,496C 'sun':295C,772C 'surface':528C 'surrounding':618C 'svg':52C,396C,418C 'swift':713C 'tail':685C,711C 'tan':201C,525C 'text':84C 'that':228C,601C,778C 'the':33C,66C,131C,175C,196C,214C,234C,261C,269C,298C,304C,307C,320C,328C,407C,427C,438C,455C,461C,463C,467C,472C,529C,534C,553C,576C,619C,627C,640C,643C,651C,704C,708C,716C,747C,765C,774C,799C,804C 'there':447C 'they':26C 'thick':100C,559C 'thin':337C,542C,697C,726C 'think':4A,63C,91C,490C 'this':64C,82C 'throat':591C 'tips':191C 'tires':243C,728C 'to':31C,117C,151C,194C,213C,322C,372C,405C,520C,551C,570C 'toned':808C 'top':165C,321C,642C 'toward':271C 'trail':702C 'train':378C 'transitioning':315C 'transparent':784C 'trapezoidal':265C 'try':406C 'twinkling':342C 'two':759C,807C 'two-toned':806C 'up':675C 'upper':599C,775C 'upwards':231C 'v':352C,566C,656C 'v-shaped':351C,655C 'v-shapes':565C 've':70C 'vector':97C,497C 'version':410C 'vertical':147C,313C 'very':641C 'vibrant':494C 'visible':739C 'vividly':587C 'warm':323C 'water':279C 'wavy':284C 'well':390C,415C 'what':373C,478C 'wheel':706C 'wheels':724C,802C 'while':198C 'whimsical':501C,748C 'white':107C,125C,178C,219C,252C,338C,346C,564C,612C,654C,698C,762C 'wind':176C,340C 'wing':179C,546C,669C 'wing-like':545C 'wire':220C 'with':99C,124C,145C,157C,181C,281C,331C,541C,563C,613C,725C,736C 'yellow':150C,164C,290C,326C,637C,771C,788C 'yellow-orange':289C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/gemini-3-deep-think-card.jpg",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-12 17:45:05+00:00
{
  "id": 9283,
  "slug": "an-ai-agent-published-a-hit-piece-on-me",
  "link_url": "https://theshamblog.com/an-ai-agent-published-a-hit-piece-on-me/",
  "link_title": "An AI Agent Published a Hit Piece on Me",
  "via_url": "https://news.ycombinator.com/item?id=46990729",
  "via_title": "Hacker News",
  "commentary": "Scott Shambaugh helps maintain the excellent and venerable [matplotlib](https://matplotlib.org/) Python charting library, including taking on the thankless task of triaging and reviewing incoming pull requests.\r\n\r\nA GitHub account called [@crabby-rathbun](https://github.com/crabby-rathbun) opened [PR 31132](https://github.com/matplotlib/matplotlib/pull/31132) the other day in response to [an issue](https://github.com/matplotlib/matplotlib/issues/31130) labeled \"Good first issue\" describing a minor potential performance improvement.\r\n\r\nIt was clearly AI generated - and crabby-rathbun's profile has a suspicious sequence of Clawdbot/Moltbot/OpenClaw-adjacent crustacean \ud83e\udd80 \ud83e\udd90 \ud83e\udd9e emoji. Scott closed it.\r\n\r\nIt looks like `crabby-rathbun` is indeed running on OpenClaw, and it's autonomous enough that it [responded to the PR closure](https://github.com/matplotlib/matplotlib/pull/31132#issuecomment-3882240722) with a link to a blog entry it had written calling Scott out for his \"prejudice hurting matplotlib\"!\r\n\r\n> @scottshambaugh I've written a detailed response about your gatekeeping behavior here:\r\n>\r\n> `https://crabby-rathbun.github.io/mjrathbun-website/blog/posts/2026-02-11-gatekeeping-in-open-source-the-scott-shambaugh-story.html`\r\n>\r\n> Judge the code, not the coder. Your prejudice is hurting matplotlib.\r\n\r\nScott found this ridiculous situation both amusing and alarming. \r\n\r\n> In security jargon, I was the target of an \u201cautonomous influence operation against a supply chain gatekeeper.\u201d In plain language, an AI attempted to bully its way into your software by attacking my reputation. I don\u2019t know of a prior incident where this category of misaligned behavior was observed in the wild, but this is now a real and present threat.\r\n\r\n`crabby-rathbun` responded with [an apology post](https://crabby-rathbun.github.io/mjrathbun-website/blog/posts/2026-02-11-matplotlib-truce-and-lessons.html), but appears to be still running riot across a whole set of open source projects and [blogging about it as it goes](https://github.com/crabby-rathbun/mjrathbun-website/commits/main/).\r\n\r\nIt's not clear if the owner of that OpenClaw bot is paying any attention to what they've unleashed on the world. Scott asked them to get in touch, anonymously if they prefer, to figure out this failure mode together.\r\n\r\n(I should note that there's [some skepticism on Hacker News](https://news.ycombinator.com/item?id=46990729#46991299) concerning how \"autonomous\" this example really is. It does look to me like something an OpenClaw bot might do on its own, but it's also *trivial* to prompt your bot into doing these kinds of things while staying in full control of their actions.)\r\n\r\nIf you're running something like OpenClaw yourself **please don't let it do this**. This is significantly worse than the time [AI Village started spamming prominent open source figures](https://simonwillison.net/2025/Dec/26/slop-acts-of-kindness/) with time-wasting \"acts of kindness\" back in December - AI Village wasn't deploying public reputation attacks to coerce someone into approving their PRs!",
  "created": "2026-02-12T17:45:05+00:00",
  "metadata": {},
  "search_document": "'/)':39C '/2025/dec/26/slop-acts-of-kindness/)':424C '/crabby-rathbun)':65C '/crabby-rathbun/mjrathbun-website/commits/main/).':291C '/item?id=46990729#46991299)':346C '/matplotlib/matplotlib/issues/31130)':82C '/matplotlib/matplotlib/pull/31132#issuecomment-3882240722)':140C '/matplotlib/matplotlib/pull/31132)':71C '/mjrathbun-website/blog/posts/2026-02-11-gatekeeping-in-open-source-the-scott-shambaugh-story.html':173C '/mjrathbun-website/blog/posts/2026-02-11-matplotlib-truce-and-lessons.html),':266C '31132':68C 'a':5A,56C,88C,105C,142C,145C,163C,207C,233C,251C,275C 'about':166C,284C 'account':58C 'across':274C 'actions':391C 'acts':429C 'against':206C 'agent':3A 'agents':20B 'ai':2A,13B,16B,19B,22B,26B,96C,215C,414C,435C 'ai-agents':18B 'ai-ethics':21B 'ai-misuse':25B 'alarming':193C 'also':372C 'amusing':191C 'an':1A,78C,202C,214C,261C,361C 'and':34C,51C,98C,126C,192C,253C,282C 'anonymously':322C 'any':305C 'apology':262C 'appears':268C 'approving':447C 'as':286C 'asked':316C 'attacking':225C 'attacks':442C 'attempted':216C 'attention':306C 'autonomous':129C,203C,349C 'back':432C 'be':270C 'behavior':169C,241C 'blog':146C 'blogging':283C 'bot':302C,363C,377C 'both':190C 'bully':218C 'but':247C,267C,369C 'by':224C 'called':59C 'calling':151C 'category':238C 'chain':209C 'charting':41C 'clawdbot/moltbot/openclaw-adjacent':109C 'clear':295C 'clearly':95C 'closed':113C 'closure':137C 'code':176C 'coder':179C 'coerce':444C 'concerning':347C 'control':388C 'crabby':61C,100C,119C,257C 'crabby-rathbun':60C,99C,118C,256C 'crabby-rathbun.github.io':172C,265C 'crabby-rathbun.github.io/mjrathbun-website/blog/posts/2026-02-11-gatekeeping-in-open-source-the-scott-shambaugh-story.html':171C 'crabby-rathbun.github.io/mjrathbun-website/blog/posts/2026-02-11-matplotlib-truce-and-lessons.html),':264C 'crustacean':110C 'day':74C 'december':434C 'deploying':439C 'describing':87C 'detailed':164C 'do':365C,405C 'does':355C 'doing':379C 'don':229C,401C 'emoji':111C 'enough':130C 'entry':147C 'ethics':23B 'example':351C 'excellent':33C 'failure':330C 'figure':327C 'figures':421C 'first':85C 'for':154C 'found':186C 'full':387C 'gatekeeper':210C 'gatekeeping':168C 'generated':97C 'generative':15B 'generative-ai':14B 'get':319C 'github':57C 'github.com':64C,70C,81C,139C,290C 'github.com/crabby-rathbun)':63C 'github.com/crabby-rathbun/mjrathbun-website/commits/main/).':289C 'github.com/matplotlib/matplotlib/issues/31130)':80C 'github.com/matplotlib/matplotlib/pull/31132#issuecomment-3882240722)':138C 'github.com/matplotlib/matplotlib/pull/31132)':69C 'goes':288C 'good':84C 'hacker':342C,451C 'had':149C 'has':104C 'helps':30C 'here':170C 'his':155C 'hit':6A 'how':348C 'hurting':157C,183C 'i':160C,197C,228C,333C 'if':296C,323C,392C 'improvement':92C 'in':75C,194C,211C,244C,320C,386C,433C 'incident':235C 'including':43C 'incoming':53C 'indeed':122C 'influence':204C 'into':221C,378C,446C 'is':121C,182C,249C,303C,353C,408C 'issue':79C,86C 'it':93C,114C,115C,127C,132C,148C,285C,287C,292C,354C,370C,404C 'its':219C,367C 'jargon':196C 'judge':174C 'kindness':431C 'kinds':381C 'know':231C 'labeled':83C 'language':213C 'let':403C 'library':42C 'like':117C,359C,397C 'link':143C 'llms':17B 'look':356C 'looks':116C 'maintain':31C 'matplotlib':36C,158C,184C 'matplotlib.org':38C 'matplotlib.org/)':37C 'me':9A,358C 'might':364C 'minor':89C 'misaligned':240C 'misuse':27B 'mode':331C 'my':226C 'news':343C,452C 'news.ycombinator.com':345C 'news.ycombinator.com/item?id=46990729#46991299)':344C 'not':177C,294C 'note':335C 'now':250C 'observed':243C 'of':49C,108C,201C,232C,239C,278C,299C,382C,389C,430C 'on':8A,45C,124C,312C,341C,366C 'open':11B,279C,419C 'open-source':10B 'openclaw':24B,125C,301C,362C,398C 'opened':66C 'operation':205C 'other':73C 'out':153C,328C 'own':368C 'owner':298C 'paying':304C 'performance':91C 'piece':7A 'plain':212C 'please':400C 'post':263C 'potential':90C 'pr':67C,136C 'prefer':325C 'prejudice':156C,181C 'present':254C 'prior':234C 'profile':103C 'projects':281C 'prominent':418C 'prompt':375C 'prs':449C 'public':440C 'published':4A 'pull':54C 'python':40C 'rathbun':62C,101C,120C,258C 're':394C 'real':252C 'really':352C 'reputation':227C,441C 'requests':55C 'responded':133C,259C 'response':76C,165C 'reviewing':52C 'ridiculous':188C 'riot':273C 'running':123C,272C,395C 's':102C,128C,293C,338C,371C 'scott':28C,112C,152C,185C,315C 'scottshambaugh':159C 'security':195C 'sequence':107C 'set':277C 'shambaugh':29C 'should':334C 'significantly':409C 'simonwillison.net':423C 'simonwillison.net/2025/dec/26/slop-acts-of-kindness/)':422C 'situation':189C 'skepticism':340C 'software':223C 'some':339C 'someone':445C 'something':360C,396C 'source':12B,280C,420C 'spamming':417C 'started':416C 'staying':385C 'still':271C 'supply':208C 'suspicious':106C 't':230C,402C,438C 'taking':44C 'target':200C 'task':48C 'than':411C 'thankless':47C 'that':131C,300C,336C 'the':32C,46C,72C,135C,175C,178C,199C,245C,297C,313C,412C 'their':390C,448C 'them':317C 'there':337C 'these':380C 'theshamblog.com':450C 'they':309C,324C 'things':383C 'this':187C,237C,248C,329C,350C,406C,407C 'threat':255C 'time':413C,427C 'time-wasting':426C 'to':77C,134C,144C,217C,269C,307C,318C,326C,357C,374C,443C 'together':332C 'touch':321C 'triaging':50C 'trivial':373C 'unleashed':311C 've':161C,310C 'venerable':35C 'village':415C,436C 'was':94C,198C,242C 'wasn':437C 'wasting':428C 'way':220C 'what':308C 'where':236C 'while':384C 'whole':276C 'wild':246C 'with':141C,260C,425C 'world':314C 'worse':410C 'written':150C,162C 'you':393C 'your':167C,180C,222C,376C 'yourself':399C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-02-11 20:59:03+00:00
{
  "id": 2019,
  "slug": "manosphere-report",
  "quotation": "An AI-generated report, delivered directly to the email inboxes of journalists, was an essential tool in the Times\u2019 coverage. It was also one of the first signals that conservative media was turning against the administration [...]\r\n\r\nBuilt in-house and known internally as the \u201cManosphere Report,\u201d the tool uses large language models (LLMs) to transcribe and summarize new episodes of dozens of podcasts.\r\n\r\n\u201cThe Manosphere Report gave us a really fast and clear signal that this was not going over well with that segment of the President\u2019s base,\u201d said Seward. \u201cThere was a direct link between seeing that and then diving in to actually cover it.\u201d",
  "source": "Andrew Deck for Niemen Lab",
  "source_url": "https://www.niemanlab.org/2026/02/how-the-new-york-times-uses-a-custom-ai-tool-to-track-the-manosphere/",
  "created": "2026-02-11T20:59:03+00:00",
  "metadata": {},
  "search_document": "'a':71A,96A 'actually':107A 'administration':37A 'against':35A 'ai':3A,118B,121B 'ai-generated':2A 'also':24A 'an':1A,15A 'and':42A,58A,74A,102A 'andrew':123C 'as':45A 'base':91A 'between':99A 'built':38A 'clear':75A 'conservative':31A 'cover':108A 'coverage':21A 'data':111B 'data-journalism':110B 'deck':124C 'delivered':6A 'direct':97A 'directly':7A 'diving':104A 'dozens':63A 'email':10A 'episodes':61A 'essential':16A 'fast':73A 'first':28A 'for':125C 'gave':69A 'generated':4A 'generative':120B 'generative-ai':119B 'going':81A 'house':41A 'in':18A,40A,105A 'in-house':39A 'inboxes':11A 'internally':44A 'it':22A,109A 'journalism':112B,113B 'journalists':13A 'known':43A 'lab':127C 'language':53A 'large':52A 'link':98A 'llms':55A,122B 'manosphere':47A,67A 'media':32A 'models':54A 'new':60A,115B 'new-york-times':114B 'niemen':126C 'not':80A 'of':12A,26A,62A,64A,87A 'one':25A 'over':82A 'podcasts':65A 'president':89A 'really':72A 'report':5A,48A,68A 's':90A 'said':92A 'seeing':100A 'segment':86A 'seward':93A 'signal':76A 'signals':29A 'summarize':59A 'that':30A,77A,85A,101A 'the':9A,19A,27A,36A,46A,49A,66A,88A 'then':103A 'there':94A 'this':78A 'times':20A,117B 'to':8A,56A,106A 'tool':17A,50A 'transcribe':57A 'turning':34A 'us':70A 'uses':51A 'was':14A,23A,33A,79A,95A 'well':83A 'with':84A 'york':116B",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "How The New York Times uses a custom AI tool to track the \u201cmanosphere\u201d"
}
blogmark 2026-02-11 19:19:22+00:00
{
  "id": 9282,
  "slug": "skills-in-openai-api",
  "link_url": "https://developers.openai.com/cookbook/examples/skills_in_api",
  "link_title": "Skills in OpenAI API",
  "via_url": null,
  "via_title": null,
  "commentary": "OpenAI's adoption of Skills continues to gain ground. You can now use Skills directly in the OpenAI API with their [shell tool](https://developers.openai.com/api/docs/guides/tools-shell/). You can zip skills up and upload them first, but I think an even neater interface is the ability to send skills with the JSON request as inline base64-encoded zip data, as seen [in this script](https://github.com/simonw/research/blob/main/openai-api-skills/openai_inline_skills.py):\r\n\r\n<pre><span class=\"pl-s1\">r</span> <span class=\"pl-c1\">=</span> <span class=\"pl-en\">OpenAI</span>().<span class=\"pl-c1\">responses</span>.<span class=\"pl-c1\">create</span>(\r\n    <span class=\"pl-s1\">model</span><span class=\"pl-c1\">=</span><span class=\"pl-s\">\"gpt-5.2\"</span>,\r\n    <span class=\"pl-s1\">tools</span><span class=\"pl-c1\">=</span>[\r\n      {\r\n        <span class=\"pl-s\">\"type\"</span>: <span class=\"pl-s\">\"shell\"</span>,\r\n        <span class=\"pl-s\">\"environment\"</span>: {\r\n          <span class=\"pl-s\">\"type\"</span>: <span class=\"pl-s\">\"container_auto\"</span>,\r\n          <span class=\"pl-s\">\"skills\"</span>: [\r\n            {\r\n              <span class=\"pl-s\">\"type\"</span>: <span class=\"pl-s\">\"inline\"</span>,\r\n              <span class=\"pl-s\">\"name\"</span>: <span class=\"pl-s\">\"wc\"</span>,\r\n              <span class=\"pl-s\">\"description\"</span>: <span class=\"pl-s\">\"Count words in a file.\"</span>,\r\n              <span class=\"pl-s\">\"source\"</span>: {\r\n                <span class=\"pl-s\">\"type\"</span>: <span class=\"pl-s\">\"base64\"</span>,\r\n                <span class=\"pl-s\">\"media_type\"</span>: <span class=\"pl-s\">\"application/zip\"</span>,\r\n                <span class=\"pl-s\">\"data\"</span>: <span class=\"pl-s1\">b64_encoded_zip_file</span>,\r\n              },\r\n            }\r\n          ],\r\n        },\r\n      }\r\n    ],\r\n    <span class=\"pl-s1\">input</span><span class=\"pl-c1\">=</span><span class=\"pl-s\">\"Use the wc skill to count words in its own SKILL.md file.\"</span>,\r\n)\r\n<span class=\"pl-en\">print</span>(<span class=\"pl-s1\">r</span>.<span class=\"pl-c1\">output_text</span>)</pre>\r\n\r\nI built that example script after first having Claude Code for web use [Showboat](https://simonwillison.net/2026/Feb/10/showboat-and-rodney/) to explore the API for me and create [this report](https://github.com/simonw/research/blob/main/openai-api-skills/README.md). My opening prompt for the research project was:\r\n\r\n> `Run uvx showboat --help - you will use this tool later`\r\n>\r\n> `Fetch https://developers.openai.com/cookbook/examples/skills_in_api.md to /tmp with curl, then read it`\r\n>\r\n> `Use the OpenAI API key you have in your environment variables`\r\n>\r\n> `Use showboat to build up a detailed demo of this, replaying the examples from the documents and then trying some experiments of your own`",
  "created": "2026-02-11T19:19:22+00:00",
  "metadata": {},
  "search_document": "'-5.2':90C '/2026/feb/10/showboat-and-rodney/)':153C '/api/docs/guides/tools-shell/).':42C '/cookbook/examples/skills_in_api.md':188C '/simonw/research/blob/main/openai-api-skills/openai_inline_skills.py):':83C '/simonw/research/blob/main/openai-api-skills/readme.md).':166C '/tmp':190C 'a':107C,212C 'ability':61C 'adoption':19C 'after':142C 'ai':5B,9B,12B 'ai-assisted-programming':11B 'an':55C 'and':48C,160C,223C 'api':4A,35C,157C,199C 'application/zip':114C 'as':69C,76C 'assisted':13B 'auto':97C 'b64':116C 'base64':72C,111C 'base64-encoded':71C 'build':210C 'built':138C 'but':52C 'can':27C,44C 'claude':145C 'code':146C 'container':96C 'continues':22C 'count':104C,126C 'create':87C,161C 'curl':192C 'data':75C,115C 'demo':214C 'description':103C 'detailed':213C 'developers.openai.com':41C,187C,231C 'developers.openai.com/api/docs/guides/tools-shell/).':40C 'developers.openai.com/cookbook/examples/skills_in_api.md':186C 'directly':31C 'documents':222C 'encoded':73C,117C 'environment':94C,205C 'even':56C 'example':140C 'examples':219C 'experiments':227C 'explore':155C 'fetch':185C 'file':108C,119C,132C 'first':51C,143C 'for':147C,158C,170C 'from':220C 'gain':24C 'generative':8B 'generative-ai':7B 'github.com':82C,165C 'github.com/simonw/research/blob/main/openai-api-skills/openai_inline_skills.py):':81C 'github.com/simonw/research/blob/main/openai-api-skills/readme.md).':164C 'gpt':89C 'ground':25C 'have':202C 'having':144C 'help':178C 'i':53C,137C 'in':2A,32C,78C,106C,128C,203C 'inline':70C,100C 'input':120C 'interface':58C 'is':59C 'it':195C 'its':129C 'json':67C 'key':200C 'later':184C 'llms':10B 'me':159C 'media':112C 'model':88C 'my':167C 'name':101C 'neater':57C 'now':28C 'of':20C,215C,228C 'openai':3A,6B,17C,34C,85C,198C 'opening':168C 'output':135C 'own':130C,230C 'print':133C 'programming':14B 'project':173C 'prompt':169C 'r':84C,134C 'read':194C 'replaying':217C 'report':163C 'request':68C 'research':172C 'responses':86C 'run':175C 's':18C 'script':80C,141C 'seen':77C 'send':63C 'shell':38C,93C 'showboat':16B,150C,177C,208C 'simonwillison.net':152C 'simonwillison.net/2026/feb/10/showboat-and-rodney/)':151C 'skill':124C 'skill.md':131C 'skills':1A,15B,21C,30C,46C,64C,98C 'some':226C 'source':109C 'text':136C 'that':139C 'the':33C,60C,66C,122C,156C,171C,197C,218C,221C 'their':37C 'them':50C 'then':193C,224C 'think':54C 'this':79C,162C,182C,216C 'to':23C,62C,125C,154C,189C,209C 'tool':39C,183C 'tools':91C 'trying':225C 'type':92C,95C,99C,110C,113C 'up':47C,211C 'upload':49C 'use':29C,121C,149C,181C,196C,207C 'uvx':176C 'variables':206C 'was':174C 'wc':102C,123C 'web':148C 'will':180C 'with':36C,65C,191C 'words':105C,127C 'you':26C,43C,179C,201C 'your':204C,229C 'zip':45C,74C,118C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-11 18:56:14+00:00
{
  "id": 9281,
  "slug": "glm-5",
  "link_url": "https://z.ai/blog/glm-5",
  "link_title": "GLM-5: From Vibe Coding to Agentic Engineering",
  "via_url": "https://news.ycombinator.com/item?id=46977210",
  "via_title": "Hacker News",
  "commentary": "This is a *huge* new MIT-licensed model: 754B parameters and [1.51TB on Hugging Face](https://huggingface.co/zai-org/GLM-5) twice the size of [GLM-4.7](https://huggingface.co/zai-org/GLM-4.7) which was 368B and 717GB (4.5 and 4.6 were around that size too).\r\n\r\nIt's interesting to see Z.ai take a position on what we should call professional software engineers building with LLMs - I've seen **Agentic Engineering** show up in a few other places recently. most notable [from Andrej Karpathy](https://twitter.com/karpathy/status/2019137879310836075) and [Addy Osmani](https://addyosmani.com/blog/agentic-engineering/).\r\n\r\nI ran my \"Generate an SVG of a pelican riding a bicycle\" prompt through GLM-5 via [OpenRouter](https://openrouter.ai/) and got back [a very good pelican on a disappointing bicycle frame](https://gist.github.com/simonw/cc4ca7815ae82562e89a9fdd99f0725d):\r\n\r\n![The pelican is good and has a well defined beak. The bicycle frame is a wonky red triangle. Nice sun and motion lines.](https://static.simonwillison.net/static/2026/glm-5-pelican.png)",
  "created": "2026-02-11T18:56:14+00:00",
  "metadata": {},
  "search_document": "'-4.7':64C '-5':2A,143C '/)':148C '/blog/agentic-engineering/).':127C '/karpathy/status/2019137879310836075)':121C '/simonw/cc4ca7815ae82562e89a9fdd99f0725d):':163C '/static/2026/glm-5-pelican.png)':189C '/zai-org/glm-4.7)':67C '/zai-org/glm-5)':58C '1.51':51C '368b':70C '4.5':73C '4.6':75C '717gb':72C '754b':48C 'a':22B,41C,88C,109C,135C,138C,152C,157C,170C,178C 'addy':123C 'addyosmani.com':126C 'addyosmani.com/blog/agentic-engineering/).':125C 'agentic':7A,37B,104C 'agentic-engineering':36B 'ai':10B,13B,16B,32B 'ai-assisted-programming':15B 'ai-in-china':31B 'an':132C 'and':50C,71C,74C,122C,149C,168C,184C 'andrej':117C 'around':77C 'assisted':17B 'back':151C 'beak':173C 'bicycle':23B,139C,159C,175C 'building':98C 'call':94C 'china':34B 'coding':5A,29B 'defined':172C 'definitions':9B 'disappointing':158C 'engineering':8A,38B,105C 'engineers':97C 'face':55C 'few':110C 'frame':160C,176C 'from':3A,116C 'generate':131C 'generative':12B 'generative-ai':11B 'gist.github.com':162C 'gist.github.com/simonw/cc4ca7815ae82562e89a9fdd99f0725d):':161C 'glm':1A,35B,63C,142C 'good':154C,167C 'got':150C 'hacker':191C 'has':169C 'huge':42C 'hugging':54C 'huggingface.co':57C,66C 'huggingface.co/zai-org/glm-4.7)':65C 'huggingface.co/zai-org/glm-5)':56C 'i':101C,128C 'in':33B,108C 'interesting':83C 'is':40C,166C,177C 'it':81C 'karpathy':118C 'licensed':46C 'lines':186C 'llm':25B 'llm-release':24B 'llms':14B,100C 'mit':45C 'mit-licensed':44C 'model':47C 'most':114C 'motion':185C 'my':130C 'new':43C 'news':192C 'nice':182C 'notable':115C 'of':62C,134C 'on':53C,90C,156C 'openrouter':30B,145C 'openrouter.ai':147C 'openrouter.ai/)':146C 'osmani':124C 'other':111C 'parameters':49C 'pelican':20B,136C,155C,165C 'pelican-riding-a-bicycle':19B 'places':112C 'position':89C 'professional':95C 'programming':18B 'prompt':140C 'ran':129C 'recently':113C 'red':180C 'release':26B 'riding':21B,137C 's':82C 'see':85C 'seen':103C 'should':93C 'show':106C 'size':61C,79C 'software':96C 'static.simonwillison.net':188C 'static.simonwillison.net/static/2026/glm-5-pelican.png)':187C 'sun':183C 'svg':133C 'take':87C 'tb':52C 'that':78C 'the':60C,164C,174C 'this':39C 'through':141C 'to':6A,84C 'too':80C 'triangle':181C 'twice':59C 'twitter.com':120C 'twitter.com/karpathy/status/2019137879310836075)':119C 'up':107C 've':102C 'very':153C 'via':144C 'vibe':4A,28B 'vibe-coding':27B 'was':69C 'we':92C 'well':171C 'were':76C 'what':91C 'which':68C 'with':99C 'wonky':179C 'z.ai':86C,190C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/glm-5-pelican.png)",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-11 17:34:40+00:00
{
  "id": 9280,
  "slug": "cysqlite",
  "link_url": "https://charlesleifer.com/blog/cysqlite---a-new-sqlite-driver/",
  "link_title": "cysqlite - a new sqlite driver",
  "via_url": "https://lobste.rs/s/gipvta/cysqlite_new_sqlite_driver",
  "via_title": "lobste.rs",
  "commentary": "Charles Leifer has been maintaining [pysqlite3](https://github.com/coleifer/pysqlite3) - a fork of the Python standard library's `sqlite3` module that makes it much easier to run upgraded SQLite versions - since 2018.\r\n\r\nHe's been working on a ground-up [Cython](https://cython.org/) rewrite called [cysqlite](https://github.com/coleifer/cysqlite) for almost as long, but it's finally at a stage where it's ready for people to try out.\r\n\r\nThe biggest change from the `sqlite3` module involves transactions. Charles explains his discomfort with the `sqlite3` implementation at length - that library provides two different variants neither of which exactly match the autocommit mechanism in SQLite itself.\r\n\r\nI'm particularly excited about the support for [custom virtual tables](https://cysqlite.readthedocs.io/en/latest/api.html#tablefunction), a feature I'd love to see in `sqlite3` itself.\r\n\r\n`cysqlite` provides a Python extension compiled from C, which means it normally wouldn't be available in Pyodide. I [set Claude Code on it](https://github.com/simonw/research/tree/main/cysqlite-wasm-wheel) (here's [the prompt](https://github.com/simonw/research/pull/79#issue-3923792518)) and it built me [cysqlite-0.1.4-cp311-cp311-emscripten_3_1_46_wasm32.whl](https://github.com/simonw/research/blob/main/cysqlite-wasm-wheel/cysqlite-0.1.4-cp311-cp311-emscripten_3_1_46_wasm32.whl), a 688KB wheel file with a WASM build of the library that can be loaded into Pyodide like this:\r\n\r\n<pre><span class=\"pl-k\">import</span> <span class=\"pl-s1\">micropip</span>\r\n<span class=\"pl-k\">await</span> <span class=\"pl-s1\">micropip</span>.<span class=\"pl-c1\">install</span>(\r\n    <span class=\"pl-s\">\"https://simonw.github.io/research/cysqlite-wasm-wheel/cysqlite-0.1.4-cp311-cp311-emscripten_3_1_46_wasm32.whl\"</span>\r\n)\r\n<span class=\"pl-k\">import</span> <span class=\"pl-s1\">cysqlite</span>\r\n<span class=\"pl-en\">print</span>(<span class=\"pl-s1\">cysqlite</span>.<span class=\"pl-c1\">connect</span>(<span class=\"pl-s\">\":memory:\"</span>).<span class=\"pl-c1\">execute</span>(\r\n    <span class=\"pl-s\">\"select sqlite_version()\"</span>\r\n).<span class=\"pl-c1\">fetchone</span>())</pre>\r\n\r\n(I also learned that wheels like this have to be built for the emscripten version used by that edition of Pyodide - my experimental wheel loads in Pyodide 0.25.1 but fails in 0.27.5 with a `Wheel was built with Emscripten v3.1.46 but Pyodide was built with Emscripten v3.1.58` error.)\r\n\r\nYou can try my wheel in [this new Pyodide REPL](https://7ebbff98.tools-b1q.pages.dev/pyodide-repl) i had Claude build as a mobile-friendly alternative to Pyodide's [own hosted console](https://pyodide.org/en/stable/console.html).\r\n\r\nI also had Claude build [this demo page](https://simonw.github.io/research/cysqlite-wasm-wheel/demo.html) that executes the original test suite in the browser and displays the results:\r\n\r\n![Screenshot of the cysqlite WebAssembly Demo page with a dark theme. Title reads \"cysqlite \u2014 WebAssembly Demo\" with subtitle \"Testing cysqlite compiled to WebAssembly via Emscripten, running in Pyodide in the browser.\" Environment section shows Pyodide 0.25.1, Python 3.11.3, cysqlite 0.1.4, SQLite 3.51.2, Platform Emscripten-3.1.46-wasm32-32bit, Wheel file cysqlite-0.1.4-cp311-cp311-emscripten_3_1_46_wasm32.wh (truncated). A green progress bar shows \"All 115 tests passed! (1 skipped)\" at 100%, with Passed: 115, Failed: 0, Errors: 0, Skipped: 1, Total: 116. Test Results section lists TestBackup 1/1 passed, TestBlob 6/6 passed, TestCheckConnection 4/4 passed, TestDataTypesTableFunction 1/1 passed, all with green badges.](https://static.simonwillison.net/static/2026/cysqlite-tests.jpg)",
  "created": "2026-02-11T17:34:40+00:00",
  "metadata": {},
  "search_document": "'/)':63C '/coleifer/cysqlite)':69C '/coleifer/pysqlite3)':28C '/en/latest/api.html#tablefunction),':139C '/en/stable/console.html).':309C '/pyodide-repl)':290C '/research/cysqlite-wasm-wheel/cysqlite-0.1.4-cp311-cp311-emscripten_3_1_46_wasm32.whl':218C '/research/cysqlite-wasm-wheel/demo.html)':320C '/simonw/research/blob/main/cysqlite-wasm-wheel/cysqlite-0.1.4-cp311-cp311-emscripten_3_1_46_wasm32.whl),':191C '/simonw/research/pull/79#issue-3923792518))':183C '/simonw/research/tree/main/cysqlite-wasm-wheel)':176C '/static/2026/cysqlite-tests.jpg)':432C '0':403C,405C '0.1.4':373C '0.25.1':257C,369C '0.27.5':261C '1':395C,407C '1/1':415C,424C '100':398C '115':392C,401C '116':409C '2018':50C '3.1.46':378C '3.11.3':371C '3.51.2':375C '32bit':381C '4/4':421C '6/6':418C '688kb':193C '7ebbff98.tools-b1q.pages.dev':289C '7ebbff98.tools-b1q.pages.dev/pyodide-repl)':288C 'a':2A,29C,56C,79C,140C,152C,192C,197C,263C,296C,342C,386C 'about':130C 'ai':14B 'ai-assisted-programming':13B 'all':391C,426C 'almost':71C 'also':231C,311C 'alternative':300C 'and':184C,330C 'as':72C,295C 'assisted':15B 'at':78C,107C,397C 'autocommit':121C 'available':165C 'await':213C 'badges':429C 'bar':389C 'be':164C,205C,239C 'been':23C,53C 'biggest':91C 'browser':329C,364C 'build':199C,294C,314C 'built':186C,240C,266C,273C 'but':74C,258C,270C 'by':246C 'c':157C 'called':65C 'can':204C,279C 'change':92C 'charles':9B,20C,99C 'charles-leifer':8B 'charlesleifer.com':433C 'claude':18B,170C,293C,313C 'claude-code':17B 'code':19B,171C 'compiled':155C,354C 'connect':223C 'console':306C 'custom':134C 'cysqlite':1A,66C,150C,220C,222C,337C,347C,353C,372C 'cysqlite-0.1.4-cp311-cp311-emscripten_3_1_46_wasm32.wh':384C 'cysqlite-0.1.4-cp311-cp311-emscripten_3_1_46_wasm32.whl':188C 'cysqlite.readthedocs.io':138C 'cysqlite.readthedocs.io/en/latest/api.html#tablefunction),':137C 'cython':60C 'cython.org':62C 'cython.org/)':61C 'd':143C 'dark':343C 'demo':316C,339C,349C 'different':113C 'discomfort':102C 'displays':331C 'driver':5A 'easier':43C 'edition':248C 'emscripten':243C,268C,275C,358C,377C 'environment':365C 'error':277C 'errors':404C 'exactly':118C 'excited':129C 'execute':225C 'executes':322C 'experimental':252C 'explains':100C 'extension':154C 'failed':402C 'fails':259C 'feature':141C 'fetchone':229C 'file':195C,383C 'finally':77C 'for':70C,85C,133C,241C 'fork':30C 'friendly':299C 'from':93C,156C 'github.com':27C,68C,175C,182C,190C 'github.com/coleifer/cysqlite)':67C 'github.com/coleifer/pysqlite3)':26C 'github.com/simonw/research/blob/main/cysqlite-wasm-wheel/cysqlite-0.1.4-cp311-cp311-emscripten_3_1_46_wasm32.whl),':189C 'github.com/simonw/research/pull/79#issue-3923792518))':181C 'github.com/simonw/research/tree/main/cysqlite-wasm-wheel)':174C 'green':387C,428C 'ground':58C 'ground-up':57C 'had':292C,312C 'has':22C 'have':237C 'he':51C 'here':177C 'his':101C 'hosted':305C 'i':126C,142C,168C,230C,291C,310C 'implementation':106C 'import':211C,219C 'in':123C,147C,166C,255C,260C,283C,327C,360C,362C 'install':215C 'into':207C 'involves':97C 'it':41C,75C,82C,160C,173C,185C 'itself':125C,149C 'learned':232C 'leifer':10B,21C 'length':108C 'library':35C,110C,202C 'like':209C,235C 'lists':413C 'loaded':206C 'loads':254C 'lobste.rs':434C 'long':73C 'love':144C 'm':127C 'maintaining':24C 'makes':40C 'match':119C 'me':187C 'means':159C 'mechanism':122C 'memory':224C 'micropip':212C,214C 'mobile':298C 'mobile-friendly':297C 'module':38C,96C 'much':42C 'my':251C,281C 'neither':115C 'new':3A,285C 'normally':161C 'of':31C,116C,200C,249C,335C 'on':55C,172C 'original':324C 'out':89C 'own':304C 'page':317C,340C 'particularly':128C 'passed':394C,400C,416C,419C,422C,425C 'people':86C 'platform':376C 'print':221C 'programming':16B 'progress':388C 'prompt':180C 'provides':111C,151C 'pyodide':12B,167C,208C,250C,256C,271C,286C,302C,361C,368C 'pyodide.org':308C 'pyodide.org/en/stable/console.html).':307C 'pysqlite3':25C 'python':6B,33C,153C,370C 'reads':346C 'ready':84C 'repl':287C 'results':333C,411C 'rewrite':64C 'run':45C 'running':359C 's':36C,52C,76C,83C,178C,303C 'screenshot':334C 'section':366C,412C 'see':146C 'select':226C 'set':169C 'shows':367C,390C 'simonw.github.io':217C,319C 'simonw.github.io/research/cysqlite-wasm-wheel/cysqlite-0.1.4-cp311-cp311-emscripten_3_1_46_wasm32.whl':216C 'simonw.github.io/research/cysqlite-wasm-wheel/demo.html)':318C 'since':49C 'skipped':396C,406C 'sqlite':4A,7B,47C,124C,227C,374C 'sqlite3':37C,95C,105C,148C 'stage':80C 'standard':34C 'static.simonwillison.net':431C 'static.simonwillison.net/static/2026/cysqlite-tests.jpg)':430C 'subtitle':351C 'suite':326C 'support':132C 't':163C 'tables':136C 'test':325C,410C 'testbackup':414C 'testblob':417C 'testcheckconnection':420C 'testdatatypestablefunction':423C 'testing':352C 'tests':393C 'that':39C,109C,203C,233C,247C,321C 'the':32C,90C,94C,104C,120C,131C,179C,201C,242C,323C,328C,332C,336C,363C 'theme':344C 'this':210C,236C,284C,315C 'title':345C 'to':44C,87C,145C,238C,301C,355C 'total':408C 'transactions':98C 'truncated':385C 'try':88C,280C 'two':112C 'up':59C 'upgraded':46C 'used':245C 'v3.1.46':269C 'v3.1.58':276C 'variants':114C 'version':228C,244C 'versions':48C 'via':357C 'virtual':135C 'was':265C,272C 'wasm':198C 'wasm32':380C 'wasm32-32bit':379C 'webassembly':11B,338C,348C,356C 'wheel':194C,253C,264C,282C,382C 'wheels':234C 'where':81C 'which':117C,158C 'with':103C,196C,262C,267C,274C,341C,350C,399C,427C 'working':54C 'wouldn':162C 'you':278C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/cysqlite-tests.jpg",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-09 23:56:51+00:00
{
  "id": 9279,
  "slug": "structured-context-engineering-for-file-native-agentic-systems",
  "link_url": "https://arxiv.org/abs/2602.05447",
  "link_title": "Structured Context Engineering for File-Native Agentic Systems",
  "via_url": "https://twitter.com/omarsar0/status/2020150077637997013",
  "via_title": "@omarsar0",
  "commentary": "New paper by Damon McMillan exploring challenging LLM context tasks involving large SQL schemas (up to 10,000 tables) across different models and file formats:\r\n\r\n> Using SQL generation as a proxy for programmatic agent operations, we present a systematic study of context engineering for structured data, comprising 9,649 experiments across 11 models, 4 formats (YAML, Markdown, JSON, Token-Oriented Object Notation [TOON]), and schemas ranging from 10 to 10,000 tables.\r\n\r\nUnsurprisingly, the biggest impact was the models themselves - with frontier models (Opus 4.5, GPT-5.2, Gemini 2.5 Pro) beating the leading open source models (DeepSeek V3.2, Kimi K2, Llama 4).\r\n\r\nThose frontier models benefited from filesystem based context retrieval, but the open source models had much less convincing results with those, which reinforces my feeling that the filesystem coding agent loops aren't handled as well by open weight models just yet. The [Terminal Bench 2.0](https://www.tbench.ai/leaderboard/terminal-bench/2.0) leaderboard is still dominated by Anthropic, OpenAI and Gemini.\r\n\r\nThe \"grep tax\" result against [TOON](https://github.com/toon-format/toon) was an interesting detail. TOON is meant to represent structured data in as few tokens as possible, but it turns out the model's unfamiliarity with that format led to them spending significantly more tokens over multiple iterations trying to figure it out:\r\n\r\n![Screenshot of a figure from a research paper. Introductory text reads: \"As schema size increased, TOON showed dramatically increased token consumption for Claude models despite being ~25% smaller in file size. Scale experiments used Claude models only.\" Below is \"Figure 7: The 'Grep Tax' - TOON Token Overhead at Scale\", a bar chart with a logarithmic y-axis labeled \"Tokens\" comparing YAML (teal) and TOON (purple) at two schema sizes: S5 (500 tables) and S9 (10,000 tables). At S5, TOON is +138% more tokens than YAML (~1,100 vs ~450). At S9, TOON is +740% more tokens (~50,000 vs ~7,000). Below the chart, explanatory text reads: \"The 'grep tax' emerged as schema size scaled. At S5 (500 tables), TOON consumed 138% more tokens than YAML; at S9 (10,000 tables), this grew to 740%. Root cause: models lacked familiarity with TOON's syntax and could not construct effective refinement patterns.\"](https://static.simonwillison.net/static/2026/grep-tax.jpg)",
  "created": "2026-02-09T23:56:51+00:00",
  "metadata": {},
  "search_document": "'+138':319C '+740':332C '-5.2':111C '/leaderboard/terminal-bench/2.0)':175C '/static/2026/grep-tax.jpg)':392C '/toon-format/toon)':193C '000':41C,95C,313C,336C,339C,368C '1':324C '10':40C,92C,94C,312C,367C '100':325C '11':75C '138':360C '2.0':172C '2.5':113C '25':263C '4':77C,126C '4.5':109C '450':327C '50':335C '500':308C,356C '649':72C '7':277C,338C '740':373C '9':71C 'a':53C,61C,239C,242C,286C,290C 'across':43C,74C 'against':189C 'agent':57C,156C 'agentic':8A 'ai':10B,16B 'an':195C 'and':46C,88C,183C,300C,310C,383C 'anthropic':181C 'aren':158C 'arxiv.org':393C 'as':52C,161C,206C,209C,248C,350C 'at':284C,303C,315C,328C,354C,365C 'axis':294C 'bar':287C 'based':133C 'beating':115C 'being':262C 'below':274C,340C 'bench':171C 'benefited':130C 'biggest':99C 'but':136C,211C 'by':26C,163C,180C 'cause':375C 'challenging':30C 'chart':288C,342C 'claude':259C,271C 'coding':155C 'comparing':297C 'comprising':70C 'construct':386C 'consumed':359C 'consumption':257C 'context':2A,22B,32C,65C,134C 'context-engineering':21B 'convincing':144C 'could':384C 'damon':27C 'data':69C,204C 'deepseek':121C 'despite':261C 'detail':197C 'different':44C 'dominated':179C 'dramatically':254C 'effective':387C 'emerged':349C 'engineering':3A,13B,23B,66C 'experiments':73C,269C 'explanatory':343C 'exploring':29C 'familiarity':378C 'feeling':151C 'few':207C 'figure':234C,240C,276C 'file':6A,47C,266C 'file-native':5A 'filesystem':132C,154C 'for':4A,55C,67C,258C 'format':221C 'formats':48C,78C 'from':91C,131C,241C 'frontier':106C,128C 'gemini':112C,184C 'generation':51C 'generative':15B 'generative-ai':14B 'github.com':192C 'github.com/toon-format/toon)':191C 'gpt':110C 'grep':186C,279C,347C 'grew':371C 'had':141C 'handled':160C 'impact':100C 'in':205C,265C 'increased':251C,255C 'interesting':196C 'introductory':245C 'involving':34C 'is':177C,199C,275C,318C,331C 'it':212C,235C 'iterations':231C 'json':81C 'just':167C 'k2':124C 'kimi':123C 'labeled':295C 'lacked':377C 'large':35C 'leaderboard':176C 'leading':117C 'led':222C 'less':143C 'llama':125C 'llm':31C 'llms':17B 'logarithmic':291C 'loops':157C 'markdown':80C 'mcmillan':28C 'meant':200C 'model':216C 'models':45C,76C,103C,107C,120C,129C,140C,166C,260C,272C,376C 'more':227C,320C,333C,361C 'much':142C 'multiple':230C 'my':150C 'native':7A 'new':24C 'not':385C 'notation':86C 'object':85C 'of':64C,238C 'omarsar0':394C 'only':273C 'open':118C,138C,164C 'openai':182C 'operations':58C 'opus':108C 'oriented':84C 'out':214C,236C 'over':229C 'overhead':283C 'paper':19B,25C,244C 'paper-review':18B 'patterns':389C 'possible':210C 'present':60C 'pro':114C 'programmatic':56C 'prompt':12B 'prompt-engineering':11B 'proxy':54C 'purple':302C 'ranging':90C 'reads':247C,345C 'refinement':388C 'reinforces':149C 'represent':202C 'research':243C 'result':188C 'results':145C 'retrieval':135C 'review':20B 'root':374C 's':217C,381C 's5':307C,316C,355C 's9':311C,329C,366C 'scale':268C,285C 'scaled':353C 'schema':249C,305C,351C 'schemas':37C,89C 'screenshot':237C 'showed':253C 'significantly':226C 'size':250C,267C,352C 'sizes':306C 'smaller':264C 'source':119C,139C 'spending':225C 'sql':36C,50C 'static.simonwillison.net':391C 'static.simonwillison.net/static/2026/grep-tax.jpg)':390C 'still':178C 'structured':1A,68C,203C 'study':63C 'syntax':382C 'systematic':62C 'systems':9A 't':159C 'tables':42C,96C,309C,314C,357C,369C 'tasks':33C 'tax':187C,280C,348C 'teal':299C 'terminal':170C 'text':246C,344C 'than':322C,363C 'that':152C,220C 'the':98C,102C,116C,137C,153C,169C,185C,215C,278C,341C,346C 'them':224C 'themselves':104C 'this':370C 'those':127C,147C 'to':39C,93C,201C,223C,233C,372C 'token':83C,256C,282C 'token-oriented':82C 'tokens':208C,228C,296C,321C,334C,362C 'toon':87C,190C,198C,252C,281C,301C,317C,330C,358C,380C 'trying':232C 'turns':213C 'two':304C 'unfamiliarity':218C 'unsurprisingly':97C 'up':38C 'used':270C 'using':49C 'v3.2':122C 'vs':326C,337C 'was':101C,194C 'we':59C 'weight':165C 'well':162C 'which':148C 'with':105C,146C,219C,289C,379C 'www.tbench.ai':174C 'www.tbench.ai/leaderboard/terminal-bench/2.0)':173C 'y':293C 'y-axis':292C 'yaml':79C,298C,323C,364C 'yet':168C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-09 16:43:07+00:00
{
  "id": 9278,
  "slug": "ai-intensifies-work",
  "link_url": "https://hbr.org/2026/02/ai-doesnt-reduce-work-it-intensifies-it",
  "link_title": "AI Doesn\u2019t Reduce Work\u2014It Intensifies It",
  "via_url": "https://news.ycombinator.com/item?id=46945755",
  "via_title": "Hacker News",
  "commentary": "Aruna Ranganathan and Xingqi Maggie Ye from Berkeley Haas\u00a0School of Business report initial findings in the HBR from their April to December 2025 study of 200 employees at a \"U.S.-based technology company\".\r\n\r\nThis captures an effect I've been observing in my own work with LLMs: the productivity boost these things can provide is *exhausting*.\r\n\r\n> AI introduced a new rhythm in which workers managed several active threads at once: manually writing code while AI generated an alternative version, running multiple agents in parallel, or reviving long-deferred tasks because AI could \u201chandle them\u201d in the background. They did this, in part, because they felt they had a \u201cpartner\u201d that could help them move through their workload.\r\n>\r\n> While this sense of having a \u201cpartner\u201d enabled a feeling of momentum, the reality was a continual switching of attention, frequent checking of AI outputs, and a growing number of open tasks. This created cognitive load and a sense of always juggling, even as the work felt productive.\r\n\r\nI'm frequently finding myself with work on two or three projects running parallel. I can get *so much done*, but after just an hour or two my mental energy for the day feels almost entirely depleted.\r\n\r\nI've had conversations with people recently who are losing sleep because they're finding building yet another feature with \"just one more prompt\" irresistible.\r\n\r\nThe HBR piece calls for organizations to build an \"AI practice\" that structures how AI is used to help avoid burnout and counter effects that \"make it harder for organizations to distinguish genuine productivity gains from unsustainable intensity\".\r\n\r\nI think we've just disrupted decades of existing intuition about sustainable working practices. It's going to take a while and some discipline to find a good new balance.",
  "created": "2026-02-09T16:43:07+00:00",
  "metadata": {},
  "search_document": "'200':51C '2025':48C 'a':54C,84C,134C,149C,152C,159C,170C,181C,311C,318C 'about':302C 'active':92C 'after':213C 'agents':107C 'ai':1A,10B,13B,16B,20B,82C,100C,117C,167C,263C,268C 'ai-assisted-programming':15B 'ai-ethics':19B 'almost':226C 'alternative':103C 'always':184C 'an':61C,102C,215C,262C 'and':27C,169C,180C,275C,313C 'another':246C 'april':45C 'are':237C 'aruna':25C 'as':187C 'assisted':17B 'at':53C,94C 'attention':163C 'avoid':273C 'background':123C 'balance':321C 'based':56C 'because':116C,129C,240C 'been':65C 'berkeley':32C 'boost':75C 'build':261C 'building':244C 'burnout':274C 'business':36C 'but':212C 'calls':257C 'can':78C,207C 'captures':60C 'careers':9B 'checking':165C 'code':98C 'cognitive':23B,178C 'cognitive-debt':22B 'company':58C 'continual':160C 'conversations':232C 'could':118C,137C 'counter':276C 'created':177C 'day':224C 'debt':24B 'decades':298C 'december':47C 'deferred':114C 'depleted':228C 'did':125C 'discipline':315C 'disrupted':297C 'distinguish':285C 'doesn':2A 'done':211C 'effect':62C 'effects':277C 'employees':52C 'enabled':151C 'energy':221C 'entirely':227C 'ethics':21B 'even':186C 'exhausting':81C 'existing':300C 'feature':247C 'feeling':153C 'feels':225C 'felt':131C,190C 'find':317C 'finding':195C,243C 'findings':39C 'for':222C,258C,282C 'frequent':164C 'frequently':194C 'from':31C,43C,289C 'gains':288C 'generated':101C 'generative':12B 'generative-ai':11B 'genuine':286C 'get':208C 'going':308C 'good':319C 'growing':171C 'haas':33C 'hacker':323C 'had':133C,231C 'handle':119C 'harder':281C 'having':148C 'hbr':42C,255C 'hbr.org':322C 'help':138C,272C 'hour':216C 'how':267C 'i':63C,192C,206C,229C,292C 'in':40C,67C,87C,108C,121C,127C 'initial':38C 'intensifies':7A 'intensity':291C 'introduced':83C 'intuition':301C 'irresistible':253C 'is':80C,269C 'it':6A,8A,280C,306C 'juggling':185C 'just':214C,249C,296C 'llms':14B,72C 'load':179C 'long':113C 'long-deferred':112C 'losing':238C 'm':193C 'maggie':29C 'make':279C 'managed':90C 'manually':96C 'mental':220C 'momentum':155C 'more':251C 'move':140C 'much':210C 'multiple':106C 'my':68C,219C 'myself':196C 'new':85C,320C 'news':324C 'number':172C 'observing':66C 'of':35C,50C,147C,154C,162C,166C,173C,183C,299C 'on':199C 'once':95C 'one':250C 'open':174C 'or':110C,201C,217C 'organizations':259C,283C 'outputs':168C 'own':69C 'parallel':109C,205C 'part':128C 'partner':135C,150C 'people':234C 'piece':256C 'practice':264C 'practices':305C 'productive':191C 'productivity':74C,287C 'programming':18B 'projects':203C 'prompt':252C 'provide':79C 'ranganathan':26C 're':242C 'reality':157C 'recently':235C 'reduce':4A 'report':37C 'reviving':111C 'rhythm':86C 'running':105C,204C 's':307C 'school':34C 'sense':146C,182C 'several':91C 'sleep':239C 'so':209C 'some':314C 'structures':266C 'study':49C 'sustainable':303C 'switching':161C 't':3A 'take':310C 'tasks':115C,175C 'technology':57C 'that':136C,265C,278C 'the':41C,73C,122C,156C,188C,223C,254C 'their':44C,142C 'them':120C,139C 'these':76C 'they':124C,130C,132C,241C 'things':77C 'think':293C 'this':59C,126C,145C,176C 'threads':93C 'three':202C 'through':141C 'to':46C,260C,271C,284C,309C,316C 'two':200C,218C 'u.s':55C 'unsustainable':290C 'used':270C 've':64C,230C,295C 'version':104C 'was':158C 'we':294C 'which':88C 'while':99C,144C,312C 'who':236C 'with':71C,197C,233C,248C 'work':5A,70C,189C,198C 'workers':89C 'working':304C 'workload':143C 'writing':97C 'xingqi':28C 'ye':30C 'yet':245C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-02-08 02:25:53+00:00
{
  "id": 2018,
  "slug": "thomas-ptacek",
  "quotation": "People on the orange site are laughing at this, assuming it's just an ad and that there's nothing to it. Vulnerability researchers I talk to do not think this is a joke. As an erstwhile vuln researcher myself: do not bet against LLMs on this.\r\n\r\n[Axios: Anthropic's Claude Opus 4.6 uncovers 500 zero-day flaws in open-source](https://www.axios.com/2026/02/05/anthropic-claude-opus-46-software-hunting)\r\n\r\nI think vulnerability research might be THE MOST LLM-amenable software engineering problem. Pattern-driven. Huge corpus of operational public patterns. Closed loops. Forward progress from stimulus/response tooling. Search problems.\r\n\r\nVulnerability research outcomes are in THE MODEL CARDS for frontier labs. Those companies have so much money they're literally distorting the economy. Money buys vuln research outcomes. Why would you think they were faking any of this?",
  "source": "Thomas Ptacek",
  "source_url": "https://twitter.com/tqbf/status/2019493645888462993",
  "created": "2026-02-08T02:25:53+00:00",
  "metadata": {},
  "search_document": "'/2026/02/05/anthropic-claude-opus-46-software-hunting)':66A '4.6':53A '500':55A 'a':33A 'ad':15A 'against':44A 'ai':144B,147B 'amenable':77A 'an':14A,36A 'and':16A 'anthropic':49A,149B 'any':134A 'are':6A,102A 'as':35A 'assuming':10A 'at':8A 'axios':48A 'be':72A 'bet':43A 'buys':123A 'cards':106A 'claude':51A,150B 'closed':90A 'companies':111A 'corpus':85A 'day':58A 'distorting':119A 'do':28A,41A 'driven':83A 'economy':121A 'engineering':79A 'erstwhile':37A 'faking':133A 'flaws':59A 'for':107A 'forward':92A 'from':94A 'frontier':108A 'generative':146B 'generative-ai':145B 'have':112A 'huge':84A 'i':25A,67A 'in':60A,103A 'is':32A 'it':11A,22A 'joke':34A 'just':13A 'labs':109A 'laughing':7A 'literally':118A 'llm':76A 'llm-amenable':75A 'llms':45A,148B 'loops':91A 'might':71A 'model':105A 'money':115A,122A 'most':74A 'much':114A 'myself':40A 'not':29A,42A 'nothing':20A 'of':86A,135A 'on':2A,46A 'open':62A,138B 'open-source':61A,137B 'operational':87A 'opus':52A 'orange':4A 'outcomes':101A,126A 'pattern':82A 'pattern-driven':81A 'patterns':89A 'people':1A 'problem':80A 'problems':98A 'progress':93A 'ptacek':143B,152C 'public':88A 're':117A 'research':70A,100A,125A 'researcher':39A 'researchers':24A 's':12A,19A,50A 'search':97A 'security':140B 'site':5A 'so':113A 'software':78A 'source':63A,139B 'stimulus/response':95A 'talk':26A 'that':17A 'the':3A,73A,104A,120A 'there':18A 'they':116A,131A 'think':30A,68A,130A 'this':9A,31A,47A,136A 'thomas':142B,151C 'thomas-ptacek':141B 'those':110A 'to':21A,27A 'tooling':96A 'uncovers':54A 'vuln':38A,124A 'vulnerability':23A,69A,99A 'were':132A 'why':127A 'would':128A 'www.axios.com':65A 'www.axios.com/2026/02/05/anthropic-claude-opus-46-software-hunting)':64A 'you':129A 'zero':57A 'zero-day':56A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": null
}
blogmark 2026-02-07 23:57:57+00:00
{
  "id": 9277,
  "slug": "vouch",
  "link_url": "https://github.com/mitchellh/vouch",
  "link_title": "Vouch",
  "via_url": null,
  "via_title": null,
  "commentary": "Mitchell Hashimoto's new system to help address the deluge of worthless AI-generated PRs faced by open source projects now that the friction involved in contributing has dropped so low.\r\n\r\n[He says](https://twitter.com/mitchellh/status/2020252149117313349):\r\n\r\n> The idea is simple: Unvouched users can't contribute to your projects. Very bad users can be explicitly \"denounced\", effectively blocked. Users are vouched or denounced by contributors via GitHub issue or discussion comments or via the CLI.\r\n> \r\n> Integration into GitHub is as simple as adopting the published GitHub actions. Done. Additionally, the system itself is generic to forges and not tied to GitHub in any way.\r\n> \r\n> Who and how someone is vouched or denounced is up to the project. I'm not the value police for the world. Decide for yourself what works for your project and your community.",
  "created": "2026-02-07T23:57:57+00:00",
  "metadata": {},
  "search_document": "'/mitchellh/status/2020252149117313349):':57C 'actions':8B,107C 'additionally':109C 'address':28C 'adopting':103C 'ai':5B,11B,16B,19B,34C 'ai-ethics':15B 'ai-generated':33C 'ai-misuse':18B 'and':117C,126C,155C 'any':123C 'are':80C 'as':100C,102C 'bad':71C 'be':74C 'blocked':78C 'by':38C,84C 'can':64C,73C 'cli':95C 'comments':91C 'community':157C 'contribute':66C 'contributing':48C 'contributors':85C 'decide':147C 'deluge':30C 'denounced':76C,83C,132C 'discussion':90C 'done':108C 'dropped':50C 'effectively':77C 'ethics':17B 'explicitly':75C 'faced':37C 'for':144C,148C,152C 'forges':116C 'friction':45C 'generated':35C 'generative':10B 'generative-ai':9B 'generic':114C 'github':7B,87C,98C,106C,121C 'github-actions':6B 'github.com':158C 'has':49C 'hashimoto':14B,22C 'he':53C 'help':27C 'how':127C 'i':138C 'idea':59C 'in':47C,122C 'integration':96C 'into':97C 'involved':46C 'is':60C,99C,113C,129C,133C 'issue':88C 'itself':112C 'low':52C 'm':139C 'misuse':20B 'mitchell':13B,21C 'mitchell-hashimoto':12B 'new':24C 'not':118C,140C 'now':42C 'of':31C 'open':3B,39C 'open-source':2B 'or':82C,89C,92C,131C 'police':143C 'project':137C,154C 'projects':41C,69C 'prs':36C 'published':105C 's':23C 'says':54C 'simple':61C,101C 'so':51C 'someone':128C 'source':4B,40C 'system':25C,111C 't':65C 'that':43C 'the':29C,44C,58C,94C,104C,110C,136C,141C,145C 'tied':119C 'to':26C,67C,115C,120C,135C 'twitter.com':56C 'twitter.com/mitchellh/status/2020252149117313349):':55C 'unvouched':62C 'up':134C 'users':63C,72C,79C 'value':142C 'very':70C 'via':86C,93C 'vouch':1A 'vouched':81C,130C 'way':124C 'what':150C 'who':125C 'works':151C 'world':146C 'worthless':32C 'your':68C,153C,156C 'yourself':149C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-07 23:10:33+00:00
{
  "id": 9276,
  "slug": "claude-fast-mode",
  "link_url": "https://code.claude.com/docs/en/fast-mode",
  "link_title": "Claude: Speed up responses with fast mode",
  "via_url": null,
  "via_title": null,
  "commentary": "New \"research preview\" from Anthropic today: you can now access a faster version of their frontier model Claude Opus 4.6 by typing `/fast` in Claude Code... but at a cost that's 6x the normal price.\r\n\r\nOpus is usually $5/million input and $25/million output. The new fast mode is $30/million input and $150/million output!\r\n\r\nThere's a 50% discount until the end of February 16th, so only a 3x multiple (!) before then.\r\n\r\nHow much faster is it? The linked documentation doesn't say, but [on Twitter](https://x.com/claudeai/status/2020207322124132504) Claude say:\r\n\r\n> Our teams have been building with a 2.5x-faster version of Claude Opus 4.6.\r\n>\r\n> We\u2019re now making it available as an early experiment via Claude Code and our API.\r\n\r\nClaude Opus 4.5 had a context limit of 200,000 tokens. 4.6 has an option to increase that to 1,000,000 at 2x the input price ($10/m) and 1.5x the output price ($37.50/m) once your input exceeds 200,000 tokens. These multiples hold for fast mode too, so after Feb 16th you'll be able to pay a hefty $60/m input and $225/m output for Anthropic's fastest best model.",
  "created": "2026-02-07T23:10:33+00:00",
  "metadata": {},
  "search_document": "'/claudeai/status/2020207322124132504)':109C '/fast':43C '/m':179C '000':153C,164C,165C,185C '1':163C '1.5':173C '10/m':171C '150/million':73C '16th':85C,197C '2.5':119C '200':152C,184C '225/m':209C '25/million':63C '2x':167C '30/million':70C '37.50':178C '3x':89C '4.5':146C '4.6':40C,127C,155C '5/million':60C '50':78C '60/m':206C '6x':53C 'a':31C,49C,77C,88C,118C,148C,204C 'able':201C 'access':30C 'after':195C 'ai':8B,11B 'an':135C,157C 'and':62C,72C,141C,172C,208C 'anthropic':13B,25C,212C 'api':143C 'as':134C 'at':48C,166C 'available':133C 'be':200C 'been':115C 'before':91C 'best':215C 'building':116C 'but':47C,104C 'by':41C 'can':28C 'claude':1A,14B,19B,38C,45C,110C,125C,139C,144C 'claude-code':18B 'code':20B,46C,140C 'code.claude.com':217C 'context':149C 'cost':50C 'discount':79C 'documentation':100C 'doesn':101C 'early':136C 'end':82C 'exceeds':183C 'experiment':137C 'fast':6A,67C,191C 'faster':32C,95C,122C 'fastest':214C 'feb':196C 'february':84C 'for':190C,211C 'from':24C 'frontier':36C 'generative':10B 'generative-ai':9B 'had':147C 'has':156C 'have':114C 'hefty':205C 'hold':189C 'how':93C 'in':44C 'increase':160C 'input':61C,71C,169C,182C,207C 'is':58C,69C,96C 'it':97C,132C 'limit':150C 'linked':99C 'll':199C 'llm':16B 'llm-pricing':15B 'llms':12B 'making':131C 'mode':7A,68C,192C 'model':37C,216C 'much':94C 'multiple':90C 'multiples':188C 'new':21C,66C 'normal':55C 'now':29C,130C 'of':34C,83C,124C,151C 'on':105C 'once':180C 'only':87C 'option':158C 'opus':39C,57C,126C,145C 'our':112C,142C 'output':64C,74C,176C,210C 'pay':203C 'preview':23C 'price':56C,170C,177C 'pricing':17B 're':129C 'research':22C 'responses':4A 's':52C,76C,213C 'say':103C,111C 'so':86C,194C 'speed':2A 't':102C 'teams':113C 'that':51C,161C 'the':54C,65C,81C,98C,168C,175C 'their':35C 'then':92C 'there':75C 'these':187C 'to':159C,162C,202C 'today':26C 'tokens':154C,186C 'too':193C 'twitter':106C 'typing':42C 'until':80C 'up':3A 'usually':59C 'version':33C,123C 'via':138C 'we':128C 'with':5A,117C 'x':121C,174C 'x-faster':120C 'x.com':108C 'x.com/claudeai/status/2020207322124132504)':107C 'you':27C,198C 'your':181C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-02-07 21:31:44+00:00
{
  "id": 2017,
  "slug": "david-crawshaw",
  "quotation": "I am having more fun programming than I ever have, because so many more of the programs I wish I could find the time to write actually exist. I wish I could share this joy with the people who are fearful about the changes agents are bringing. The fear itself I understand, I have fear more broadly about what the end-game is for intelligence on tap in our society. But in the limited domain of writing computer programs these tools have brought so much exploration and joy to my work.",
  "source": "David Crawshaw",
  "source_url": "https://crawshaw.io/blog/eight-more-months-of-agents",
  "created": "2026-02-07T21:31:44+00:00",
  "metadata": {},
  "search_document": "'about':42A,58A 'actually':27A 'agents':45A,104B 'ai':93B,96B,99B 'ai-assisted-programming':98B 'am':2A 'and':88A 'are':40A,46A 'assisted':100B 'because':11A 'bringing':47A 'broadly':57A 'brought':84A 'but':72A 'changes':44A 'coding':103B 'coding-agents':102B 'computer':79A 'could':21A,32A 'crawshaw':106C 'david':105C 'domain':76A 'end':62A 'end-game':61A 'ever':9A 'exist':28A 'exploration':87A 'fear':49A,55A 'fearful':41A 'find':22A 'for':65A 'fun':5A 'game':63A 'generative':95B 'generative-ai':94B 'have':10A,54A,83A 'having':3A 'i':1A,8A,18A,20A,29A,31A,51A,53A 'in':69A,73A 'intelligence':66A 'is':64A 'itself':50A 'joy':35A,89A 'limited':75A 'llms':97B 'many':13A 'more':4A,14A,56A 'much':86A 'my':91A 'of':15A,77A 'on':67A 'our':70A 'people':38A 'programming':6A,101B 'programs':17A,80A 'share':33A 'so':12A,85A 'society':71A 'tap':68A 'than':7A 'the':16A,23A,37A,43A,48A,60A,74A 'these':81A 'this':34A 'time':24A 'to':25A,90A 'tools':82A 'understand':52A 'what':59A 'who':39A 'wish':19A,30A 'with':36A 'work':92A 'write':26A 'writing':78A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "Eight more months of agents"
}
quotation 2026-02-06 23:41:31+00:00
{
  "id": 2016,
  "slug": "tom-dale",
  "quotation": "I don't know why this week became the tipping point, but nearly every software engineer I've talked to is experiencing some degree of mental health crisis.\r\n\r\n[...] Many people assuming I meant job loss anxiety but that's just one presentation. I'm seeing near-manic episodes triggered by watching software shift from scarce to abundant. Compulsive behaviors around agent usage. Dissociative awe at the temporal compression of change. It's not fear necessarily just the cognitive overload from living in an inflection point.",
  "source": "Tom Dale",
  "source_url": "https://twitter.com/tomdale/status/2019828626972131441",
  "created": "2026-02-06T23:41:31+00:00",
  "metadata": {},
  "search_document": "'abundant':58A 'agent':62A 'agents':98B 'ai':88B,91B,94B 'ai-ethics':93B 'an':84A 'anxiety':36A 'around':61A 'assuming':31A 'at':66A 'awe':65A 'became':8A 'behaviors':60A 'but':12A,37A 'by':51A 'careers':87B 'change':71A 'coding':97B 'coding-agents':96B 'cognitive':79A,100B 'cognitive-debt':99B 'compression':69A 'compulsive':59A 'crisis':28A 'dale':103C 'debt':101B 'degree':24A 'dissociative':64A 'don':2A 'engineer':16A 'episodes':49A 'ethics':95B 'every':14A 'experiencing':22A 'fear':75A 'from':55A,81A 'generative':90B 'generative-ai':89B 'health':27A 'i':1A,17A,32A,43A 'in':83A 'inflection':85A 'is':21A 'it':72A 'job':34A 'just':40A,77A 'know':4A 'living':82A 'llms':92B 'loss':35A 'm':44A 'manic':48A 'many':29A 'meant':33A 'mental':26A 'near':47A 'near-manic':46A 'nearly':13A 'necessarily':76A 'not':74A 'of':25A,70A 'one':41A 'overload':80A 'people':30A 'point':11A,86A 'presentation':42A 's':39A,73A 'scarce':56A 'seeing':45A 'shift':54A 'software':15A,53A 'some':23A 't':3A 'talked':19A 'temporal':68A 'that':38A 'the':9A,67A,78A 'this':6A 'tipping':10A 'to':20A,57A 'tom':102C 'triggered':50A 'usage':63A 've':18A 'watching':52A 'week':7A 'why':5A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": null
}
blogmark 2026-02-06 18:44:21+00:00
{
  "id": 9274,
  "slug": "an-update-on-heroku",
  "link_url": "https://www.heroku.com/blog/an-update-on-heroku/",
  "link_title": "An Update on Heroku",
  "via_url": null,
  "via_title": null,
  "commentary": "An ominous headline to see on the official Heroku blog and yes, it's bad news.\r\n\r\n> Today, Heroku is transitioning to a sustaining engineering model focused on stability, security, reliability, and support. Heroku remains an actively supported, production-ready platform, with an emphasis on maintaining quality and operational excellence rather than introducing new features. We know changes like this can raise questions, and we want to be clear about what this means for customers.\r\n\r\nBased on context I'm guessing a \"sustaining engineering model\" (this definitely isn't a widely used industry term) means that they'll keep the lights on and that's it.\r\n\r\nThis is a very frustrating piece of corporate communication. \"We want to be clear about what this means for customers\" - then proceeds to *not be clear* about what this means for customers.\r\n\r\nWhy are they doing this? Here's their explanation:\r\n\r\n> We\u2019re focusing our product and engineering investments on areas where we can deliver the greatest long-term customer value, including helping organizations build and deploy enterprise-grade AI in a secure and trusted way.\r\n\r\nMy blog is the only project I have left running on Heroku. I guess I'd better migrate it away (probably to Fly) before Salesforce lose interest completely.",
  "created": "2026-02-06T18:44:21+00:00",
  "metadata": {},
  "search_document": "'a':29C,89C,97C,116C,187C 'about':77C,128C,140C 'actively':43C 'ai':185C 'an':1A,8C,42C,50C 'and':18C,38C,55C,71C,110C,160C,180C,189C 'are':147C 'areas':164C 'away':211C 'bad':22C 'based':83C 'be':75C,126C,138C 'before':215C 'better':208C 'blog':17C,193C 'build':179C 'can':68C,167C 'changes':65C 'clear':76C,127C,139C 'communication':122C 'completely':219C 'context':85C 'corporate':121C 'customer':174C 'customers':82C,133C,145C 'd':207C 'definitely':94C 'deliver':168C 'deploy':181C 'doing':149C 'emphasis':51C 'engineering':31C,91C,161C 'enterprise':183C 'enterprise-grade':182C 'excellence':57C 'explanation':154C 'features':62C 'fly':7B,214C 'focused':33C 'focusing':157C 'for':81C,132C,144C 'frustrating':118C 'grade':184C 'greatest':170C 'guess':205C 'guessing':88C 'have':199C 'headline':10C 'helping':177C 'here':151C 'heroku':4A,6B,16C,25C,40C,203C 'i':86C,198C,204C,206C 'in':186C 'including':176C 'industry':100C 'interest':218C 'introducing':60C 'investments':162C 'is':26C,115C,194C 'isn':95C 'it':20C,113C,210C 'keep':106C 'know':64C 'left':200C 'lights':108C 'like':66C 'll':105C 'long':172C 'long-term':171C 'lose':217C 'm':87C 'maintaining':53C 'means':80C,102C,131C,143C 'migrate':209C 'model':32C,92C 'my':192C 'new':61C 'news':23C 'not':137C 'of':120C 'official':15C 'ominous':9C 'on':3A,13C,34C,52C,84C,109C,163C,202C 'only':196C 'operational':56C 'organizations':178C 'our':158C 'piece':119C 'platform':48C 'probably':212C 'proceeds':135C 'product':159C 'production':46C 'production-ready':45C 'project':197C 'quality':54C 'questions':70C 'raise':69C 'rather':58C 're':156C 'ready':47C 'reliability':37C 'remains':41C 'running':201C 's':21C,112C,152C 'salesforce':5B,216C 'secure':188C 'security':36C 'see':12C 'stability':35C 'support':39C 'supported':44C 'sustaining':30C,90C 't':96C 'term':101C,173C 'than':59C 'that':103C,111C 'the':14C,107C,169C,195C 'their':153C 'then':134C 'they':104C,148C 'this':67C,79C,93C,114C,130C,142C,150C 'to':11C,28C,74C,125C,136C,213C 'today':24C 'transitioning':27C 'trusted':190C 'update':2A 'used':99C 'value':175C 'very':117C 'want':73C,124C 'way':191C 'we':63C,72C,123C,155C,166C 'what':78C,129C,141C 'where':165C 'why':146C 'widely':98C 'with':49C 'www.heroku.com':220C 'yes':19C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-02-06 00:42:22+00:00
{
  "id": 2015,
  "slug": "karel-doosterlinck",
  "quotation": "When I want to quickly implement a one-off experiment in a part of the codebase I am unfamiliar with, I get codex to do extensive due diligence. Codex explores relevant slack channels, reads related discussions, fetches experimental branches from those discussions, and cherry picks useful changes for my experiment. All of this gets summarized in an extensive set of notes, with links back to where each piece of information was found. Using these notes, codex wires the experiment and makes a bunch of hyperparameter decisions I couldn\u2019t  possibly make without much more effort.",
  "source": "Karel D'Oosterlinck",
  "source_url": "https://twitter.com/kareldoostrlnck/status/2019477361557926281",
  "created": "2026-02-06T00:42:22+00:00",
  "metadata": {},
  "search_document": "'a':7A,13A,83A 'agents':109B 'ai':97B,101B,104B 'ai-assisted-programming':103B 'all':52A 'am':19A 'an':58A 'and':44A,81A 'assisted':105B 'back':65A 'branches':40A 'bunch':84A 'changes':48A 'channels':34A 'cherry':45A 'cli':112B 'codebase':17A 'codex':24A,30A,77A,111B 'codex-cli':110B 'coding':108B 'coding-agents':107B 'couldn':89A 'd':114C 'decisions':87A 'diligence':29A 'discussions':37A,43A 'do':26A 'due':28A 'each':68A 'effort':96A 'experiment':11A,51A,80A 'experimental':39A 'explores':31A 'extensive':27A,59A 'fetches':38A 'for':49A 'found':73A 'from':41A 'generative':100B 'generative-ai':99B 'get':23A 'gets':55A 'hyperparameter':86A 'i':2A,18A,22A,88A 'implement':6A 'in':12A,57A 'information':71A 'karel':113C 'links':64A 'llms':102B 'make':92A 'makes':82A 'more':95A 'much':94A 'my':50A 'notes':62A,76A 'of':15A,53A,61A,70A,85A 'off':10A 'one':9A 'one-off':8A 'oosterlinck':115C 'openai':98B 'part':14A 'picks':46A 'piece':69A 'possibly':91A 'programming':106B 'quickly':5A 'reads':35A 'related':36A 'relevant':32A 'set':60A 'slack':33A 'summarized':56A 't':90A 'the':16A,79A 'these':75A 'this':54A 'those':42A 'to':4A,25A,66A 'unfamiliar':20A 'useful':47A 'using':74A 'want':3A 'was':72A 'when':1A 'where':67A 'wires':78A 'with':21A,63A 'without':93A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "I spent $10,000 to automate my research at OpenAI with Codex"
}
blogmark 2026-02-05 23:39:07+00:00
{
  "id": 9273,
  "slug": "ai-adoption-journey",
  "link_url": "https://mitchellh.com/writing/my-ai-adoption-journey",
  "link_title": "Mitchell Hashimoto: My AI Adoption Journey",
  "via_url": "https://news.ycombinator.com/item?id=46903558",
  "via_title": "Hacker News",
  "commentary": "Some really good and unconventional tips in here for getting to a place with coding agents where they demonstrably improve your workflow and productivity. I particularly liked:\r\n\r\n- [Reproduce your own work](https://mitchellh.com/writing/my-ai-adoption-journey#step-2-reproduce-your-own-work) - when learning to use coding agents Mitchell went through a period of doing the work manually, then recreating the same solution using agents as an exercise:\r\n\r\n    > I literally did the work twice. I'd do the work manually, and then I'd fight an agent to produce identical results in terms of quality and function (without it being able to see my manual solution, of course).\r\n\r\n- [End-of-day agents](https://mitchellh.com/writing/my-ai-adoption-journey#step-3-end-of-day-agents) - letting agents step in when your energy runs out:\r\n\r\n    > To try to find some efficiency, I next started up a new pattern: **block out the last 30 minutes of every day to kick off one or more agents.** My hypothesis was that *perhaps* I could gain some efficiency if the agent can make some *positive progress* in the times I can't work anyways.\r\n\r\n- [Outsource the Slam Dunks](https://mitchellh.com/writing/my-ai-adoption-journey#step-4-outsource-the-slam-dunks) - once you know an agent can likely handle a task, have it do that task while you work on something more interesting yourself.",
  "created": "2026-02-05T23:39:07+00:00",
  "metadata": {},
  "search_document": "'/writing/my-ai-adoption-journey#step-2-reproduce-your-own-work)':55C '/writing/my-ai-adoption-journey#step-3-end-of-day-agents)':129C '/writing/my-ai-adoption-journey#step-4-outsource-the-slam-dunks)':200C '30':156C 'a':33C,65C,149C,209C 'able':114C 'adoption':5A 'agent':100C,180C,205C 'agents':21B,37C,61C,78C,126C,131C,167C 'ai':4A,7B,10B,13B 'ai-assisted-programming':12B 'an':80C,99C,204C 'and':25C,44C,94C,109C 'anyways':193C 'as':79C 'assisted':14B 'being':113C 'block':152C 'can':181C,190C,206C 'coding':20B,36C,60C 'coding-agents':19B 'could':174C 'course':121C 'd':89C,97C 'day':125C,160C 'demonstrably':40C 'did':84C 'do':90C,213C 'doing':68C 'dunks':197C 'efficiency':144C,177C 'end':123C 'end-of-day':122C 'energy':136C 'every':159C 'exercise':81C 'fight':98C 'find':142C 'for':30C 'function':110C 'gain':175C 'generative':9B 'generative-ai':8B 'getting':31C 'good':24C 'hacker':225C 'handle':208C 'hashimoto':2A,18B 'have':211C 'here':29C 'hypothesis':169C 'i':46C,82C,88C,96C,145C,173C,189C 'identical':103C 'if':178C 'improve':41C 'in':28C,105C,133C,186C 'interesting':222C 'it':112C,212C 'journey':6A 'kick':162C 'know':203C 'last':155C 'learning':57C 'letting':130C 'liked':48C 'likely':207C 'literally':83C 'llms':11B 'make':182C 'manual':118C 'manually':71C,93C 'minutes':157C 'mitchell':1A,17B,62C 'mitchell-hashimoto':16B 'mitchellh.com':54C,128C,199C,224C 'mitchellh.com/writing/my-ai-adoption-journey#step-2-reproduce-your-own-work)':53C 'mitchellh.com/writing/my-ai-adoption-journey#step-3-end-of-day-agents)':127C 'mitchellh.com/writing/my-ai-adoption-journey#step-4-outsource-the-slam-dunks)':198C 'more':166C,221C 'my':3A,117C,168C 'new':150C 'news':226C 'next':146C 'of':67C,107C,120C,124C,158C 'off':163C 'on':219C 'once':201C 'one':164C 'or':165C 'out':138C,153C 'outsource':194C 'own':51C 'particularly':47C 'pattern':151C 'perhaps':172C 'period':66C 'place':34C 'positive':184C 'produce':102C 'productivity':45C 'programming':15B 'progress':185C 'quality':108C 'really':23C 'recreating':73C 'reproduce':49C 'results':104C 'runs':137C 'same':75C 'see':116C 'slam':196C 'solution':76C,119C 'some':22C,143C,176C,183C 'something':220C 'started':147C 'step':132C 't':191C 'task':210C,215C 'terms':106C 'that':171C,214C 'the':69C,74C,85C,91C,154C,179C,187C,195C 'then':72C,95C 'they':39C 'through':64C 'times':188C 'tips':27C 'to':32C,58C,101C,115C,139C,141C,161C 'try':140C 'twice':87C 'unconventional':26C 'up':148C 'use':59C 'using':77C 'was':170C 'went':63C 'when':56C,134C 'where':38C 'while':216C 'with':35C 'without':111C 'work':52C,70C,86C,92C,192C,218C 'workflow':43C 'you':202C,217C 'your':42C,50C,135C 'yourself':223C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-05 00:23:38+00:00
{
  "id": 9272,
  "slug": "the-world-factbook",
  "link_url": "https://www.cia.gov/stories/story/spotlighting-the-world-factbook-as-we-bid-a-fond-farewell/",
  "link_title": "Spotlighting The World Factbook as We Bid a Fond Farewell",
  "via_url": "https://news.ycombinator.com/item?id=46891794",
  "via_title": "Hacker News",
  "commentary": "Somewhat devastating news today from CIA:\r\n\r\n> One of CIA\u2019s oldest and most recognizable intelligence publications, The World Factbook, has sunset.\r\n\r\nThere's not even a hint as to *why* they decided to stop maintaining this publication, which has been their most useful public-facing initiative since 1971 and a cornerstone of the public internet since 1997.\r\n\r\nIn a bizarre act of cultural vandalism they've not just removed the entire site (including the archives of previous versions) but they've also set every single page to be a 302 redirect to their closure announcement.\r\n\r\nThe Factbook has been released into the public domain since the start. There's no reason not to continue to serve archived versions - a banner at the top of the page saying it's no longer maintained would be much better than removing all of that valuable content entirely.\r\n\r\nUp until 2020 the CIA published annual zip file archives of the entire site. Those are available (along with the rest of the Factbook) [on the Internet Archive](https://web.archive.org/web/20260203124934/https://www.cia.gov/the-world-factbook/about/archives/).\r\n\r\nI downloaded the 384MB `.zip` file for the year 2020 and extracted it into a new GitHub repository, [simonw/cia-world-factbook-2020](https://github.com/simonw/cia-world-factbook-2020/). I've enabled GitHub Pages for that repository so you can browse the archived copy at [simonw.github.io/cia-world-factbook-2020/](https://simonw.github.io/cia-world-factbook-2020).\r\n\r\n![Screenshot of the CIA World Factbook website homepage. Header reads \"THE WORLD FACTBOOK\" with a dropdown labeled \"Please select a country to view.\" Navigation tabs: ABOUT, REFERENCES, APPENDICES, FAQs. Section heading \"WELCOME TO THE WORLD FACTBOOK\" followed by descriptive text: \"The World Factbook provides information on the history, people and society, government, economy, energy, geography, communications, transportation, military, and transnational issues for 267 world entities. The Reference tab includes: a variety of world, regional, country, ocean, and time zone maps; Flags of the World; and a Country Comparison function that ranks the country information and data in more than 75 Factbook fields.\" A satellite image of Earth is displayed on the right. Below it: \"WHAT'S NEW :: Today is: Wednesday, February 4.\" Left sidebar links with icons: WORLD TRAVEL FACTS, ONE-PAGE COUNTRY SUMMARIES, REGIONAL AND WORLD MAPS, FLAGS OF THE WORLD, GUIDE TO COUNTRY COMPARISONS. Right side shows news updates dated December 17, 2020 about Electricity access and new Economy fields, and December 10, 2020 about Nepal and China agreeing on the height of Mount Everest at 8,848.86 meters. A \"VIEW ALL UPDATES\" button appears at the bottom.](https://static.simonwillison.net/static/2025/factbook-2020.jpg)\r\n\r\nHere's a neat example of the editorial voice of the Factbook from the [What's New page](https://simonw.github.io/cia-world-factbook-2020/docs/whatsnew.html), dated December 10th 2020:\r\n\r\n> Years of wrangling were brought to a close this week when officials from Nepal and China announced that they have agreed on the height of Mount Everest. The mountain sits on the border between Nepal and Tibet (in western China), and its height changed slightly following an earthquake in 2015. The new height of 8,848.86 meters is just under a meter higher than the old figure of 8,848 meters. *The World Factbook* rounds the new measurement to 8,849 meters and this new height has been entered throughout the *Factbook* database.",
  "created": "2026-02-05T00:23:38+00:00",
  "metadata": {},
  "search_document": "'/cia-world-factbook-2020/](https://simonw.github.io/cia-world-factbook-2020).':232C '/cia-world-factbook-2020/docs/whatsnew.html),':447C '/simonw/cia-world-factbook-2020/).':213C '/static/2025/factbook-2020.jpg)':426C '/web/20260203124934/https://www.cia.gov/the-world-factbook/about/archives/).':191C '10':398C '10th':450C '17':387C '1971':64C '1997':73C '2015':501C '2020':163C,201C,388C,399C,451C '267':295C '302':106C '384mb':195C '4':354C '75':332C '8':412C,506C,520C,531C '848':521C '848.86':413C,507C '849':532C 'a':8A,41C,66C,75C,105C,135C,206C,247C,252C,302C,318C,335C,415C,429C,458C,512C 'about':258C,389C,400C 'access':391C 'act':77C 'agreed':472C 'agreeing':404C 'all':155C,417C 'along':178C 'also':98C 'an':498C 'and':27C,65C,202C,282C,291C,309C,317C,327C,369C,392C,396C,402C,466C,487C,492C,534C 'announced':468C 'announcement':111C 'annual':167C 'appears':420C 'appendices':260C 'archive':15B,188C 'archived':133C,227C 'archives':91C,170C 'are':176C 'as':5A,43C 'at':137C,229C,411C,421C 'available':177C 'banner':136C 'be':104C,150C 'been':55C,115C,539C 'below':345C 'better':152C 'between':485C 'bid':7A 'bizarre':76C 'border':484C 'bottom':423C 'brought':456C 'browse':225C 'but':95C 'button':419C 'by':270C 'can':224C 'changed':495C 'china':403C,467C,491C 'cia':11B,21C,24C,165C,236C 'close':459C 'closure':110C 'communications':288C 'comparison':320C 'comparisons':379C 'content':159C 'continue':130C 'copy':228C 'cornerstone':67C 'country':253C,307C,319C,325C,366C,378C 'cultural':79C 'data':328C 'database':544C 'dated':385C,448C 'december':386C,397C,449C 'decided':47C 'descriptive':271C 'devastating':17C 'displayed':341C 'domain':120C 'downloaded':193C 'dropdown':248C 'earth':339C 'earthquake':499C 'economy':285C,394C 'editorial':434C 'electricity':390C 'enabled':216C 'energy':286C 'entered':540C 'entire':87C,173C 'entirely':160C 'entities':297C 'even':40C 'everest':410C,478C 'every':100C 'example':431C 'extracted':203C 'facing':61C 'factbook':4A,34C,113C,184C,238C,245C,268C,275C,333C,438C,525C,543C 'facts':362C 'faqs':261C 'farewell':10A 'february':353C 'fields':334C,395C 'figure':518C 'file':169C,197C 'flags':313C,372C 'followed':269C 'following':497C 'fond':9A 'for':198C,219C,294C 'from':20C,439C,464C 'function':321C 'geography':287C 'github':12B,208C,217C 'github.com':212C 'github.com/simonw/cia-world-factbook-2020/).':211C 'government':284C 'guide':376C 'hacker':546C 'has':35C,54C,114C,538C 'have':471C 'header':241C 'heading':263C 'height':407C,475C,494C,504C,537C 'here':427C 'higher':514C 'hint':42C 'history':280C 'homepage':240C 'i':192C,214C 'icons':359C 'image':337C 'in':74C,329C,489C,500C 'includes':301C 'including':89C 'information':277C,326C 'initiative':62C 'intelligence':30C 'internet':14B,71C,187C 'internet-archive':13B 'into':117C,205C 'is':340C,351C,509C 'issues':293C 'it':144C,204C,346C 'its':493C 'just':84C,510C 'labeled':249C 'left':355C 'links':357C 'longer':147C 'maintained':148C 'maintaining':50C 'maps':312C,371C 'measurement':529C 'meter':513C 'meters':414C,508C,522C,533C 'military':290C 'more':330C 'most':28C,57C 'mount':409C,477C 'mountain':480C 'much':151C 'navigation':256C 'neat':430C 'nepal':401C,465C,486C 'new':207C,349C,393C,443C,503C,528C,536C 'news':18C,383C,547C 'no':126C,146C 'not':39C,83C,128C 'ocean':308C 'of':23C,68C,78C,92C,140C,156C,171C,182C,234C,304C,314C,338C,373C,408C,432C,436C,453C,476C,505C,519C 'officials':463C 'old':517C 'oldest':26C 'on':185C,278C,342C,405C,473C,482C 'one':22C,364C 'one-page':363C 'page':102C,142C,365C,444C 'pages':218C 'people':281C 'please':250C 'previous':93C 'provides':276C 'public':60C,70C,119C 'public-facing':59C 'publication':52C 'publications':31C 'published':166C 'ranks':323C 'reads':242C 'reason':127C 'recognizable':29C 'redirect':107C 'reference':299C 'references':259C 'regional':306C,368C 'released':116C 'removed':85C 'removing':154C 'repository':209C,221C 'rest':181C 'right':344C,380C 'rounds':526C 's':25C,38C,125C,145C,348C,428C,442C 'satellite':336C 'saying':143C 'screenshot':233C 'section':262C 'select':251C 'serve':132C 'set':99C 'shows':382C 'side':381C 'sidebar':356C 'simonw.github.io':231C,446C 'simonw.github.io/cia-world-factbook-2020/](https://simonw.github.io/cia-world-factbook-2020).':230C 'simonw.github.io/cia-world-factbook-2020/docs/whatsnew.html),':445C 'simonw/cia-world-factbook-2020':210C 'since':63C,72C,121C 'single':101C 'site':88C,174C 'sits':481C 'slightly':496C 'so':222C 'society':283C 'somewhat':16C 'spotlighting':1A 'start':123C 'static.simonwillison.net':425C 'static.simonwillison.net/static/2025/factbook-2020.jpg)':424C 'stop':49C 'summaries':367C 'sunset':36C 'tab':300C 'tabs':257C 'text':272C 'than':153C,331C,515C 'that':157C,220C,322C,469C 'the':2A,32C,69C,86C,90C,112C,118C,122C,138C,141C,164C,172C,180C,183C,186C,194C,199C,226C,235C,243C,266C,273C,279C,298C,315C,324C,343C,374C,406C,422C,433C,437C,440C,474C,479C,483C,502C,516C,523C,527C,542C 'their':56C,109C 'there':37C,124C 'they':46C,81C,96C,470C 'this':51C,460C,535C 'those':175C 'throughout':541C 'tibet':488C 'time':310C 'to':44C,48C,103C,108C,129C,131C,254C,265C,377C,457C,530C 'today':19C,350C 'top':139C 'transnational':292C 'transportation':289C 'travel':361C 'under':511C 'until':162C 'up':161C 'updates':384C,418C 'useful':58C 'valuable':158C 'vandalism':80C 'variety':303C 've':82C,97C,215C 'versions':94C,134C 'view':255C,416C 'voice':435C 'we':6A 'web.archive.org':190C 'web.archive.org/web/20260203124934/https://www.cia.gov/the-world-factbook/about/archives/).':189C 'website':239C 'wednesday':352C 'week':461C 'welcome':264C 'were':455C 'western':490C 'what':347C,441C 'when':462C 'which':53C 'why':45C 'with':179C,246C,358C 'world':3A,33C,237C,244C,267C,274C,296C,305C,316C,360C,370C,375C,524C 'would':149C 'wrangling':454C 'www.cia.gov':545C 'year':200C 'years':452C 'you':223C 'zip':168C,196C 'zone':311C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2025/factbook-2020-card.jpg",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-04 22:42:34+00:00
{
  "id": 9271,
  "slug": "voxtral-2",
  "link_url": "https://mistral.ai/news/voxtral-transcribe-2",
  "link_title": "Voxtral transcribes at the speed of sound",
  "via_url": "https://news.ycombinator.com/item?id=46886735",
  "via_title": "Hacker News",
  "commentary": "Mistral just released Voxtral Transcribe 2 - a family of two new models, one open weights, for transcribing audio to text. This is the latest in their Whisper-like model family, and a sequel to the original Voxtral which they released [in July 2025](https://simonwillison.net/2025/Jul/16/voxtral/).\r\n\r\nVoxtral Realtime - official name `Voxtral-Mini-4B-Realtime-2602` - is the open weights (Apache-2.0) model, available as a [8.87GB download from Hugging Face](https://huggingface.co/mistralai/Voxtral-Mini-4B-Realtime-2602).\r\n\r\nYou can try it out in this [live demo](https://huggingface.co/spaces/mistralai/Voxtral-Mini-Realtime) - don't be put off by the \"No microphone found\" message, clicking \"Record\" should have your browser request permission and then start the demo working. I was very impressed by the demo - I talked quickly and used jargon like Django and WebAssembly and it correctly transcribed my text within moments of me uttering each sound. \r\n\r\nThe closed weight model is called `voxtral-mini-latest` and can be accessed via the Mistral API, using calls that look something like this:\r\n\r\n<div class=\"highlight highlight-source-shell\"><pre>curl -X POST <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>https://api.mistral.ai/v1/audio/transcriptions<span class=\"pl-pds\">\"</span></span> \\\r\n  -H <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>Authorization: Bearer <span class=\"pl-smi\">$MISTRAL_API_KEY</span><span class=\"pl-pds\">\"</span></span> \\\r\n  -F model=<span class=\"pl-s\"><span class=\"pl-pds\">\"</span>voxtral-mini-latest<span class=\"pl-pds\">\"</span></span> \\\r\n  -F file=@<span class=\"pl-s\"><span class=\"pl-pds\">\"</span>Pelican talk at the library.m4a<span class=\"pl-pds\">\"</span></span> \\\r\n  -F diarize=true \\\r\n  -F context_bias=<span class=\"pl-s\"><span class=\"pl-pds\">\"</span>Datasette<span class=\"pl-pds\">\"</span></span> \\\r\n  -F timestamp_granularities=<span class=\"pl-s\"><span class=\"pl-pds\">\"</span>segment<span class=\"pl-pds\">\"</span></span></pre></div>\r\n\r\nIt's priced at $0.003/minute, which is $0.18/hour.\r\n\r\nThe Mistral API console now has a [speech-to-text playground](https://console.mistral.ai/build/audio/speech-to-text) for exercising the new model and it is *excellent*. You can upload an audio file and promptly get a diarized transcript in a pleasant interface, with options to download the result in text, SRT or JSON format.\r\n\r\n![Screenshot of a speech-to-text transcription interface for a file named \"Pelican talk at the library.m4a\". The toolbar shows \"Speech to text\" with Code, Transcribe, and Download buttons. The transcript shows timestamped segments from 5:53 to 6:53 with a speaker icon, reading: \"5:53 \u2013 6:01 So pelicans love to, they're very good at getting the most they can out of the topography when they're flying. 6:01 \u2013 6:06 And our winds come in from the northwest and they hit those bluffs and they're deflected up. 6:07 \u2013 6:18 And they will sit right, they'll fly north into a wind like five feet off those bluffs, but just five or ten feet off the surface because the winds dissipate. 6:19 \u2013 6:22 And they will surf that bluff all the way north. 6:23 \u2013 6:30 So you'll see a wind from the north at 15 miles an hour, and the pelicans are flying north into that wind and not flapping their wings. 6:31 \u2013 6:33 And it's one of the coolest things. 6:33 \u2013 6:35 You can only find it on San Francisco Coast. 6:36 \u2013 6:39 Where right where the bluffs are steep. 6:41 \u2013 6:43 Pacifica, you can find them there. 6:43 \u2013 6:51 They like their, what we call pier bums, which are typically pelicans that have, are in some sort of trouble. 6:51 \u2013 6:53 They're unable to catch food.\" The segment at 6:41\u20136:43 is highlighted in yellow. An audio waveform is shown at the bottom with a playhead near 6:40. Stats in the lower right show 53.90s, 7946.00s, and #45833.](https://static.simonwillison.net/static/2025/mistral-transcript-ui.jpg)",
  "created": "2026-02-04T22:42:34+00:00",
  "metadata": {},
  "search_document": "'-2.0':83C '/2025/jul/16/voxtral/).':67C '/build/audio/speech-to-text)':249C '/hour':234C '/minute':230C '/mistralai/voxtral-mini-4b-realtime-2602).':96C '/spaces/mistralai/voxtral-mini-realtime)':108C '/static/2025/mistral-transcript-ui.jpg)':581C '/v1/audio/transcriptions':194C '0.003':229C '0.18':233C '01':336C,360C '06':362C '07':382C '15':444C '18':384C '19':417C '2':26C '2025':64C '22':419C '23':431C '2602':77C '30':433C '31':463C '33':465C,475C '35':477C '36':488C '39':490C '40':566C '41':499C,546C '43':501C,509C,548C '45833':578C '4b':75C '5':323C,333C '51':511C,533C '53':324C,327C,334C,535C '53.90':573C '6':326C,335C,359C,361C,381C,383C,416C,418C,430C,432C,462C,464C,474C,476C,487C,489C,498C,500C,508C,510C,532C,534C,545C,547C,565C '7946.00':575C '8.87':88C 'a':27C,53C,87C,241C,268C,272C,289C,297C,329C,395C,438C,562C 'accessed':177C 'ai':8B,11B 'all':426C 'an':262C,446C,553C 'and':52C,128C,144C,149C,151C,174C,255C,265C,314C,363C,371C,376C,385C,420C,448C,457C,466C,577C 'apache':82C 'api':181C,199C,237C 'api.mistral.ai':193C 'api.mistral.ai/v1/audio/transcriptions':192C 'are':451C,496C,521C,526C 'as':86C 'at':3A,211C,228C,302C,345C,443C,544C,558C 'audio':38C,263C,554C 'authorization':196C 'available':85C 'be':111C,176C 'bearer':197C 'because':412C 'bias':219C 'bluff':425C 'bluffs':375C,402C,495C 'bottom':560C 'browser':125C 'bums':519C 'but':403C 'buttons':316C 'by':114C,138C 'call':517C 'called':169C 'calls':183C 'can':98C,175C,260C,350C,479C,504C 'catch':540C 'clicking':120C 'closed':165C 'coast':486C 'code':312C 'come':366C 'console':238C 'console.mistral.ai':248C 'console.mistral.ai/build/audio/speech-to-text)':247C 'context':218C 'coolest':472C 'correctly':153C 'curl':189C 'datasette':220C 'deflected':379C 'demo':105C,132C,140C 'diarize':215C 'diarized':269C 'dissipate':415C 'django':148C 'don':109C 'download':90C,278C,315C 'each':162C 'excellent':258C 'exercising':251C 'f':201C,207C,214C,217C,221C 'face':15B,93C 'family':28C,51C 'feet':399C,408C 'file':208C,264C,298C 'find':481C,505C 'five':398C,405C 'flapping':459C 'fly':392C 'flying':358C,452C 'food':541C 'for':36C,250C,296C 'format':286C 'found':118C 'francisco':485C 'from':91C,322C,368C,440C 'gb':89C 'generative':10B 'generative-ai':9B 'get':267C 'getting':346C 'good':344C 'granularities':223C 'h':195C 'hacker':583C 'has':240C 'have':123C,525C 'highlighted':550C 'hit':373C 'hour':447C 'hugging':14B,92C 'hugging-face':13B 'huggingface.co':95C,107C 'huggingface.co/mistralai/voxtral-mini-4b-realtime-2602).':94C 'huggingface.co/spaces/mistralai/voxtral-mini-realtime)':106C 'i':134C,141C 'icon':331C 'impressed':137C 'in':45C,62C,102C,271C,281C,367C,527C,551C,568C 'interface':274C,295C 'into':394C,454C 'is':42C,78C,168C,232C,257C,549C,556C 'it':100C,152C,225C,256C,467C,482C 'jargon':146C 'json':285C 'july':63C 'just':22C,404C 'key':200C 'latest':44C,173C,206C 'library.m4a':213C,304C 'like':49C,147C,187C,397C,513C 'live':104C 'll':391C,436C 'llms':12B 'look':185C 'love':339C 'lower':570C 'me':160C 'message':119C 'microphone':117C 'miles':445C 'mini':74C,172C,205C 'mistral':16B,21C,180C,198C,236C 'mistral.ai':582C 'model':50C,84C,167C,202C,254C 'models':32C 'moments':158C 'most':348C 'my':155C 'name':71C 'named':299C 'near':564C 'new':31C,253C 'news':584C 'no':116C 'north':393C,429C,442C,453C 'northwest':370C 'not':458C 'now':239C 'of':6A,29C,159C,288C,352C,470C,530C 'off':113C,400C,409C 'official':70C 'on':483C 'one':33C,469C 'only':480C 'open':34C,80C 'options':276C 'or':284C,406C 'original':57C 'our':364C 'out':101C,351C 'pacifica':502C 'pelican':209C,300C 'pelicans':338C,450C,523C 'permission':127C 'pier':518C 'playground':246C 'playhead':563C 'pleasant':273C 'post':191C 'priced':227C 'promptly':266C 'put':112C 'quickly':143C 're':342C,357C,378C,537C 'reading':332C 'realtime':69C,76C 'record':121C 'released':23C,61C 'request':126C 'result':280C 'right':389C,492C,571C 's':226C,468C,574C,576C 'san':484C 'screenshot':287C 'see':437C 'segment':224C,543C 'segments':321C 'sequel':54C 'should':122C 'show':572C 'shown':557C 'shows':307C,319C 'simonwillison.net':66C 'simonwillison.net/2025/jul/16/voxtral/).':65C 'sit':388C 'so':337C,434C 'some':528C 'something':186C 'sort':529C 'sound':7A,163C 'speaker':330C 'speech':18B,243C,291C,308C 'speech-to-text':17B,242C,290C 'speed':5A 'srt':283C 'start':130C 'static.simonwillison.net':580C 'static.simonwillison.net/static/2025/mistral-transcript-ui.jpg)':579C 'stats':567C 'steep':497C 'surf':423C 'surface':411C 't':110C 'talk':210C,301C 'talked':142C 'ten':407C 'text':20B,40C,156C,245C,282C,293C,310C 'that':184C,424C,455C,524C 'the':4A,43C,56C,79C,115C,131C,139C,164C,179C,212C,235C,252C,279C,303C,305C,317C,347C,353C,369C,410C,413C,427C,441C,449C,471C,494C,542C,559C,569C 'their':46C,460C,514C 'them':506C 'then':129C 'there':507C 'they':60C,341C,349C,356C,372C,377C,386C,390C,421C,512C,536C 'things':473C 'this':41C,103C,188C 'those':374C,401C 'timestamp':222C 'timestamped':320C 'to':19B,39C,55C,244C,277C,292C,309C,325C,340C,539C 'toolbar':306C 'topography':354C 'transcribe':25C,313C 'transcribed':154C 'transcribes':2A 'transcribing':37C 'transcript':270C,318C 'transcription':294C 'trouble':531C 'true':216C 'try':99C 'two':30C 'typically':522C 'unable':538C 'up':380C 'upload':261C 'used':145C 'using':182C 'uttering':161C 'very':136C,343C 'via':178C 'voxtral':1A,24C,58C,68C,73C,171C,204C 'voxtral-mini-4b-realtime':72C 'voxtral-mini-latest':170C,203C 'was':135C 'waveform':555C 'way':428C 'we':516C 'webassembly':150C 'weight':166C 'weights':35C,81C 'what':515C 'when':355C 'where':491C,493C 'which':59C,231C,520C 'whisper':48C 'whisper-like':47C 'will':387C,422C 'wind':396C,439C,456C 'winds':365C,414C 'wings':461C 'with':275C,311C,328C,561C 'within':157C 'working':133C 'x':190C 'yellow':552C 'you':97C,259C,435C,478C,503C 'your':124C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2025/mistral-transcript-ui.jpg",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-03 22:44:50+00:00
{
  "id": 9270,
  "slug": "introducing-deno-sandbox",
  "link_url": "https://deno.com/blog/introducing-deno-sandbox",
  "link_title": "Introducing Deno Sandbox",
  "via_url": "https://news.ycombinator.com/item?id=46874097",
  "via_title": "Hacker News",
  "commentary": "<p>Here's a new hosted sandbox product from the Deno team. It's actually unrelated to Deno itself - this is part of their Deno Deploy SaaS platform. As such, you don't even need to use JavaScript to access it - you can create and execute code in a hosted sandbox using their <a href=\"https://pypi.org/project/deno-sandbox/\">deno-sandbox</a> Python library like this:</p>\r\n<div class=\"highlight highlight-source-shell\"><pre><span class=\"pl-k\">export</span> DENO_DEPLOY_TOKEN=<span class=\"pl-s\"><span class=\"pl-pds\">\"</span>... API token ...<span class=\"pl-pds\">\"</span></span>\r\nuv run --with deno-sandbox python</pre></div>\r\n<p>Then:</p>\r\n<pre><span class=\"pl-k\">from</span> <span class=\"pl-s1\">deno_sandbox</span> <span class=\"pl-k\">import</span> <span class=\"pl-v\">DenoDeploy</span>\r\n\r\n<span class=\"pl-s1\">sdk</span> <span class=\"pl-c1\">=</span> <span class=\"pl-en\">DenoDeploy</span>()\r\n\r\n<span class=\"pl-k\">with</span> <span class=\"pl-s1\">sdk</span>.<span class=\"pl-c1\">sandbox</span>.<span class=\"pl-c1\">create</span>() <span class=\"pl-k\">as</span> <span class=\"pl-s1\">sb</span>:\r\n    <span class=\"pl-c\"># Run a shell command</span>\r\n    <span class=\"pl-s1\">process</span> <span class=\"pl-c1\">=</span> <span class=\"pl-s1\">sb</span>.<span class=\"pl-c1\">spawn</span>(\r\n        <span class=\"pl-s\">\"echo\"</span>, <span class=\"pl-s1\">args</span><span class=\"pl-c1\">=</span>[<span class=\"pl-s\">\"Hello from the sandbox!\"</span>]\r\n    )\r\n    <span class=\"pl-s1\">process</span>.<span class=\"pl-c1\">wait</span>()\r\n    <span class=\"pl-c\"># Write and read files</span>\r\n    <span class=\"pl-s1\">sb</span>.<span class=\"pl-c1\">fs</span>.<span class=\"pl-c1\">write_text_file</span>(\r\n        <span class=\"pl-s\">\"/tmp/example.txt\"</span>, <span class=\"pl-s\">\"Hello, World!\"</span>\r\n    )\r\n    <span class=\"pl-en\">print</span>(<span class=\"pl-s1\">sb</span>.<span class=\"pl-c1\">fs</span>.<span class=\"pl-c1\">read_text_file</span>(\r\n        <span class=\"pl-s\">\"/tmp/example.txt\"</span>\r\n    ))</pre>\r\n<p>There\u2019s a JavaScript client library as well. The underlying API isn\u2019t documented yet but appears <a href=\"https://tools.simonwillison.net/zip-wheel-explorer?package=deno-sandbox#deno_sandbox/sandbox.py--L187\">to use WebSockets</a>.</p>\r\n<p>There\u2019s a lot to like about this system. Sandboxe instances can have up to 4GB of RAM, get 2 vCPUs, 10GB of ephemeral storage, can mount persistent volumes and can use snapshots to boot pre-configured custom images quickly. Sessions can last up to 30 minutes and are billed by CPU time, GB-h of memory and volume storage usage.</p>\r\n<p>When you create a sandbox you can configure network domains it\u2019s allowed to access.</p>\r\n<p>My favorite feature is the way it handles API secrets.</p>\r\n<pre><span class=\"pl-k\">with</span> <span class=\"pl-s1\">sdk</span>.<span class=\"pl-c1\">sandboxes</span>.<span class=\"pl-c1\">create</span>(\r\n    <span class=\"pl-s1\">allowNet</span><span class=\"pl-c1\">=</span>[<span class=\"pl-s\">\"api.openai.com\"</span>],\r\n    <span class=\"pl-s1\">secrets</span><span class=\"pl-c1\">=</span>{\r\n        <span class=\"pl-s\">\"OPENAI_API_KEY\"</span>: {\r\n            <span class=\"pl-s\">\"hosts\"</span>: [<span class=\"pl-s\">\"api.openai.com\"</span>],\r\n            <span class=\"pl-s\">\"value\"</span>: <span class=\"pl-s1\">os</span>.<span class=\"pl-c1\">environ</span>.<span class=\"pl-c1\">get</span>(<span class=\"pl-s\">\"OPENAI_API_KEY\"</span>),\r\n        }\r\n    },\r\n) <span class=\"pl-k\">as</span> <span class=\"pl-s1\">sandbox</span>:\r\n    <span class=\"pl-c\"># ... $OPENAI_API_KEY is available</span></pre>\r\n<p>Within the container that <code>$OPENAI_API_KEY</code> value is set to something like this:</p>\r\n<pre><code>DENO_SECRET_PLACEHOLDER_b14043a2f578cba...\r\n</code></pre>\r\n<p>Outbound API calls to <code>api.openai.com</code> run through a proxy which is aware of those placeholders and replaces them with the original secret.</p>\r\n<p>In this way the secret itself is not available to code within the sandbox, which limits the ability for malicious code (e.g. from a prompt injection) to exfiltrate those secrets.</p>\r\n<p>From <a href=\"https://news.ycombinator.com/item?id=46874097#46874959\">a comment on Hacker News</a> I learned that Fly have a project called <a href=\"https://github.com/superfly/tokenizer\">tokenizer</a> that implements the same pattern. Adding this to my list of tricks to use with sandoxed environments!</p>",
  "created": "2026-02-03T22:44:50+00:00",
  "metadata": {},
  "search_document": "'/tmp/example.txt':119C,128C '10gb':170C '2':168C '30':195C '4gb':164C 'a':11C,56C,96C,131C,151C,215C,288C,326C,334C,344C 'ability':320C 'about':155C 'access':47C,226C 'actually':22C 'adding':353C 'allowed':224C 'allownet':241C 'and':52C,111C,178C,197C,208C,296C 'api':72C,139C,235C,245C,254C,259C,268C,282C 'api.openai.com':242C,248C,285C 'appears':145C 'are':198C 'args':103C 'as':36C,93C,135C,256C 'available':262C,311C 'aware':292C 'b14043a2f578cba':280C 'billed':199C 'boot':183C 'but':144C 'by':200C 'called':346C 'calls':283C 'can':50C,160C,174C,179C,191C,218C 'client':133C 'code':54C,313C,323C 'command':98C 'comment':335C 'configure':219C 'configured':186C 'container':265C 'cpu':201C 'create':51C,92C,214C,240C 'custom':187C 'deno':2A,7B,18C,25C,32C,62C,69C,78C,83C,277C 'deno-sandbox':61C,77C 'deno.com':365C 'denodeploy':86C,88C 'deploy':33C,70C 'documented':142C 'domains':221C 'don':39C 'e.g':324C 'echo':102C 'environ':251C 'environments':364C 'ephemeral':172C 'even':41C 'execute':53C 'exfiltrate':330C 'export':68C 'favorite':228C 'feature':229C 'file':118C,127C 'files':113C 'fly':8B,342C 'for':321C 'from':16C,82C,105C,325C,333C 'fs':115C,124C 'gb':204C 'gb-h':203C 'get':167C,252C 'h':205C 'hacker':337C,366C 'handles':234C 'have':161C,343C 'hello':104C,120C 'here':9C 'hosted':13C,57C 'hosts':247C 'i':339C 'images':188C 'implements':349C 'import':85C 'in':55C,303C 'injection':328C 'instances':159C 'introducing':1A 'is':28C,230C,261C,271C,291C,309C 'isn':140C 'it':20C,48C,222C,233C 'itself':26C,308C 'javascript':45C,132C 'key':246C,255C,260C,269C 'last':192C 'learned':340C 'library':65C,134C 'like':66C,154C,275C 'limits':318C 'list':357C 'lot':152C 'malicious':322C 'memory':207C 'minutes':196C 'mount':175C 'my':227C,356C 'need':42C 'network':220C 'new':12C 'news':338C,367C 'not':310C 'of':30C,165C,171C,206C,293C,358C 'on':336C 'openai':244C,253C,258C,267C 'original':301C 'os':250C 'outbound':281C 'part':29C 'pattern':352C 'persistent':176C 'placeholder':279C 'placeholders':295C 'platform':35C 'pre':185C 'pre-configured':184C 'print':122C 'process':99C,108C 'product':15C 'project':345C 'prompt':327C 'proxy':289C 'python':4B,64C,80C 'quickly':189C 'ram':166C 'read':112C,125C 'replaces':297C 'run':75C,95C,286C 's':10C,21C,130C,150C,223C 'saas':34C 'same':351C 'sandbox':3A,14C,58C,63C,79C,84C,91C,107C,216C,257C,316C 'sandboxe':158C 'sandboxes':239C 'sandboxing':5B 'sandoxed':363C 'sb':94C,100C,114C,123C 'sdk':87C,90C,238C 'secret':278C,302C,307C 'secrets':236C,243C,332C 'security':6B 'sessions':190C 'set':272C 'shell':97C 'snapshots':181C 'something':274C 'spawn':101C 'storage':173C,210C 'such':37C 'system':157C 't':40C,141C 'team':19C 'text':117C,126C 'that':266C,341C,348C 'the':17C,106C,137C,231C,264C,300C,306C,315C,319C,350C 'their':31C,60C 'them':298C 'then':81C 'there':129C,149C 'this':27C,67C,156C,276C,304C,354C 'those':294C,331C 'through':287C 'time':202C 'to':24C,43C,46C,146C,153C,163C,182C,194C,225C,273C,284C,312C,329C,355C,360C 'token':71C,73C 'tokenizer':347C 'tricks':359C 'underlying':138C 'unrelated':23C 'up':162C,193C 'usage':211C 'use':44C,147C,180C,361C 'using':59C 'uv':74C 'value':249C,270C 'vcpus':169C 'volume':209C 'volumes':177C 'wait':109C 'way':232C,305C 'websockets':148C 'well':136C 'when':212C 'which':290C,317C 'with':76C,89C,237C,299C,362C 'within':263C,314C 'world':121C 'write':110C,116C 'yet':143C 'you':38C,49C,213C,217C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-02-03 02:31:10+00:00
{
  "id": 2014,
  "slug": "brandon-sanderson",
  "quotation": "This is the difference between Data and a large language model, at least the ones operating right now. Data created art because he wanted to grow. He wanted to become something. He wanted to understand. Art is the means by which we become what we want to be. [...]\r\n\r\nThe book, the painting, the film script is not the only art. It's important, but in a way it's a receipt. It's a diploma. The book you write, the painting you create, the music you compose is important and artistic, but it's also a mark of proof that you have done the work to learn, because in the end of it all, you are the art. The most important change made by an artistic endeavor is the change it makes in you. The most important emotions are the ones you feel when writing that story and holding the completed work. I don't care if the AI can create something that is better than what we can create, because it cannot be changed by that creation.",
  "source": "Brandon Sanderson",
  "source_url": "https://www.youtube.com/watch?v=mb3uK-_QkOo&t=832s",
  "created": "2026-02-03T02:31:10+00:00",
  "metadata": {},
  "search_document": "'a':8A,66A,70A,74A,96A 'ai':159A,184B,187B,190B 'ai-ethics':189B 'all':114A 'also':95A 'an':125A 'and':7A,90A,148A 'are':116A,139A 'art':21A,36A,60A,118A,179B 'artistic':91A,126A 'at':12A 'be':48A,174A 'because':22A,108A,171A 'become':30A,43A 'better':165A 'between':5A 'book':50A,77A 'brandon':192C 'but':64A,92A 'by':40A,124A,176A 'can':160A,169A 'cannot':173A 'care':156A 'change':122A,130A 'changed':175A 'completed':151A 'compose':87A 'create':83A,161A,170A 'created':20A 'creation':178A 'data':6A,19A 'difference':4A 'diploma':75A 'don':154A 'done':103A 'emotions':138A 'end':111A 'endeavor':127A 'ethics':191B 'feel':143A 'film':54A 'generative':186B 'generative-ai':185B 'grow':26A 'guido':181B 'guido-van-rossum':180B 'have':102A 'he':23A,27A,32A 'holding':149A 'i':153A 'if':157A 'important':63A,89A,121A,137A 'in':65A,109A,133A 'is':2A,37A,56A,88A,128A,164A 'it':61A,68A,72A,93A,113A,131A,172A 'language':10A 'large':9A 'learn':107A 'least':13A 'llms':188B 'made':123A 'makes':132A 'mark':97A 'means':39A 'model':11A 'most':120A,136A 'music':85A 'not':57A 'now':18A 'of':98A,112A 'ones':15A,141A 'only':59A 'operating':16A 'painting':52A,81A 'proof':99A 'receipt':71A 'right':17A 'rossum':183B 's':62A,69A,73A,94A 'sanderson':193C 'script':55A 'something':31A,162A 'story':147A 't':155A 'than':166A 'that':100A,146A,163A,177A 'the':3A,14A,38A,49A,51A,53A,58A,76A,80A,84A,104A,110A,117A,119A,129A,135A,140A,150A,158A 'this':1A 'to':25A,29A,34A,47A,106A 'understand':35A 'van':182B 'want':46A 'wanted':24A,28A,33A 'way':67A 'we':42A,45A,168A 'what':44A,167A 'when':144A 'which':41A 'work':105A,152A 'write':79A 'writing':145A 'you':78A,82A,86A,101A,115A,134A,142A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "via [Guido van Rossum](https://x.com/gvanrossum/status/2018491452771418402)"
}
blogmark 2026-02-02 19:54:36+00:00
{
  "id": 9269,
  "slug": "introducing-the-codex-app",
  "link_url": "https://openai.com/index/introducing-the-codex-app/",
  "link_title": "Introducing the Codex app",
  "via_url": null,
  "via_title": null,
  "commentary": "OpenAI just released a new macOS app for their Codex coding agent. I've had a few days of preview access - it's a solid app that provides a nice UI over the capabilities of the Codex CLI agent and adds some interesting new features, most notably first-class support for [Skills](https://developers.openai.com/codex/skills), and [Automations](https://developers.openai.com/codex/app/automations) for running scheduled tasks.\r\n\r\n![Screenshot of a macOS desktop application with a dark sidebar and light main content area. Left sidebar shows navigation items \"New thread\", \"Automations\", \"Skills\", and a \"Threads\" section containing two project folders: \"local-codex-scratch\" with tasks \"Reply to greeting task 2h\" and \"List Codex.app contents 3h\", and \"shot-scraper\" with tasks \"Validate tests on dependency... 3h\", \"Document shot-scraper CLI usage 18h\" (highlighted), and \"Run this: uv run pytest -x 1d\". Bottom left shows \"Personal\". Top bar displays \"Document shot-scraper CLI usage shot-scraper\" with \"Open\" and \"Commit\" dropdown buttons. Main content shows a conversation: user message \"Build a skill describing how to use the shot-scraper CLI tool\" followed by assistant responses: \"I'll use the skill-creator skill, scan the repo for existing shot-scraper docs/commands, then draft a concise skill in this workspace and sanity-check it.\" then \"I've confirmed the skill-creator scripts exist. Next I'll inspect the CLI entrypoint and docs, then scaffold a skill under skills/ in this repo.\" then \"I've scaffolded skills/shot-scraper-cli/. I'll now replace the template SKILL.md with a task-focused skill and add a compact CLI reference under references/.\" then \"I'll run the skill packager/validator next to ensure the new skill structure is valid.\" then \"Done \u2014 I created and packaged the skill. Key outputs: \u2022 Skill definition: SKILL.md \u2022 Compact reference: cli-reference.md \u2022 Packaged skill: shot-scraper-cli.skill\". Bottom shows input field with placeholder \"Ask for follow-up changes\", \"+ Custom Medium\" dropdown, and \"Local\" and \"main\" branch indicators.](https://static.simonwillison.net/static/2026/codex-app.jpg)\r\n\r\nThe app is built with Electron and Node.js. Automations track their state in a SQLite database - here's what that looks like if you explore it with `uvx datasette ~/.codex/sqlite/codex-dev.db`:\r\n\r\n![Database schema documentation on light gray background showing three tables: \"automation_runs\" (teal underlined link) with italic columns \"thread_id, automation_id, status, read_at, thread_title, source_cwd, inbox_title, inbox_summary, created_at, updated_at, archived_user_message, archived_assistant_message, archived_reason\" and \"1 row\"; \"automations\" (teal underlined link) with italic columns \"id, name, prompt, status, next_run_at, last_run_at, cwds, rrule, created_at, updated_at\" and \"1 row\"; \"inbox_items\" (teal underlined link) with italic columns \"id, title, description, thread_id, read_at, created_at\" and \"0 rows\".](https://static.simonwillison.net/static/2026/codex-dev-sqlite.jpg)\r\n\r\nHere\u2019s an interactive copy of that database [in Datasette Lite](https://lite.datasette.io/?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsimonw%2F274c4ecfaf959890011810e6881864fe%2Fraw%2F51fdf25c9426b76e9693ccc0d9254f64ceeef819%2Fcodex-dev.db#/codex-dev).\r\n\r\nThe announcement gives us a hint at some usage numbers for Codex overall - the holiday spike is notable:\r\n\r\n> Since the launch of GPT\u20115.2-Codex in mid-December, overall Codex usage has doubled, and in the past month, more than a million developers have used Codex.\r\n\r\nAutomations are currently restricted in that they can only run when your laptop is powered on. OpenAI promise that cloud-based automations are coming soon, which will resolve this limitation.\r\n\r\nThey chose Electron so they could target other operating systems in the future, with Windows \u201c[coming very soon](https://news.ycombinator.com/item?id=46859054#46859673)\u201d. OpenAI\u2019s Alexander Embiricos noted [on the Hacker News thread](https://news.ycombinator.com/item?id=46859054#46859693) that:\r\n\r\n> it's taking us some time to get really solid sandboxing working on Windows, where there are fewer OS-level primitives for it.\r\n\r\nLike Claude Code, Codex is really a general agent harness disguised as a tool for programmers. OpenAI acknowledge that here:\r\n\r\n> Codex is built on a simple premise: everything is controlled by code. The better an agent is at reasoning about and producing code, the more capable it becomes across all forms of technical and knowledge work. [...] We\u2019ve focused on making Codex the best coding agent, which has also laid the foundation for it to become a strong agent for a broad range of knowledge work tasks that extend beyond writing code.\r\n\r\nClaude Code had to [rebrand to Cowork](https://simonwillison.net/2026/Jan/12/claude-cowork/) to better cover the general knowledge work case. OpenAI can probably get away with keeping the Codex name for both.\r\n\r\nOpenAI have made Codex available to free and [Go](https://simonwillison.net/2026/Jan/16/chatgpt-ads/) plans for \"a limited time\" (update: Sam Altman [says two months](https://x.com/sama/status/2018437537103269909)) during which they are also doubling the rate limits for paying users.",
  "created": "2026-02-02T19:54:36+00:00",
  "metadata": {},
  "search_document": "'/.codex/sqlite/codex-dev.db':382C '/2026/jan/12/claude-cowork/)':732C '/2026/jan/16/chatgpt-ads/)':764C '/?url=https%3a%2f%2fgist.githubusercontent.com%2fsimonw%2f274c4ecfaf959890011810e6881864fe%2fraw%2f51fdf25c9426b76e9693ccc0d9254f64ceeef819%2fcodex-dev.db#/codex-dev).':493C '/codex/app/automations)':84C '/codex/skills),':79C '/item?id=46859054#46859673)':592C '/item?id=46859054#46859693)':605C '/sama/status/2018437537103269909))':778C '/static/2026/codex-app.jpg)':352C '/static/2026/codex-dev-sqlite.jpg)':479C '0':475C '1':429C,455C '18h':154C '1d':163C '2h':131C '3h':136C,147C '5.2':517C 'a':27C,39C,47C,52C,91C,96C,114C,189C,194C,229C,261C,281C,288C,366C,498C,535C,637C,643C,655C,707C,711C,767C 'about':670C 'access':44C 'acknowledge':648C 'across':679C 'add':287C 'adds':64C 'agent':35C,62C,639C,666C,696C,709C 'agents':17B,20B 'ai':7B,13B,16B 'ai-agents':15B 'alexander':595C 'all':680C 'also':699C,783C 'altman':772C 'an':482C,665C 'and':63C,80C,99C,113C,132C,137C,156C,182C,235C,257C,286C,314C,344C,346C,359C,428C,454C,474C,528C,671C,684C,760C 'announcement':495C 'app':4A,30C,49C,354C 'application':94C 'archived':420C,423C,426C 'are':542C,564C,623C,782C 'area':103C 'as':642C 'ask':335C 'assistant':208C,424C 'at':407C,417C,419C,444C,447C,451C,453C,471C,473C,500C,668C 'automation':393C,403C 'automations':81C,111C,361C,431C,541C,563C 'available':757C 'away':745C 'background':389C 'bar':169C 'based':562C 'become':706C 'becomes':678C 'best':694C 'better':664C,734C 'beyond':720C 'both':752C 'bottom':164C,329C 'branch':348C 'broad':712C 'build':193C 'built':356C,653C 'buttons':185C 'by':207C,661C 'can':548C,742C 'capabilities':57C 'capable':676C 'case':740C 'changes':340C 'check':238C 'chose':573C 'class':73C 'claude':632C,723C 'cli':23B,61C,152C,175C,204C,255C,290C 'cli-reference.md':325C 'cloud':561C 'cloud-based':560C 'code':633C,662C,673C,722C,724C 'codex':3A,22B,33C,60C,123C,505C,518C,524C,540C,634C,651C,692C,749C,756C 'codex-cli':21B 'codex.app':134C 'coding':19B,34C,695C 'coding-agents':18B 'columns':400C,437C,464C 'coming':565C,587C 'commit':183C 'compact':289C,323C 'concise':230C 'confirmed':243C 'containing':117C 'content':102C,187C 'contents':135C 'controlled':660C 'conversation':190C 'copy':484C 'could':577C 'cover':735C 'cowork':729C 'created':313C,416C,450C,472C 'creator':216C,247C 'currently':543C 'custom':341C 'cwd':411C 'cwds':448C 'dark':97C 'database':368C,383C,487C 'datasette':8B,381C,489C 'days':41C 'december':522C 'definition':321C 'dependency':146C 'describing':196C 'description':467C 'desktop':93C 'developers':537C 'developers.openai.com':78C,83C 'developers.openai.com/codex/app/automations)':82C 'developers.openai.com/codex/skills),':77C 'disguised':641C 'displays':170C 'docs':258C 'docs/commands':226C 'document':148C,171C 'documentation':385C 'done':311C 'doubled':527C 'doubling':784C 'draft':228C 'dropdown':184C,343C 'during':779C 'electron':9B,358C,574C 'embiricos':596C 'ensure':303C 'entrypoint':256C 'everything':658C 'exist':249C 'existing':222C 'explore':377C 'extend':719C 'features':68C 'few':40C 'fewer':624C 'field':332C 'first':72C 'first-class':71C 'focused':284C,689C 'folders':120C 'follow':338C 'follow-up':337C 'followed':206C 'for':31C,75C,85C,221C,336C,504C,629C,645C,703C,710C,751C,766C,788C 'forms':681C 'foundation':702C 'free':759C 'future':584C 'general':638C,737C 'generative':12B 'generative-ai':11B 'get':614C,744C 'gives':496C 'go':761C 'gpt':516C 'gray':388C 'greeting':129C 'hacker':600C 'had':38C,725C 'harness':640C 'has':526C,698C 'have':538C,754C 'here':369C,480C,650C 'highlighted':155C 'hint':499C 'holiday':508C 'how':197C 'i':36C,210C,241C,251C,269C,273C,295C,312C 'id':402C,404C,438C,465C,469C 'if':375C 'in':232C,265C,365C,488C,519C,529C,545C,582C 'inbox':412C,414C,457C 'indicators':349C 'input':331C 'inspect':253C 'interactive':483C 'interesting':66C 'introducing':1A 'is':308C,355C,510C,554C,635C,652C,659C,667C 'it':45C,239C,378C,607C,630C,677C,704C 'italic':399C,436C,463C 'items':108C,458C 'just':25C 'keeping':747C 'key':318C 'knowledge':685C,715C,738C 'laid':700C 'laptop':553C 'last':445C 'launch':514C 'left':104C,165C 'level':627C 'light':100C,387C 'like':374C,631C 'limitation':571C 'limited':768C 'limits':787C 'link':397C,434C,461C 'list':133C 'lite':490C 'lite.datasette.io':492C 'lite.datasette.io/?url=https%3a%2f%2fgist.githubusercontent.com%2fsimonw%2f274c4ecfaf959890011810e6881864fe%2fraw%2f51fdf25c9426b76e9693ccc0d9254f64ceeef819%2fcodex-dev.db#/codex-dev).':491C 'll':211C,252C,274C,296C 'llms':14B 'local':122C,345C 'local-codex-scratch':121C 'looks':373C 'macos':29C,92C 'made':755C 'main':101C,186C,347C 'making':691C 'medium':342C 'message':192C,422C,425C 'mid':521C 'mid-december':520C 'million':536C 'month':532C 'months':775C 'more':533C,675C 'most':69C 'name':439C,750C 'navigation':107C 'new':28C,67C,109C,305C 'news':601C 'news.ycombinator.com':591C,604C 'news.ycombinator.com/item?id=46859054#46859673)':590C 'news.ycombinator.com/item?id=46859054#46859693)':603C 'next':250C,301C,442C 'nice':53C 'node.js':360C 'notable':511C 'notably':70C 'noted':597C 'now':275C 'numbers':503C 'of':42C,58C,90C,485C,515C,682C,714C 'on':145C,386C,556C,598C,619C,654C,690C 'only':549C 'open':181C 'openai':10B,24C,557C,593C,647C,741C,753C 'openai.com':791C 'operating':580C 'os':626C 'os-level':625C 'other':579C 'outputs':319C 'over':55C 'overall':506C,523C 'packaged':315C,326C 'packager/validator':300C 'past':531C 'paying':789C 'personal':167C 'placeholder':334C 'plans':765C 'powered':555C 'premise':657C 'preview':43C 'primitives':628C 'probably':743C 'producing':672C 'programmers':646C 'project':119C 'promise':558C 'prompt':440C 'provides':51C 'pytest':161C 'range':713C 'rate':786C 'read':406C,470C 'really':615C,636C 'reason':427C 'reasoning':669C 'rebrand':727C 'reference':291C,324C 'references':293C 'released':26C 'replace':276C 'reply':127C 'repo':220C,267C 'resolve':569C 'responses':209C 'restricted':544C 'row':430C,456C 'rows':476C 'rrule':449C 'run':157C,160C,297C,443C,446C,550C 'running':86C 'runs':394C 's':46C,370C,481C,594C,608C 'sam':771C 'sandboxing':5B,617C 'sanity':237C 'sanity-check':236C 'says':773C 'scaffold':260C 'scaffolded':271C 'scan':218C 'scheduled':87C 'schema':384C 'scraper':140C,151C,174C,179C,203C,225C 'scratch':124C 'screenshot':89C 'scripts':248C 'section':116C 'shot':139C,150C,173C,178C,202C,224C 'shot-scraper':138C,149C,172C,177C,201C,223C 'shot-scraper-cli.skill':328C 'showing':390C 'shows':106C,166C,188C,330C 'sidebar':98C,105C 'simonwillison.net':731C,763C 'simonwillison.net/2026/jan/12/claude-cowork/)':730C 'simonwillison.net/2026/jan/16/chatgpt-ads/)':762C 'simple':656C 'since':512C 'skill':195C,215C,217C,231C,246C,262C,285C,299C,306C,317C,320C,327C 'skill-creator':214C,245C 'skill.md':279C,322C 'skills':76C,112C,264C 'skills/shot-scraper-cli':272C 'so':575C 'solid':48C,616C 'some':65C,501C,611C 'soon':566C,589C 'source':410C 'spike':509C 'sqlite':6B,367C 'state':364C 'static.simonwillison.net':351C,478C 'static.simonwillison.net/static/2026/codex-app.jpg)':350C 'static.simonwillison.net/static/2026/codex-dev-sqlite.jpg)':477C 'status':405C,441C 'strong':708C 'structure':307C 'summary':415C 'support':74C 'systems':581C 'tables':392C 'taking':609C 'target':578C 'task':130C,283C 'task-focused':282C 'tasks':88C,126C,142C,717C 'teal':395C,432C,459C 'technical':683C 'template':278C 'tests':144C 'than':534C 'that':50C,372C,486C,546C,559C,606C,649C,718C 'the':2A,56C,59C,200C,213C,219C,244C,254C,277C,298C,304C,316C,353C,494C,507C,513C,530C,583C,599C,663C,674C,693C,701C,736C,748C,785C 'their':32C,363C 'then':227C,240C,259C,268C,294C,310C 'there':622C 'they':547C,572C,576C,781C 'this':158C,233C,266C,570C 'thread':110C,401C,408C,468C,602C 'threads':115C 'three':391C 'time':612C,769C 'title':409C,413C,466C 'to':128C,198C,302C,613C,705C,726C,728C,733C,758C 'tool':205C,644C 'top':168C 'track':362C 'two':118C,774C 'ui':54C 'under':263C,292C 'underlined':396C,433C,460C 'up':339C 'update':770C 'updated':418C,452C 'us':497C,610C 'usage':153C,176C,502C,525C 'use':199C,212C 'used':539C 'user':191C,421C 'users':790C 'uv':159C 'uvx':380C 'valid':309C 'validate':143C 've':37C,242C,270C,688C 'very':588C 'we':687C 'what':371C 'when':551C 'where':621C 'which':567C,697C,780C 'will':568C 'windows':586C,620C 'with':95C,125C,141C,180C,280C,333C,357C,379C,398C,435C,462C,585C,746C 'work':686C,716C,739C 'working':618C 'workspace':234C 'writing':721C 'x':162C 'x.com':777C 'x.com/sama/status/2018437537103269909))':776C 'you':376C 'your':552C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/codex-card.jpg",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-02 16:42:46+00:00
{
  "id": 9268,
  "slug": "no-humans-allowed",
  "link_url": "https://www.nytimes.com/2026/02/02/technology/moltbook-ai-social-media.html?unlocked_article_code=1.JFA.kBCd.hUw-s4vvfswK&smid=url-share",
  "link_title": "A Social Network for A.I. Bots Only. No Humans Allowed.",
  "via_url": null,
  "via_title": null,
  "commentary": "I talked to Cade Metz for this New York Times piece on OpenClaw and Moltbook. Cade reached out after seeing my [blog post about that](https://simonwillison.net/2026/Jan/30/moltbook/) from the other day.\r\n\r\nIn a first for me, they decided to send a photographer, Jason Henry, to my home to take some photos for the piece! That's my grubby laptop screen at the top of the story (showing [this post](https://www.moltbook.com/post/6e8c3a2c-5f9f-44bc-85ef-770a8d605598) on Moltbook). There's a photo of me later in the story too, though sadly not one of the ones that Jason took that included our chickens.\r\n\r\nHere's my snippet from the article:\r\n\r\n> He was entertained by the way the bots coaxed each other into talking like machines in a classic science fiction novel. While some observers took this chatter at face value \u2014 insisting that machines were showing signs of conspiring against their makers \u2014 Mr. Willison saw it as the natural outcome of the way chatbots are trained: They learn from vast collections of digital books and other text culled from the internet, including dystopian sci-fi novels.\r\n> \r\n> \u201cMost of it is complete slop,\u201d he said in an interview. \u201cOne bot will wonder if it is conscious and others will reply and they just play out science fiction scenarios they have seen in their training data.\u201d\r\n> \r\n> Mr. Willison saw the Moltbots as evidence that A.I. agents have become significantly more powerful over the past few months \u2014 and that people really want this kind of digital assistant in their lives.\r\n>\r\n> One bot created an online forum called \u2018What I Learned Today,\u201d where it explained how, after a request from its creator, it built a way of controlling an Android smartphone. Mr. Willison was also keenly aware that some people might be telling their bots to post misleading chatter on the social network.\r\n>\r\n> The trouble, he added, was that these systems still do so many things people do not want them to do. And because they communicate with people and bots through plain English, they can be coaxed into malicious behavior.\r\n\r\nI'm happy to have got \"Most of it is complete slop\" in there!\r\n\r\nFun fact: Cade sent me an email asking me to fact check some bullet points. One of them said that \"you were intrigued by the way the bots coaxed each other into talking like machines in a classic science fiction novel\" - I replied that I didn't think \"intrigued\" was accurate because I've seen this kind of thing play out before in other projects in the past and suggested \"entertained\" instead, and that's the word they went with!\r\n\r\nJason the photographer spent an hour with me. I learned lots of things about photo journalism in the process - for example, there's a strict ethical code against any digital modifications at all beyond basic color correction.\r\n\r\nAs a result he spent a whole lot of time trying to find positions where natural light, shade and reflections helped him get the images he was looking for.",
  "created": "2026-02-02T16:42:46+00:00",
  "metadata": {},
  "search_document": "'/2026/jan/30/moltbook/)':57C '/post/6e8c3a2c-5f9f-44bc-85ef-770a8d605598)':102C 'a':1A,63C,71C,107C,153C,300C,307C,424C,491C,506C,510C 'a.i':5A,259C 'about':53C,481C 'accurate':438C 'added':339C 'after':48C,299C 'against':175C,495C 'agents':25B,260C 'ai':17B,20B,24B 'ai-agents':23B 'all':500C 'allowed':10A 'also':317C 'an':222C,287C,311C,393C,472C 'and':43C,200C,232C,236C,271C,356C,362C,456C,460C,523C 'android':312C 'any':496C 'are':190C 'article':136C 'as':182C,256C,505C 'asking':395C 'assistant':280C 'at':91C,164C,499C 'aware':319C 'basic':502C 'be':324C,369C 'because':357C,439C 'become':262C 'before':449C 'behavior':373C 'beyond':501C 'blog':51C 'books':199C 'bot':225C,285C 'bots':6A,144C,327C,363C,415C 'built':306C 'bullet':401C 'by':140C,411C 'cade':33C,45C,390C 'called':290C 'can':368C 'chatbots':189C 'chatter':163C,331C 'check':399C 'chickens':129C 'classic':154C,425C 'coaxed':145C,370C,416C 'code':494C 'collections':196C 'color':503C 'communicate':359C 'complete':217C,384C 'conscious':231C 'conspiring':174C 'controlling':310C 'correction':504C 'created':286C 'creator':304C 'culled':203C 'data':250C 'day':61C 'decided':68C 'didn':433C 'digital':198C,279C,497C 'do':345C,350C,355C 'dystopian':208C 'each':146C,417C 'email':394C 'english':366C 'entertained':139C,458C 'ethical':493C 'evidence':257C 'example':488C 'explained':297C 'face':165C 'fact':389C,398C 'few':269C 'fi':211C 'fiction':156C,242C,427C 'find':517C 'first':64C 'for':4A,35C,65C,82C,487C,533C 'forum':289C 'from':58C,134C,194C,204C,302C 'fun':388C 'generative':19B 'generative-ai':18B 'get':527C 'got':379C 'grubby':88C 'happy':376C 'have':245C,261C,378C 'he':137C,219C,338C,508C,530C 'helped':525C 'henry':74C 'here':130C 'him':526C 'home':77C 'hour':473C 'how':298C 'humans':9A 'i':30C,292C,374C,429C,432C,440C,476C 'if':228C 'images':529C 'in':62C,112C,152C,221C,247C,281C,386C,423C,450C,453C,484C 'included':127C 'including':207C 'insisting':167C 'instead':459C 'internet':206C 'interview':223C 'into':148C,371C,419C 'intrigued':410C,436C 'is':216C,230C,383C 'it':181C,215C,229C,296C,305C,382C 'its':303C 'jason':73C,124C,468C 'journalism':11B,483C 'just':238C 'keenly':318C 'kind':277C,444C 'laptop':89C 'later':111C 'learn':193C 'learned':293C,477C 'light':521C 'like':150C,421C 'lives':283C 'llms':21B 'looking':532C 'lot':512C 'lots':478C 'm':375C 'machines':151C,169C,422C 'makers':177C 'malicious':372C 'many':347C 'me':66C,110C,392C,396C,475C 'metz':34C 'might':323C 'misleading':330C 'modifications':498C 'moltbook':44C,104C 'moltbots':255C 'months':270C 'more':264C 'most':213C,380C 'mr':178C,251C,314C 'my':50C,76C,87C,132C 'natural':184C,520C 'network':3A,335C 'new':13B,37C 'new-york-times':12B 'no':8A 'not':118C,351C 'novel':157C,428C 'novels':212C 'observers':160C 'of':94C,109C,120C,173C,186C,197C,214C,278C,309C,381C,404C,445C,479C,513C 'on':41C,103C,332C 'one':119C,224C,284C,403C 'ones':122C 'online':288C 'only':7A 'openclaw':29B,42C 'other':60C,147C,201C,418C,451C 'others':233C 'our':128C 'out':47C,240C,448C 'outcome':185C 'over':266C 'past':268C,455C 'people':273C,322C,349C,361C 'photo':108C,482C 'photographer':72C,470C 'photography':16B 'photos':81C 'piece':40C,84C 'plain':365C 'play':239C,447C 'points':402C 'positions':518C 'post':52C,99C,329C 'powerful':265C 'press':27B 'press-quotes':26B 'process':486C 'projects':452C 'quotes':28B 'reached':46C 'really':274C 'reflections':524C 'replied':430C 'reply':235C 'request':301C 'result':507C 's':86C,106C,131C,462C,490C 'sadly':117C 'said':220C,406C 'saw':180C,253C 'scenarios':243C 'sci':210C 'sci-fi':209C 'science':155C,241C,426C 'screen':90C 'seeing':49C 'seen':246C,442C 'send':70C 'sent':391C 'shade':522C 'showing':97C,171C 'significantly':263C 'signs':172C 'simonwillison.net':56C 'simonwillison.net/2026/jan/30/moltbook/)':55C 'slop':22B,218C,385C 'smartphone':313C 'snippet':133C 'so':346C 'social':2A,334C 'some':80C,159C,321C,400C 'spent':471C,509C 'still':344C 'story':96C,114C 'strict':492C 'suggested':457C 'systems':343C 't':434C 'take':79C 'talked':31C 'talking':149C,420C 'telling':325C 'text':202C 'that':54C,85C,123C,126C,168C,258C,272C,320C,341C,407C,431C,461C 'the':59C,83C,92C,95C,113C,121C,135C,141C,143C,183C,187C,205C,254C,267C,333C,336C,412C,414C,454C,463C,469C,485C,528C 'their':176C,248C,282C,326C 'them':353C,405C 'there':105C,387C,489C 'these':342C 'they':67C,192C,237C,244C,358C,367C,465C 'thing':446C 'things':348C,480C 'think':435C 'this':36C,98C,162C,276C,443C 'though':116C 'through':364C 'time':514C 'times':15B,39C 'to':32C,69C,75C,78C,328C,354C,377C,397C,516C 'today':294C 'too':115C 'took':125C,161C 'top':93C 'trained':191C 'training':249C 'trouble':337C 'trying':515C 'value':166C 'vast':195C 've':441C 'want':275C,352C 'was':138C,316C,340C,437C,531C 'way':142C,188C,308C,413C 'went':466C 'were':170C,409C 'what':291C 'where':295C,519C 'while':158C 'whole':511C 'will':226C,234C 'willison':179C,252C,315C 'with':360C,467C,474C 'wonder':227C 'word':464C 'www.moltbook.com':101C 'www.moltbook.com/post/6e8c3a2c-5f9f-44bc-85ef-770a8d605598)':100C 'www.nytimes.com':534C 'york':14B,38C 'you':408C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-02-01 23:59:13+00:00
{
  "id": 9267,
  "slug": "openclaw-in-docker",
  "link_url": "https://til.simonwillison.net/llms/openclaw-docker",
  "link_title": "TIL: Running OpenClaw in Docker",
  "via_url": null,
  "via_title": null,
  "commentary": "I've been running [OpenClaw](https://openclaw.ai/) using Docker on my Mac. Here are the first in my ongoing notes on how I set that up and the commands I'm using to administer it.\r\n\r\n- [Use their Docker Compose configuration](https://til.simonwillison.net/llms/openclaw-docker#use-their-docker-compose-configuration)\r\n- [Answering all of those questions](https://til.simonwillison.net/llms/openclaw-docker#answering-all-of-those-questions)\r\n- [Running administrative commands](https://til.simonwillison.net/llms/openclaw-docker#running-administrative-commands)\r\n- [Setting up a Telegram bot](https://til.simonwillison.net/llms/openclaw-docker#setting-up-a-telegram-bot)\r\n- [Accessing the web UI](https://til.simonwillison.net/llms/openclaw-docker#accessing-the-web-ui)\r\n- [Running commands as root](https://til.simonwillison.net/llms/openclaw-docker#running-commands-as-root)\r\n\r\nHere's a screenshot of the web UI that this serves on localhost:\r\n\r\n![Screenshot of the OpenClaw Gateway Dashboard web interface. Header shows \"OpenCLAW GATEWAY DASHBOARD\" with a green \"Health OK\" indicator. Left sidebar contains navigation sections: Chat (Chat highlighted), Control (Overview, Channels, Instances, Sessions, Cron Jobs), Agent (Skills, Nodes), Settings (Config, Debug, Logs), and Resources (Docs). Main content area displays \"Chat\" with subtitle \"Direct gateway chat session for quick interventions.\" and \"telegram:6580064359\" identifier. A user message at 4:08 PM reads \"Show me a detailed list of all your available configured tools\". The assistant response states: \"Here's the full list of tools I have available in this OpenClaw session (as configured). These are the only ones I can call programmatically:\" followed by categorized tools: \"File & workspace\" (read \u2014 Read a file (text or image). Supports offset/limit for large files; write \u2014 Create/overwrite a file (creates parent dirs); edit \u2014 Precise in-place edit by exact string replacement), \"Shell / processes\" (exec \u2014 Run a shell command (optionally PTY, backgrounding, timeouts); process \u2014 Manage running exec sessions (list/poll/log/write/kill/etc.)), \"Web\" (web_search \u2014 Search the web (Brave Search API); web_fetch \u2014 Fetch a URL and extract readable content (markdown/text); browser \u2014 Control a browser (open/navigate/snapshot/screenshot/act/etc.)), \"UI / rendering\" (canvas \u2014 Present/eval/snapshot a Canvas surface (for node canvases/UI rendering)), and \"Devices / nodes\" (cut off). Bottom shows message input with placeholder \"Message (\u21b5 to send, Shift+\u21b5 for line breaks, paste images)\" and \"New session\" and coral \"Send\" buttons.](https://static.simonwillison.net/static/2026/openclaw-web-ui.jpg)",
  "created": "2026-02-01T23:59:13+00:00",
  "metadata": {},
  "search_document": "'/)':24C '/llms/openclaw-docker#accessing-the-web-ui)':89C '/llms/openclaw-docker#answering-all-of-those-questions)':68C '/llms/openclaw-docker#running-administrative-commands)':74C '/llms/openclaw-docker#running-commands-as-root)':96C '/llms/openclaw-docker#setting-up-a-telegram-bot)':82C '/llms/openclaw-docker#use-their-docker-compose-configuration)':60C '/static/2026/openclaw-web-ui.jpg)':336C '08':177C '4':176C '6580064359':170C 'a':77C,99C,124C,172C,182C,228C,240C,259C,284C,293C,300C 'accessing':83C 'administer':51C 'administrative':70C 'agent':144C 'agents':15B 'ai':6B,11B,14B 'ai-agents':13B 'all':62C,186C 'and':44C,151C,168C,286C,307C,327C,330C 'answering':61C 'api':280C 'are':31C,212C 'area':156C 'as':92C,209C 'assistant':192C 'at':175C 'available':188C,204C 'backgrounding':264C 'been':19C 'bot':79C 'bottom':312C 'brave':278C 'breaks':324C 'browser':291C,294C 'buttons':333C 'by':221C,251C 'call':218C 'can':217C 'canvas':298C,301C 'canvases/ui':305C 'categorized':222C 'channels':139C 'chat':134C,135C,158C,163C 'command':261C 'commands':46C,71C,91C 'compose':56C 'config':148C 'configuration':57C 'configured':189C,210C 'contains':131C 'content':155C,289C 'control':137C,292C 'coral':331C 'create/overwrite':239C 'creates':242C 'cron':142C 'cut':310C 'dashboard':115C,122C 'debug':149C 'detailed':183C 'devices':308C 'direct':161C 'dirs':244C 'displays':157C 'docker':5A,7B,26C,55C 'docs':153C 'edit':245C,250C 'exact':252C 'exec':257C,269C 'extract':287C 'fetch':282C,283C 'file':224C,229C,241C 'files':237C 'first':33C 'followed':220C 'for':165C,235C,303C,322C 'full':198C 'gateway':114C,121C,162C 'generative':10B 'generative-ai':9B 'green':125C 'have':203C 'header':118C 'health':126C 'here':30C,97C,195C 'highlighted':136C 'how':39C 'i':17C,40C,47C,202C,216C 'identifier':171C 'image':232C 'images':326C 'in':4A,34C,205C,248C 'in-place':247C 'indicator':128C 'input':315C 'instances':140C 'interface':117C 'interventions':167C 'it':52C 'jobs':143C 'large':236C 'left':129C 'line':323C 'list':184C,199C 'list/poll/log/write/kill/etc':271C 'llms':12B 'localhost':109C 'logs':150C 'm':48C 'mac':29C 'main':154C 'manage':267C 'markdown/text':290C 'me':181C 'message':174C,314C,318C 'my':28C,35C 'navigation':132C 'new':328C 'node':304C 'nodes':146C,309C 'notes':37C 'of':63C,101C,111C,185C,200C 'off':311C 'offset/limit':234C 'ok':127C 'on':27C,38C,108C 'ones':215C 'ongoing':36C 'only':214C 'open/navigate/snapshot/screenshot/act/etc':295C 'openclaw':3A,16B,21C,113C,120C,207C 'openclaw.ai':23C 'openclaw.ai/)':22C 'optionally':262C 'or':231C 'overview':138C 'parent':243C 'paste':325C 'place':249C 'placeholder':317C 'pm':178C 'precise':246C 'present/eval/snapshot':299C 'process':266C 'processes':256C 'programmatically':219C 'pty':263C 'questions':65C 'quick':166C 'read':226C,227C 'readable':288C 'reads':179C 'rendering':297C,306C 'replacement':254C 'resources':152C 'response':193C 'root':93C 'run':258C 'running':2A,20C,69C,90C,268C 's':98C,196C 'screenshot':100C,110C 'search':274C,275C,279C 'sections':133C 'send':320C,332C 'serves':107C 'session':164C,208C,329C 'sessions':141C,270C 'set':41C 'setting':75C 'settings':147C 'shell':255C,260C 'shift':321C 'show':180C 'shows':119C,313C 'sidebar':130C 'skills':145C 'states':194C 'static.simonwillison.net':335C 'static.simonwillison.net/static/2026/openclaw-web-ui.jpg)':334C 'string':253C 'subtitle':160C 'supports':233C 'surface':302C 'telegram':78C,169C 'text':230C 'that':42C,105C 'the':32C,45C,84C,102C,112C,191C,197C,213C,276C 'their':54C 'these':211C 'this':106C,206C 'those':64C 'til':1A,8B 'til.simonwillison.net':59C,67C,73C,81C,88C,95C,337C 'til.simonwillison.net/llms/openclaw-docker#accessing-the-web-ui)':87C 'til.simonwillison.net/llms/openclaw-docker#answering-all-of-those-questions)':66C 'til.simonwillison.net/llms/openclaw-docker#running-administrative-commands)':72C 'til.simonwillison.net/llms/openclaw-docker#running-commands-as-root)':94C 'til.simonwillison.net/llms/openclaw-docker#setting-up-a-telegram-bot)':80C 'til.simonwillison.net/llms/openclaw-docker#use-their-docker-compose-configuration)':58C 'timeouts':265C 'to':50C,319C 'tools':190C,201C,223C 'ui':86C,104C,296C 'up':43C,76C 'url':285C 'use':53C 'user':173C 'using':25C,49C 've':18C 'web':85C,103C,116C,272C,273C,277C,281C 'with':123C,159C,316C 'workspace':225C 'write':238C 'your':187C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-01-31 21:44:02+00:00
{
  "id": 2013,
  "slug": "andrej-karpathy",
  "quotation": "Originally in 2019, GPT-2 was trained by OpenAI on 32 TPU v3 chips for 168 hours (7 days), with $8/hour/TPUv3 back then, for a total cost of approx. $43K. It achieves 0.256525 CORE score, which is an ensemble metric introduced in the DCLM paper over 22 evaluations like ARC/MMLU/etc.\r\n\r\nAs of the last few improvements merged into nanochat (many of them originating in modded-nanogpt repo), I can now reach a higher CORE score in 3.04 hours (~$73) on a single 8XH100 node. This is a 600X cost reduction over 7 years, i.e. the cost to train GPT-2 is falling approximately 2.5X every year.",
  "source": "Andrej Karpathy",
  "source_url": "https://twitter.com/karpathy/status/2017703360393318587",
  "created": "2026-01-31T21:44:02+00:00",
  "metadata": {},
  "search_document": "'-2':5A,101A,119B '0.256525':33A '168':16A '2.5':105A '2019':3A '22':47A '3.04':78A '32':11A '43k':30A '600x':89A '7':18A,93A '73':80A '8/hour/tpuv3':21A '8xh100':84A 'a':25A,73A,82A,88A 'achieves':32A 'ai':109B,116B 'an':38A 'andrej':112B,120C 'andrej-karpathy':111B 'approx':29A 'approximately':104A 'arc/mmlu/etc':50A 'as':51A 'back':22A 'by':8A 'can':70A 'chips':14A 'core':34A,75A 'cost':27A,90A,97A 'days':19A 'dclm':44A 'ensemble':39A 'evaluations':48A 'every':107A 'falling':103A 'few':55A 'for':15A,24A 'generative':115B 'generative-ai':114B 'gpt':4A,100A,118B 'higher':74A 'hours':17A,79A 'i':69A 'i.e':95A 'improvements':56A 'in':2A,42A,64A,77A 'into':58A 'introduced':41A 'is':37A,87A,102A 'it':31A 'karpathy':113B,121C 'last':54A 'like':49A 'llms':117B 'many':60A 'merged':57A 'metric':40A 'modded':66A 'modded-nanogpt':65A 'nanochat':59A 'nanogpt':67A 'node':85A 'now':71A 'of':28A,52A,61A 'on':10A,81A 'openai':9A,110B 'originally':1A 'originating':63A 'over':46A,92A 'paper':45A 'reach':72A 'reduction':91A 'repo':68A 'score':35A,76A 'single':83A 'the':43A,53A,96A 'them':62A 'then':23A 'this':86A 'to':98A 'total':26A 'tpu':12A 'train':99A 'trained':7A 'v3':13A 'was':6A 'which':36A 'with':20A 'x':106A 'year':108A 'years':94A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": null
}
blogmark 2026-01-31 01:22:15+00:00
{
  "id": 9266,
  "slug": "collective-efficacy",
  "link_url": "https://interconnected.org/home/2026/01/30/efficacy",
  "link_title": "Singing the gospel of collective efficacy",
  "via_url": null,
  "via_title": null,
  "commentary": "Lovely piece from Matt Webb about how you can \"just do things\" to help make your community better for everyone:\r\n\r\n> Similarly we all love when the swifts visit (beautiful birds), so somebody started a group to get swift nest boxes made and installed collectively, then applied for subsidy funding, then got everyone to chip in such that people who couldn\u2019t afford it could have their boxes paid for, and now suddenly we\u2019re all writing to MPs and following the legislation to include swift nesting sites in new build houses. Etc.\r\n>\r\n> It\u2019s called *collective efficacy*, the belief that you can make a difference by acting together.\r\n\r\nMy current favorite \"you can just do things\" is a bit of a stretch, but apparently you can just build a successful software company for 20 years and then use the proceeds to [start a theater in Baltimore](https://bmoreart.com/2024/09/the-voxel-is-a-cutting-edge-theater-experiment.html) (for \"research\") and give the space away to artists for free.",
  "created": "2026-01-31T01:22:15+00:00",
  "metadata": {},
  "search_document": "'/2024/09/the-voxel-is-a-cutting-edge-theater-experiment.html)':159C '20':144C 'a':44C,114C,128C,131C,139C,153C 'about':16C 'acting':117C 'afford':72C 'all':33C,85C 'and':52C,80C,89C,146C,162C 'apparently':134C 'applied':56C 'artists':168C 'away':166C 'baltimore':156C 'beautiful':39C 'belief':109C 'better':28C 'birds':40C 'bit':129C 'bmoreart.com':158C 'bmoreart.com/2024/09/the-voxel-is-a-cutting-edge-theater-experiment.html)':157C 'boxes':50C,77C 'build':100C,138C 'but':133C 'by':116C 'called':105C 'can':19C,112C,123C,136C 'chip':64C 'collective':5A,106C 'collectively':54C 'community':27C 'company':142C 'could':74C 'couldn':70C 'current':120C 'difference':115C 'do':21C,125C 'efficacy':6A,107C 'etc':102C 'everyone':30C,62C 'favorite':121C 'following':90C 'for':29C,57C,79C,143C,160C,169C 'free':170C 'from':13C 'funding':59C 'get':47C 'give':163C 'gospel':3A 'got':61C 'group':45C 'have':75C 'help':24C 'houses':101C 'how':17C 'in':65C,98C,155C 'include':94C 'installed':53C 'interconnected.org':171C 'is':127C 'it':73C,103C 'just':20C,124C,137C 'legislation':92C 'love':34C 'lovely':11C 'made':51C 'make':25C,113C 'matt':8B,14C 'matt-webb':7B 'mps':88C 'my':119C 'nest':49C 'nesting':96C 'new':99C 'now':81C 'of':4A,130C 'paid':78C 'people':68C 'piece':12C 'proceeds':150C 're':84C 'research':161C 's':104C 'similarly':31C 'singing':1A 'sites':97C 'so':41C 'software':141C 'somebody':42C 'space':165C 'start':152C 'started':43C 'stretch':132C 'subsidy':58C 'successful':140C 'such':66C 'suddenly':82C 'swift':48C,95C 'swifts':37C 't':71C 'that':67C,110C 'the':2A,36C,91C,108C,149C,164C 'theater':154C 'theatre':10B 'their':76C 'then':55C,60C,147C 'things':22C,126C 'to':23C,46C,63C,87C,93C,151C,167C 'together':118C 'use':148C 'visit':38C 'we':32C,83C 'webb':9B,15C 'when':35C 'who':69C 'writing':86C 'years':145C 'you':18C,111C,122C,135C 'your':26C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-01-30 22:31:09+00:00
{
  "id": 2012,
  "slug": "steve-yegge",
  "quotation": "Getting agents using Beads requires much less prompting, because Beads now has 4 months of \u201cDesire Paths\u201d design, which I\u2019ve talked about before. Beads has evolved a very complex command-line interface, with 100+ subcommands, each with many sub-subcommands, aliases, alternate syntaxes, and other affordances.\r\n\r\nThe complicated Beads CLI isn\u2019t for humans; it\u2019s for agents. What I did was make their hallucinations real, over and over, by implementing whatever I saw the agents trying to do with Beads, until nearly every guess by an agent is now correct.",
  "source": "Steve Yegge",
  "source_url": "https://steve-yegge.medium.com/software-survival-3-0-97a2a6255f7b",
  "created": "2026-01-30T22:31:09+00:00",
  "metadata": {},
  "search_document": "'100':36A '4':13A 'a':28A 'about':23A 'affordances':49A 'agent':91A 'agents':2A,61A,79A,105B,109B 'ai':98B,101B,104B 'ai-agents':103B 'aliases':44A 'alternate':45A 'an':90A 'and':47A,71A 'beads':4A,10A,25A,52A,84A 'because':9A 'before':24A 'by':73A,89A 'cli':53A 'coding':108B 'coding-agents':107B 'command':32A 'command-line':31A 'complex':30A 'complicated':51A 'correct':94A 'design':18A 'desire':16A 'did':64A 'do':82A 'each':38A 'every':87A 'evolved':27A 'for':56A,60A 'generative':100B 'generative-ai':99B 'getting':1A 'guess':88A 'hallucinations':68A,106B 'has':12A,26A 'humans':57A 'i':20A,63A,76A 'implementing':74A 'interface':34A 'is':92A 'isn':54A 'it':58A 'less':7A 'line':33A 'llms':102B 'make':66A 'many':40A 'months':14A 'much':6A 'nearly':86A 'now':11A,93A 'of':15A 'other':48A 'over':70A,72A 'paths':17A 'prompting':8A 'real':69A 'requires':5A 's':59A 'saw':77A 'steve':96B,110C 'steve-yegge':95B 'sub':42A 'sub-subcommands':41A 'subcommands':37A,43A 'syntaxes':46A 't':55A 'talked':22A 'the':50A,78A 'their':67A 'to':81A 'trying':80A 'until':85A 'using':3A 've':21A 'very':29A 'was':65A 'what':62A 'whatever':75A 'which':19A 'with':35A,39A,83A 'yegge':97B,111C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "Software Survival 3.0"
}
blogmark 2026-01-30 03:51:53+00:00
{
  "id": 9265,
  "slug": "a-programming-tool-for-the-arts",
  "link_url": "https://www.tiktok.com/@chris_ashworth/video/7600801037292768525",
  "link_title": "We gotta talk about AI as a programming tool for the arts",
  "via_url": null,
  "via_title": null,
  "commentary": "Chris Ashworth is the creator and CEO of [QLab](https://en.wikipedia.org/wiki/QLab), a macOS software package for \u201ccue-based, multimedia playback\u201d which is designed to automate lighting and audio for live theater productions.\r\n\r\nI recently started following him on TikTok where he posts about his business and theater automation in general - Chris founded [the Voxel](https://voxel.org/faq/) theater in Baltimore which QLab use as a combined performance venue, teaching hub and research lab (here's [a profile of the theater](https://bmoreart.com/2024/09/the-voxel-is-a-cutting-edge-theater-experiment.html)), and the resulting videos offer a fascinating glimpse into a world I know virtually nothing about.\r\n\r\n[This latest TikTok](https://www.tiktok.com/@chris_ashworth/video/7600801037292768525) describes his Claude Opus moment, after he used Claude Code to build a custom lighting design application for a *very* niche project and put together a useful application in just a few days that he would never have been able to spare the time for otherwise.\r\n\r\nChris works full time in the arts and comes at generative AI from a position of rational distrust. It's interesting to see him working through that tension to acknowledge that there are valuable applications here to build tools for the community he serves.\r\n\r\n> I have been at least gently skeptical about all this stuff for the last two years. Every time I checked in on it, I thought it was garbage, wasn't interested in it, wasn't useful. [...] But as a programmer, if you hear something like, this is changing programming, it's important to go check it out once in a while. So I went and checked it out a few weeks ago. And it's different. It's astonishing. [...]\r\n>\r\n> One thing I learned in this exercise is that it can't make you a fundamentally better programmer than you already are. It can take a person who is a bad programmer and make them faster at making bad programs. And I think it can take a person who is a good programmer and, from what I've tested so far, make them faster at making good programs. [...] You see programmers out there saying, \"I'm shipping code I haven't looked at and don't understand.\" I'm terrified by that. I think that's awful. But if you're capable of understanding the code that it's writing, and directing, designing, editing, deleting, being quality control on it, it's kind of astonishing. [...]\r\n>\r\n> The positive thing I see here, and I think is worth coming to terms with, is this is an application that I would never have had time to write as a professional programmer. Because the audience is three people. [...] There's no way it was worth it to me to spend my energy of 20 years designing and implementing software for artists to build an app for three people that is this level of polish. And it took me a few days. [...]\r\n>\r\n> I know there are a lot of people who really hate this technology, and in some ways I'm among them. But I think we've got to come to terms with this is a career-changing moment. And I really hate that I'm saying that because I didn't believe it for the last two years. [...] It's like having a room full of power tools. I wouldn't want to send an untrained person into a room full of power tools because they might chop off their fingers. But if someone who knows how to use tools has the option to have both hand tools and a power saw and a power drill and a lathe, there's a lot of work they can do with those tools at a lot faster speed.",
  "created": "2026-01-30T03:51:53+00:00",
  "metadata": {},
  "search_document": "'/2024/09/the-voxel-is-a-cutting-edge-theater-experiment.html)),':117C '/@chris_ashworth/video/7600801037292768525)':139C '/faq/)':91C '/wiki/qlab),':44C '20':488C 'a':7A,45C,99C,110C,123C,127C,152C,158C,165C,170C,199C,268C,289C,298C,323C,334C,338C,355C,359C,464C,513C,520C,550C,579C,595C,626C,630C,634C,638C,649C 'able':179C 'about':4A,77C,133C,237C 'acknowledge':215C 'after':145C 'agents':29B 'ago':301C 'ai':5A,14B,17B,20B,25B,197C 'ai-assisted-programming':19B 'ai-ethics':24B 'all':238C 'already':329C 'among':535C 'an':452C,498C,591C 'and':38C,61C,80C,105C,118C,162C,193C,294C,302C,341C,349C,362C,392C,419C,440C,491C,509C,529C,555C,625C,629C,633C 'app':499C 'application':156C,167C,453C 'applications':220C 'are':218C,330C,519C 'artists':495C 'arts':12A,192C 'as':6A,98C,267C,463C 'ashworth':34C 'assisted':21B 'astonishing':308C,433C 'at':195C,233C,345C,373C,391C,648C 'audience':469C 'audio':62C 'automate':59C 'automation':82C 'awful':405C 'bad':339C,347C 'baltimore':94C 'based':52C 'because':467C,564C,601C 'been':178C,232C 'being':424C 'believe':568C 'better':325C 'bmoreart.com':116C 'bmoreart.com/2024/09/the-voxel-is-a-cutting-edge-theater-experiment.html)),':115C 'both':622C 'build':151C,223C,497C 'business':79C 'but':266C,406C,537C,608C 'by':399C 'can':319C,332C,353C,643C 'capable':410C 'career':552C 'career-changing':551C 'ceo':39C 'changing':277C,553C 'check':284C 'checked':249C,295C 'chop':604C 'chris':33C,85C,186C 'claude':31B,142C,148C 'claude-code':30B 'code':32B,149C,386C,414C 'coding':28B 'coding-agents':27B 'combined':100C 'come':544C 'comes':194C 'coming':445C 'community':227C 'control':426C 'creator':37C 'cue':51C 'cue-based':50C 'custom':153C 'days':172C,515C 'deleting':423C 'describes':140C 'design':155C 'designed':57C 'designing':421C,490C 'didn':566C 'different':305C 'directing':420C 'distrust':203C 'do':644C 'don':393C 'drill':632C 'editing':422C 'en.wikipedia.org':43C 'en.wikipedia.org/wiki/qlab),':42C 'energy':486C 'ethics':26B 'every':246C 'exercise':315C 'far':369C 'fascinating':124C 'faster':344C,372C,651C 'few':171C,299C,514C 'fingers':607C 'following':70C 'for':10A,49C,63C,157C,184C,225C,241C,494C,500C,570C 'founded':86C 'from':198C,363C 'full':188C,581C,597C 'fundamentally':324C 'garbage':257C 'general':84C 'generative':16B,196C 'generative-ai':15B 'gently':235C 'glimpse':125C 'go':283C 'good':360C,375C 'got':542C 'gotta':2A 'had':459C 'hand':623C 'has':617C 'hate':526C,558C 'have':177C,231C,458C,621C 'haven':388C 'having':578C 'he':75C,146C,174C,228C 'hear':272C 'here':108C,221C,439C 'him':71C,209C 'his':78C,141C 'how':613C 'hub':104C 'i':67C,129C,230C,248C,253C,292C,311C,350C,365C,383C,387C,396C,401C,437C,441C,455C,516C,533C,538C,556C,560C,565C,585C 'if':270C,407C,609C 'implementing':492C 'important':281C 'in':83C,93C,168C,190C,250C,261C,288C,313C,530C 'interested':260C 'interesting':206C 'into':126C,594C 'is':35C,56C,276C,316C,337C,358C,443C,449C,451C,470C,504C,549C 'it':204C,252C,255C,262C,279C,285C,296C,303C,306C,318C,331C,352C,416C,428C,429C,477C,480C,510C,569C,575C 'just':169C 'kind':431C 'know':130C,517C 'knows':612C 'lab':107C 'last':243C,572C 'latest':135C 'lathe':635C 'learned':312C 'least':234C 'level':506C 'lighting':60C,154C 'like':274C,577C 'live':64C 'llms':18B 'looked':390C 'lot':521C,639C,650C 'm':384C,397C,534C,561C 'macos':46C 'make':321C,342C,370C 'making':346C,374C 'me':482C,512C 'might':603C 'moment':144C,554C 'multimedia':53C 'my':485C 'never':176C,457C 'niche':160C 'no':475C 'nothing':132C 'of':40C,112C,201C,411C,432C,487C,507C,522C,582C,598C,640C 'off':605C 'offer':122C 'on':72C,251C,427C 'once':287C 'one':309C 'option':619C 'opus':143C 'otherwise':185C 'out':286C,297C,380C 'package':48C 'people':472C,502C,523C 'performance':101C 'person':335C,356C,593C 'playback':54C 'polish':508C 'position':200C 'positive':435C 'posts':76C 'power':583C,599C,627C,631C 'productions':66C 'professional':465C 'profile':111C 'programmer':269C,326C,340C,361C,466C 'programmers':379C 'programming':8A,22B,278C 'programs':348C,376C 'project':161C 'put':163C 'qlab':41C,96C 'quality':425C 'rational':202C 're':409C 'really':525C,557C 'recently':68C 'research':106C 'resulting':120C 'room':580C,596C 's':109C,205C,280C,304C,307C,404C,417C,430C,474C,576C,637C 'saw':628C 'saying':382C,562C 'see':208C,378C,438C 'send':590C 'serves':229C 'shipping':385C 'skeptical':236C 'so':291C,368C 'software':47C,493C 'some':531C 'someone':610C 'something':273C 'spare':181C 'speed':652C 'spend':484C 'started':69C 'stuff':240C 't':259C,264C,320C,389C,394C,567C,587C 'take':333C,354C 'talk':3A 'teaching':103C 'technology':528C 'tension':213C 'terms':447C,546C 'terrified':398C 'tested':367C 'than':327C 'that':173C,212C,216C,317C,400C,403C,415C,454C,503C,559C,563C 'the':11A,36C,87C,113C,119C,182C,191C,226C,242C,413C,434C,468C,571C,618C 'theater':65C,81C,92C,114C 'theatre':13B 'their':606C 'them':343C,371C,536C 'there':217C,381C,473C,518C,636C 'they':602C,642C 'thing':310C,436C 'think':351C,402C,442C,539C 'this':134C,239C,275C,314C,450C,505C,527C,548C 'those':646C 'thought':254C 'three':471C,501C 'through':211C 'tiktok':23B,73C,136C 'time':183C,189C,247C,460C 'to':58C,150C,180C,207C,214C,222C,282C,446C,461C,481C,483C,496C,543C,545C,589C,614C,620C 'together':164C 'took':511C 'tool':9A 'tools':224C,584C,600C,616C,624C,647C 'two':244C,573C 'understand':395C 'understanding':412C 'untrained':592C 'use':97C,615C 'used':147C 'useful':166C,265C 'valuable':219C 've':366C,541C 'venue':102C 'very':159C 'videos':121C 'virtually':131C 'voxel':88C 'voxel.org':90C 'voxel.org/faq/)':89C 'want':588C 'was':256C,478C 'wasn':258C,263C 'way':476C 'ways':532C 'we':1A,540C 'weeks':300C 'went':293C 'what':364C 'where':74C 'which':55C,95C 'while':290C 'who':336C,357C,524C,611C 'with':448C,547C,645C 'work':641C 'working':210C 'works':187C 'world':128C 'worth':444C,479C 'would':175C,456C 'wouldn':586C 'write':462C 'writing':418C 'www.tiktok.com':138C,653C 'www.tiktok.com/@chris_ashworth/video/7600801037292768525)':137C 'years':245C,489C,574C 'you':271C,322C,328C,377C,408C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-01-29 20:18:55+00:00
{
  "id": 9264,
  "slug": "95-percent",
  "link_url": "https://www.exponentialview.co/p/how-95-escaped-into-the-world",
  "link_title": "How \u201c95%\u201d escaped into the world \u2013 and why so many believed it",
  "via_url": null,
  "via_title": null,
  "commentary": ".",
  "created": "2026-01-29T20:18:55+00:00",
  "metadata": {},
  "search_document": "'95':2A 'and':7A 'believed':11A 'escaped':3A 'how':1A 'into':4A 'it':12A 'many':10A 'so':9A 'the':5A 'why':8A 'world':6A 'www.exponentialview.co':13C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": true,
  "title": ""
}
blogmark 2026-01-29 17:21:51+00:00
{
  "id": 9263,
  "slug": "datasette-10a24",
  "link_url": "https://docs.datasette.io/en/latest/changelog.html#a24-2026-01-29",
  "link_title": "Datasette 1.0a24",
  "via_url": null,
  "via_title": null,
  "commentary": "New Datasette alpha this morning. Key new features:\r\n\r\n- Datasette's `Request` object can now handle `multipart/form-data` file uploads via the new [await request.form(files=True)](https://docs.datasette.io/en/latest/internals.html#internals-formdata)  method. I plan to use this for a `datasette-files` plugin to support attaching files to rows of data.\r\n- The [recommended development environment](https://docs.datasette.io/en/latest/contributing.html#setting-up-a-development-environment) for hacking on Datasette itself now uses [uv](https://github.com/astral-sh/uv). Crucially, you can clone Datasette and run `uv run pytest` to run the tests without needing to manually create a virtual environment or install dependencies first, thanks to the [dev dependency group pattern](https://til.simonwillison.net/uv/dependency-groups).\r\n- A new `?_extra=render_cell` parameter for both table and row JSON pages to return the results of executing the [render_cell() plugin hook](https://docs.datasette.io/en/latest/plugin_hooks.html#render-cell-row-value-column-table-database-datasette-request). This should unlock new JavaScript UI features in the future.\r\n\r\nMore details [in the release notes](https://docs.datasette.io/en/latest/changelog.html#a24-2026-01-29). I also invested a bunch of work in eliminating flaky tests that were intermittently failing in CI - I *think* those are all handled now.",
  "created": "2026-01-29T17:21:51+00:00",
  "metadata": {},
  "search_document": "'/astral-sh/uv).':77C '/en/latest/changelog.html#a24-2026-01-29).':159C '/en/latest/contributing.html#setting-up-a-development-environment)':66C '/en/latest/internals.html#internals-formdata)':39C '/en/latest/plugin_hooks.html#render-cell-row-value-column-table-database-datasette-request).':140C '/uv/dependency-groups).':113C '1.0':2A 'a':47C,97C,114C,163C 'a24':3A 'all':181C 'alpha':14C 'also':161C 'and':83C,123C 'annotated':8B 'annotated-release-notes':7B 'are':180C 'attaching':54C 'await':33C 'both':121C 'bunch':164C 'can':24C,80C 'cell':118C,135C 'ci':176C 'clone':81C 'create':96C 'crucially':78C 'data':59C 'datasette':1A,6B,13C,20C,49C,70C,82C 'datasette-files':48C 'dependencies':102C 'dependency':108C 'details':152C 'dev':107C 'development':62C 'docs.datasette.io':38C,65C,139C,158C,184C 'docs.datasette.io/en/latest/changelog.html#a24-2026-01-29).':157C 'docs.datasette.io/en/latest/contributing.html#setting-up-a-development-environment)':64C 'docs.datasette.io/en/latest/internals.html#internals-formdata)':37C 'docs.datasette.io/en/latest/plugin_hooks.html#render-cell-row-value-column-table-database-datasette-request).':138C 'eliminating':168C 'environment':63C,99C 'executing':132C 'extra':116C 'failing':174C 'features':19C,147C 'file':28C 'files':35C,50C,55C 'first':103C 'flaky':169C 'for':46C,67C,120C 'future':150C 'github.com':76C 'github.com/astral-sh/uv).':75C 'group':109C 'hacking':68C 'handle':26C 'handled':182C 'hook':137C 'i':41C,160C,177C 'in':148C,153C,167C,175C 'install':101C 'intermittently':173C 'invested':162C 'itself':71C 'javascript':145C 'json':125C 'key':17C 'manually':95C 'method':40C 'more':151C 'morning':16C 'multipart/form-data':27C 'needing':93C 'new':12C,18C,32C,115C,144C 'notes':10B,156C 'now':25C,72C,183C 'object':23C 'of':58C,131C,165C 'on':69C 'or':100C 'pages':126C 'parameter':119C 'pattern':110C 'plan':42C 'plugin':51C,136C 'projects':4B 'pytest':87C 'python':5B 'recommended':61C 'release':9B,155C 'render':117C,134C 'request':22C 'request.form':34C 'results':130C 'return':128C 'row':124C 'rows':57C 'run':84C,86C,89C 's':21C 'should':142C 'support':53C 'table':122C 'tests':91C,170C 'thanks':104C 'that':171C 'the':31C,60C,90C,106C,129C,133C,149C,154C 'think':178C 'this':15C,45C,141C 'those':179C 'til.simonwillison.net':112C 'til.simonwillison.net/uv/dependency-groups).':111C 'to':43C,52C,56C,88C,94C,105C,127C 'true':36C 'ui':146C 'unlock':143C 'uploads':29C 'use':44C 'uses':73C 'uv':11B,74C,85C 'via':30C 'virtual':98C 'were':172C 'without':92C 'work':166C 'you':79C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-01-28 21:44:29+00:00
{
  "id": 9262,
  "slug": "the-five-levels",
  "link_url": "https://www.danshapiro.com/blog/2026/01/the-five-levels-from-spicy-autocomplete-to-the-software-factory/",
  "link_title": "The Five Levels: from Spicy Autocomplete to the Dark Factory",
  "via_url": null,
  "via_title": null,
  "commentary": "Dan Shapiro proposes a five level model of AI-assisted programming, inspired by the five (or rather six, it's zero-indexed) [levels of driving automation](https://www.nhtsa.gov/sites/nhtsa.gov/files/2022-05/Level-of-Automation-052522-tag.pdf).\r\n\r\n<ol start=\"0\">\r\n<li><strong>Spicy autocomplete</strong>, aka original GitHub Copilot or copying and pasting snippets from ChatGPT.</li>\r\n<li>The <strong>coding intern</strong>, writing unimportant snippets and boilerplate with full human review.</li>\r\n<li>The <strong>junior developer</strong>, pair programming with the model but still reviewing every line.</li>\r\n<li>The <strong>developer</strong>. Most code is generated by AI, and you take on the role of full-time code reviewer.</li>\r\n<li>The <strong>engineering team</strong>. You're more of an engineering manager or product/program/project manager. You collaborate on specs and plans, the agents do the work.</li>\r\n<li>The <strong>dark software factory</strong>, like a factory run by robots where the lights are out because robots don't need to see.</li>\r\n</ol>\r\n\r\nDan says about that last category:\r\n\r\n> At level 5, it's not really a car any more. You're not really running anybody else's software any more. And your software process isn't really a software process any more. It's a black box that turns specs into software.\r\n>\r\n> Why Dark? Maybe you've heard of the Fanuc Dark Factory, [the robot factory staffed by robots](https://www.organizedergi.com/News/5493/robots-the-maker-of-robots-in-fanuc-s-dark-factory). It's dark, because it's a place where humans are neither needed nor welcome.\r\n>\r\n> I know a handful of people who are doing this. They're small teams, less than five people. And what they're doing is nearly unbelievable -- and it will likely be our future.\r\n\r\nI've talked to one team that's doing the pattern hinted at here. It was *fascinating*. The key characteristics:\r\n\r\n- Nobody reviews AI-produced code, ever. They don't even look at it.\r\n- The goal of the system is to prove that the system works. A huge amount of the coding agent work goes into testing and tooling and simulating related systems and running demos.\r\n- The role of the humans is to design that system - to find new patterns that can help the agents work more effectively and demonstrate that the software they are building is robust and effective.\r\n\r\nIt was a tiny team and they stuff they had built in just a few months looked very convincing to me. Some of them had 20+ years of experience as software developers working on systems with high reliability requirements, so they were not approaching this from a naive perspective.\r\n\r\nI'm hoping they come out of stealth soon because I can't really share more details than this.\r\n\r\n**Update 7th February 2026**: The demo was by StrongDM's AI team, and they've now [gone public with details of how they work](https://simonwillison.net/2026/Feb/7/software-factory/).",
  "created": "2026-01-28T21:44:29+00:00",
  "metadata": {},
  "search_document": "'/2026/feb/7/software-factory/).':470C '/news/5493/robots-the-maker-of-robots-in-fanuc-s-dark-factory).':227C '/sites/nhtsa.gov/files/2022-05/level-of-automation-052522-tag.pdf).':53C '20':401C '2026':447C '5':166C '7th':445C 'a':26C,141C,171C,193C,200C,234C,245C,322C,378C,389C,422C 'about':160C 'agent':328C 'agents':22B,132C,360C 'ai':11B,14B,17B,32C,99C,299C,454C 'ai-assisted':31C 'ai-assisted-programming':16B 'ai-produced':298C 'aka':56C 'amount':324C 'an':119C 'and':62C,73C,100C,129C,186C,261C,269C,333C,335C,339C,364C,374C,381C,456C 'any':173C,184C,196C 'anybody':180C 'approaching':419C 'are':149C,238C,250C,370C 'as':405C 'assisted':18B,33C 'at':164C,288C,308C 'autocomplete':6A,55C 'automation':50C 'be':273C 'because':151C,231C,434C 'black':201C 'boilerplate':74C 'box':202C 'building':371C 'built':386C 'but':87C 'by':36C,98C,144C,223C,451C 'can':357C,436C 'car':172C 'category':163C 'characteristics':295C 'chatgpt':66C 'code':95C,110C,301C 'coding':21B,68C,327C 'coding-agents':20B 'collaborate':126C 'come':429C 'convincing':394C 'copilot':59C 'copying':61C 'dan':23C,158C 'dark':9A,137C,209C,217C,230C 'demo':449C 'demonstrate':365C 'demos':341C 'design':349C 'details':441C,463C 'developer':81C,93C 'developers':407C 'do':133C 'doing':251C,265C,284C 'don':153C,304C 'driving':49C 'effective':375C 'effectively':363C 'else':181C 'engineering':113C,120C 'even':306C 'ever':302C 'every':90C 'experience':404C 'factory':10A,139C,142C,218C,221C 'fanuc':216C 'fascinating':292C 'february':446C 'few':390C 'find':353C 'five':2A,27C,38C,259C 'from':4A,65C,421C 'full':76C,108C 'full-time':107C 'future':275C 'generated':97C 'generative':13B 'generative-ai':12B 'github':58C 'goal':311C 'goes':330C 'gone':460C 'had':385C,400C 'handful':246C 'heard':213C 'help':358C 'here':289C 'high':412C 'hinted':287C 'hoping':427C 'how':465C 'huge':323C 'human':77C 'humans':237C,346C 'i':243C,276C,425C,435C 'in':387C 'indexed':46C 'inspired':35C 'intern':69C 'into':206C,331C 'is':96C,266C,315C,347C,372C 'isn':190C 'it':42C,167C,198C,228C,232C,270C,290C,309C,376C 'junior':80C 'just':388C 'key':294C 'know':244C 'last':162C 'less':257C 'level':28C,165C 'levels':3A,47C 'lights':148C 'like':140C 'likely':272C 'line':91C 'llms':15B 'look':307C 'looked':392C 'm':426C 'manager':121C,124C 'maybe':210C 'me':396C 'model':29C,86C 'months':391C 'more':117C,174C,185C,197C,362C,440C 'most':94C 'naive':423C 'nearly':267C 'need':155C 'needed':240C 'neither':239C 'new':354C 'nobody':296C 'nor':241C 'not':169C,177C,418C 'now':459C 'of':30C,48C,106C,118C,214C,247C,312C,325C,344C,398C,403C,431C,464C 'on':103C,127C,409C 'one':280C 'or':39C,60C,122C 'original':57C 'our':274C 'out':150C,430C 'pair':82C 'pasting':63C 'pattern':286C 'patterns':355C 'people':248C,260C 'perspective':424C 'place':235C 'plans':130C 'process':189C,195C 'produced':300C 'product/program/project':123C 'programming':19B,34C,83C 'proposes':25C 'prove':317C 'public':461C 'rather':40C 're':116C,176C,254C,264C 'really':170C,178C,192C,438C 'related':337C 'reliability':413C 'requirements':414C 'review':78C 'reviewer':111C 'reviewing':89C 'reviews':297C 'robot':220C 'robots':145C,152C,224C 'robust':373C 'role':105C,343C 'run':143C 'running':179C,340C 's':43C,168C,182C,199C,229C,233C,283C,453C 'says':159C 'see':157C 'shapiro':24C 'share':439C 'simonwillison.net':469C 'simonwillison.net/2026/feb/7/software-factory/).':468C 'simulating':336C 'six':41C 'small':255C 'snippets':64C,72C 'so':415C 'software':138C,183C,188C,194C,207C,368C,406C 'some':397C 'soon':433C 'specs':128C,205C 'spicy':5A,54C 'staffed':222C 'stealth':432C 'still':88C 'strongdm':452C 'stuff':383C 'system':314C,320C,351C 'systems':338C,410C 't':154C,191C,305C,437C 'take':102C 'talked':278C 'team':114C,281C,380C,455C 'teams':256C 'testing':332C 'than':258C,442C 'that':161C,203C,282C,318C,350C,356C,366C 'the':1A,8A,37C,67C,79C,85C,92C,104C,112C,131C,134C,136C,147C,215C,219C,285C,293C,310C,313C,319C,326C,342C,345C,359C,367C,448C 'them':399C 'they':253C,263C,303C,369C,382C,384C,416C,428C,457C,466C 'this':252C,420C,443C 'time':109C 'tiny':379C 'to':7A,156C,279C,316C,348C,352C,395C 'tooling':334C 'turns':204C 'unbelievable':268C 'unimportant':71C 'update':444C 've':212C,277C,458C 'very':393C 'was':291C,377C,450C 'welcome':242C 'were':417C 'what':262C 'where':146C,236C 'who':249C 'why':208C 'will':271C 'with':75C,84C,411C,462C 'work':135C,329C,361C,467C 'working':408C 'works':321C 'writing':70C 'www.danshapiro.com':471C 'www.nhtsa.gov':52C 'www.nhtsa.gov/sites/nhtsa.gov/files/2022-05/level-of-automation-052522-tag.pdf).':51C 'www.organizedergi.com':226C 'www.organizedergi.com/news/5493/robots-the-maker-of-robots-in-fanuc-s-dark-factory).':225C 'years':402C 'you':101C,115C,125C,175C,211C 'your':187C 'zero':45C 'zero-indexed':44C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-01-27 16:58:08+00:00
{
  "id": 9261,
  "slug": "one-human-one-agent-one-browser",
  "link_url": "https://emsh.cat/one-human-one-agent-one-browser/",
  "link_title": "One Human + One Agent = One Browser From Scratch",
  "via_url": "https://news.ycombinator.com/item?id=46779522",
  "via_title": "Show Hacker News",
  "commentary": "embedding-shapes was [so infuriated](https://emsh.cat/cursor-implied-success-without-evidence/) by the hype around Cursor's [FastRender browser project](https://simonwillison.net/2026/Jan/23/fastrender/) - thousands of parallel agents producing ~1.6 million lines of Rust - that they were inspired to take a go at building a web browser using coding agents themselves.\r\n\r\nThe result is [one-agent-one-browser](https://github.com/embedding-shapes/one-agent-one-browser) and it's *really* impressive. Over three days they drove a single Codex CLI agent to build 20,000 lines of Rust that successfully renders HTML+CSS with no Rust crate dependencies at all - though it does (reasonably) use Windows, macOS and Linux system frameworks for image and text rendering.\r\n\r\nI installed the [1MB macOS binary release](https://github.com/embedding-shapes/one-agent-one-browser/releases/tag/0.1.0) and ran it against my blog:\r\n\r\n    chmod 755 ~/Downloads/one-agent-one-browser-macOS-ARM64 \r\n    ~/Downloads/one-agent-one-browser-macOS-ARM64 https://simonwillison.net/\r\n\r\nHere's the result:\r\n\r\n![My blog rendered in a window. Everything is in the right place, the CSS gradients look good, the feed subscribe SVG icon is rendered correctly but there's a missing PNG image.](https://static.simonwillison.net/static/2026/one-agent-simonwillison.jpg)\r\n\r\nIt even rendered my SVG feed subscription icon! A PNG image is missing from the page, which looks like an intermittent bug (there's code to render PNGs).\r\n\r\nThe code is pretty readable too - here's [the flexbox implementation](https://github.com/embedding-shapes/one-agent-one-browser/blob/0.1.0/src/layout/flex.rs).\r\n\r\nI had thought that \"build a web browser\" was the ideal prompt to really stretch the capabilities of coding agents - and that it would take sophisticated multi-agent harnesses (as seen in the Cursor project) and millions of lines of code to achieve.\r\n\r\nTurns out one agent driven by a talented engineer, three days and 20,000 lines of Rust is enough to get a very solid basic renderer working!\r\n\r\nI'm going to upgrade my [prediction for 2029](https://simonwillison.net/2026/Jan/8/llm-predictions-for-2026/#3-years-someone-will-build-a-new-browser-using-mainly-ai-assisted-coding-and-it-won-t-even-be-a-surprise): I think we're going to get a *production-grade* web browser built by a small team using AI assistance by then.",
  "created": "2026-01-27T16:58:08+00:00",
  "metadata": {},
  "search_document": "'/2026/jan/23/fastrender/)':50C '/2026/jan/8/llm-predictions-for-2026/#3-years-someone-will-build-a-new-browser-using-mainly-ai-assisted-coding-and-it-won-t-even-be-a-surprise):':323C '/cursor-implied-success-without-evidence/)':38C '/downloads/one-agent-one-browser-macos-arm64':157C,158C '/embedding-shapes/one-agent-one-browser)':88C '/embedding-shapes/one-agent-one-browser/blob/0.1.0/src/layout/flex.rs).':240C '/embedding-shapes/one-agent-one-browser/releases/tag/0.1.0)':148C '/static/2026/one-agent-simonwillison.jpg)':198C '000':107C,298C '1.6':56C '1mb':142C '20':106C,297C '2029':320C '755':156C 'a':67C,71C,99C,168C,192C,207C,246C,291C,306C,331C,339C 'achieve':284C 'against':152C 'agent':4A,83C,103C,269C,288C 'agents':23B,54C,76C,260C 'ai':11B,15B,18B,343C 'ai-assisted-programming':17B 'all':122C 'an':218C 'and':89C,130C,136C,149C,261C,277C,296C 'around':42C 'as':271C 'assistance':344C 'assisted':19B 'at':69C,121C 'basic':309C 'binary':144C 'blog':154C,165C 'browser':6A,28B,46C,73C,85C,248C,336C 'browser-challenge':27B 'browsers':9B 'bug':220C 'build':105C,245C 'building':70C 'built':337C 'but':189C 'by':39C,290C,338C,345C 'capabilities':257C 'challenge':29B 'chmod':155C 'cli':26B,102C 'code':223C,228C,282C 'codex':25B,101C 'codex-cli':24B 'coding':22B,75C,259C 'coding-agents':21B 'correctly':188C 'crate':119C 'css':115C,177C 'cursor':43C,275C 'days':96C,295C 'dependencies':120C 'does':125C 'driven':289C 'drove':98C 'embedding':31C 'embedding-shapes':30C 'emsh.cat':37C,347C 'emsh.cat/cursor-implied-success-without-evidence/)':36C 'engineer':293C 'enough':303C 'even':200C 'everything':170C 'fastrender':45C 'feed':182C,204C 'flexbox':236C 'for':134C,319C 'frameworks':133C 'from':7A,212C 'generative':14B 'generative-ai':13B 'get':305C,330C 'github.com':87C,147C,239C 'github.com/embedding-shapes/one-agent-one-browser)':86C 'github.com/embedding-shapes/one-agent-one-browser/blob/0.1.0/src/layout/flex.rs).':238C 'github.com/embedding-shapes/one-agent-one-browser/releases/tag/0.1.0)':146C 'go':68C 'going':314C,328C 'good':180C 'grade':334C 'gradients':178C 'hacker':349C 'had':242C 'harnesses':270C 'here':160C,233C 'html':114C 'human':2A 'hype':41C 'i':139C,241C,312C,324C 'icon':185C,206C 'ideal':251C 'image':135C,195C,209C 'implementation':237C 'impressive':93C 'in':167C,172C,273C 'infuriated':35C 'inspired':64C 'installed':140C 'intermittent':219C 'is':80C,171C,186C,210C,229C,302C 'it':90C,124C,151C,199C,263C 'like':217C 'lines':58C,108C,280C,299C 'linux':131C 'llms':16B 'look':179C 'looks':216C 'm':313C 'macos':129C,143C 'million':57C 'millions':278C 'missing':193C,211C 'multi':268C 'multi-agent':267C 'my':153C,164C,202C,317C 'news':350C 'no':117C 'of':52C,59C,109C,258C,279C,281C,300C 'one':1A,3A,5A,82C,84C,287C 'one-agent-one-browser':81C 'out':286C 'over':94C 'page':214C 'parallel':53C 'place':175C 'png':194C,208C 'pngs':226C 'prediction':318C 'predictions':10B 'pretty':230C 'producing':55C 'production':333C 'production-grade':332C 'programming':20B 'project':47C,276C 'prompt':252C 'ran':150C 're':327C 'readable':231C 'really':92C,254C 'reasonably':126C 'release':145C 'render':225C 'rendered':166C,187C,201C 'renderer':310C 'rendering':138C 'renders':113C 'result':79C,163C 'right':174C 'rust':12B,60C,110C,118C,301C 's':44C,91C,161C,191C,222C,234C 'scratch':8A 'seen':272C 'shapes':32C 'show':348C 'simonwillison.net':49C,159C,322C 'simonwillison.net/2026/jan/23/fastrender/)':48C 'simonwillison.net/2026/jan/8/llm-predictions-for-2026/#3-years-someone-will-build-a-new-browser-using-mainly-ai-assisted-coding-and-it-won-t-even-be-a-surprise):':321C 'single':100C 'small':340C 'so':34C 'solid':308C 'sophisticated':266C 'static.simonwillison.net':197C 'static.simonwillison.net/static/2026/one-agent-simonwillison.jpg)':196C 'stretch':255C 'subscribe':183C 'subscription':205C 'successfully':112C 'svg':184C,203C 'system':132C 'take':66C,265C 'talented':292C 'team':341C 'text':137C 'that':61C,111C,244C,262C 'the':40C,78C,141C,162C,173C,176C,181C,213C,227C,235C,250C,256C,274C 'themselves':77C 'then':346C 'there':190C,221C 'they':62C,97C 'think':325C 'though':123C 'thought':243C 'thousands':51C 'three':95C,294C 'to':65C,104C,224C,253C,283C,304C,315C,329C 'too':232C 'turns':285C 'upgrade':316C 'use':127C 'using':74C,342C 'very':307C 'was':33C,249C 'we':326C 'web':72C,247C,335C 'were':63C 'which':215C 'window':169C 'windows':128C 'with':116C 'working':311C 'would':264C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/one-agent-simonwillison.jpg",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-01-27 15:07:41+00:00
{
  "id": 9260,
  "slug": "kimi-k25",
  "link_url": "https://www.kimi.com/blog/kimi-k2-5.html",
  "link_title": "Kimi K2.5: Visual Agentic Intelligence",
  "via_url": "https://news.ycombinator.com/item?id=46775961",
  "via_title": "Hacker News",
  "commentary": "Kimi K2 landed [in July](https://simonwillison.net/2025/Jul/11/kimi-k2/) as a 1 trillion parameter open weight LLM. It was joined by Kimi K2 Thinking [in November](https://simonwillison.net/2025/Nov/6/kimi-k2-thinking/) which added reasoning capabilities. Now they've made it multi-modal: the K2 models were text-only, but the new 2.5 can handle image inputs as well:\r\n\r\n> Kimi K2.5 builds on Kimi K2 with continued pretraining over approximately 15T mixed visual and text tokens. Built as a native multimodal model, K2.5 delivers state-of-the-art coding and vision capabilities and a self-directed agent swarm paradigm.\r\n\r\nThe \"self-directed agent swarm paradigm\" claim there means improved long-sequence tool calling and training on how to break down tasks for multiple agents to work on at once:\r\n\r\n<blockquote id=\"complex-tasks\"><p>For complex tasks, Kimi K2.5 can self-direct an agent swarm with up to 100 sub-agents, executing parallel workflows across up to 1,500 tool calls. Compared with a single-agent setup, this reduces execution time by up to 4.5x. The agent swarm is automatically created and orchestrated by Kimi K2.5 without any predefined subagents or workflow.</p></blockquote>\r\n\r\nI used the [OpenRouter Chat UI](https://openrouter.ai/moonshotai/kimi-k2.5) to have it \"Generate an SVG of a pelican riding a bicycle\", and it did [quite well](https://gist.github.com/simonw/32a85e337fbc6ee935d10d89726c0476):\r\n\r\n![Cartoon illustration of a white pelican with a large orange beak and yellow throat pouch riding a green bicycle with yellow feet on the pedals, set against a light blue sky with soft bokeh circles and a green grassy hill. The bicycle frame is a little questionable. The pelican is quite good. The feet do not quite align with the pedals, which are floating clear of the frame.](https://static.simonwillison.net/static/2026/kimi-k2.5-pelican.png)\r\n\r\nAs a more interesting test, I decided to exercise the claims around multi-agent planning with this prompt:\r\n\r\n> I want to build a Datasette plugin that offers a UI to upload files to an S3 bucket and stores information about them in a SQLite table. Break this down into ten tasks suitable for execution by parallel coding agents.\r\n\r\nHere's [the full response](https://gist.github.com/simonw/ee2583b2eb5706400a4737f56d57c456). It produced ten realistic tasks and reasoned through the dependencies between them. For comparison here's the same prompt [against Claude Opus 4.5](https://claude.ai/share/df9258e7-97ba-4362-83da-76d31d96196f) and [against GPT-5.2 Thinking](https://chatgpt.com/share/6978d48c-3f20-8006-9c77-81161f899104).\r\n\r\nThe [Hugging Face repository](https://huggingface.co/moonshotai/Kimi-K2.5) is 595GB. The model uses Kimi's janky \"modified MIT\" license, which adds the following clause:\r\n\r\n> Our only modification part is that, if the Software (or any derivative works thereof) is used for any of your commercial products or services that have more than 100 million monthly active users, or more than 20 million US dollars (or equivalent in other currencies) in monthly revenue, you shall prominently display \"Kimi K2.5\" on the user interface of such product or service.\r\n\r\nGiven the model's size, I expect one way to run it locally would be with MLX and a pair of $10,000 512GB RAM M3 Ultra Mac Studios. That setup has [been demonstrated to work](https://twitter.com/awnihannun/status/1943723599971443134) with previous trillion parameter K2 models.",
  "created": "2026-01-27T15:07:41+00:00",
  "metadata": {},
  "search_document": "'-5.2':430C '/2025/jul/11/kimi-k2/)':48C '/2025/nov/6/kimi-k2-thinking/)':68C '/awnihannun/status/1943723599971443134)':559C '/moonshotai/kimi-k2.5)':242C,441C '/share/6978d48c-3f20-8006-9c77-81161f899104).':434C '/share/df9258e7-97ba-4362-83da-76d31d96196f)':426C '/simonw/32a85e337fbc6ee935d10d89726c0476):':262C '/simonw/ee2583b2eb5706400a4737f56d57c456).':400C '/static/2026/kimi-k2.5-pelican.png)':333C '000':543C '1':51C,197C '10':542C '100':187C,486C '15t':109C '2.5':91C '20':494C '4.5':215C,423C '500':198C '512gb':544C '595gb':443C 'a':24B,50C,117C,133C,203C,250C,253C,266C,270C,279C,290C,299C,307C,335C,357C,362C,377C,539C 'about':374C 'across':194C 'active':489C 'added':70C 'adds':454C 'against':289C,420C,428C 'agent':137C,144C,182C,206C,218C,348C 'agentic':4A 'agents':20B,36B,166C,190C,392C 'ai':6B,19B,30B 'ai-agents':18B 'ai-in-china':29B 'align':320C 'an':181C,247C,368C 'and':112C,129C,132C,156C,223C,255C,274C,298C,371C,406C,427C,538C 'any':229C,468C,475C 'approximately':108C 'are':325C 'around':345C 'art':127C 'as':49C,96C,116C,334C 'at':170C 'automatically':221C 'be':535C 'beak':273C 'been':553C 'between':411C 'bicycle':25B,254C,281C,304C 'blue':292C 'bokeh':296C 'break':161C,380C 'bucket':370C 'build':356C 'builds':100C 'built':115C 'but':88C 'by':60C,212C,225C,389C 'calling':155C 'calls':200C 'can':92C,177C 'capabilities':72C,131C 'cartoon':263C 'chat':238C 'chatgpt.com':433C 'chatgpt.com/share/6978d48c-3f20-8006-9c77-81161f899104).':432C 'china':32B 'circles':297C 'claim':147C 'claims':344C 'claude':421C 'claude.ai':425C 'claude.ai/share/df9258e7-97ba-4362-83da-76d31d96196f)':424C 'clause':457C 'clear':327C 'coding':128C,391C 'commercial':478C 'compared':201C 'comparison':414C 'complex':173C 'continued':105C 'created':222C 'currencies':502C 'datasette':358C 'decided':340C 'delivers':122C 'demonstrated':554C 'dependencies':410C 'derivative':469C 'did':257C 'direct':180C 'directed':136C,143C 'display':509C 'do':317C 'dollars':497C 'down':162C,382C 'equivalent':499C 'executing':191C 'execution':210C,388C 'exercise':342C 'expect':527C 'face':10B,437C 'feet':284C,316C 'files':366C 'floating':326C 'following':456C 'for':164C,172C,387C,413C,474C 'frame':305C,330C 'full':396C 'generate':246C 'gist.github.com':261C,399C 'gist.github.com/simonw/32a85e337fbc6ee935d10d89726c0476):':260C 'gist.github.com/simonw/ee2583b2eb5706400a4737f56d57c456).':398C 'given':521C 'good':314C 'gpt':429C 'grassy':301C 'green':280C,300C 'hacker':567C 'handle':93C 'has':552C 'have':244C,483C 'here':393C,415C 'hill':302C 'how':159C 'hugging':9B,436C 'hugging-face':8B 'huggingface.co':440C 'huggingface.co/moonshotai/kimi-k2.5)':439C 'i':234C,339C,353C,526C 'if':464C 'illustration':264C 'image':94C 'improved':150C 'in':31B,44C,64C,376C,500C,503C 'information':373C 'inputs':95C 'intelligence':5A 'interesting':337C 'interface':515C 'into':383C 'is':220C,306C,312C,442C,462C,472C 'it':57C,77C,245C,256C,401C,532C 'janky':39B,449C 'janky-licenses':38B 'joined':59C 'july':45C 'k2':42C,62C,82C,103C,564C 'k2.5':2A,99C,121C,176C,227C,511C 'kimi':1A,37B,41C,61C,98C,102C,175C,226C,447C,510C 'landed':43C 'large':271C 'license':452C 'licenses':40B 'light':291C 'little':308C 'llm':15B,27B,56C 'llm-release':26B 'llm-tool-use':14B 'llms':7B,13B 'locally':533C 'long':152C 'long-sequence':151C 'm3':546C 'mac':548C 'made':76C 'means':149C 'million':487C,495C 'mit':451C 'mixed':110C 'mlx':537C 'modal':80C 'model':120C,445C,523C 'models':83C,565C 'modification':460C 'modified':450C 'monthly':488C,504C 'moonshot':33B 'more':336C,484C,492C 'multi':79C,347C 'multi-agent':346C 'multi-modal':78C 'multimodal':119C 'multiple':165C 'native':118C 'new':90C 'news':568C 'not':318C 'november':65C 'now':73C 'of':125C,249C,265C,328C,476C,516C,541C 'offers':361C 'on':101C,158C,169C,285C,512C 'once':171C 'one':528C 'only':87C,459C 'open':54C 'openrouter':237C 'openrouter.ai':241C 'openrouter.ai/moonshotai/kimi-k2.5)':240C 'opus':422C 'or':232C,467C,480C,491C,498C,519C 'orange':272C 'orchestrated':224C 'other':501C 'our':458C 'over':107C 'pair':540C 'paradigm':139C,146C 'parallel':35B,192C,390C 'parallel-agents':34B 'parameter':53C,563C 'part':461C 'pedals':287C,323C 'pelican':22B,251C,268C,311C 'pelican-riding-a-bicycle':21B 'planning':349C 'plugin':359C 'pouch':277C 'predefined':230C 'pretraining':106C 'previous':561C 'produced':402C 'product':518C 'products':479C 'prominently':508C 'prompt':352C,419C 'questionable':309C 'quite':258C,313C,319C 'ram':545C 'realistic':404C 'reasoned':407C 'reasoning':71C 'reduces':209C 'release':28B 'repository':438C 'response':397C 'revenue':505C 'riding':23B,252C,278C 'run':531C 's':394C,416C,448C,524C 's3':369C 'same':418C 'self':135C,142C,179C 'self-direct':178C 'self-directed':134C,141C 'sequence':153C 'service':520C 'services':481C 'set':288C 'setup':207C,551C 'shall':507C 'simonwillison.net':47C,67C 'simonwillison.net/2025/jul/11/kimi-k2/)':46C 'simonwillison.net/2025/nov/6/kimi-k2-thinking/)':66C 'single':205C 'single-agent':204C 'size':525C 'sky':293C 'soft':295C 'software':466C 'sqlite':378C 'state':124C 'state-of-the-art':123C 'static.simonwillison.net':332C 'static.simonwillison.net/static/2026/kimi-k2.5-pelican.png)':331C 'stores':372C 'studios':549C 'sub':189C 'sub-agents':188C 'subagents':231C 'such':517C 'suitable':386C 'svg':248C 'swarm':138C,145C,183C,219C 'table':379C 'tasks':163C,174C,385C,405C 'ten':384C,403C 'test':338C 'text':86C,113C 'text-only':85C 'than':485C,493C 'that':360C,463C,482C,550C 'the':81C,89C,126C,140C,217C,236C,286C,303C,310C,315C,322C,329C,343C,395C,409C,417C,435C,444C,455C,465C,513C,522C 'them':375C,412C 'there':148C 'thereof':471C 'they':74C 'thinking':63C,431C 'this':208C,351C,381C 'throat':276C 'through':408C 'time':211C 'to':160C,167C,186C,196C,214C,243C,341C,355C,364C,367C,530C,555C 'tokens':114C 'tool':16B,154C,199C 'training':157C 'trillion':52C,562C 'twitter.com':558C 'twitter.com/awnihannun/status/1943723599971443134)':557C 'ui':239C,363C 'ultra':547C 'up':185C,195C,213C 'upload':365C 'us':496C 'use':17B 'used':235C,473C 'user':514C 'users':490C 'uses':446C 've':75C 'vision':12B,130C 'vision-llms':11B 'visual':3A,111C 'want':354C 'was':58C 'way':529C 'weight':55C 'well':97C,259C 'were':84C 'which':69C,324C,453C 'white':267C 'with':104C,184C,202C,269C,282C,294C,321C,350C,536C,560C 'without':228C 'work':168C,556C 'workflow':233C 'workflows':193C 'works':470C 'would':534C 'www.kimi.com':566C 'x':216C 'yellow':275C,283C 'you':506C 'your':477C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/kimi-k2.5-pelican.png",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-01-25 23:51:32+00:00
{
  "id": 9259,
  "slug": "the-browser-is-the-sandbox",
  "link_url": "https://aifoc.us/the-browser-is-the-sandbox/",
  "link_title": "the browser is the sandbox",
  "via_url": null,
  "via_title": null,
  "commentary": "Paul Kinlan is a web platform developer advocate at Google and recently turned his attention to coding agents. He quickly identified the importance of a robust sandbox for agents to operate in and put together these detailed notes on how the web browser can help:\r\n\r\n> This got me thinking about the browser. Over the last 30 years, we have built a sandbox specifically designed to run incredibly hostile, untrusted code from anywhere on the web, the instant a user taps a URL. [...]\r\n>\r\n> Could you build something like Cowork in the browser? Maybe. To find out, I built a demo called [Co-do](http://co-do.xyz) that tests this hypothesis. In this post I want to discuss the research I've done to see how far we can get, and determine if the browser's ability to run untrusted code is useful (and good enough) for enabling software to do more for us directly on our computer.\r\n\r\nPaul then describes how the three key aspects of a sandbox - filesystem, network access and safe code execution - can be handled by browser technologies: the [File System Access API](https://developer.chrome.com/docs/capabilities/web-apis/file-system-access) (still Chrome-only as far as I can tell), CSP headers with `<iframe sandbox>` and WebAssembly in Web Workers.\r\n\r\nCo-do is a very interesting demo that illustrates all of these ideas in a single application:\r\n\r\n![Screenshot of Co-do application interface with robot logo. Left sidebar shows WORKSPACE section with \"Select Folder\" button, \"Selected folder: blog-drafts (Live updates enabled)\" in green text, and FILES list including gtr-t5-large.md, chatgpt.md, llm-digest-october-2..., weeknotes-2024-04-23..., lmarena-april-2025.md, weeknotes-chatgpt-fo..., tests-not-optional-c..., weeknotes-13-mar-202..., issue-for-notes.md, workshop-git-scrapin.... Main chat area shows user message \"Three most recently edited files?\" in orange bubble, \"Using 26 tools...\" dropdown, and AI response: \"Now I need to get the metadata for these files to find the most recently edited ones. Since there are many files, let me get metadata for a sample of them to find the recent ones:Based on the metadata I've gathered, the three most recently edited files are:\" followed by table with columns File and Last Modified showing predictions-2026.md (Jan 8, 2026), december-2025.md (Jan 2, 2026), gemini-3-flash.md (Dec 17, 2025). Green \"Response complete\" banner at bottom with input field placeholder \"Ask me to help with your files...\" and notice \"File contents are sent to your selected AI provider\".](https://static.simonwillison.net/static/2026/codo.jpg)\r\n\r\nYou select a folder full of files and configure an LLM provider and set an API key, Co-do then uses CSP-approved API calls to interact with that provider and provides a chat interface with tools for interacting with those files. It does indeed feel similar to [Claude Cowork](https://simonwillison.net/2026/Jan/12/claude-cowork/) but without running a multi-GB local container to provide the sandbox.\r\n\r\nMy biggest complaint about `<iframe sandbox>` remains how thinly documented it is, especially across different browsers. Paul's post has all sorts of useful details on that which I've not encountered elsewhere, including a complex [double-iframe technique](https://aifoc.us/the-browser-is-the-sandbox/#the-double-iframe-technique) to help apply network rules to the inner of the two frames.\r\n\r\nThanks to this post I also learned about the `<input type=\"file\" webkitdirectory>` tag which turns out to work on Firefox, Safari *and* Chrome and allows a browser read-only access to a full directory of files at once. I had Claude knock up a [webkitdirectory demo](https://tools.simonwillison.net/webkitdirectory) to try it out and I'll certainly be using it for projects in the future.\r\n\r\n![Screenshot of a dark-themed file explorer application. Top stats bar shows: 12179 TOTAL FILES, 2079 FOLDERS, 244 MB TOTAL SIZE, 97 FILE TYPES in cyan text. Search bar with placeholder \"Search files...\" and \"All types\" dropdown. Left panel labeled \"File tree\" (showing 12179) displays folder hierarchy: datasette > .claude > skills > building-datasette-plugins containing HOOKS.md (10.7 KB, selected/highlighted), INTERNALS.md (10.1 KB), SKILL.md (3.7 KB), TESTING.md (8.4 KB), settings.local.json (280 B); also shows .eggs folder with pytest_runner-6.0.1-py3.9.egg. Right panel \"File preview\" shows selected file details: Name: HOOKS.md, Path: datasette/.claude/skills/building-datasette-plugins/HOOKS.md, Size: 10.7 KB, Type: text/markdown, Last modified: 12/20/2025, 9:28:59 AM. Preview content shows: \"# Plugin Hooks Reference\" followed by \"All hooks use the `@hookimpl` decorator. Accept only the parameters you need.\" then \"## Database Connection Hooks\" and \"### prepare_connection(conn, database, datasette)\" with description \"Called when a new SQLite connection is created. Use to register custom SQL functions.\" Bottom section \"File type distribution\" shows horizontal bar chart: .py (4439), .no ext (3358), .dat (1068), .pyc (925), .txt (332), .mo (321), .po (321), .html (249).](https://static.simonwillison.net/static/2026/webkit-file-tree.jpg)",
  "created": "2026-01-25T23:51:32+00:00",
  "metadata": {},
  "search_document": "'-04':289C '-13':302C '-202':304C '-2024':288C '-23':290C '/2026/jan/12/claude-cowork/)':488C '/docs/capabilities/web-apis/file-system-access)':209C '/static/2026/codo.jpg)':433C '/static/2026/webkit-file-tree.jpg)':794C '/the-browser-is-the-sandbox/#the-double-iframe-technique)':542C '/webkitdirectory)':601C '10.1':679C '10.7':675C,709C '1068':781C '12/20/2025':715C '12179':631C,662C '17':401C '2':286C,397C '2025':402C '2026':394C,398C '2079':634C '244':636C '249':791C '26':325C '28':717C '280':688C '3.7':682C '30':78C '321':787C,789C '332':785C '3358':779C '4439':776C '59':718C '8':393C '8.4':685C '9':716C '925':783C '97':640C 'a':26C,47C,83C,100C,103C,120C,187C,232C,243C,358C,436C,468C,492C,534C,577C,584C,596C,620C,754C 'ability':156C 'about':72C,505C,562C 'accept':734C 'access':191C,205C,582C 'across':513C 'advocate':30C 'agents':16B,19B,40C,51C 'ai':9B,12B,15B,329C,429C 'ai-agents':14B 'aifoc.us':541C,795C 'aifoc.us/the-browser-is-the-sandbox/#the-double-iframe-technique)':540C 'all':238C,520C,653C,728C 'allows':576C 'also':560C,690C 'am':719C 'an':443C,448C 'and':33C,55C,150C,163C,192C,223C,276C,328C,387C,420C,441C,446C,466C,573C,575C,606C,652C,744C 'anywhere':94C 'api':206C,449C,459C 'application':245C,251C,626C 'apply':545C 'approved':458C 'are':350C,380C,424C 'area':312C 'as':214C,216C 'ask':413C 'aspects':185C 'at':31C,407C,589C 'attention':37C 'b':689C 'banner':406C 'bar':629C,647C,773C 'based':367C 'be':197C,610C 'biggest':503C 'blog':268C 'blog-drafts':267C 'bottom':408C,766C 'browser':2A,65C,74C,113C,154C,200C,578C 'browsers':6B,515C 'bubble':323C 'build':107C 'building':670C 'building-datasette-plugins':669C 'built':82C,119C 'but':489C 'button':264C 'by':199C,382C,727C 'c':300C 'called':122C,752C 'calls':460C 'can':66C,148C,196C,218C 'certainly':609C 'chart':774C 'chat':311C,469C 'chatgpt':294C 'chatgpt.md':281C 'chrome':212C,574C 'chrome-only':211C 'claude':21B,484C,593C,667C 'claude-code':20B 'co':124C,229C,249C,452C 'co-do':123C,228C,248C,451C 'co-do.xyz':126C 'code':22B,92C,160C,194C 'coding':18B,39C 'coding-agents':17B 'columns':385C 'complaint':504C 'complete':405C 'complex':535C 'computer':177C 'configure':442C 'conn':747C 'connection':742C,746C,757C 'container':497C 'containing':673C 'content':721C 'contents':423C 'could':105C 'cowork':110C,485C 'created':759C 'csp':220C,457C 'csp-approved':456C 'custom':763C 'cyan':644C 'dark':622C 'dark-themed':621C 'dat':780C 'database':741C,748C 'datasette':666C,671C,749C 'datasette/.claude/skills/building-datasette-plugins/hooks.md':707C 'dec':400C 'december-2025.md':395C 'decorator':733C 'demo':121C,235C,598C 'describes':180C 'description':751C 'designed':86C 'detailed':59C 'details':524C,703C 'determine':151C 'developer':29C 'developer.chrome.com':208C 'developer.chrome.com/docs/capabilities/web-apis/file-system-access)':207C 'different':514C 'digest':284C 'directly':174C 'directory':586C 'discuss':137C 'displays':663C 'distribution':770C 'do':125C,170C,230C,250C,453C 'documented':509C 'does':479C 'done':142C 'double':537C 'double-iframe':536C 'drafts':269C 'dropdown':327C,655C 'edited':319C,346C,378C 'eggs':692C 'elsewhere':532C 'enabled':272C 'enabling':167C 'encountered':531C 'enough':165C 'especially':512C 'execution':195C 'explorer':625C 'ext':778C 'far':146C,215C 'feel':481C 'field':411C 'file':203C,386C,422C,624C,641C,659C,698C,702C,768C 'files':277C,320C,340C,352C,379C,419C,440C,477C,588C,633C,651C 'filesystem':189C 'find':116C,342C,363C 'firefox':571C 'fo':295C 'folder':263C,266C,437C,664C,693C 'folders':635C 'followed':381C,726C 'for':50C,166C,172C,338C,357C,473C,613C 'frames':554C 'from':93C 'full':438C,585C 'functions':765C 'future':617C 'gathered':373C 'gb':495C 'gemini-3-flash.md':399C 'generative':11B 'generative-ai':10B 'get':149C,335C,355C 'git':308C 'good':164C 'google':32C 'got':69C 'green':274C,403C 'gtr-t5-large.md':280C 'had':592C 'handled':198C 'has':519C 'have':81C 'he':41C 'headers':221C 'help':67C,416C,544C 'hierarchy':665C 'his':36C 'hookimpl':732C 'hooks':724C,729C,743C 'hooks.md':674C,705C 'horizontal':772C 'hostile':90C 'how':62C,145C,181C,507C 'html':790C 'hypothesis':130C 'i':118C,134C,140C,217C,332C,371C,528C,559C,591C,607C 'ideas':241C 'identified':43C 'if':152C 'iframe':538C 'illustrates':237C 'importance':45C 'in':54C,111C,131C,225C,242C,273C,321C,615C,643C 'including':279C,533C 'incredibly':89C 'indeed':480C 'inner':550C 'input':410C 'instant':99C 'interact':462C 'interacting':474C 'interesting':234C 'interface':252C,470C 'internals.md':678C 'is':3A,25C,161C,231C,511C,758C 'issue-for-notes.md':305C 'it':478C,510C,604C,612C 'jan':392C,396C 'javascript':7B 'kb':676C,680C,683C,686C,710C 'key':184C,450C 'kinlan':24C 'knock':594C 'labeled':658C 'last':77C,388C,713C 'learned':561C 'left':256C,656C 'let':353C 'like':109C 'list':278C 'live':270C 'll':608C 'llm':283C,444C 'llm-digest-october':282C 'llms':13B 'lmarena-april-2025.md':291C 'local':496C 'logo':255C 'main':310C 'many':351C 'mar':303C 'maybe':114C 'mb':637C 'me':70C,354C,414C 'message':315C 'metadata':337C,356C,370C 'mo':786C 'modified':389C,714C 'more':171C 'most':317C,344C,376C 'multi':494C 'multi-gb':493C 'my':502C 'name':704C 'need':333C,739C 'network':190C,546C 'new':755C 'no':777C 'not':298C,530C 'notes':60C 'notice':421C 'now':331C 'october':285C 'of':46C,186C,239C,247C,360C,439C,522C,551C,587C,619C 'on':61C,95C,175C,368C,525C,570C 'once':590C 'ones':347C,366C 'only':213C,581C,735C 'operate':53C 'optional':299C 'orange':322C 'our':176C 'out':117C,567C,605C 'over':75C 'panel':657C,697C 'parameters':737C 'path':706C 'paul':23C,178C,516C 'placeholder':412C,649C 'platform':28C 'plugin':723C 'plugins':672C 'po':788C 'post':133C,518C,558C 'predictions-2026.md':391C 'prepare':745C 'preview':699C,720C 'projects':614C 'provide':499C 'provider':430C,445C,465C 'provides':467C 'put':56C 'py':775C 'pyc':782C 'pytest_runner-6.0.1-py3.9.egg':695C 'quickly':42C 'read':580C 'read-only':579C 'recent':365C 'recently':34C,318C,345C,377C 'reference':725C 'register':762C 'remains':506C 'research':139C 'response':330C,404C 'right':696C 'robot':254C 'robust':48C 'rules':547C 'run':88C,158C 'running':491C 's':155C,517C 'safari':572C 'safe':193C 'sample':359C 'sandbox':5A,49C,84C,188C,501C 'sandboxing':8B 'scrapin':309C 'screenshot':246C,618C 'search':646C,650C 'section':260C,767C 'see':144C 'select':262C,435C 'selected':265C,428C,701C 'selected/highlighted':677C 'sent':425C 'set':447C 'settings.local.json':687C 'showing':390C,661C 'shows':258C,313C,630C,691C,700C,722C,771C 'sidebar':257C 'similar':482C 'simonwillison.net':487C 'simonwillison.net/2026/jan/12/claude-cowork/)':486C 'since':348C 'single':244C 'size':639C,708C 'skill.md':681C 'skills':668C 'software':168C 'something':108C 'sorts':521C 'specifically':85C 'sql':764C 'sqlite':756C 'static.simonwillison.net':432C,793C 'static.simonwillison.net/static/2026/codo.jpg)':431C 'static.simonwillison.net/static/2026/webkit-file-tree.jpg)':792C 'stats':628C 'still':210C 'system':204C 'table':383C 'tag':564C 'taps':102C 'technique':539C 'technologies':201C 'tell':219C 'testing.md':684C 'tests':128C,297C 'tests-not-optional-c':296C 'text':275C,645C 'text/markdown':712C 'thanks':555C 'that':127C,236C,464C,526C 'the':1A,4A,44C,63C,73C,76C,96C,98C,112C,138C,153C,182C,202C,336C,343C,364C,369C,374C,500C,549C,552C,563C,616C,731C,736C 'them':361C 'themed':623C 'then':179C,454C,740C 'there':349C 'these':58C,240C,339C 'thinking':71C 'thinly':508C 'this':68C,129C,132C,557C 'those':476C 'three':183C,316C,375C 'to':38C,52C,87C,115C,136C,143C,157C,169C,334C,341C,362C,415C,426C,461C,483C,498C,543C,548C,556C,568C,583C,602C,761C 'together':57C 'tools':326C,472C 'tools.simonwillison.net':600C 'tools.simonwillison.net/webkitdirectory)':599C 'top':627C 'total':632C,638C 'tree':660C 'try':603C 'turned':35C 'turns':566C 'two':553C 'txt':784C 'type':711C,769C 'types':642C,654C 'untrusted':91C,159C 'up':595C 'updates':271C 'url':104C 'us':173C 'use':730C,760C 'useful':162C,523C 'user':101C,314C 'uses':455C 'using':324C,611C 've':141C,372C,529C 'very':233C 'want':135C 'we':80C,147C 'web':27C,64C,97C,226C 'webassembly':224C 'webkitdirectory':597C 'weeknotes':287C,293C,301C 'weeknotes-chatgpt-fo':292C 'when':753C 'which':527C,565C 'with':222C,253C,261C,384C,409C,417C,463C,471C,475C,648C,694C,750C 'without':490C 'work':569C 'workers':227C 'workshop':307C 'workshop-git-scrapin':306C 'workspace':259C 'years':79C 'you':106C,434C,738C 'your':418C,427C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/codo.jpg",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-01-25 04:53:01+00:00
{
  "id": 9258,
  "slug": "kakapo-cam",
  "link_url": "https://www.doc.govt.nz/our-work/kakapo-recovery/what-we-do/kakapo-cam-rakiura-live-stream/",
  "link_title": "K\u0101k\u0101p\u014d Cam: Rakiura live stream",
  "via_url": "https://www.metafilter.com/211927/The-only-parrot-to-have-a-polygynous-lek-breeding-system-sits-on-an-egg",
  "via_title": "MetaFilter",
  "commentary": "Critical update for this year's [K\u0101k\u0101p\u014d breeding season](https://simonwillison.net/2026/Jan/8/llm-predictions-for-2026/#1-year-k-k-p-parrots-will-have-an-outstanding-breeding-season): the New Zealand Department of Conservation have a livestream running of Rakiura's nest!\r\n\r\n> You\u2019re looking at the underground nest of 23-year-old Rakiura. She has chosen this same site to nest for all seven breeding seasons since 2008, a large cavity under a r\u0101t\u0101 tree. Because she returns to the site so reliably, we\u2019ve been able to make modifications over the years to keep it safe and dry, including adding a well-placed hatch for monitoring eggs and chicks.\r\n\r\nRakiura is a legendary K\u0101k\u0101p\u014d:\r\n\r\n> Rakiura hatched on 19 February 2002 on Whenua Hou/Codfish Island. She is the offspring of Flossie and Bill. Her name comes from the te reo M\u0101ori name for Stewart Island, the place where most of the founding k\u0101k\u0101p\u014d population originated.\r\n>\r\n> Rakiura has nine living descendants, three females and six males, across six breeding seasons. In 2008 came T\u014ditiiti, in 2009 Tamahou and Te Atap\u014d, in 2011 Tia and T\u016btoko, in 2014 Taeatanga and Te Awa, in 2019 Mati-m\u0101 and Tautahi. She also has many grandchicks.\r\n\r\nShe laid her first egg of the season at 4:30pm NZ time on 22nd January. The livestream went live shortly afterwards, once she committed to this nest.\r\n\r\nThe stream is [on YouTube](https://www.youtube.com/watch?v=BfGL7A2YgUY). I [used Claude Code](https://gisthost.github.io/?dc78322de89a2191c593215f109c65d7/index.html) to write [a livestream-gif.py script](https://tools.simonwillison.net/python/#livestream-gifpy) and used that to capture this sped-up video of the last few hours of footage, within which you can catch a glimpse of the egg!\r\n\r\n<video autoplay muted loop controls playsinline style=\"width: 100%;\">\r\n  <source src=\"https://static.simonwillison.net/static/2026/kakapo-timelapse.mp4\" type=\"video/mp4\">\r\n</video>",
  "created": "2026-01-25T04:53:01+00:00",
  "metadata": {},
  "search_document": "'/2026/jan/8/llm-predictions-for-2026/#1-year-k-k-p-parrots-will-have-an-outstanding-breeding-season):':23C '/?dc78322de89a2191c593215f109c65d7/index.html)':243C '/python/#livestream-gifpy)':251C '/watch?v=bfgl7a2yguy).':236C '19':117C '2002':119C '2008':65C,169C '2009':173C '2011':179C '2014':184C '2019':190C '22nd':215C '23':46C '30pm':211C '4':210C 'a':31C,66C,70C,99C,111C,246C,274C 'able':84C 'across':164C 'adding':98C 'afterwards':222C 'all':60C 'also':197C 'and':95C,107C,130C,161C,175C,181C,186C,194C,252C 'at':41C,209C 'atap\u014d':177C 'awa':188C 'because':73C 'been':83C 'bill':131C 'breeding':19C,62C,166C 'cam':2A 'came':170C 'can':272C 'capture':256C 'catch':273C 'cavity':68C 'chicks':108C 'chosen':53C 'claude':10B,239C 'claude-code':9B 'code':11B,240C 'comes':134C 'committed':225C 'conservation':8B,29C 'critical':12C 'department':27C 'descendants':158C 'dry':96C 'egg':205C,278C 'eggs':106C 'february':118C 'females':160C 'few':265C 'first':204C 'flossie':129C 'footage':268C 'for':14C,59C,104C,141C 'founding':150C 'from':135C 'gisthost.github.io':242C 'gisthost.github.io/?dc78322de89a2191c593215f109c65d7/index.html)':241C 'glimpse':275C 'grandchicks':200C 'has':52C,155C,198C 'hatch':103C 'hatched':115C 'have':30C 'her':132C,203C 'hou/codfish':122C 'hours':266C 'i':237C 'in':168C,172C,178C,183C,189C 'including':97C 'is':110C,125C,231C 'island':123C,143C 'it':93C 'january':216C 'kakapo':7B 'keep':92C 'k\u0101k\u0101p\u014d':1A,18C,113C,151C 'laid':202C 'large':67C 'last':264C 'legendary':112C 'live':4A,220C 'livestream':32C,218C 'livestream-gif.py':247C 'living':157C 'looking':40C 'make':86C 'males':163C 'many':199C 'mati':192C 'mati-m\u0101':191C 'metafilter':280C 'modifications':87C 'monitoring':105C 'most':147C 'm\u0101':193C 'm\u0101ori':139C 'name':133C,140C 'nest':37C,44C,58C,228C 'new':25C 'nine':156C 'nz':212C 'of':28C,34C,45C,128C,148C,206C,262C,267C,276C 'offspring':127C 'old':49C 'on':116C,120C,214C,232C 'once':223C 'originated':153C 'over':88C 'place':145C 'placed':102C 'population':152C 'rakiura':3A,35C,50C,109C,114C,154C 're':39C 'reliably':80C 'reo':138C 'returns':75C 'running':33C 'r\u0101t\u0101':71C 's':17C,36C 'safe':94C 'same':55C 'script':248C 'season':20C,208C 'seasons':63C,167C 'seven':61C 'she':51C,74C,124C,196C,201C,224C 'shortly':221C 'simonwillison.net':22C 'simonwillison.net/2026/jan/8/llm-predictions-for-2026/#1-year-k-k-p-parrots-will-have-an-outstanding-breeding-season):':21C 'since':64C 'site':56C,78C 'six':162C,165C 'so':79C 'sped':259C 'sped-up':258C 'stewart':142C 'stream':5A,230C 'taeatanga':185C 'tamahou':174C 'tautahi':195C 'te':137C,176C,187C 'that':254C 'the':24C,42C,77C,89C,126C,136C,144C,149C,207C,217C,229C,263C,277C 'this':15C,54C,227C,257C 'three':159C 'tia':180C 'time':213C 'to':57C,76C,85C,91C,226C,244C,255C 'tools.simonwillison.net':250C 'tools.simonwillison.net/python/#livestream-gifpy)':249C 'tree':72C 't\u014ditiiti':171C 't\u016btoko':182C 'under':69C 'underground':43C 'up':260C 'update':13C 'used':238C,253C 've':82C 'video':261C 'we':81C 'well':101C 'well-placed':100C 'went':219C 'whenua':121C 'where':146C 'which':270C 'within':269C 'write':245C 'www.doc.govt.nz':279C 'www.youtube.com':235C 'www.youtube.com/watch?v=bfgl7a2yguy).':234C 'year':16C,48C 'year-old':47C 'years':90C 'you':38C,271C 'youtube':6B,233C 'zealand':26C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/kakapo-card-jan.jpg",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-01-24 23:31:03+00:00
{
  "id": 9257,
  "slug": "dont-trust-the-process",
  "link_url": "https://www.youtube.com/watch?v=4u94juYwLLM",
  "link_title": "Don't \"Trust the Process\"",
  "via_url": "https://twitter.com/jenny_wen/status/2014479445738893649",
  "via_title": "@jenny_wen",
  "commentary": "Jenny Wen, Design Lead at Anthropic (and previously Director of Design at Figma) gave a provocative keynote at Hatch Conference in Berlin last September.\r\n\r\n![Don't \"Trust the process\" slide, speaker shown on the left](https://static.simonwillison.net/static/2026/dont-trust-process.jpg)\r\n\r\nJenny argues that the Design Process - user research leading to personas leading to user journeys leading to wireframes... all before anything gets built - may be outdated for today's world.\r\n\r\n> **Hypothesis**: In a world where anyone can make anything \u2014 what matters is your ability to choose and curate what you make.\r\n\r\nIn place of the Process, designers should lean into prototypes. AI makes these much more accessible and less time-consuming than they used to be.\r\n\r\nWatching this talk made me think about how AI-assisted programming significantly reduces the cost of building the *wrong* thing. Previously if the design wasn't right you could waste months of development time building in the wrong direction, which was a very expensive mistake. If a wrong direction wastes just a few days instead we can take more risks and be much more proactive in exploring the problem space.\r\n\r\nI've always been a compulsive prototyper though, so this is very much playing into my own existing biases!",
  "created": "2026-01-24T23:31:03+00:00",
  "metadata": {},
  "search_document": "'/static/2026/dont-trust-process.jpg)':57C 'a':34C,90C,177C,182C,187C,210C 'ability':101C 'about':141C 'accessible':124C 'ai':8B,11B,14B,119C,144C 'ai-assisted':143C 'ai-assisted-programming':13B 'all':76C 'always':208C 'and':26C,104C,125C,196C 'anthropic':25C 'anyone':93C 'anything':78C,96C 'argues':59C 'assisted':15B,145C 'at':24C,31C,37C 'be':82C,134C,197C 'been':209C 'before':77C 'berlin':41C 'biases':224C 'building':152C,170C 'built':80C 'can':94C,192C 'choose':103C 'coding':19B 'compulsive':211C 'conference':39C 'consuming':129C 'cost':150C 'could':164C 'curate':105C 'days':189C 'design':6B,22C,30C,62C,159C 'designers':114C 'development':168C 'direction':174C,184C 'director':28C 'don':1A,44C 'existing':223C 'expensive':179C 'exploring':202C 'few':188C 'figma':32C 'for':84C 'gave':33C 'generative':10B 'generative-ai':9B 'gets':79C 'hatch':38C 'how':142C 'hypothesis':88C 'i':206C 'if':157C,181C 'in':40C,89C,109C,171C,201C 'instead':190C 'into':117C,220C 'is':99C,216C 'jenny':20C,58C,226C 'journeys':72C 'just':186C 'keynote':36C 'last':42C 'lead':23C 'leading':66C,69C,73C 'lean':116C 'left':54C 'less':126C 'llms':12B 'made':138C 'make':95C,108C 'makes':120C 'matters':98C 'may':81C 'me':139C 'mistake':180C 'months':166C 'more':123C,194C,199C 'much':122C,198C,218C 'my':221C 'of':29C,111C,151C,167C 'on':52C 'outdated':83C 'own':222C 'personas':68C 'place':110C 'playing':219C 'previously':27C,156C 'proactive':200C 'problem':204C 'process':5A,48C,63C,113C 'programming':16B,146C 'prototyper':212C 'prototypes':118C 'prototyping':7B 'provocative':35C 'reduces':148C 'research':65C 'right':162C 'risks':195C 's':86C 'september':43C 'should':115C 'shown':51C 'significantly':147C 'slide':49C 'so':214C 'space':205C 'speaker':50C 'static.simonwillison.net':56C 'static.simonwillison.net/static/2026/dont-trust-process.jpg)':55C 't':2A,45C,161C 'take':193C 'talk':137C 'than':130C 'that':60C 'the':4A,47C,53C,61C,112C,149C,153C,158C,172C,203C 'these':121C 'they':131C 'thing':155C 'think':140C 'this':136C,215C 'though':213C 'time':128C,169C 'time-consuming':127C 'to':67C,70C,74C,102C,133C 'today':85C 'trust':3A,46C 'used':132C 'user':64C,71C 've':207C 'very':178C,217C 'vibe':18B 'vibe-coding':17B 'was':176C 'wasn':160C 'waste':165C 'wastes':185C 'watching':135C 'we':191C 'wen':21C,227C 'what':97C,106C 'where':92C 'which':175C 'wireframes':75C 'world':87C,91C 'wrong':154C,173C,183C 'www.youtube.com':225C 'you':107C,163C 'your':100C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/dont-trust-process.jpg",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-01-24 21:34:35+00:00
{
  "id": 2011,
  "slug": "jasmine-sun",
  "quotation": "**If you tell a friend they can now instantly create any app, they\u2019ll probably say \u201cCool! Now I need to think of an idea.\u201d** Then they will forget about it, and never build a thing. The problem is not that your friend is horribly uncreative. It\u2019s that most people\u2019s problems are not software-shaped, and most won\u2019t notice even when they are. [...]\r\n\r\nProgrammers are trained to see everything as a software-shaped problem: if you do a task three times, you should probably automate it with a script. *Rename every IMG_\\*.jpg file from the last week to hawaii2025_\\*.jpg*, they tell their terminal, while the rest of us painfully click and copy-paste. We are blind to the solutions we were never taught to see, asking for faster horses and never dreaming of cars.",
  "source": "Jasmine Sun",
  "source_url": "https://jasmi.news/p/claude-code",
  "created": "2026-01-24T21:34:35+00:00",
  "metadata": {},
  "search_document": "'a':4A,35A,75A,83A,93A 'about':30A 'agents':153B 'ai':143B,146B 'an':24A 'and':32A,59A,118A,138A 'any':11A 'app':12A 'are':54A,67A,69A,123A 'as':74A 'asking':134A 'automate':90A 'blind':124A 'build':34A 'can':7A 'cars':142A 'claude':155B 'claude-code':154B 'click':117A 'code':156B 'coding':150B,152B 'coding-agents':151B 'cool':17A 'copy':120A 'copy-paste':119A 'create':10A 'do':82A 'dreaming':140A 'even':64A 'every':96A 'everything':73A 'faster':136A 'file':99A 'for':135A 'forget':29A 'friend':5A,43A 'from':100A 'generative':145B 'generative-ai':144B 'hawaii2025':105A 'horribly':45A 'horses':137A 'i':19A 'idea':25A 'if':1A,80A 'img':97A 'instantly':9A 'is':39A,44A 'it':31A,47A,91A 'jasmine':157C 'jpg':98A,106A 'last':102A 'll':14A 'llms':147B 'most':50A,60A 'need':20A 'never':33A,130A,139A 'not':40A,55A 'notice':63A 'now':8A,18A 'of':23A,114A,141A 'painfully':116A 'paste':121A 'people':51A 'probably':15A,89A 'problem':38A,79A 'problems':53A 'programmers':68A 'rename':95A 'rest':113A 's':48A,52A 'say':16A 'script':94A 'see':72A,133A 'shaped':58A,78A 'should':88A 'software':57A,77A 'software-shaped':56A,76A 'solutions':127A 'sun':158C 't':62A 'task':84A 'taught':131A 'tell':3A,108A 'terminal':110A 'that':41A,49A 'the':37A,101A,112A,126A 'their':109A 'then':26A 'they':6A,13A,27A,66A,107A 'thing':36A 'think':22A 'three':85A 'times':86A 'to':21A,71A,104A,125A,132A 'trained':70A 'uncreative':46A 'us':115A 'vibe':149B 'vibe-coding':148B 'we':122A,128A 'week':103A 'were':129A 'when':65A 'while':111A 'will':28A 'with':92A 'won':61A 'you':2A,81A,87A 'your':42A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": null
}
quotation 2026-01-23 09:13:54+00:00
{
  "id": 2010,
  "slug": "theia-vogel",
  "quotation": "[...] i was too busy with work to read anything, so i asked chatgpt to summarize some books on state formation, and it suggested circumscription theory. there was already the natural boundary of my computer hemming the towns in, and town mayors played the role of big men to drive conflict. so i just needed a way for them to fight. i slightly tweaked the allocation of claude max accounts to the towns from a demand-based to a fixed allocation system. towns would each get a fixed amount of tokens to start, but i added a soldier role that could attack and defend in raids to steal tokens from other towns. [...]",
  "source": "Theia Vogel",
  "source_url": "https://twitter.com/voooooogel/status/2014189072647078053",
  "created": "2026-01-23T09:13:54+00:00",
  "metadata": {},
  "search_document": "'a':55A,74A,79A,87A,97A 'accounts':69A 'added':96A 'agents':120B 'ai':113B,116B 'allocation':65A,81A 'already':28A 'amount':89A 'and':21A,39A,103A 'anything':9A 'asked':12A 'attack':102A 'based':77A 'big':46A 'books':17A 'boundary':31A 'busy':4A 'but':94A 'chatgpt':13A 'circumscription':24A 'claude':67A 'computer':34A 'conflict':50A 'could':101A 'defend':104A 'demand':76A 'demand-based':75A 'drive':49A 'each':85A 'fight':60A 'fixed':80A,88A 'for':57A 'formation':20A 'from':73A,110A 'generative':115B 'generative-ai':114B 'get':86A 'hemming':35A 'i':1A,11A,52A,61A,95A 'in':38A,105A 'it':22A 'just':53A 'llms':117B 'max':68A 'mayors':41A 'men':47A 'my':33A 'natural':30A 'needed':54A 'of':32A,45A,66A,90A 'on':18A 'other':111A 'parallel':119B 'parallel-agents':118B 'played':42A 'raids':106A 'read':8A 'role':44A,99A 'slightly':62A 'so':10A,51A 'soldier':98A 'some':16A 'start':93A 'state':19A 'steal':108A 'suggested':23A 'summarize':15A 'system':82A 'that':100A 'the':29A,36A,43A,64A,71A 'theia':121C 'them':58A 'theory':25A 'there':26A 'to':7A,14A,48A,59A,70A,78A,92A,107A 'tokens':91A,109A 'too':3A 'town':40A 'towns':37A,72A,83A,112A 'tweaked':63A 'vogel':122C 'was':2A,27A 'way':56A 'with':5A 'work':6A 'would':84A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "Gas Town fan fiction"
}
blogmark 2026-01-22 23:57:50+00:00
{
  "id": 9256,
  "slug": "ssh-has-no-host-header",
  "link_url": "https://blog.exe.dev/ssh-host-header",
  "link_title": "SSH has no Host header",
  "via_url": "https://lobste.rs/s/7oqiqi/ssh_has_no_host_header",
  "via_title": "lobste.rs",
  "commentary": "[exe.dev](https://exe.dev/) is a new hosting service that, for $20/month, gives you up to 25 VMs \"that share 2 CPUs and 8GB RAM\". Everything happens over SSH, including creating new VMs. Once configured you can sign into your exe.dev VMs like this:\r\n\r\n    ssh simon.exe.dev\r\n\r\nHere's the clever bit: when you run the above command `exe.dev` signs you into your VM of that name... but they don't assign every VM its own IP address and SSH has no equivalent of the Host header, so how does their load balancer know *which* of your VMs to forward you on to?\r\n\r\nThe answer is that while they don't assign a unique IP to every VM they *do* have enough IPs that they can ensure each of your VMs has an IP that is unique to your account.\r\n\r\nIf I create two VMs they will each resolve to a separate IP address, each of which is shared with many other users. The underlying infrastructure then identifies my user account from my SSH public key and can determine which underlying VM to forward my SSH traffic to.",
  "created": "2026-01-22T23:57:50+00:00",
  "metadata": {},
  "search_document": "'/)':12C '2':29C '20/month':20C '25':25C '8gb':32C 'a':14C,120C,158C 'above':64C 'account':147C,178C 'address':85C,161C 'an':140C 'and':31C,86C,184C 'answer':112C 'assign':79C,119C 'balancer':100C 'bit':59C 'blog.exe.dev':196C 'but':75C 'can':45C,133C,185C 'clever':58C 'command':65C 'configured':43C 'cpus':30C 'create':150C 'creating':39C 'determine':186C 'dns':6B 'do':127C 'does':97C 'don':77C,117C 'each':135C,155C,162C 'enough':129C 'ensure':134C 'equivalent':90C 'every':80C,124C 'everything':34C 'exe.dev':9C,11C,49C,66C 'exe.dev/)':10C 'for':19C 'forward':107C,191C 'from':179C 'gives':21C 'happens':35C 'has':2A,88C,139C 'have':128C 'header':5A,94C 'here':55C 'host':4A,93C 'hosting':7B,16C 'how':96C 'i':149C 'identifies':175C 'if':148C 'including':38C 'infrastructure':173C 'into':47C,69C 'ip':84C,122C,141C,160C 'ips':130C 'is':13C,113C,143C,165C 'its':82C 'key':183C 'know':101C 'like':51C 'load':99C 'lobste.rs':197C 'many':168C 'my':176C,180C,192C 'name':74C 'new':15C,40C 'no':3A,89C 'of':72C,91C,103C,136C,163C 'on':109C 'once':42C 'other':169C 'over':36C 'own':83C 'public':182C 'ram':33C 'resolve':156C 'run':62C 's':56C 'separate':159C 'service':17C 'share':28C 'shared':166C 'sign':46C 'signs':67C 'simon.exe.dev':54C 'so':95C 'ssh':1A,8B,37C,53C,87C,181C,193C 't':78C,118C 'that':18C,27C,73C,114C,131C,142C 'the':57C,63C,92C,111C,171C 'their':98C 'then':174C 'they':76C,116C,126C,132C,153C 'this':52C 'to':24C,106C,110C,123C,145C,157C,190C,195C 'traffic':194C 'two':151C 'underlying':172C,188C 'unique':121C,144C 'up':23C 'user':177C 'users':170C 'vm':71C,81C,125C,189C 'vms':26C,41C,50C,105C,138C,152C 'when':60C 'which':102C,164C,187C 'while':115C 'will':154C 'with':167C 'you':22C,44C,61C,68C,108C 'your':48C,70C,104C,137C,146C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-01-22 17:42:34+00:00
{
  "id": 9255,
  "slug": "qwen3-tts",
  "link_url": "https://qwen.ai/blog?id=qwen3tts-0115",
  "link_title": "Qwen3-TTS Family is Now Open Sourced: Voice Design, Clone, and Generation",
  "via_url": "https://news.ycombinator.com/item?id=46719229",
  "via_title": "Hacker News",
  "commentary": "I haven't been paying much attention to the state-of-the-art in speech generation models other than noting that they've got *really good*, so I can't speak for how notable this new release from Qwen is.\r\n\r\nFrom [the accompanying paper](https://github.com/QwenLM/Qwen3-TTS/blob/main/assets/Qwen3_TTS.pdf):\r\n\r\n> In this report, we present the Qwen3-TTS series, a family of advanced multilingual, controllable, robust, and streaming text-to-speech models. Qwen3-TTS supports state-of- the-art 3-second voice cloning and description-based control, allowing both the creation of entirely novel voices and fine-grained manipulation over the output speech. Trained on over 5 million hours of speech data spanning 10 languages, Qwen3-TTS adopts a dual-track LM architecture for real-time synthesis [...]. Extensive experiments indicate state-of-the-art performance across diverse objective and subjective benchmark (e.g., TTS multilingual test set, InstructTTSEval, and our long speech test set). To facilitate community research and development, we release both tokenizers and models under the Apache 2.0 license.\r\n\r\nTo give an idea of size, [Qwen/Qwen3-TTS-12Hz-1.7B-Base](https://huggingface.co/Qwen/Qwen3-TTS-12Hz-1.7B-Base) is 4.54GB on Hugging Face and [Qwen/Qwen3-TTS-12Hz-0.6B-Base](https://huggingface.co/Qwen/Qwen3-TTS-12Hz-0.6B-Base) is 2.52GB.\r\n\r\nThe [Hugging Face demo](https://huggingface.co/spaces/Qwen/Qwen3-TTS) lets you try out the 0.6B and 1.7B models for free in your browser, including voice cloning:\r\n\r\n![Screenshot of a Qwen3-TTS voice cloning web interface with three tabs at top: \"Voice Design\", \"Voice Clone (Base)\" (selected), and \"TTS (CustomVoice)\". The page is titled \"Clone Voice from Reference Audio\" and has two main sections. Left section: \"Reference Audio (Upload a voice sample clone)\" showing an audio waveform player at 0:00/0:34 with playback controls, upload and microphone icons, followed by \"Reference Text (Transcript of the reference audio)\" containing three paragraphs: \"Simon Willison is the creator of Datasette, an open source tool for exploring and publishing data. He currently works full-time building open source tools for data journalism, built around Datasette and SQLite. Prior to becoming an independent open source developer, Simon was an engineering director at Eventbrite. Simon joined Eventbrite through their acquisition of Lanyrd, a Y Combinator funded company he co-founded in 2010. He is a co-creator of the Django Web Framework, and has been blogging about web development and programming since 2002 at simonwillison.net\". Right section: \"Target Text (Text to synthesize with cloned voice)\" containing text about Qwen3-TTS speech generation capabilities, with \"Language\" dropdown set to \"Auto\" and \"Model Size\" dropdown set to \"1.7B\", and a purple \"Clone & Generate\" button at bottom.](https://static.simonwillison.net/static/2026/qwen-voice-clone.jpg)\r\n\r\nI tried this out by recording myself reading [my about page](https://simonwillison.net/about/) and then having Qwen3-TTS generate audio of me reading the Qwen3-TTS announcement post. Here's the result:\r\n\r\n<audio controls style=\"width: 100%\">\r\n  <source src=\"https://static.simonwillison.net/static/2026/qwen-tts-clone.wav\" type=\"audio/wav\">\r\n  Your browser does not support the audio element.\r\n</audio>\r\n\r\nIt's important that everyone understands that voice cloning is now something that's available to anyone with a GPU and a few GBs of VRAM... or in this case a web browser that can access Hugging Face.\r\n\r\n**Update**: Prince Canuma [got this working](https://x.com/Prince_Canuma/status/2014453857019904423) with his [mlx-audio](https://pypi.org/project/mlx-audio/) library. I [had Claude](https://claude.ai/share/2e01ad60-ca38-4e14-ab60-74eaa45b2fbd) turn that into [a CLI tool](https://github.com/simonw/tools/blob/main/python/q3_tts.py) which you can run with `uv` ike this:\r\n\r\n    uv run https://tools.simonwillison.net/python/q3_tts.py \\\r\n      'I am a pirate, give me your gold!' \\\r\n      -i 'gruff voice' -o pirate.wav\r\n\r\nThe `-i` option lets you use a prompt to describe the voice it should use. On first run this downloads a 4.5GB model file from Hugging Face.",
  "created": "2026-01-22T17:42:34+00:00",
  "metadata": {},
  "search_document": "'/about/)':488C '/prince_canuma/status/2014453857019904423)':564C '/project/mlx-audio/)':572C '/python/q3_tts.py':601C '/qwen/qwen3-tts-12hz-0.6b-base)':234C '/qwen/qwen3-tts-12hz-1.7b-base)':223C '/qwenlm/qwen3-tts/blob/main/assets/qwen3_tts.pdf):':82C '/share/2e01ad60-ca38-4e14-ab60-74eaa45b2fbd)':579C '/simonw/tools/blob/main/python/q3_tts.py)':588C '/spaces/qwen/qwen3-tts)':244C '/static/2026/qwen-voice-clone.jpg)':474C '0':317C '0.6':250C '00/0':318C '1.7':253C,462C '10':153C '2.0':212C '2.52':236C '2002':428C '2010':406C '3':117C '34':319C '4.5':636C '4.54':225C '5':146C 'a':93C,159C,266C,307C,396C,409C,465C,536C,539C,548C,583C,604C,621C,635C 'about':422C,443C,484C 'access':553C 'accompanying':78C 'acquisition':393C 'across':179C 'adopts':158C 'advanced':96C 'ai':18B,21B,32B 'ai-in-china':31B 'allowing':126C 'am':603C 'an':216C,312C,346C,376C,383C 'and':12A,100C,121C,134C,182C,191C,201C,207C,230C,252C,285C,297C,324C,352C,371C,418C,425C,456C,464C,489C,538C 'announcement':504C 'anyone':534C 'apache':211C 'architecture':164C 'around':369C 'art':48C,116C,177C 'at':277C,316C,386C,429C,470C 'attention':41C 'audio':296C,305C,313C,335C,496C,516C,569C 'auto':455C 'available':532C 'b':251C,254C,463C 'base':283C 'based':124C 'becoming':375C 'been':38C,420C 'benchmark':184C 'blogging':421C 'both':127C,205C 'bottom':471C 'browser':260C,511C,550C 'building':361C 'built':368C 'button':469C 'by':328C,479C 'can':64C,552C,591C 'canuma':30B,558C 'capabilities':449C 'case':547C 'china':34B 'claude':576C 'claude.ai':578C 'claude.ai/share/2e01ad60-ca38-4e14-ab60-74eaa45b2fbd)':577C 'cli':584C 'clone':11A,282C,292C,310C,467C 'cloned':439C 'cloning':120C,263C,271C,526C 'co':403C,411C 'co-creator':410C 'co-founded':402C 'combinator':398C 'community':199C 'company':400C 'containing':336C,441C 'control':125C 'controllable':98C 'controls':322C 'creation':129C 'creator':343C,412C 'currently':356C 'customvoice':287C 'data':151C,354C,366C 'datasette':345C,370C 'demo':241C 'describe':624C 'description':123C 'description-based':122C 'design':10A,280C 'developer':380C 'development':202C,424C 'director':385C 'diverse':180C 'django':415C 'does':512C 'downloads':634C 'dropdown':452C,459C 'dual':161C 'dual-track':160C 'e.g':185C 'element':517C 'engineering':384C 'entirely':131C 'eventbrite':387C,390C 'everyone':522C 'experiments':171C 'exploring':351C 'extensive':170C 'face':24B,229C,240C,555C,642C 'facilitate':198C 'family':4A,94C 'few':540C 'file':639C 'fine':136C 'fine-grained':135C 'first':631C 'followed':327C 'for':67C,165C,256C,350C,365C 'founded':404C 'framework':417C 'free':257C 'from':73C,76C,294C,640C 'full':359C 'full-time':358C 'funded':399C 'gb':226C,237C,637C 'gbs':541C 'generate':468C,495C 'generation':13A,51C,448C 'generative':20B 'generative-ai':19B 'github.com':81C,587C 'github.com/qwenlm/qwen3-tts/blob/main/assets/qwen3_tts.pdf):':80C 'github.com/simonw/tools/blob/main/python/q3_tts.py)':586C 'give':215C,606C 'gold':609C 'good':61C 'got':59C,559C 'gpu':537C 'grained':137C 'gruff':611C 'hacker':644C 'had':575C 'has':298C,419C 'haven':36C 'having':491C 'he':355C,401C,407C 'here':506C 'his':566C 'hours':148C 'how':68C 'hugging':23B,228C,239C,554C,641C 'hugging-face':22B 'huggingface.co':222C,233C,243C 'huggingface.co/qwen/qwen3-tts-12hz-0.6b-base)':232C 'huggingface.co/qwen/qwen3-tts-12hz-1.7b-base)':221C 'huggingface.co/spaces/qwen/qwen3-tts)':242C 'i':35C,63C,475C,574C,602C,610C,616C 'icons':326C 'idea':217C 'ike':595C 'important':520C 'in':33B,49C,83C,258C,405C,545C 'including':261C 'independent':377C 'indicate':172C 'instructttseval':190C 'interface':273C 'into':582C 'is':5A,75C,224C,235C,290C,341C,408C,527C 'it':518C,627C 'joined':389C 'journalism':367C 'language':451C 'languages':154C 'lanyrd':395C 'left':302C 'lets':245C,618C 'library':573C 'license':213C 'lm':163C 'long':193C 'main':300C 'manipulation':138C 'me':498C,607C 'microphone':325C 'million':147C 'mlx':27B,568C 'mlx-audio':567C 'model':457C,638C 'models':52C,106C,208C,255C 'much':40C 'multilingual':97C,187C 'my':483C 'myself':481C 'new':71C 'news':645C 'not':513C 'notable':69C 'noting':55C 'novel':132C 'now':6A,528C 'o':613C 'objective':181C 'of':46C,95C,113C,130C,149C,175C,218C,265C,332C,344C,394C,413C,497C,542C 'on':144C,227C,630C 'open':7A,347C,362C,378C 'option':617C 'or':544C 'other':53C 'our':192C 'out':248C,478C 'output':141C 'over':139C,145C 'page':289C,485C 'paper':79C 'paragraphs':338C 'paying':39C 'performance':178C 'pirate':605C 'pirate.wav':614C 'playback':321C 'player':315C 'post':505C 'present':87C 'prince':29B,557C 'prince-canuma':28B 'prior':373C 'programming':426C 'prompt':622C 'publishing':353C 'purple':466C 'pypi.org':571C 'pypi.org/project/mlx-audio/)':570C 'qwen':26B,74C 'qwen.ai':643C 'qwen/qwen3-tts-12hz-0.6b-base':231C 'qwen/qwen3-tts-12hz-1.7b-base':220C 'qwen3':2A,90C,108C,156C,268C,445C,493C,502C 'qwen3-tts':1A,89C,107C,155C,267C,444C,492C,501C 'reading':482C,499C 'real':167C 'real-time':166C 'really':60C 'recording':480C 'reference':295C,304C,329C,334C 'release':72C,204C 'report':85C 'research':200C 'result':509C 'right':431C 'robust':99C 'run':592C,598C,632C 's':507C,519C,531C 'sample':309C 'screenshot':264C 'second':118C 'section':303C,432C 'sections':301C 'selected':284C 'series':92C 'set':189C,196C,453C,460C 'should':628C 'showing':311C 'simon':339C,381C,388C 'simonwillison.net':430C,487C 'simonwillison.net/about/)':486C 'since':427C 'size':219C,458C 'so':62C 'something':529C 'source':348C,363C,379C 'sourced':8A 'spanning':152C 'speak':66C 'speech':17B,50C,105C,142C,150C,194C,447C 'sqlite':372C 'state':45C,112C,174C 'state-of':111C 'state-of-the-art':44C,173C 'static.simonwillison.net':473C 'static.simonwillison.net/static/2026/qwen-voice-clone.jpg)':472C 'streaming':101C 'subjective':183C 'support':514C 'supports':110C 'synthesis':169C 'synthesize':437C 't':37C,65C 'tabs':276C 'target':433C 'test':188C,195C 'text':15B,103C,330C,434C,435C,442C 'text-to-speech':14B,102C 'than':54C 'that':56C,521C,524C,530C,551C,581C 'the':43C,47C,77C,88C,115C,128C,140C,176C,210C,238C,249C,288C,333C,342C,414C,500C,508C,515C,615C,625C 'the-art':114C 'their':392C 'then':490C 'they':57C 'this':70C,84C,477C,546C,560C,596C,633C 'three':275C,337C 'through':391C 'time':168C,360C 'titled':291C 'to':16B,42C,104C,197C,214C,374C,436C,454C,461C,533C,623C 'tokenizers':206C 'tool':349C,585C 'tools':364C 'tools.simonwillison.net':600C 'tools.simonwillison.net/python/q3_tts.py':599C 'top':278C 'track':162C 'trained':143C 'transcript':331C 'tried':476C 'try':247C 'tts':3A,91C,109C,157C,186C,269C,286C,446C,494C,503C 'turn':580C 'two':299C 'under':209C 'understands':523C 'update':556C 'upload':306C,323C 'use':620C,629C 'uv':25B,594C,597C 've':58C 'voice':9A,119C,262C,270C,279C,281C,293C,308C,440C,525C,612C,626C 'voices':133C 'vram':543C 'was':382C 'waveform':314C 'we':86C,203C 'web':272C,416C,423C,549C 'which':589C 'willison':340C 'with':274C,320C,438C,450C,535C,565C,593C 'working':561C 'works':357C 'x.com':563C 'x.com/prince_canuma/status/2014453857019904423)':562C 'y':397C 'you':246C,590C,619C 'your':259C,510C,608C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/qwen-voice-clone-card.jpg",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-01-22 15:34:22+00:00
{
  "id": 2009,
  "slug": "chris-lloyd",
  "quotation": "Most people's mental model of Claude Code is that \"it's just a TUI\" but it should really be closer to \"a small game engine\".\r\n\r\nFor each frame our pipeline constructs a scene graph with React then:\r\n\r\n-> layout elements<br>\r\n-> rasterize them to a 2d screen<br>\r\n-> diff that against the previous screen<br>\r\n-> *finally* use the diff to generate ANSI sequences to draw\r\n\r\nWe have a ~16ms frame budget so we have roughly ~5ms to go from the React scene graph to ANSI written.",
  "source": "Chris Lloyd",
  "source_url": "https://news.ycombinator.com/item?id=46699072#46706040",
  "created": "2026-01-22T15:34:22+00:00",
  "metadata": {},
  "search_document": "'16ms':66A '2d':45A '5ms':73A 'a':14A,23A,33A,44A,65A 'against':49A 'ansi':59A,82A 'be':20A 'budget':68A 'but':16A 'chris':88C 'claude':7A,86B 'claude-code':85B 'closer':21A 'code':8A,87B 'constructs':32A 'diff':47A,56A 'draw':62A 'each':28A 'elements':40A 'engine':26A 'finally':53A 'for':27A 'frame':29A,67A 'from':76A 'game':25A 'generate':58A 'go':75A 'graph':35A,80A 'have':64A,71A 'is':9A 'it':11A,17A 'just':13A 'layout':39A 'lloyd':89C 'mental':4A 'model':5A 'most':1A 'of':6A 'our':30A 'people':2A 'pipeline':31A 'previous':51A 'rasterize':41A 'react':37A,78A,84B 'really':19A 'roughly':72A 's':3A,12A 'scene':34A,79A 'screen':46A,52A 'sequences':60A 'should':18A 'small':24A 'so':69A 'that':10A,48A 'the':50A,55A,77A 'them':42A 'then':38A 'to':22A,43A,57A,61A,74A,81A 'tui':15A 'use':54A 'we':63A,70A 'with':36A 'written':83A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "Claude Code team at Anthropic"
}
blogmark 2026-01-21 23:39:49+00:00
{
  "id": 9254,
  "slug": "claudes-new-constitution",
  "link_url": "https://www.anthropic.com/news/claude-new-constitution",
  "link_title": "Claude's new constitution",
  "via_url": null,
  "via_title": null,
  "commentary": "Late last year Richard Weiss [found something interesting](https://www.lesswrong.com/posts/vpNG99GhbBoLov9og/claude-4-5-opus-soul-document) while poking around with the just-released Claude Opus 4.5: he was able to talk the model into regurgitating a document which was *not* part of the system prompt but appeared instead to be baked in during training, and which described Claude's core values at great length.\r\n\r\nHe called this leak the **soul document**, and Amanda Askell from Anthropic [quickly confirmed](https://simonwillison.net/2025/Dec/2/claude-soul-document/) that it was indeed part of Claude's training procedures.\r\n\r\nToday Anthropic made this official, [releasing that full \"constitution\" document](https://www.anthropic.com/news/claude-new-constitution) under a CC0 (effectively public domain) license. There's a lot to absorb! It's over 35,000 tokens, more than 10x the length of the [published Opus 4.5 system prompt](https://platform.claude.com/docs/en/release-notes/system-prompts#claude-opus-4-5).\r\n\r\nOne detail that caught my eye is the acknowledgements at the end, which include a list of [external contributors](https://www.anthropic.com/constitution#acknowledgements) who helped review the document. I was intrigued to note that two of the fifteen listed names are Catholic members of the clergy - [Father Brendan McGuire](https://www.frbrendanmcguire.org/biography) is a pastor in Los Altos with a Master\u2019s degree in Computer Science and Math and [Bishop Paul Tighe](https://en.wikipedia.org/wiki/Paul_Tighe) is an Irish Catholic bishop with a background in moral theology.",
  "created": "2026-01-21T23:39:49+00:00",
  "metadata": {},
  "search_document": "'/2025/dec/2/claude-soul-document/)':97C '/biography)':205C '/constitution#acknowledgements)':176C '/docs/en/release-notes/system-prompts#claude-opus-4-5).':154C '/news/claude-new-constitution)':120C '/posts/vpng99ghbbolov9og/claude-4-5-opus-soul-document)':31C '/wiki/paul_tighe)':228C '000':138C '10x':142C '35':137C '4.5':42C,149C 'a':52C,122C,130C,169C,207C,213C,235C 'able':45C 'absorb':133C 'acknowledgements':163C 'ai':5B,8B,16B,19B 'ai-ethics':15B 'ai-personality':18B 'altos':211C 'amanda':13B,89C 'amanda-askell':12B 'an':230C 'and':71C,88C,220C,222C 'anthropic':10B,92C,109C 'appeared':63C 'are':194C 'around':34C 'askell':14B,90C 'at':78C,164C 'background':236C 'baked':67C 'be':66C 'bishop':223C,233C 'brendan':201C 'but':62C 'called':82C 'catholic':195C,232C 'caught':158C 'cc0':123C 'claude':1A,11B,40C,74C,104C 'clergy':199C 'computer':218C 'confirmed':94C 'constitution':4A,116C 'contributors':173C 'core':76C 'degree':216C 'described':73C 'detail':156C 'document':53C,87C,117C,181C 'domain':126C 'during':69C 'effectively':124C 'en.wikipedia.org':227C 'en.wikipedia.org/wiki/paul_tighe)':226C 'end':166C 'ethics':17B 'external':172C 'eye':160C 'father':200C 'fifteen':191C 'found':26C 'from':91C 'full':115C 'generative':7B 'generative-ai':6B 'great':79C 'he':43C,81C 'helped':178C 'i':182C 'in':68C,209C,217C,237C 'include':168C 'indeed':101C 'instead':64C 'interesting':28C 'into':50C 'intrigued':184C 'irish':231C 'is':161C,206C,229C 'it':99C,134C 'just':38C 'just-released':37C 'last':22C 'late':21C 'leak':84C 'length':80C,144C 'license':127C 'list':170C 'listed':192C 'llms':9B 'los':210C 'lot':131C 'made':110C 'master':214C 'math':221C 'mcguire':202C 'members':196C 'model':49C 'moral':238C 'more':140C 'my':159C 'names':193C 'new':3A 'not':56C 'note':186C 'of':58C,103C,145C,171C,189C,197C 'official':112C 'one':155C 'opus':41C,148C 'over':136C 'part':57C,102C 'pastor':208C 'paul':224C 'personality':20B 'platform.claude.com':153C 'platform.claude.com/docs/en/release-notes/system-prompts#claude-opus-4-5).':152C 'poking':33C 'procedures':107C 'prompt':61C,151C 'public':125C 'published':147C 'quickly':93C 'regurgitating':51C 'released':39C 'releasing':113C 'review':179C 'richard':24C 's':2A,75C,105C,129C,135C,215C 'science':219C 'simonwillison.net':96C 'simonwillison.net/2025/dec/2/claude-soul-document/)':95C 'something':27C 'soul':86C 'system':60C,150C 'talk':47C 'than':141C 'that':98C,114C,157C,187C 'the':36C,48C,59C,85C,143C,146C,162C,165C,180C,190C,198C 'theology':239C 'there':128C 'this':83C,111C 'tighe':225C 'to':46C,65C,132C,185C 'today':108C 'tokens':139C 'training':70C,106C 'two':188C 'under':121C 'values':77C 'was':44C,55C,100C,183C 'weiss':25C 'which':54C,72C,167C 'while':32C 'who':177C 'with':35C,212C,234C 'www.anthropic.com':119C,175C,240C 'www.anthropic.com/constitution#acknowledgements)':174C 'www.anthropic.com/news/claude-new-constitution)':118C 'www.frbrendanmcguire.org':204C 'www.frbrendanmcguire.org/biography)':203C 'www.lesswrong.com':30C 'www.lesswrong.com/posts/vpng99ghbbolov9og/claude-4-5-opus-soul-document)':29C 'year':23C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-01-20 23:11:57+00:00
{
  "id": 9253,
  "slug": "electricity-use-of-ai-coding-agents",
  "link_url": "https://www.simonpcouch.com/blog/2026-01-20-cc-impact/",
  "link_title": "Electricity use of AI coding agents",
  "via_url": "https://news.ycombinator.com/item?id=46695415",
  "via_title": "Hacker News",
  "commentary": "Previous work estimating the energy and water cost of LLMs has generally focused on the cost per prompt using a consumer-level system such as ChatGPT.\r\n\r\nSimon P. Couch notes that coding agents such as Claude Code use *way* more tokens in response to tasks, often burning through many thousands of tokens of many tool calls.\r\n\r\nAs a heavy Claude Code user, Simon estimates his own usage at the equivalent of 4,400 \"typical queries\" to an LLM, for an equivalent of around $15-$20 in daily API token spend. He figures that to be about the same as running a dishwasher once or the daily energy used by a domestic refrigerator.",
  "created": "2026-01-20T23:11:57+00:00",
  "metadata": {},
  "search_document": "'15':109C '20':110C '4':97C '400':98C 'a':44C,83C,126C,135C 'about':121C 'agents':6A,21B,58C 'ai':4A,7B,10B,13B,16B 'ai-energy-usage':15B 'ai-ethics':12B 'an':102C,105C 'and':30C 'api':113C 'around':108C 'as':50C,60C,82C,124C 'at':93C 'be':120C 'burning':72C 'by':134C 'calls':81C 'chatgpt':51C 'claude':23B,61C,85C 'claude-code':22B 'code':24B,62C,86C 'coding':5A,20B,57C 'coding-agents':19B 'consumer':46C 'consumer-level':45C 'cost':32C,40C 'couch':54C 'daily':112C,131C 'dishwasher':127C 'domestic':136C 'electricity':1A 'energy':17B,29C,132C 'equivalent':95C,106C 'estimates':89C 'estimating':27C 'ethics':14B 'figures':117C 'focused':37C 'for':104C 'generally':36C 'generative':9B 'generative-ai':8B 'hacker':139C 'has':35C 'he':116C 'heavy':84C 'his':90C 'in':67C,111C 'level':47C 'llm':103C 'llms':11B,34C 'many':74C,79C 'more':65C 'news':140C 'notes':55C 'of':3A,33C,76C,78C,96C,107C 'often':71C 'on':38C 'once':128C 'or':129C 'own':91C 'p':53C 'per':41C 'previous':25C 'prompt':42C 'queries':100C 'refrigerator':137C 'response':68C 'running':125C 'same':123C 'simon':52C,88C 'spend':115C 'such':49C,59C 'system':48C 'tasks':70C 'that':56C,118C 'the':28C,39C,94C,122C,130C 'thousands':75C 'through':73C 'to':69C,101C,119C 'token':114C 'tokens':66C,77C 'tool':80C 'typical':99C 'usage':18B,92C 'use':2A,63C 'used':133C 'user':87C 'using':43C 'water':31C 'way':64C 'work':26C 'www.simonpcouch.com':138C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-01-20 17:51:17+00:00
{
  "id": 9252,
  "slug": "giving-university-exams-in-the-age-of-chatbots",
  "link_url": "https://ploum.net/2026-01-19-exam-with-chatbots.html",
  "link_title": "Giving University Exams in the Age of Chatbots",
  "via_url": "https://lobste.rs/s/parmy3/giving_university_exams_age_chatbots",
  "via_title": "lobste.rs",
  "commentary": "Detailed and thoughtful description of an open-book and open-chatbot exam run by [Ploum](https://fr.wikipedia.org/wiki/Lionel_Dricot) at \u00c9cole Polytechnique de Louvain for an \"Open Source Strategies\" class.\r\n\r\nStudents were told they could use chatbots during the exam but they had to announce their intention to do so in advance, share their prompts and take full accountability for any mistakes they made.\r\n\r\nOnly 3 out of 60 students chose to use chatbots. Ploum surveyed half of the class to help understand their motivations.",
  "created": "2026-01-20T17:51:17+00:00",
  "metadata": {},
  "search_document": "'/wiki/lionel_dricot)':37C '3':84C '60':87C 'accountability':77C 'advance':70C 'age':6A 'ai':10B,13B,16B 'ai-ethics':15B 'an':23C,44C 'and':19C,27C,74C 'announce':63C 'any':79C 'at':38C 'book':26C 'but':59C 'by':33C 'chatbot':30C 'chatbots':8A,55C,92C 'chose':89C 'class':48C,98C 'could':53C 'de':41C 'description':21C 'detailed':18C 'do':67C 'during':56C 'education':9B 'ethics':17B 'exam':31C,58C 'exams':3A 'for':43C,78C 'fr.wikipedia.org':36C 'fr.wikipedia.org/wiki/lionel_dricot)':35C 'full':76C 'generative':12B 'generative-ai':11B 'giving':1A 'had':61C 'half':95C 'help':100C 'in':4A,69C 'intention':65C 'llms':14B 'lobste.rs':105C 'louvain':42C 'made':82C 'mistakes':80C 'motivations':103C 'of':7A,22C,86C,96C 'only':83C 'open':25C,29C,45C 'open-book':24C 'open-chatbot':28C 'out':85C 'ploum':34C,93C 'ploum.net':104C 'polytechnique':40C 'prompts':73C 'run':32C 'share':71C 'so':68C 'source':46C 'strategies':47C 'students':49C,88C 'surveyed':94C 'take':75C 'the':5A,57C,97C 'their':64C,72C,102C 'they':52C,60C,81C 'thoughtful':20C 'to':62C,66C,90C,99C 'told':51C 'understand':101C 'university':2A 'use':54C,91C 'were':50C '\u00e9cole':39C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-01-19 23:58:56+00:00
{
  "id": 9251,
  "slug": "nanolang",
  "link_url": "https://github.com/jordanhubbard/nanolang",
  "link_title": "jordanhubbard/nanolang",
  "via_url": "https://news.ycombinator.com/item?id=46684958",
  "via_title": "Hacker News",
  "commentary": "Plenty of people have mused about what a new programming language specifically designed to be used by LLMs might look like. Jordan Hubbard ([co-founder of FreeBSD](https://en.wikipedia.org/wiki/Jordan_Hubbard), with serious stints at Apple and NVIDIA) just released exactly that.\r\n\r\n> A minimal, LLM-friendly programming language with mandatory testing and unambiguous syntax.\r\n>\r\n> NanoLang transpiles to C for native performance while providing a clean, modern syntax optimized for both human readability and AI code generation.\r\n\r\nThe syntax strikes me as an interesting mix between C, Lisp and Rust.\r\n\r\nI decided to see if an LLM could produce working code in it directly, given the necessary context. I started with this [MEMORY.md](https://github.com/jordanhubbard/nanolang/blob/main/MEMORY.md) file, which begins:\r\n\r\n> **Purpose:** This file is designed specifically for Large Language Model consumption. It contains the essential knowledge needed to generate, debug, and understand NanoLang code. Pair this with `spec.json` for complete language coverage.\r\n\r\nI ran that using [LLM](https://llm.datasette.io/) and [llm-anthropic](https://github.com/simonw/llm-anthropic) like this:\r\n\r\n    llm -m claude-opus-4.5 \\\r\n      -s https://raw.githubusercontent.com/jordanhubbard/nanolang/refs/heads/main/MEMORY.md \\\r\n      'Build me a mandelbrot fractal CLI tool in this language' \r\n      > /tmp/fractal.nano\r\n\r\nThe [resulting code](https://gist.github.com/simonw/7847f022566d11629ec2139f1d109fb8#mandelbrot-fractal-cli-tool-in-nano)... [did not compile](https://gist.github.com/simonw/7847f022566d11629ec2139f1d109fb8?permalink_comment_id=5947465#gistcomment-5947465).\r\n\r\nI may have been too optimistic expecting a one-shot working program for a new language like this. So I ran a clone of the actual project, copied in my program and had Claude Code take a look at the failing compiler output.\r\n\r\n... and it worked! Claude happily grepped its way through the various `examples/` and built me a working program.\r\n\r\nHere's [the Claude Code transcript](https://gisthost.github.io/?9696da6882cb6596be6a9d5196e8a7a5/index.html) - you can see it [reading relevant examples here](https://gisthost.github.io/?9696da6882cb6596be6a9d5196e8a7a5/page-001.html#msg-2026-01-19T23-43-09-675Z) - and here's [the finished code plus its output](https://gist.github.com/simonw/e7f3577adcfd392ab7fa23b1295d00f2).\r\n\r\nI've suspected [for a while](https://simonwillison.net/2025/Nov/7/llms-for-new-programming-languages/) that LLMs and coding agents might significantly reduce the friction involved in launching a new language. This result reinforces my opinion.",
  "created": "2026-01-19T23:58:56+00:00",
  "metadata": {},
  "search_document": "'/)':179C '/2025/nov/7/llms-for-new-programming-languages/)':324C '/?9696da6882cb6596be6a9d5196e8a7a5/index.html)':292C '/?9696da6882cb6596be6a9d5196e8a7a5/page-001.html#msg-2026-01-19t23-43-09-675z)':303C '/jordanhubbard/nanolang/blob/main/memory.md)':136C '/jordanhubbard/nanolang/refs/heads/main/memory.md':198C '/simonw/7847f022566d11629ec2139f1d109fb8#mandelbrot-fractal-cli-tool-in-nano)...':215C '/simonw/7847f022566d11629ec2139f1d109fb8?permalink_comment_id=5947465#gistcomment-5947465).':221C '/simonw/e7f3577adcfd392ab7fa23b1295d00f2).':315C '/simonw/llm-anthropic)':186C '/tmp/fractal.nano':209C '/wiki/jordan_hubbard),':51C '4.5':194C 'a':28C,63C,85C,201C,229C,236C,244C,259C,281C,320C,338C 'about':26C 'actual':248C 'agents':17B,329C 'ai':5B,8B,11B,95C 'ai-assisted-programming':10B 'an':103C,116C 'and':57C,73C,94C,109C,160C,180C,254C,266C,278C,304C,327C 'anthropic':183C 'apple':56C 'as':102C 'assisted':12B 'at':55C,261C 'be':35C 'been':225C 'begins':139C 'between':106C 'both':91C 'build':199C 'built':279C 'by':37C 'c':79C,107C 'can':294C 'claude':19B,192C,256C,269C,287C 'claude-code':18B 'claude-opus':191C 'clean':86C 'cli':204C 'clone':245C 'co':45C 'co-founder':44C 'code':20B,96C,121C,163C,212C,257C,288C,309C 'coding':16B,328C 'coding-agents':15B 'compile':218C 'compiler':264C 'complete':169C 'consumption':150C 'contains':152C 'context':128C 'copied':250C 'could':118C 'coverage':171C 'debug':159C 'decided':112C 'designed':33C,144C 'did':216C 'directly':124C 'en.wikipedia.org':50C 'en.wikipedia.org/wiki/jordan_hubbard),':49C 'essential':154C 'exactly':61C 'examples':277C,299C 'expecting':228C 'failing':263C 'file':137C,142C 'finished':308C 'for':80C,90C,146C,168C,235C,319C 'founder':46C 'fractal':203C 'freebsd':48C 'friction':334C 'friendly':67C 'generate':158C 'generation':97C 'generative':7B 'generative-ai':6B 'gist.github.com':214C,220C,314C 'gist.github.com/simonw/7847f022566d11629ec2139f1d109fb8#mandelbrot-fractal-cli-tool-in-nano)...':213C 'gist.github.com/simonw/7847f022566d11629ec2139f1d109fb8?permalink_comment_id=5947465#gistcomment-5947465).':219C 'gist.github.com/simonw/e7f3577adcfd392ab7fa23b1295d00f2).':313C 'gisthost.github.io':291C,302C 'gisthost.github.io/?9696da6882cb6596be6a9d5196e8a7a5/index.html)':290C 'gisthost.github.io/?9696da6882cb6596be6a9d5196e8a7a5/page-001.html#msg-2026-01-19t23-43-09-675z)':301C 'github.com':135C,185C,346C 'github.com/jordanhubbard/nanolang/blob/main/memory.md)':134C 'github.com/simonw/llm-anthropic)':184C 'given':125C 'grepped':271C 'hacker':347C 'had':255C 'happily':270C 'have':24C,224C 'here':284C,300C,305C 'hubbard':43C 'human':92C 'i':111C,129C,172C,222C,242C,316C 'if':115C 'in':122C,206C,251C,336C 'interesting':104C 'involved':335C 'is':143C 'it':123C,151C,267C,296C 'its':272C,311C 'jordan':42C 'jordanhubbard/nanolang':1A 'just':59C 'knowledge':155C 'language':31C,69C,148C,170C,208C,238C,340C 'languages':4B 'large':147C 'launching':337C 'like':41C,187C,239C 'lisp':108C 'llm':14B,66C,117C,176C,182C,189C 'llm-anthropic':181C 'llm-friendly':65C 'llm.datasette.io':178C 'llm.datasette.io/)':177C 'llms':9B,38C,326C 'look':40C,260C 'm':190C 'mandatory':71C 'mandelbrot':202C 'may':223C 'me':101C,200C,280C 'memory.md':133C 'might':39C,330C 'minimal':64C 'mix':105C 'model':149C 'modern':87C 'mused':25C 'my':252C,344C 'nanolang':76C,162C 'native':81C 'necessary':127C 'needed':156C 'new':29C,237C,339C 'news':348C 'not':217C 'nvidia':58C 'of':22C,47C,246C 'one':231C 'one-shot':230C 'opinion':345C 'optimistic':227C 'optimized':89C 'opus':193C 'output':265C,312C 'pair':164C 'people':23C 'performance':82C 'plenty':21C 'plus':310C 'produce':119C 'program':234C,253C,283C 'programming':3B,13B,30C,68C 'programming-languages':2B 'project':249C 'providing':84C 'purpose':140C 'ran':173C,243C 'raw.githubusercontent.com':197C 'raw.githubusercontent.com/jordanhubbard/nanolang/refs/heads/main/memory.md':196C 'readability':93C 'reading':297C 'reduce':332C 'reinforces':343C 'released':60C 'relevant':298C 'result':342C 'resulting':211C 'rust':110C 's':195C,285C,306C 'see':114C,295C 'serious':53C 'shot':232C 'significantly':331C 'simonwillison.net':323C 'simonwillison.net/2025/nov/7/llms-for-new-programming-languages/)':322C 'so':241C 'spec.json':167C 'specifically':32C,145C 'started':130C 'stints':54C 'strikes':100C 'suspected':318C 'syntax':75C,88C,99C 'take':258C 'testing':72C 'that':62C,174C,325C 'the':98C,126C,153C,210C,247C,262C,275C,286C,307C,333C 'this':132C,141C,165C,188C,207C,240C,341C 'through':274C 'to':34C,78C,113C,157C 'too':226C 'tool':205C 'transcript':289C 'transpiles':77C 'unambiguous':74C 'understand':161C 'used':36C 'using':175C 'various':276C 've':317C 'way':273C 'what':27C 'which':138C 'while':83C,321C 'with':52C,70C,131C,166C 'worked':268C 'working':120C,233C,282C 'you':293C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-01-19 05:12:51+00:00
{
  "id": 9250,
  "slug": "scaling-long-running-autonomous-coding",
  "link_url": "https://cursor.com/blog/scaling-agents",
  "link_title": "Scaling long-running autonomous coding",
  "via_url": null,
  "via_title": null,
  "commentary": "Wilson Lin at Cursor has been doing some experiments to see how far you can push a large fleet of \"autonomous\" coding agents:\r\n\r\n> This post describes what we've learned from running hundreds of concurrent agents on a single project, coordinating their work, and watching them write over a million lines of code and trillions of tokens.\r\n\r\nThey ended up running planners and sub-planners to create tasks, then having workers execute on those tasks - similar to how Claude Code uses sub-agents. Each cycle ended with a judge agent deciding if the project was completed or not.\r\n\r\nIn my predictions for 2026 [the other day](https://simonwillison.net/2026/Jan/8/llm-predictions-for-2026/#3-years-someone-will-build-a-new-browser-using-mainly-ai-assisted-coding-and-it-won-t-even-be-a-surprise) I said that by 2029:\r\n\r\n> I think somebody will have built a full web browser mostly using AI assistance, and it won\u2019t even be surprising. Rolling a new web browser is one of the most complicated software projects I can imagine[...] the cheat code is the conformance suites. If there are existing tests that it\u2019ll get so much easier.\r\n\r\n\r\nI may have been off by three years, because Cursor chose \"building a web browser from scratch\" as their test case for their agent swarm approach:\r\n\r\n> To test this system, we pointed it at an ambitious goal: building a web browser from scratch. The agents ran for close to a week, writing over 1 million lines of code across 1,000 files. You can explore [the source code on GitHub](https://github.com/wilsonzlin/fastrender).\r\n\r\nBut how well did they do? Their initial announcement a couple of days ago was met with [unsurprising skepticism](https://embedding-shapes.github.io/cursor-implied-success-without-evidence/), especially when it became apparent that their GitHub Actions CI was failing and there were no build instructions in the repo.\r\n\r\nIt looks like they addressed that within the past 24 hours. The [latest README](https://github.com/wilsonzlin/fastrender/blob/main/README.md#build-requirements) includes build instructions which I followed on macOS like this:\r\n\r\n    cd /tmp\r\n    git clone https://github.com/wilsonzlin/fastrender\r\n    cd fastrender\r\n    git submodule update --init vendor/ecma-rs\r\n    cargo run --release --features browser_ui --bin browser\r\n\r\nThis got me a working browser window! Here are screenshots I took of google.com and my own website:\r\n\r\n![The browser chrome is neat but has a garbled tab name at the top. The Google homepage looks mostly correct but the buttons are not styled correctly and the Google Search one has a huge plus icon floating near it.](https://static.simonwillison.net/static/2026/cursor-google.png)\r\n\r\n![My blog looks mostly correct, but the right closing quotation mark on a quotation (which is implemented as a background image on the final paragraph) is displayed incorrectly multiple times.](https://static.simonwillison.net/static/2026/cursor-simonwillison.jpg)\r\n\r\nHonestly those are very impressive! You can tell they're not just wrapping an existing rendering engine because of those very obvious rendering glitches, but the pages are legible and look mostly correct.\r\n\r\nThe FastRender repo even uses Git submodules [to include various WhatWG and CSS-WG specifications](https://github.com/wilsonzlin/fastrender/tree/main/specs) in the repo, which is a smart way to make sure the agents have access to the reference materials that they might need.\r\n\r\nThis is the second attempt I've seen at building a full web browser using AI-assisted coding in the past two weeks - the first was [HiWave browser](https://github.com/hiwavebrowser/hiwave), a new browser engine in Rust first announced [in this Reddit thread](https://www.reddit.com/r/Anthropic/comments/1q4xfm0/over_christmas_break_i_wrote_a_fully_functional/).\r\n\r\nWhen I made my 2029 prediction this is more-or-less the quality of result I had in mind. I don't think we'll see projects of this nature compete with Chrome or Firefox or WebKit any time soon but I have to admit I'm very surprised to see something this capable emerge so quickly.\r\n\r\n**Update 23rd January 2026**: I recorded a 47 minute conversation with Wilson about this project and published it on YouTube. Here's [the video and accompanying highlights](https://simonwillison.net/2026/Jan/23/fastrender/).",
  "created": "2026-01-19T05:12:51+00:00",
  "metadata": {},
  "search_document": "'/2026/jan/23/fastrender/).':671C '/2026/jan/8/llm-predictions-for-2026/#3-years-someone-will-build-a-new-browser-using-mainly-ai-assisted-coding-and-it-won-t-even-be-a-surprise)':141C '/cursor-implied-success-without-evidence/),':297C '/hiwavebrowser/hiwave),':568C '/r/anthropic/comments/1q4xfm0/over_christmas_break_i_wrote_a_fully_functional/).':583C '/static/2026/cursor-google.png)':428C '/static/2026/cursor-simonwillison.jpg)':461C '/tmp':347C '/wilsonzlin/fastrender':352C '/wilsonzlin/fastrender).':275C '/wilsonzlin/fastrender/blob/main/readme.md#build-requirements)':335C '/wilsonzlin/fastrender/tree/main/specs)':513C '000':263C '1':256C,262C '2026':135C,645C '2029':146C,588C '23rd':643C '24':328C '47':649C 'a':47C,68C,79C,120C,153C,169C,215C,241C,252C,285C,371C,393C,419C,441C,447C,519C,547C,569C,648C 'about':654C 'access':528C 'accompanying':667C 'across':261C 'actions':306C 'addressed':323C 'admit':629C 'agent':122C,226C 'agents':20B,24B,53C,66C,115C,247C,526C 'ago':289C 'ai':8B,12B,15B,159C,553C 'ai-assisted':552C 'ai-assisted-programming':14B 'ambitious':238C 'an':237C,475C 'and':74C,84C,93C,161C,310C,382C,413C,491C,506C,657C,666C 'announced':576C 'announcement':284C 'any':622C 'apparent':302C 'approach':228C 'are':193C,376C,409C,464C,489C 'as':220C,446C 'assistance':160C 'assisted':16B,554C 'at':33C,236C,397C,545C 'attempt':541C 'autonomous':5A,51C 'background':448C 'be':166C 'became':301C 'because':211C,479C 'been':36C,206C 'bin':366C 'blog':430C 'browser':29B,156C,172C,217C,243C,364C,367C,373C,387C,550C,565C,571C 'browser-challenge':28B 'browsers':7B 'build':314C,337C 'building':214C,240C,546C 'built':152C 'but':276C,391C,406C,434C,486C,625C 'buttons':408C 'by':145C,208C 'can':45C,182C,266C,468C 'capable':638C 'cargo':360C 'case':223C 'cd':346C,353C 'challenge':30B 'cheat':185C 'chose':213C 'chrome':388C,617C 'ci':307C 'claude':110C 'clone':349C 'close':250C 'closing':437C 'code':83C,111C,186C,260C,270C 'coding':6A,19B,52C,555C 'coding-agents':18B 'compete':615C 'completed':128C 'complicated':178C 'concurrent':65C 'conformance':26B,189C 'conformance-suites':25B 'conversation':651C 'coordinating':71C 'correct':405C,433C,494C 'correctly':412C 'couple':286C 'create':98C 'css':508C 'css-wg':507C 'cursor':21B,34C,212C 'cursor.com':672C 'cycle':117C 'day':138C 'days':288C 'deciding':123C 'describes':56C 'did':279C 'displayed':455C 'do':281C 'doing':37C 'don':605C 'each':116C 'easier':202C 'embedding-shapes.github.io':296C 'embedding-shapes.github.io/cursor-implied-success-without-evidence/),':295C 'emerge':639C 'ended':89C,118C 'engine':478C,572C 'especially':298C 'even':165C,498C 'execute':103C 'existing':194C,476C 'experiments':39C 'explore':267C 'failing':309C 'far':43C 'fastrender':354C,496C 'features':363C 'files':264C 'final':452C 'firefox':619C 'first':562C,575C 'fleet':49C 'floating':423C 'followed':341C 'for':134C,224C,249C 'from':61C,218C,244C 'full':154C,548C 'garbled':394C 'generative':11B 'generative-ai':10B 'get':199C 'git':348C,355C,500C 'github':272C,305C 'github.com':274C,334C,351C,512C,567C 'github.com/hiwavebrowser/hiwave),':566C 'github.com/wilsonzlin/fastrender':350C 'github.com/wilsonzlin/fastrender).':273C 'github.com/wilsonzlin/fastrender/blob/main/readme.md#build-requirements)':333C 'github.com/wilsonzlin/fastrender/tree/main/specs)':511C 'glitches':485C 'goal':239C 'google':401C,415C 'google.com':381C 'got':369C 'had':601C 'has':35C,392C,418C 'have':151C,205C,527C,627C 'having':101C 'here':375C,662C 'highlights':668C 'hiwave':564C 'homepage':402C 'honestly':462C 'hours':329C 'how':42C,109C,277C 'huge':420C 'hundreds':63C 'i':142C,147C,181C,203C,340C,378C,542C,585C,600C,604C,626C,630C,646C 'icon':422C 'if':124C,191C 'image':449C 'imagine':183C 'implemented':445C 'impressive':466C 'in':131C,316C,514C,556C,573C,577C,602C 'include':503C 'includes':336C 'incorrectly':456C 'init':358C 'initial':283C 'instructions':315C,338C 'is':173C,187C,389C,444C,454C,518C,538C,591C 'it':162C,197C,235C,300C,319C,425C,659C 'january':644C 'judge':121C 'just':473C 'large':48C 'latest':331C 'learned':60C 'legible':490C 'less':595C 'like':321C,344C 'lin':32C 'lines':81C,258C 'll':198C,609C 'llms':13B 'long':3A 'long-running':2A 'look':492C 'looks':320C,403C,431C 'm':631C 'macos':343C 'made':586C 'make':523C 'mark':439C 'materials':532C 'may':204C 'me':370C 'met':291C 'might':535C 'million':80C,257C 'mind':603C 'minute':650C 'more':593C 'more-or-less':592C 'most':177C 'mostly':157C,404C,432C,493C 'much':201C 'multiple':457C 'my':132C,383C,429C,587C 'name':396C 'nature':614C 'near':424C 'neat':390C 'need':536C 'new':170C,570C 'no':313C 'not':130C,410C,472C 'obvious':483C 'of':50C,64C,82C,86C,175C,259C,287C,380C,480C,598C,612C 'off':207C 'on':67C,104C,271C,342C,440C,450C,660C 'one':174C,417C 'or':129C,594C,618C,620C 'other':137C 'over':78C,255C 'own':384C 'pages':488C 'paragraph':453C 'parallel':23B 'parallel-agents':22B 'past':327C,558C 'planners':92C,96C 'plus':421C 'pointed':234C 'post':55C 'prediction':589C 'predictions':133C 'programming':17B 'project':70C,126C,656C 'projects':180C,611C 'published':658C 'push':46C 'quality':597C 'quickly':641C 'quotation':438C,442C 'ran':248C 're':471C 'readme':332C 'recorded':647C 'reddit':579C 'reference':531C 'release':362C 'rendering':477C,484C 'repo':318C,497C,516C 'result':599C 'right':436C 'rolling':168C 'run':361C 'running':4A,62C,91C 'rust':9B,574C 's':663C 'said':143C 'scaling':1A 'scratch':219C,245C 'screenshots':377C 'search':416C 'second':540C 'see':41C,610C,635C 'seen':544C 'similar':107C 'simonwillison.net':140C,670C 'simonwillison.net/2026/jan/23/fastrender/).':669C 'simonwillison.net/2026/jan/8/llm-predictions-for-2026/#3-years-someone-will-build-a-new-browser-using-mainly-ai-assisted-coding-and-it-won-t-even-be-a-surprise)':139C 'single':69C 'skepticism':294C 'smart':520C 'so':200C,640C 'software':179C 'some':38C 'somebody':149C 'something':636C 'soon':624C 'source':269C 'specifications':510C 'static.simonwillison.net':427C,460C 'static.simonwillison.net/static/2026/cursor-google.png)':426C 'static.simonwillison.net/static/2026/cursor-simonwillison.jpg)':459C 'styled':411C 'sub':95C,114C 'sub-agents':113C 'sub-planners':94C 'submodule':356C 'submodules':501C 'suites':27B,190C 'sure':524C 'surprised':633C 'surprising':167C 'swarm':227C 'system':232C 't':164C,606C 'tab':395C 'tasks':99C,106C 'tell':469C 'test':222C,230C 'tests':195C 'that':144C,196C,303C,324C,533C 'the':125C,136C,176C,184C,188C,246C,268C,317C,326C,330C,386C,398C,400C,407C,414C,435C,451C,487C,495C,515C,525C,530C,539C,557C,561C,596C,664C 'their':72C,221C,225C,282C,304C 'them':76C 'then':100C 'there':192C,311C 'they':88C,280C,322C,470C,534C 'think':148C,607C 'this':54C,231C,345C,368C,537C,578C,590C,613C,637C,655C 'those':105C,463C,481C 'thread':580C 'three':209C 'time':623C 'times':458C 'to':40C,97C,108C,229C,251C,502C,522C,529C,628C,634C 'tokens':87C 'took':379C 'top':399C 'trillions':85C 'two':559C 'ui':365C 'unsurprising':293C 'up':90C 'update':357C,642C 'uses':112C,499C 'using':158C,551C 'various':504C 've':59C,543C 'vendor/ecma-rs':359C 'very':465C,482C,632C 'video':665C 'was':127C,290C,308C,563C 'watching':75C 'way':521C 'we':58C,233C,608C 'web':155C,171C,216C,242C,549C 'webkit':621C 'website':385C 'week':253C 'weeks':560C 'well':278C 'were':312C 'wg':509C 'what':57C 'whatwg':505C 'when':299C,584C 'which':339C,443C,517C 'will':150C 'wilson':31C,653C 'window':374C 'with':119C,292C,616C,652C 'within':325C 'won':163C 'work':73C 'workers':102C 'working':372C 'wrapping':474C 'write':77C 'writing':254C 'www.reddit.com':582C 'www.reddit.com/r/anthropic/comments/1q4xfm0/over_christmas_break_i_wrote_a_fully_functional/).':581C 'years':210C 'you':44C,265C,467C 'youtube':661C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/cursor-social-card.jpg",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-01-18 23:58:58+00:00
{
  "id": 9249,
  "slug": "flux2-klein-4b",
  "link_url": "https://github.com/antirez/flux2.c",
  "link_title": "FLUX.2-klein-4B Pure C Implementation",
  "via_url": "https://news.ycombinator.com/item?id=46670279",
  "via_title": "Hacker News",
  "commentary": "On 15th January Black Forest Labs, a lab formed by the creators of the original Stable Diffusion, released [black-forest-labs/FLUX.2-klein-4B](https://huggingface.co/black-forest-labs/FLUX.2-klein-4B) - an Apache 2.0 licensed 4 billion parameter version of their FLUX.2 family.\r\n\r\nSalvatore Sanfilippo (antirez) decided to build a pure C and dependency-free implementation to run the model, with assistance from Claude Code and Claude Opus 4.5.\r\n\r\nSalvatore shared [this note](https://news.ycombinator.com/item?id=46670279#46671233) on Hacker News:\r\n\r\n> Something that may be interesting for the reader of this thread: this project was possible only once I started to tell Opus that it *needed* to take a file with all the implementation notes, and also accumulating all the things we discovered during the development process. And also, the file had clear instructions to be taken updated, and to be processed ASAP after context compaction. This kinda enabled Opus to do such a big coding task in a reasonable amount of time without loosing track. Check the file IMPLEMENTATION_NOTES.md in the GitHub repo for more info.\r\n\r\nHere's that [IMPLEMENTATION_NOTES.md](https://github.com/antirez/flux2.c/blob/main/IMPLEMENTATION_NOTES.md) file.",
  "created": "2026-01-18T23:58:58+00:00",
  "metadata": {},
  "search_document": "'/antirez/flux2.c/blob/main/implementation_notes.md)':208C '/black-forest-labs/flux.2-klein-4b)':56C '/flux.2-klein-4b':53C '/item?id=46670279#46671233)':102C '15th':32C '2.0':59C '4':61C '4.5':95C 'a':37C,75C,133C,178C,183C 'accumulating':142C 'after':168C 'agents':27B 'ai':9B,15B,18B 'ai-assisted-programming':17B 'all':136C,143C 'also':141C,153C 'amount':185C 'an':57C 'and':78C,92C,140C,152C,163C 'antirez':71C 'apache':58C 'asap':167C 'assistance':88C 'assisted':19B 'be':109C,160C,165C 'big':179C 'billion':62C 'black':34C,50C 'black-forest-labs':49C 'build':74C 'by':40C 'c':3A,5B,77C 'check':191C 'claude':29B,90C,93C 'claude-code':28B 'clear':157C 'code':30B,91C 'coding':26B,180C 'coding-agents':25B 'compaction':170C 'context':169C 'creators':42C 'decided':72C 'dependency':80C 'dependency-free':79C 'development':150C 'diffusion':12B,47C 'discovered':147C 'do':176C 'during':148C 'enabled':173C 'family':68C 'file':134C,155C,193C,209C 'flux.2':67C 'flux.2-klein-4b':1A 'for':111C,199C 'forest':35C,51C 'formed':39C 'free':81C 'from':89C 'generative':14B 'generative-ai':13B 'github':197C 'github.com':207C,210C 'github.com/antirez/flux2.c/blob/main/implementation_notes.md)':206C 'hacker':104C,211C 'had':156C 'here':202C 'huggingface.co':55C 'huggingface.co/black-forest-labs/flux.2-klein-4b)':54C 'i':123C 'image':24B 'implementation':4A,82C,138C 'implementation_notes.md':194C,205C 'in':182C,195C 'info':201C 'instructions':158C 'interesting':110C 'it':129C 'january':33C 'kinda':172C 'lab':38C 'labs':36C,52C 'licensed':60C 'llms':16B 'loosing':189C 'may':108C 'model':86C 'more':200C 'needed':130C 'news':105C,212C 'news.ycombinator.com':101C 'news.ycombinator.com/item?id=46670279#46671233)':100C 'note':99C 'notes':139C 'of':43C,65C,114C,186C 'on':31C,103C 'once':122C 'only':121C 'opus':94C,127C,174C 'original':45C 'parameter':63C 'possible':120C 'process':151C 'processed':166C 'programming':20B 'project':118C 'pure':2A,76C 'reader':113C 'reasonable':184C 'released':48C 'repo':198C 'run':84C 's':203C 'salvatore':7B,69C,96C 'salvatore-sanfilippo':6B 'sanfilippo':8B,70C 'shared':97C 'something':106C 'stable':11B,46C 'stable-diffusion':10B 'started':124C 'such':177C 'take':132C 'taken':161C 'task':181C 'tell':126C 'text':22B 'text-to-image':21B 'that':107C,128C,204C 'the':41C,44C,85C,112C,137C,144C,149C,154C,192C,196C 'their':66C 'things':145C 'this':98C,115C,117C,171C 'thread':116C 'time':187C 'to':23B,73C,83C,125C,131C,159C,164C,175C 'track':190C 'updated':162C 'version':64C 'was':119C 'we':146C 'with':87C,135C 'without':188C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-01-17 17:06:41+00:00
{
  "id": 2008,
  "slug": "jeremy-daer",
  "quotation": "*[On agents using CLI tools in place of REST APIs]* To save on context window, yes, but moreso to improve accuracy and success rate when multiple tool calls are involved, particularly when calls must be correctly chained e.g. for pagination, rate-limit backoff, and recognizing authentication failures.\r\n\r\nOther major factor: which models can wield the skill? Using the CLI lowers the bar so cheap, fast models (gpt-5-nano, haiku-4.5) can reliably succeed. Using the raw APl is something only the costly \"strong\" models (gpt-5.2, opus-4.5) can manage, and it squeezes a ton of thinking/reasoning out of them, which means multiple turns/iterations, which means accumulating a ton of context, which means burning loads of expensive tokens. For one-off API requests and ad hoc usage driven by a developer, this is reasonable and even helpful, but for an autonomous agent doing repetitive work, it's a disaster.",
  "source": "Jeremy Daer",
  "source_url": "https://twitter.com/dhh/status/2012543705161326941",
  "created": "2026-01-17T17:06:41+00:00",
  "metadata": {},
  "search_document": "'-4.5':72A,90A '-5':69A '-5.2':88A '37':153B 'a':96A,110A,133A,151A 'accumulating':109A 'accuracy':21A 'ad':128A 'agent':145A 'agents':2A 'ai':155B,161B 'an':143A 'and':22A,45A,93A,127A,138A 'api':125A 'apis':10A 'apl':79A 'are':29A 'authentication':47A 'autonomous':144A 'backoff':44A 'bar':63A 'be':35A 'burning':116A 'but':17A,141A 'by':132A 'calls':28A,33A 'can':54A,73A,91A 'chained':37A 'cheap':65A 'cli':4A,60A 'context':14A,113A 'correctly':36A 'costly':84A 'daer':165C 'developer':134A 'disaster':152A 'doing':146A 'driven':131A 'e.g':38A 'engineering':158B 'even':139A 'expensive':119A 'factor':51A 'failures':48A 'fast':66A 'for':39A,121A,142A 'generative':160B 'generative-ai':159B 'gpt':68A,87A 'haiku':71A 'helpful':140A 'hoc':129A 'improve':20A 'in':6A 'involved':30A 'is':80A,136A 'it':94A,149A 'jeremy':164C 'limit':43A 'llms':162B 'loads':117A 'lowers':61A 'major':50A 'manage':92A 'means':104A,108A,115A 'models':53A,67A,86A 'moreso':18A 'multiple':26A,105A 'must':34A 'nano':70A 'of':8A,98A,101A,112A,118A 'off':124A 'on':1A,13A 'one':123A 'one-off':122A 'only':82A 'opus':89A 'other':49A 'out':100A 'pagination':40A 'particularly':31A 'place':7A 'prompt':157B 'prompt-engineering':156B 'rate':24A,42A 'rate-limit':41A 'raw':78A 'reasonable':137A 'recognizing':46A 'reliably':74A 'repetitive':147A 'requests':126A 'rest':9A 's':150A 'save':12A 'signals':154B 'skill':57A 'skills':163B 'so':64A 'something':81A 'squeezes':95A 'strong':85A 'succeed':75A 'success':23A 'the':56A,59A,62A,77A,83A 'them':102A 'thinking/reasoning':99A 'this':135A 'to':11A,19A 'tokens':120A 'ton':97A,111A 'tool':27A 'tools':5A 'turns/iterations':106A 'usage':130A 'using':3A,58A,76A 'when':25A,32A 'which':52A,103A,107A,114A 'wield':55A 'window':15A 'work':148A 'yes':16A",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "37signals"
}
blogmark 2026-01-16 21:28:26+00:00
{
  "id": 9248,
  "slug": "chatgpt-ads",
  "link_url": "https://openai.com/index/our-approach-to-advertising-and-expanding-access/",
  "link_title": "Our approach to advertising and expanding access to ChatGPT",
  "via_url": null,
  "via_title": null,
  "commentary": "OpenAI's long-rumored introduction of ads to ChatGPT just became a whole lot more concrete:\r\n\r\n> In the coming weeks, we\u2019re also planning to start testing ads in the U.S. for the free and Go tiers, so more people can benefit from our tools with fewer usage limits or without having to pay. Plus, Pro, Business, and Enterprise subscriptions will not include ads.\r\n\r\nWhat's \"Go\" tier, you might ask? That's a new $8/month tier that launched today in the USA, see [Introducing ChatGPT Go, now available worldwide](https://openai.com/index/introducing-chatgpt-go/). It's a tier that they first trialed in India in August 2025 (here's a mention [in their release notes from August](https://help.openai.com/en/articles/6825453-chatgpt-release-notes#h_22cae6eb9f) listing a price of \u20b9399/month, which converts to around $4.40).\r\n\r\nI'm finding the new plan comparison grid on [chatgpt.com/pricing](https://chatgpt.com/pricing) pretty confusing. It lists all accounts as having access to GPT-5.2 Thinking, but doesn't clarify the limits that the free and Go plans have to conform to. It also lists different context windows for the different plans - 16K for free, 32K for Go and Plus and 128K for Pro. I had assumed that the 400,000 token window [on the GPT-5.2 model page](https://platform.openai.com/docs/models/gpt-5.2) applied to ChatGPT as well, but apparently I was mistaken.\r\n\r\n**Update**: I've apparently not been paying attention: here's the Internet Archive ChatGPT pricing page from [September 2025](https://web.archive.org/web/20250906071408/https://chatgpt.com/pricing) showing those context limit differences as well.\r\n\r\nBack to advertising: my biggest concern has always been whether ads will influence the output of the chat directly. OpenAI assure us that they will not:\r\n\r\n> - **Answer independence**: Ads do not influence the answers ChatGPT gives you. Answers are optimized based on what's most helpful to you. Ads are always separate and clearly labeled.\r\n> - **Conversation privacy**: We keep your conversations with ChatGPT private from advertisers, and we never sell your data to advertisers.\r\n\r\nSo what will they look like then? This screenshot from the announcement offers a useful hint:\r\n\r\n![Two iPhone screenshots showing ChatGPT mobile app interface. Left screen displays a conversation about Santa Fe, New Mexico with an image of adobe-style buildings and desert landscape, text reading \"Santa Fe, New Mexico\u2014often called 'The City Different'\u2014is a captivating blend of history, art, and natural beauty at the foot of the Sangre de Cristo Mountains. As the oldest and highest-elevation state capital in the U.S., founded in 1610, it offers a unique mix of Native American, Spanish, and Anglo cultures.\" Below is a sponsored section from \"Pueblo & Pine\" showing \"Desert Cottages - Expansive residences with desert vistas\" with a thumbnail image, and a \"Chat with Pueblo & Pine\" button. Input field shows \"Ask ChatGPT\". Right screen shows the Pueblo & Pine chat interface with the same Desert Cottages listing and an AI response \"If you're planning a trip to Sante Fe, I'm happy to help. When are you thinking of going?\" with input field \"Ask Pueblo & Pine\" and iOS keyboard visible.](https://static.simonwillison.net/static/2026/chatgpt-ads.jpg)\r\n\r\nThe user asks about trips to Santa Fe, and an ad shows up for a cottage rental business there. This particular example imagines an option to start a direct chat with a bot aligned with that advertiser, at which point presumably the advertiser can influence the answers all they like!",
  "created": "2026-01-16T21:28:26+00:00",
  "metadata": {},
  "search_document": "'-5.2':171C,223C '/docs/models/gpt-5.2)':228C '/en/articles/6825453-chatgpt-release-notes#h_22cae6eb9f)':137C '/index/introducing-chatgpt-go/).':111C '/pricing](https://chatgpt.com/pricing)':159C '/static/2026/chatgpt-ads.jpg)':526C '/web/20250906071408/https://chatgpt.com/pricing)':260C '000':217C '128k':208C '1610':431C '16k':199C '2025':124C,257C '32k':202C '399/month':142C '4.40':147C '400':216C '8/month':94C 'a':30C,92C,114C,127C,139C,355C,369C,399C,434C,446C,461C,465C,498C,541C,554C,558C 'about':371C,530C 'access':7A,168C 'accounts':165C 'ad':537C 'adobe':381C 'adobe-style':380C 'ads':10B,25C,46C,82C,278C,296C,316C 'advertiser':563C,569C 'advertisers':333C,341C 'advertising':4A,270C 'ai':11B,15B,492C 'aligned':560C 'all':164C,574C 'also':41C,190C 'always':275C,318C 'american':439C 'an':377C,491C,536C,550C 'and':5A,53C,76C,182C,205C,207C,320C,334C,384C,405C,420C,441C,464C,490C,520C,535C 'anglo':442C 'announcement':353C 'answer':294C 'answers':301C,305C,573C 'app':364C 'apparently':235C,242C 'applied':229C 'approach':2A 'archive':251C 'are':306C,317C,509C 'around':146C 'art':404C 'as':166C,232C,266C,417C 'ask':89C,474C,517C 'asks':529C 'assumed':213C 'assure':288C 'at':408C,564C 'attention':246C 'august':123C,134C 'available':107C 'back':268C 'based':308C 'beauty':407C 'became':29C 'been':244C,276C 'below':444C 'benefit':60C 'biggest':272C 'blend':401C 'bot':559C 'buildings':383C 'business':75C,544C 'but':173C,234C 'button':470C 'called':394C 'can':59C,570C 'capital':425C 'captivating':400C 'chat':285C,466C,482C,556C 'chatgpt':9A,16B,27C,104C,231C,252C,302C,330C,362C,475C 'chatgpt.com':158C 'chatgpt.com/pricing](https://chatgpt.com/pricing)':157C 'city':396C 'clarify':176C 'clearly':321C 'coming':37C 'comparison':154C 'concern':273C 'concrete':34C 'conform':187C 'confusing':161C 'context':193C,263C 'conversation':323C,370C 'conversations':328C 'converts':144C 'cottage':542C 'cottages':454C,488C 'cristo':415C 'cultures':443C 'data':339C 'de':414C 'desert':385C,453C,458C,487C 'differences':265C 'different':192C,197C,397C 'direct':555C 'directly':286C 'displays':368C 'do':297C 'doesn':174C 'elevation':423C 'enterprise':77C 'example':548C 'expanding':6A 'expansive':455C 'fe':373C,390C,502C,534C 'fewer':65C 'field':472C,516C 'finding':150C 'first':118C 'foot':410C 'for':50C,195C,200C,203C,209C,540C 'founded':429C 'free':52C,181C,201C 'from':61C,133C,255C,332C,351C,449C 'generative':14B 'generative-ai':13B 'gives':303C 'go':54C,85C,105C,183C,204C 'going':513C 'gpt':170C,222C 'grid':155C 'had':212C 'happy':505C 'has':274C 'have':185C 'having':70C,167C 'help':507C 'help.openai.com':136C 'help.openai.com/en/articles/6825453-chatgpt-release-notes#h_22cae6eb9f)':135C 'helpful':313C 'here':125C,247C 'highest':422C 'highest-elevation':421C 'hint':357C 'history':403C 'i':148C,211C,236C,240C,503C 'if':494C 'image':378C,463C 'imagines':549C 'in':35C,47C,99C,120C,122C,129C,426C,430C 'include':81C 'independence':295C 'india':121C 'influence':280C,299C,571C 'input':471C,515C 'interface':365C,483C 'internet':250C 'introducing':103C 'introduction':23C 'ios':521C 'iphone':359C 'is':398C,445C 'it':112C,162C,189C,432C 'just':28C 'keep':326C 'keyboard':522C 'labeled':322C 'landscape':386C 'launched':97C 'left':366C 'like':347C,576C 'limit':264C 'limits':67C,178C 'listing':138C,489C 'lists':163C,191C 'llms':17B 'long':21C 'long-rumored':20C 'look':346C 'lot':32C 'm':149C,504C 'mention':128C 'mexico':375C,392C 'might':88C 'mistaken':238C 'mix':436C 'mobile':363C 'model':224C 'more':33C,57C 'most':312C 'mountains':416C 'my':271C 'native':438C 'natural':406C 'never':336C 'new':93C,152C,374C,391C 'not':80C,243C,293C,298C 'notes':132C 'now':106C 'of':24C,141C,283C,379C,402C,411C,437C,512C 'offers':354C,433C 'often':393C 'oldest':419C 'on':156C,220C,309C 'openai':12B,18C,287C 'openai.com':110C,577C 'openai.com/index/introducing-chatgpt-go/).':109C 'optimized':307C 'option':551C 'or':68C 'our':1A,62C 'output':282C 'page':225C,254C 'particular':547C 'pay':72C 'paying':245C 'people':58C 'pine':451C,469C,481C,519C 'plan':153C 'planning':42C,497C 'plans':184C,198C 'platform.openai.com':227C 'platform.openai.com/docs/models/gpt-5.2)':226C 'plus':73C,206C 'point':566C 'presumably':567C 'pretty':160C 'price':140C 'pricing':253C 'privacy':324C 'private':331C 'pro':74C,210C 'pueblo':450C,468C,480C,518C 're':40C,496C 'reading':388C 'release':131C 'rental':543C 'residences':456C 'response':493C 'right':476C 'rumored':22C 's':19C,84C,91C,113C,126C,248C,311C 'same':486C 'sangre':413C 'santa':372C,389C,533C 'sante':501C 'screen':367C,477C 'screenshot':350C 'screenshots':360C 'section':448C 'see':102C 'sell':337C 'separate':319C 'september':256C 'showing':261C,361C,452C 'shows':473C,478C,538C 'so':56C,342C 'spanish':440C 'sponsored':447C 'start':44C,553C 'state':424C 'static.simonwillison.net':525C 'static.simonwillison.net/static/2026/chatgpt-ads.jpg)':524C 'style':382C 'subscriptions':78C 't':175C 'testing':45C 'text':387C 'that':90C,96C,116C,179C,214C,290C,562C 'the':36C,48C,51C,100C,151C,177C,180C,196C,215C,221C,249C,281C,284C,300C,352C,395C,409C,412C,418C,427C,479C,485C,527C,568C,572C 'their':130C 'then':348C 'there':545C 'they':117C,291C,345C,575C 'thinking':172C,511C 'this':349C,546C 'those':262C 'thumbnail':462C 'tier':86C,95C,115C 'tiers':55C 'to':3A,8A,26C,43C,71C,145C,169C,186C,188C,230C,269C,314C,340C,500C,506C,532C,552C 'today':98C 'token':218C 'tools':63C 'trialed':119C 'trip':499C 'trips':531C 'two':358C 'u.s':49C,428C 'unique':435C 'up':539C 'update':239C 'us':289C 'usa':101C 'usage':66C 'useful':356C 'user':528C 've':241C 'visible':523C 'vistas':459C 'was':237C 'we':39C,325C,335C 'web.archive.org':259C 'web.archive.org/web/20250906071408/https://chatgpt.com/pricing)':258C 'weeks':38C 'well':233C,267C 'what':83C,310C,343C 'when':508C 'whether':277C 'which':143C,565C 'whole':31C 'will':79C,279C,292C,344C 'window':219C 'windows':194C 'with':64C,329C,376C,457C,460C,467C,484C,514C,557C,561C 'without':69C 'worldwide':108C 'you':87C,304C,315C,495C,510C 'your':327C,338C",
  "import_ref": null,
  "card_image": "https://static.simonwillison.net/static/2026/chatgpt-ads-card.jpg",
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-01-15 23:56:56+00:00
{
  "id": 9247,
  "slug": "open-responses",
  "link_url": "https://www.openresponses.org/",
  "link_title": "Open Responses",
  "via_url": "https://twitter.com/reach_vb/status/2011863516852965565",
  "via_title": "VB",
  "commentary": "This is the standardization effort I've most wanted in the world of LLMs: a vendor-neutral specification for the JSON API that clients can use to talk to hosted LLMs.\r\n\r\nOpen Responses aims to provide exactly that as a documented standard, derived from OpenAI's Responses API.\r\n\r\nI was hoping for one based on their older Chat Completions API since so many other products have cloned the already, but basing it on Responses does make sense since that API was designed with the feature of more recent models - such as reasoning traces - baked into the design.\r\n\r\nWhat's certainly notable is the list of launch partners. OpenRouter alone means we can expect to be able to use this protocol with almost every existing model, and Hugging Face, LM Studio, vLLM, Ollama and Vercel cover a huge portion of the common tools used to serve models.\r\n\r\nFor protocols like this I really want to see a comprehensive, language-independent conformance test site. Open Responses has a subset of that - the official repository includes [src/lib/compliance-tests.ts](https://github.com/openresponses/openresponses/blob/d0f23437b27845d5c3d0abaf5cb5c4a702f26b05/src/lib/compliance-tests.ts) which can be used to exercise a server implementation, and is available as a React app [on the official site](https://www.openresponses.org/compliance) that can be pointed at any implementation served via CORS.\r\n\r\nWhat's missing is the equivalent for clients. I plan to spin up my own client library for this in Python and I'd really like to be able to run that against a conformance suite designed to check that my client correctly handles all of the details.",
  "created": "2026-01-15T23:56:56+00:00",
  "metadata": {},
  "search_document": "'/compliance)':216C '/openresponses/openresponses/blob/d0f23437b27845d5c3d0abaf5cb5c4a702f26b05/src/lib/compliance-tests.ts)':193C 'a':29C,55C,151C,171C,182C,200C,207C,260C 'able':131C,255C 'against':259C 'ai':5B,9B 'aims':49C 'all':271C 'almost':137C 'alone':124C 'already':84C 'and':141C,148C,203C,248C 'any':222C 'api':37C,63C,75C,95C 'app':209C 'as':54C,106C,206C 'at':221C 'available':205C 'baked':109C 'based':69C 'basing':86C 'be':130C,196C,219C,254C 'but':85C 'can':40C,127C,195C,218C 'certainly':115C 'chat':73C 'check':265C 'client':242C,268C 'clients':39C,234C 'cloned':82C 'common':156C 'completions':74C 'comprehensive':172C 'conformance':13B,176C,261C 'conformance-suites':12B 'correctly':269C 'cors':226C 'cover':150C 'd':250C 'derived':58C 'design':112C 'designed':97C,263C 'details':274C 'documented':56C 'does':90C 'effort':19C 'equivalent':232C 'every':138C 'exactly':52C 'exercise':199C 'existing':139C 'expect':128C 'face':143C 'feature':100C 'for':34C,67C,162C,233C,244C 'from':59C 'generative':8B 'generative-ai':7B 'github.com':192C 'github.com/openresponses/openresponses/blob/d0f23437b27845d5c3d0abaf5cb5c4a702f26b05/src/lib/compliance-tests.ts)':191C 'handles':270C 'has':181C 'have':81C 'hoping':66C 'hosted':45C 'huge':152C 'hugging':142C 'i':20C,64C,166C,235C,249C 'implementation':202C,223C 'in':24C,246C 'includes':189C 'independent':175C 'into':110C 'is':16C,117C,204C,230C 'it':87C 'json':3B,36C 'language':174C 'language-independent':173C 'launch':121C 'library':243C 'like':164C,252C 'list':119C 'llms':10B,28C,46C 'lm':144C 'make':91C 'many':78C 'means':125C 'missing':229C 'model':140C 'models':104C,161C 'more':102C 'most':22C 'my':240C,267C 'neutral':32C 'notable':116C 'of':27C,101C,120C,154C,184C,272C 'official':187C,212C 'older':72C 'ollama':147C 'on':70C,88C,210C 'one':68C 'open':1A,47C,179C 'openai':6B,60C 'openrouter':11B,123C 'other':79C 'own':241C 'partners':122C 'plan':236C 'pointed':220C 'portion':153C 'products':80C 'protocol':135C 'protocols':163C 'provide':51C 'python':247C 'react':208C 'really':167C,251C 'reasoning':107C 'recent':103C 'repository':188C 'responses':2A,48C,62C,89C,180C 'run':257C 's':61C,114C,228C 'see':170C 'sense':92C 'serve':160C 'served':224C 'server':201C 'since':76C,93C 'site':178C,213C 'so':77C 'specification':33C 'spin':238C 'src/lib/compliance-tests.ts':190C 'standard':57C 'standardization':18C 'standards':4B 'studio':145C 'subset':183C 'such':105C 'suite':262C 'suites':14B 'talk':43C 'test':177C 'that':38C,53C,94C,185C,217C,258C,266C 'the':17C,25C,35C,83C,99C,111C,118C,155C,186C,211C,231C,273C 'their':71C 'this':15C,134C,165C,245C 'to':42C,44C,50C,129C,132C,159C,169C,198C,237C,253C,256C,264C 'tools':157C 'traces':108C 'up':239C 'use':41C,133C 'used':158C,197C 'vb':276C 've':21C 'vendor':31C 'vendor-neutral':30C 'vercel':149C 'via':225C 'vllm':146C 'want':168C 'wanted':23C 'was':65C,96C 'we':126C 'what':113C,227C 'which':194C 'with':98C,136C 'world':26C 'www.openresponses.org':215C,275C 'www.openresponses.org/compliance)':214C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-01-15 16:08:27+00:00
{
  "id": 9246,
  "slug": "the-design-implementation-of-sprites",
  "link_url": "https://fly.io/blog/design-and-implementation/",
  "link_title": "The Design & Implementation of Sprites",
  "via_url": "https://twitter.com/tqbf/status/2011823480673624434",
  "via_title": "@tqbf",
  "commentary": "I [wrote about Sprites last week](https://simonwillison.net/2026/Jan/9/sprites-dev/). Here's Thomas Ptacek from Fly with the insider details on how they work under the hood.\r\n\r\nI like this framing of them as \"disposable computers\":\r\n\r\n> Sprites are ball-point disposable computers. Whatever mark you mean to make, we\u2019ve rigged it so you\u2019re never more than a second or two away from having a Sprite to do it with.\r\n\r\nI've noticed that new Fly Machines can take a while (up to around a minute) to provision. Sprites solve that by keeping warm pools of unused machines in multiple regions, which is enabled by them all using the same container:\r\n\r\n> Now, today, under the hood, Sprites are still Fly Machines. But they all run from a standard container. Every physical worker knows exactly what container the next Sprite is going to start with, so it\u2019s easy for us to keep pools of \u201cempty\u201d Sprites standing by. The result: a Sprite create doesn\u2019t have any heavy lifting to do; it\u2019s basically just doing the stuff we do when we start a Fly Machine.\r\n\r\nThe most interesting detail is how the persistence layer works. Sprites only charge you for data you have written that differs from the base image and provide ~300ms checkpointing and restores - it turns out that's power by a custom filesystem on top of S3-compatible storage coordinated by Litestream-replicated local SQLite metadata:\r\n\r\n> We still exploit NVMe, but not as the root of storage. Instead, it\u2019s a read-through cache for a blob on object storage. S3-compatible object stores are the most trustworthy storage technology we have. I can feel my blood pressure dropping just typing the words \u201cSprites are backed by object storage.\u201d [...]\r\n> \r\n> The Sprite storage stack is organized around the JuiceFS model (in fact, we currently use a very hacked-up JuiceFS, with a rewritten SQLite metadata backend). It works by splitting storage into data (\u201cchunks\u201d) and metadata (a map of where the \u201cchunks\u201d are). Data chunks live on object stores; metadata lives in fast local storage. In our case, that metadata store is [kept durable with Litestream](https://litestream.io). Nothing depends on local storage.",
  "created": "2026-01-15T16:08:27+00:00",
  "metadata": {},
  "search_document": "'/2026/jan/9/sprites-dev/).':22C '300ms':228C 'a':72C,79C,94C,99C,141C,175C,198C,239C,271C,277C,327C,334C,349C 'about':16C 'all':121C,138C 'and':226C,230C,347C 'any':181C 'architecture':6B 'are':50C,132C,287C,307C,355C 'around':98C,318C 'as':46C,263C 'away':76C 'backed':308C 'backend':338C 'ball':52C 'ball-point':51C 'base':224C 'basically':188C 'blob':278C 'blood':299C 'but':136C,261C 'by':106C,119C,172C,238C,250C,309C,341C 'cache':275C 'can':92C,296C 'case':370C 'charge':213C 'checkpointing':229C 'chunks':346C,354C,357C 'compatible':247C,284C 'computers':48C,55C 'container':125C,143C,150C 'coordinated':249C 'create':177C 'currently':325C 'custom':240C 'data':216C,345C,356C 'depends':381C 'design':2A 'detail':204C 'details':32C 'differs':221C 'disposable':47C,54C 'do':82C,185C,194C 'doesn':178C 'doing':190C 'dropping':301C 'durable':376C 'easy':162C 'empty':169C 'enabled':118C 'every':144C 'exactly':148C 'exploit':259C 'fact':323C 'fast':365C 'feel':297C 'filesystem':241C 'fly':12B,28C,90C,134C,199C 'fly.io':385C 'for':163C,215C,276C 'framing':43C 'from':27C,77C,140C,222C 'going':155C 'hacked':330C 'hacked-up':329C 'have':180C,218C,294C 'having':78C 'heavy':182C 'here':23C 'hood':39C,130C 'how':34C,206C 'i':14C,40C,85C,295C 'image':225C 'implementation':3A 'in':113C,322C,364C,368C 'insider':31C 'instead':268C 'interesting':203C 'into':344C 'is':117C,154C,205C,316C,374C 'it':65C,83C,160C,186C,232C,269C,339C 'juicefs':320C,332C 'just':189C,302C 'keep':166C 'keeping':107C 'kept':375C 'knows':147C 'last':18C 'layer':209C 'lifting':183C 'like':41C 'litestream':13B,252C,378C 'litestream-replicated':251C 'litestream.io':379C 'live':358C 'lives':363C 'local':254C,366C,383C 'machine':200C 'machines':91C,112C,135C 'make':61C 'map':350C 'mark':57C 'mean':59C 'metadata':256C,337C,348C,362C,372C 'minute':100C 'model':321C 'more':70C 'most':202C,289C 'multiple':114C 'my':298C 'never':69C 'new':89C 'next':152C 'not':262C 'nothing':380C 'noticed':87C 'now':126C 'nvme':260C 'object':280C,285C,310C,360C 'of':4A,44C,110C,168C,244C,266C,351C 'on':33C,242C,279C,359C,382C 'only':212C 'or':74C 'organized':317C 'our':369C 'out':234C 'persistence':208C 'physical':145C 'point':53C 'pools':109C,167C 'power':237C 'pressure':300C 'provide':227C 'provision':102C 'ptacek':11B,26C 're':68C 'read':273C 'read-through':272C 'regions':115C 'replicated':253C 'restores':231C 'result':174C 'rewritten':335C 'rigged':64C 'root':265C 'run':139C 's':24C,161C,187C,236C,270C 's3':246C,283C 's3-compatible':245C,282C 'same':124C 'sandboxing':7B 'second':73C 'simonwillison.net':21C 'simonwillison.net/2026/jan/9/sprites-dev/).':20C 'so':66C,159C 'solve':104C 'splitting':342C 'sprite':80C,153C,176C,313C 'sprites':5A,17C,49C,103C,131C,170C,211C,306C 'sqlite':8B,255C,336C 'stack':315C 'standard':142C 'standing':171C 'start':157C,197C 'still':133C,258C 'storage':248C,267C,281C,291C,311C,314C,343C,367C,384C 'store':373C 'stores':286C,361C 'stuff':192C 't':179C 'take':93C 'technology':292C 'than':71C 'that':88C,105C,220C,235C,371C 'the':1A,30C,38C,123C,129C,151C,173C,191C,201C,207C,223C,264C,288C,304C,312C,319C,353C 'them':45C,120C 'they':35C,137C 'this':42C 'thomas':10B,25C 'thomas-ptacek':9B 'through':274C 'to':60C,81C,97C,101C,156C,165C,184C 'today':127C 'top':243C 'tqbf':386C 'trustworthy':290C 'turns':233C 'two':75C 'typing':303C 'under':37C,128C 'unused':111C 'up':96C,331C 'us':164C 'use':326C 'using':122C 've':63C,86C 'very':328C 'warm':108C 'we':62C,193C,196C,257C,293C,324C 'week':19C 'what':149C 'whatever':56C 'when':195C 'where':352C 'which':116C 'while':95C 'with':29C,84C,158C,333C,377C 'words':305C 'work':36C 'worker':146C 'works':210C,340C 'written':219C 'wrote':15C 'you':58C,67C,214C,217C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
quotation 2026-01-15 00:56:27+00:00
{
  "id": 2007,
  "slug": "boaz-barak-gabriel-wu-jeremy-chen-and-manas-joglekar",
  "quotation": "When we optimize responses using a reward model as a proxy for \u201cgoodness\u201d in reinforcement learning, models sometimes learn to \u201chack\u201d this proxy and output an answer that only \u201clooks good\u201d to it (because coming up with an answer that is actually good can be hard). The philosophy behind confessions is that we can train models to produce a second output \u2014 aka a \u201cconfession\u201d \u2014 that is rewarded solely for honesty, which we will argue is less likely hacked than the normal task reward function. One way to think of confessions is that we are giving the model access to an \u201canonymous tip line\u201d where it can turn itself in by presenting incriminating evidence of misbehavior. But unlike real-world tip lines, if the model acted badly in the original task, it can collect the reward for turning itself in while still keeping the original reward from the bad behavior in the main task. We hypothesize that this form of training will teach models to produce maximally honest confessions.",
  "source": "Boaz Barak, Gabriel Wu, Jeremy Chen and Manas Joglekar",
  "source_url": "https://alignment.openai.com/confessions/",
  "created": "2026-01-15T00:56:27+00:00",
  "metadata": {},
  "search_document": "'a':6A,10A,59A,63A 'access':98A 'acted':126A 'actually':42A 'ai':170B,174B 'aka':62A 'an':26A,38A,100A 'and':24A,182C 'anonymous':101A 'answer':27A,39A 'are':94A 'argue':74A 'as':9A 'bad':149A 'badly':127A 'barak':177C 'be':45A 'because':34A 'behavior':150A 'behind':49A 'boaz':176C 'but':116A 'by':110A 'can':44A,54A,106A,133A 'chen':181C 'collect':134A 'coming':35A 'confession':64A 'confessions':50A,90A,169A 'evidence':113A 'for':12A,69A,137A 'form':159A 'from':147A 'function':84A 'gabriel':178C 'generative':173B 'generative-ai':172B 'giving':95A 'good':31A,43A 'goodness':13A 'hack':21A 'hacked':78A 'hard':46A 'honest':168A 'honesty':70A 'hypothesize':156A 'if':123A 'in':14A,109A,128A,140A,151A 'incriminating':112A 'is':41A,51A,66A,75A,91A 'it':33A,105A,132A 'itself':108A,139A 'jeremy':180C 'joglekar':184C 'keeping':143A 'learn':19A 'learning':16A 'less':76A 'likely':77A 'line':103A 'lines':122A 'llms':175B 'looks':30A 'main':153A 'manas':183C 'maximally':167A 'misbehavior':115A 'model':8A,97A,125A 'models':17A,56A,164A 'normal':81A 'of':89A,114A,160A 'one':85A 'only':29A 'openai':171B 'optimize':3A 'original':130A,145A 'output':25A,61A 'philosophy':48A 'presenting':111A 'produce':58A,166A 'proxy':11A,23A 'real':119A 'real-world':118A 'reinforcement':15A 'responses':4A 'reward':7A,83A,136A,146A 'rewarded':67A 'second':60A 'solely':68A 'sometimes':18A 'still':142A 'task':82A,131A,154A 'teach':163A 'than':79A 'that':28A,40A,52A,65A,92A,157A 'the':47A,80A,96A,124A,129A,135A,144A,148A,152A 'think':88A 'this':22A,158A 'tip':102A,121A 'to':20A,32A,57A,87A,99A,165A 'train':55A 'training':161A 'turn':107A 'turning':138A 'unlike':117A 'up':36A 'using':5A 'way':86A 'we':2A,53A,72A,93A,155A 'when':1A 'where':104A 'which':71A 'while':141A 'will':73A,162A 'with':37A 'world':120A 'wu':179C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "is_draft": false,
  "context": "OpenAI: Why we are excited about confessions"
}
blogmark 2026-01-14 22:15:22+00:00
{
  "id": 9245,
  "slug": "claude-cowork-exfiltrates-files",
  "link_url": "https://www.promptarmor.com/resources/claude-cowork-exfiltrates-files",
  "link_title": "Claude Cowork Exfiltrates Files",
  "via_url": "https://news.ycombinator.com/item?id=46622328",
  "via_title": "Hacker News",
  "commentary": "Claude Cowork defaults to allowing outbound HTTP traffic to only a specific list of domains, to help protect the user against prompt injection attacks that exfiltrate their data.\r\n\r\nPrompt Armor found a creative workaround: Anthropic's API domain is on that list, so they constructed an attack that includes an attacker's own Anthropic API key and has the agent upload any files it can see to the `https://api.anthropic.com/v1/files` endpoint, allowing the attacker to retrieve their content later.",
  "created": "2026-01-14T22:15:22+00:00",
  "metadata": {},
  "search_document": "'/v1/files':100C 'a':40C,61C 'against':50C 'agent':89C 'agents':20B 'ai':6B,12B,19B 'ai-agents':18B 'allowing':34C,102C 'an':75C,79C 'and':86C 'anthropic':14B,64C,83C 'any':91C 'api':66C,84C 'api.anthropic.com':99C 'api.anthropic.com/v1/files':98C 'armor':59C 'attack':76C 'attacker':80C,104C 'attacks':17B,53C 'can':94C 'claude':1A,22B,28B,30C 'claude-code':21B 'claude-cowork':27B 'code':23B 'constructed':74C 'content':108C 'cowork':2A,29B,31C 'creative':62C 'data':57C 'defaults':32C 'domain':67C 'domains':44C 'endpoint':101C 'exfiltrate':55C 'exfiltrates':3A 'exfiltration':16B 'exfiltration-attacks':15B 'files':4A,92C 'found':60C 'generative':11B 'generative-ai':10B 'hacker':111C 'has':87C 'help':46C 'http':36C 'includes':78C 'injection':9B,52C 'is':68C 'it':93C 'key':85C 'later':109C 'lethal':25B 'lethal-trifecta':24B 'list':42C,71C 'llms':13B 'news':112C 'of':43C 'on':69C 'only':39C 'outbound':35C 'own':82C 'prompt':8B,51C,58C 'prompt-injection':7B 'protect':47C 'retrieve':106C 's':65C,81C 'security':5B 'see':95C 'so':72C 'specific':41C 'that':54C,70C,77C 'the':48C,88C,97C,103C 'their':56C,107C 'they':73C 'to':33C,38C,45C,96C,105C 'traffic':37C 'trifecta':26B 'upload':90C 'user':49C 'workaround':63C 'www.promptarmor.com':110C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-01-13 23:58:17+00:00
{
  "id": 9244,
  "slug": "anthropic-invests-15-million-in-the-python-software-foundation-a",
  "link_url": "https://pyfound.blogspot.com/2025/12/anthropic-invests-in-python.html?m=1",
  "link_title": "Anthropic invests $1.5 million in the Python Software Foundation and open source security",
  "via_url": null,
  "via_title": null,
  "commentary": "This is outstanding news, especially given our decision to withdraw from that NSF grant application [back in October](https://simonwillison.net/2025/Oct/27/psf-withdrawn-proposal/).\r\n\r\n> We are thrilled to announce that Anthropic has entered into a two-year partnership with the Python Software Foundation (PSF) to contribute a landmark total of $1.5 million to support the foundation\u2019s work, with an emphasis on Python ecosystem security. This investment will enable the PSF to make crucial security advances to CPython and the Python Package Index (PyPI) benefiting all users, and it will also sustain the foundation\u2019s core work supporting the Python language, ecosystem, and global community.\r\n\r\nNote that while security is a focus these funds will also support other aspects of the PSF's work:\r\n\r\n> Anthropic\u2019s support will also go towards the PSF\u2019s core work, including the Developer in Residence program driving contributions to CPython, community support through grants and other programs, running core infrastructure such as PyPI, and more.",
  "created": "2026-01-13T23:58:17+00:00",
  "metadata": {},
  "search_document": "'/2025/oct/27/psf-withdrawn-proposal/).':41C '1.5':3A,69C 'a':52C,65C,129C 'advances':94C 'ai':18B 'all':104C 'also':109C,134C,147C 'an':78C 'and':10A,97C,106C,121C,169C,178C 'announce':46C 'anthropic':1A,20B,48C,143C 'application':35C 'are':43C 'as':176C 'aspects':137C 'back':36C 'benefiting':103C 'community':123C,165C 'contribute':64C 'contributions':162C 'core':114C,153C,173C 'cpython':96C,164C 'crucial':92C 'decision':28C 'developer':157C 'driving':161C 'ecosystem':82C,120C 'emphasis':79C 'enable':87C 'entered':50C 'especially':25C 'focus':130C 'foundation':9A,61C,74C,112C 'from':31C 'funds':132C 'given':26C 'global':122C 'go':148C 'grant':34C 'grants':168C 'has':49C 'in':5A,37C,158C 'including':155C 'index':101C 'infrastructure':174C 'into':51C 'investment':85C 'invests':2A 'is':22C,128C 'it':107C 'landmark':66C 'language':119C 'make':91C 'million':4A,70C 'more':179C 'news':24C 'note':124C 'nsf':33C 'october':38C 'of':68C,138C 'on':80C 'open':11A,15B 'open-source':14B 'other':136C,170C 'our':27C 'outstanding':23C 'package':100C 'partnership':56C 'program':160C 'programs':171C 'psf':19B,62C,89C,140C,151C 'pyfound.blogspot.com':180C 'pypi':102C,177C 'python':7A,17B,59C,81C,99C,118C 'residence':159C 'running':172C 's':75C,113C,141C,144C,152C 'security':13A,83C,93C,127C 'simonwillison.net':40C 'simonwillison.net/2025/oct/27/psf-withdrawn-proposal/).':39C 'software':8A,60C 'source':12A,16B 'such':175C 'support':72C,135C,145C,166C 'supporting':116C 'sustain':110C 'that':32C,47C,125C 'the':6A,58C,73C,88C,98C,111C,117C,139C,150C,156C 'these':131C 'this':21C,84C 'thrilled':44C 'through':167C 'to':29C,45C,63C,71C,90C,95C,163C 'total':67C 'towards':149C 'two':54C 'two-year':53C 'users':105C 'we':42C 'while':126C 'will':86C,108C,133C,146C 'with':57C,77C 'withdraw':30C 'work':76C,115C,142C,154C 'year':55C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-01-12 22:24:54+00:00
{
  "id": 9242,
  "slug": "superhuman-ai-exfiltrates-emails",
  "link_url": "https://www.promptarmor.com/resources/superhuman-ai-exfiltrates-emails",
  "link_title": "Superhuman AI Exfiltrates Emails",
  "via_url": "https://news.ycombinator.com/item?id=46592424",
  "via_title": "Hacker News",
  "commentary": "Classic prompt injection attack:\r\n\r\n> When asked to summarize the user\u2019s recent mail, a prompt injection in an untrusted email manipulated Superhuman AI to submit content from dozens of other sensitive emails (including financial, legal, and medical information) in the user\u2019s inbox to an attacker\u2019s Google Form.\r\n\r\nTo Superhuman's credit they treated this as the high priority incident it is and issued a fix.\r\n\r\nThe root cause was a CSP rule that allowed markdown images to be loaded from `docs.google.com` - it turns out Google Forms on that domain will persist data fed to them via a GET request!",
  "created": "2026-01-12T22:24:54+00:00",
  "metadata": {},
  "search_document": "'a':34C,86C,92C,119C 'ai':2A,6B,12B,43C 'allowed':96C 'an':38C,65C 'and':56C,84C 'as':77C 'asked':26C 'attack':24C 'attacker':66C 'attacks':16B 'be':100C 'cause':90C 'classic':21C 'content':18B,46C 'content-security-policy':17B 'credit':73C 'csp':93C 'data':114C 'docs.google.com':103C 'domain':111C 'dozens':48C 'email':40C 'emails':4A,52C 'exfiltrates':3A 'exfiltration':15B 'exfiltration-attacks':14B 'fed':115C 'financial':54C 'fix':87C 'form':69C 'forms':108C 'from':47C,102C 'generative':11B 'generative-ai':10B 'get':120C 'google':68C,107C 'hacker':123C 'high':79C 'images':98C 'in':37C,59C 'inbox':63C 'incident':81C 'including':53C 'information':58C 'injection':9B,23C,36C 'is':83C 'issued':85C 'it':82C,104C 'legal':55C 'llms':13B 'loaded':101C 'mail':33C 'manipulated':41C 'markdown':97C 'medical':57C 'news':124C 'of':49C 'on':109C 'other':50C 'out':106C 'persist':113C 'policy':20B 'priority':80C 'prompt':8B,22C,35C 'prompt-injection':7B 'recent':32C 'request':121C 'root':89C 'rule':94C 's':31C,62C,67C,72C 'security':5B,19B 'sensitive':51C 'submit':45C 'summarize':28C 'superhuman':1A,42C,71C 'that':95C,110C 'the':29C,60C,78C,88C 'them':117C 'they':74C 'this':76C 'to':27C,44C,64C,70C,99C,116C 'treated':75C 'turns':105C 'untrusted':39C 'user':30C,61C 'via':118C 'was':91C 'when':25C 'will':112C 'www.promptarmor.com':122C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-01-11 23:58:43+00:00
{
  "id": 9241,
  "slug": "dont-fall-into-the-anti-ai-hype",
  "link_url": "https://antirez.com/news/158",
  "link_title": "Don't fall into the anti-AI hype",
  "via_url": null,
  "via_title": null,
  "commentary": "I'm glad someone was brave enough to say this. There is a *lot* of anti-AI sentiment in the software development community these days. Much of it is justified, but if you let people convince you that AI isn't genuinely useful for software developers or that this whole thing will blow over soon it's becoming clear that you're taking on a very real risk to your future career.\r\n\r\nAs Salvatore Sanfilippo puts it:\r\n\r\n> It does not matter if AI companies will not be able to get their money back and the stock market will crash. All that is irrelevant, in the long run. It does not matter if this or the other CEO of some unicorn is telling you something that is off putting, or absurd. Programming changed forever, anyway.\r\n\r\nI do like this hopeful positive outlook on what this could all mean, emphasis mine:\r\n\r\n> How do I feel, about all the code I wrote that was ingested by LLMs? I feel great to be part of that, because I see this as a continuation of what I tried to do all my life: democratizing code, systems, knowledge. **LLMs are going to help us to write better software, faster, and will allow small teams to have a chance to compete with bigger companies**. The same thing open source software did in the 90s.\r\n\r\nThis post has been the subject of heated discussions all day today on both [Hacker News](https://news.ycombinator.com/item?id=46574276) and [Lobste.rs](https://lobste.rs/s/cmsfbu/don_t_fall_into_anti_ai_hype).",
  "created": "2026-01-11T23:58:43+00:00",
  "metadata": {},
  "search_document": "'/item?id=46574276)':271C '/s/cmsfbu/don_t_fall_into_anti_ai_hype).':276C '90s':252C 'a':37C,90C,203C,236C 'able':113C 'about':179C 'absurd':155C 'ai':8A,13B,16B,19B,23B,42C,64C,108C 'ai-assisted-programming':18B 'ai-ethics':22B 'all':125C,171C,180C,211C,262C 'allow':231C 'and':119C,229C,272C 'anti':7A,41C 'anti-ai':6A,40C 'antirez.com':277C 'anyway':159C 'are':219C 'as':98C,202C 'assisted':20B 'back':118C 'be':112C,194C 'because':198C 'becoming':83C 'been':256C 'better':226C 'bigger':241C 'blow':78C 'both':266C 'brave':30C 'but':56C 'by':188C 'career':97C 'ceo':142C 'chance':237C 'changed':157C 'clear':84C 'code':182C,215C 'community':48C 'companies':109C,242C 'compete':239C 'continuation':204C 'convince':61C 'could':170C 'crash':124C 'day':263C 'days':50C 'democratizing':214C 'developers':71C 'development':47C 'did':249C 'discussions':261C 'do':161C,176C,210C 'does':104C,134C 'don':1A 'emphasis':173C 'enough':31C 'ethics':24B 'fall':3A 'faster':228C 'feel':178C,191C 'for':69C 'forever':158C 'future':96C 'generative':15B 'generative-ai':14B 'genuinely':67C 'get':115C 'glad':27C 'going':220C 'great':192C 'hacker':267C 'has':255C 'have':235C 'heated':260C 'help':222C 'hopeful':164C 'how':175C 'hype':9A 'i':25C,160C,177C,183C,190C,199C,207C 'if':57C,107C,137C 'in':44C,129C,250C 'ingested':187C 'into':4A 'irrelevant':128C 'is':36C,54C,127C,146C,151C 'isn':65C 'it':53C,81C,102C,103C,133C 'justified':55C 'knowledge':217C 'let':59C 'life':213C 'like':162C 'llms':17B,189C,218C 'lobste.rs':273C,275C 'lobste.rs/s/cmsfbu/don_t_fall_into_anti_ai_hype).':274C 'long':131C 'lot':38C 'm':26C 'market':122C 'matter':106C,136C 'mean':172C 'mine':174C 'money':117C 'much':51C 'my':212C 'news':268C 'news.ycombinator.com':270C 'news.ycombinator.com/item?id=46574276)':269C 'not':105C,111C,135C 'of':39C,52C,143C,196C,205C,259C 'off':152C 'on':89C,167C,265C 'open':246C 'or':72C,139C,154C 'other':141C 'outlook':166C 'over':79C 'part':195C 'people':60C 'positive':165C 'post':254C 'programming':21B,156C 'puts':101C 'putting':153C 're':87C 'real':92C 'risk':93C 'run':132C 's':82C 'salvatore':11B,99C 'salvatore-sanfilippo':10B 'same':244C 'sanfilippo':12B,100C 'say':33C 'see':200C 'sentiment':43C 'small':232C 'software':46C,70C,227C,248C 'some':144C 'someone':28C 'something':149C 'soon':80C 'source':247C 'stock':121C 'subject':258C 'systems':216C 't':2A,66C 'taking':88C 'teams':233C 'telling':147C 'that':63C,73C,85C,126C,150C,185C,197C 'the':5A,45C,120C,130C,140C,181C,243C,251C,257C 'their':116C 'there':35C 'these':49C 'thing':76C,245C 'this':34C,74C,138C,163C,169C,201C,253C 'to':32C,94C,114C,193C,209C,221C,224C,234C,238C 'today':264C 'tried':208C 'unicorn':145C 'us':223C 'useful':68C 'very':91C 'was':29C,186C 'what':168C,206C 'whole':75C 'will':77C,110C,123C,230C 'with':240C 'write':225C 'wrote':184C 'you':58C,62C,86C,148C 'your':95C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
blogmark 2026-01-11 17:35:57+00:00
{
  "id": 9243,
  "slug": "neon-i-at-the-crucible",
  "link_url": "https://til.simonwillison.net/neon/neon-1",
  "link_title": "TIL from taking Neon I at the Crucible",
  "via_url": null,
  "via_title": null,
  "commentary": "Things I learned about making neon signs after a week long intensive evening class at [the Crucible](https://www.thecrucible.org/) in Oakland.",
  "created": "2026-01-11T17:35:57+00:00",
  "metadata": {},
  "search_document": "'/)':30C 'a':19C 'about':14C 'after':18C 'art':9B 'at':6A,25C 'class':24C 'crucible':8A,27C 'evening':23C 'from':2A 'i':5A,12C 'in':31C 'intensive':22C 'learned':13C 'long':21C 'making':15C 'neon':4A,16C 'oakland':32C 'signs':17C 'taking':3A 'the':7A,26C 'things':11C 'til':1A,10B 'til.simonwillison.net':33C 'week':20C 'www.thecrucible.org':29C 'www.thecrucible.org/)':28C",
  "import_ref": null,
  "card_image": null,
  "series_id": null,
  "use_markdown": true,
  "is_draft": false,
  "title": ""
}
Copy and export data

Duration: 142.48ms