JS Wei (Jack) Sun

Willison patches datasette-auth-github, builds iNaturalist feed from his phone

Two Simon Willison ships fill the tech beat: a Mobile Safari cookie fix on his auth plugin and a phone-coded wildlife feed.

Willison patches datasette-auth-github, builds iNaturalist feed from his phone

TL;DR

  • datasette-auth-github 1.0 adds a Max-Age cookie to stop Mobile Safari silent logouts on agent.datasette.io.
  • Longer-lived cookies widen the revocation window when a user is removed from a GitHub org.
  • Willison built an iNaturalist sightings feed with Claude Code on his phone, no server required.
  • Embedded Teleport report: 13 LLM-equipped engineers found roughly 2× the high-severity bugs of the prior two years.

Today’s tech beat is entirely Simon Willison’s own toolchain. The datasette-auth-github 1.0 release tags a fix that matters mostly to one site — agent.datasette.io, where GitHub login gates his LLM SQL agent — but the fix itself, a Max-Age on the session cookie to stop Mobile Safari silently logging users out, carries a real tradeoff: longer-lived cookies also widen the window in which a revoked GitHub org member can still hit the app.

The second feature is a different kind of personal ship: a zero-maintenance iNaturalist feed Willison built with Claude Code on his phone, clustering wildlife observations in 2-hour, 5-km windows and flushing flat JSON to GitHub. Riding along is an embedded Teleport datapoint worth flagging on its own — 13 engineers with LLMs found roughly 2× the high-severity bugs of the prior two years combined.

datasette-auth-github 1.0 stops Mobile Safari logouts

Source: simon-willison · published 2026-09-19

TL;DR

  • datasette-auth-github 1.0 ships one real fix: a Max-Age on the session cookie so Mobile Safari stops silently logging users out.
  • The bug surfaced on agent.datasette.io, where GitHub login gates Willison’s LLM SQL agent to throttle Gemini API abuse.
  • The 1.0 tag formalizes dual compatibility with Datasette 0.65.x and the 1.0 alpha line.
  • Tradeoff: longer-lived cookies widen the revocation window when someone is kicked from a GitHub org.

The changelog reads like a footnote — add Max-Age to the auth cookie, cut the release — but the plugin’s job changed underneath it. datasette-auth-github is now the front door to agent.datasette.io, the hosted demo of Datasette Agent, an open-source AI assistant that explores SQLite databases through a natural-language agentic loop running on Gemini 3.1 Flash-Lite 1. That demo requires a GitHub sign-in before you can issue any queries, specifically to keep anonymous traffic from burning through model calls 2.

That’s how Willison noticed the bug: every time Mobile Safari evicted the session cookie, a user mid-analysis got bounced back through the OAuth handshake before they could continue their agent loop. A cookie tweak on a five-year-old plugin becomes infrastructure hardening for the flagship demo.

Mobile Safari is doing exactly what it advertises

The post frames the issue mildly — “Mobile Safari seems to [end sessions] pretty often” — but this is well-documented WebKit behavior. iOS aggressively purges session cookies (cookies with no explicit expiration) during app backgrounding and under storage pressure. Setting Max-Age promotes the cookie from a session cookie to a persistent one, which sidesteps the purge entirely. Because Datasette’s ds_actor is a server-set signed cookie, ITP’s seven-day cap on JS-writable cookies doesn’t apply — the fix should hold in practice.

The ecosystem position, and the tradeoff

The plugin remains the canonical org/team-gated auth story for Datasette: github_org, github_teams in org-slug/team-slug form, and load_teams: true for downstream permission checks, with client_id/client_secret supplied via environment variables rather than committed metadata 3. For small teams this beats datasette-auth-passwords — no hashed passwords to rotate, GitHub org membership is the ACL.

The tradeoff 1.0 does not address: signed session cookies mean revocation is soft. If you kick someone from a GitHub team, they keep access until their cookie expires. The new longer Max-Age slightly widens that window. Operators running Datasette instances with sensitive data should know this is the model — GitHub org membership is checked at login, not per-request.

Net read

Willison has flagged for years that plugins in this space need a durable secrets story and community security review 4, and the 1.0 promotion fits his stated pattern: leave plugins on 0.x until real-world load surfaces the last edge cases, then cut the stable tag. A hosted LLM agent demo turned out to be the load test that mattered.


Willison built his wildlife feed with Claude Code on his phone

Source: simon-willison · published 2026-09-19

TL;DR

  • Willison built his iNaturalist sightings feed with Claude Code on his phone, clustering observations in 2-hour, 5-km windows.
  • The whole pipeline is zero-maintenance: public API in, flat JSON in GitHub out, no server.
  • The photo hides a Northern Gannet — the first ever recorded in the Pacific, via the now-navigable Northwest Passage.
  • Teleport’s embedded report: 13 engineers with LLMs found roughly 2× the high-severity bugs of the prior two years combined.

The sighting is the output of a vibe-coded pipeline

Willison’s September 19 post — “California Sea Lion, Brandt’s Cormorant” at Pillar Point Harbor — reads like a two-photo diary entry. It’s actually the tail end of a small AI-built data pipeline he shipped in May. inaturalist-clumper is a Python CLI that pulls his iNaturalist observations, groups any within a 2-hour and 5-km window into a single “Sighting” event, and writes the result to a flat clumps.json in GitHub 5. He wrote it almost entirely on his phone using Claude Code for web 5.

That’s the pattern Willison has been advocating for years: personal tools built on public APIs and flat-file storage so they need essentially no maintenance 6. LLMs collapse the activation energy — you can now assemble a working data pipeline during a walk without opening a laptop.

flowchart LR
    A[iNaturalist API] --> B[inaturalist-clumper CLI]
    B --> C[clumps.json in GitHub]
    C --> D[Sighting posts on simonwillison.net]

The hidden gannet is a climate-science easter egg

Willison notes he only spotted “Morris the Northern Gannet” peeking out from behind a sign after reviewing the photo 7. Morris is not a random bird. First identified off California in April 2012, he is the first Northern Gannet ever recorded in the Pacific, believed to have crossed from the Atlantic via the Northwest Passage — a route that opened up as Arctic pack ice retreated 8. He has spent the last decade courting Brandt’s cormorants on the Pillar Point breakwater, which is why he keeps ending up in Willison’s frames.

The Teleport sponsor is the actual AI debate

Under the wildlife post sits a sponsored Teleport report: 13 engineers, 90 days, LLMs pointed at their own codebase. The headline number is striking — the team surfaced roughly double the high-severity vulnerabilities of the previous two years combined 9. More interesting is the methodology finding: simple, targeted prompts guided by experienced humans outperformed Teleport’s own multi-agent harness, Conclave 9.

That cuts against the “more scaffolding = better security agent” pitch. It also has to be read against benchmarks going the other way. GenIaC-SecBench reports LLM-generated code carries 3.2×–3.9× the vulnerability density of human-authored equivalents, and a CyberSecEval 3 study found no statistically significant productivity uplift for security specialists using LLM copilots 10.

Quantity-vs-quality is the recurring fault line.

The reconciliation is the human-in-the-loop framing. Teleport used LLMs as a directed search tool with expert auditors driving. The failing benchmarks tested them as autonomous coders or copilots. Same models, different job descriptions, opposite results — and Willison’s phone-built sightings feed is the small-scale version of the same lesson: LLMs are force multipliers on top of a clear spec, not replacements for one.

Footnotes

  1. datasette.io — Datasette Agent announcement — https://datasette.io/blog/2026/datasette-agent/

    Datasette Agent is an open-source AI assistant that explores SQLite databases via natural language; the demo at agent.datasette.io is gated by GitHub login to prevent abuse and currently runs on Gemini 3.1 Flash-Lite.

    ↩
  2. n1n.ai — independent walkthrough of Datasette Agent — https://explore.n1n.ai/blog/exploring-datasette-agent-llm-data-analysis-2026-05-22

    The agent runs an ‘agentic loop’ — inspect schema, generate SQL, execute, reflect on errors — and the hosted demo requires a GitHub sign-in before you can issue any queries.

    ↩
  3. datasette.io plugin directory — datasette-auth-github — https://datasette.io/plugins/datasette-auth-github

    Restrict access to specific GitHub users, organization members or team members, configured via github_org, github_teams, and load_teams keys with client_id / client_secret supplied as environment variables.

    ↩
  4. Simon Willison — ‘Datasette Secrets’ (2024) — https://simonwillison.net/2024/May/7/datasette-secrets/

    Willison has long flagged that plugins like datasette-auth-github need a durable way to hold OAuth client secrets, motivating the datasette-secrets plugin and repeated calls for community security review of the auth code.

    ↩
  5. Simon Willison — ‘inat-sightings’ project post (May 1 2026) — https://simonwillison.net/2026/May/1/inat-sightings/

    A Python CLI tool, inaturalist-clumper, aggregates sightings occurring within a two-hour window and a five-kilometer radius into a single ‘Sighting’ event… built almost entirely through mobile AI-assisted programming using Claude Code for web on his phone.

    ↩ ↩2
  6. South Park Commons interview with Simon Willison — https://blog.southparkcommons.com/p/simon-willison-my-career-in-side-projects-and-open-source

    Willison advocates for these projects as ‘self-sustainable’ side ventures… relying on public APIs and flat-file JSON storage on GitHub, he ensures that projects like his ‘Owls Near Me’ tool and the ‘Sightings’ feed require near-zero maintenance.

    ↩
  7. Simon Willison — earlier Morris sighting (Aug 15 2026) — https://simonwillison.net/2026/Aug/15/sighting-391300422/

    Morris the Northern Gannet is peeking out from behind the base of the sign.

    ↩
  8. Bay Nature — ‘An Atlantic Bird Makes a Home in California’ — https://baynature.org/magazine/spring2017/atlantic-bird-makes-home-california-maybe-melting-arctic-ice/

    Morris, first identified in California in April 2012, is believed to have traversed the Northwest Passage — a route through the Arctic that was historically blocked by pack ice but has become navigable due to warming temperatures.

    ↩
  9. daily.dev summary of Teleport ‘13 engineers, 3 months’ post — https://daily.dev/posts/we-had-13-engineers-spend-three-months-finding-vulnerabilities-with-llms-xrbmxtlki

    Simple, targeted prompts guided by experienced human vulnerability researchers actually outperformed sophisticated multi-agent harnesses such as Teleport’s own experimental tool, Conclave… the 13-engineer team discovered nearly double the number of high-severity vulnerabilities compared to the previous two years combined.

    ↩ ↩2
  10. arXiv — GenIaC-SecBench (LLM vs human code security) — https://arxiv.org/pdf/2608.28021

    LLMs generate code with 3.2x to 3.9x the vulnerability density of human-authored equivalents… a study involving CyberSecEval 3 noted an unexpected lack of statistically significant improvement in speed or accuracy for human specialists when assisted by LLM copilots.

    ↩
Jack Sun

Jack Sun, writing.

Engineer · Bay Area

Hands-on with agentic AI all day — building frameworks, reading what industry ships, occasionally writing them down.

Digest
All · AI Tech · AI Research · AI News
Writing
Essays
Elsewhere
Subscribe
All · AI Tech · AI Research · AI News · Essays

© 2026 Wei (Jack) Sun · jacksunwei.me Built on Astro · hosted on Cloudflare