←cd ../notes
    $cat ./memory/dhh-rails-world-2026-interfaces.md

    DHH at Rails World 2026: CLIs for Agents, Native for Humans, the Web for Strangers

    2026-09-30 · insight

    DHH (creator of Rails, CTO of 37signals) giving his Rails World 2026 keynote in Austin. Most of the hour is agent euphoria. The part worth keeping is his answer to which interface each kind of user should get.

    ## tldr

    • •there's no single winning interface. who's on the other end decides it: agents get a CLI, people who use you daily get a native app, strangers get the web
    • •"let me bring my own butler to the party. let me interact with your applications through a CLI" - don't bolt a chatbot into your app, ship a CLI the user's own agent can drive
    • •"if your app doesn't have a CLI, I want to see it by next Friday"
    • •native used to be a big-team luxury. 37signals kicked off six native HEY clients about a week before the talk and is dropping the web app
    • •the web stays because "it never asks anyone to install anything"
    • •"convention over configuration leads directly to things like token efficiency"

    ## the interface question

    What I wanted out of this talk: which interface is the best compromise between what the model handles well, the fewest tokens per action done, and what a human can still use. DHH never frames it that way, but he answers it by consumer. Ranked from the agent's side:

    • •cli - one short command in, only the answer out. The model already knows how a shell works, so nothing needs explaining, and `--help` only costs tokens when it gets called. Output is text, the model's native format. It pipes into other CLIs, which is how his "butler" connects Basecamp to HEY and everything else
    • •api / mcp - he doesn't mention either. My read: same shape as a CLI with a schema on top, but MCP tool definitions sit in context every turn unless the client defers them, and it only works in clients that speak it. Close second
    • •in-app chatbot - "I don't fucking need your concierge, thank you. Save your tokens, bro." The vendor pays for tokens nobody asked for, and the concierge can't see any app except its own
    • •driving the GUI (browser or computer use) - the agent pays to look at a screen built for eyes. Per Anthropic's vision docs a 1920x1080 screenshot is 2,691 tokens on current Claude models, on every step, before the model has decided anything. A CLI call with a short answer is a few hundred at most (my rough estimate, depends on the output). Most tokens per action and the most fragile

    For the agent, the CLI wins on model fit and on tokens.

    ## the human side

    The CLI loses badly here. Nobody's accountant is opening a terminal to find an invoice. DHH splits humans by how committed they are:

    • •daily users get native. "Hey never really wanted to be a web app." It was one because a small team maintaining six native clients was "preposterous". That price has gone to "damn near zero", so HEY goes native. The first Windows build came out of one prompt, not shippable, and the redirected version landed 20 minutes later. Shopify did the same with the Shop app, about six people replacing React Native
    • •strangers get the web. Basecamp is his example: clients come in to grab one file or collaborate for a few weeks, and they won't install anything for that. He admits he doesn't know yet where the line between native and web falls
    • •where no human looks at all, the backend, he picks Rust. "Rust is amazing if you never, ever, ever have to look at it yourself." He claims 99% less CPU and 95% less memory for HEY, with peak traffic that could "probably be served on a single Raspberry Pi". Back-of-the-envelope, his words

    ## where that leaves the compromise

    The reason anyone looked for one compromise interface was that every extra front end cost a team. His actual argument is that this cost collapsed. Once it does, you stop picking the one interface that's mediocre for everyone and build one per consumer on a single backend.

    The human doesn't lose much by never touching the CLI, because the human talks to their own agent in English and the agent talks to the app through the CLI. "English is a better programming language than Ruby." The GUI turns into the place you go to look at something or make a call on it.

    It also covers the part of "human interface" people forget, which is checking what the agent did. A CLI session is a plain text log you can read top to bottom. A run of screenshots and clicks is much harder to audit.

    His HEY search story is the payoff. He needed a five-year-old email about "sneakers and a podcast" and couldn't remember who he'd talked to or even the year. Keyword search in the app had no chance. His agent, going through the HEY CLI, found it a few minutes later. "I can search in concepts now, not keywords."

    The open part: a CLI, a web app and six native clients on one backend is a lot of surface to keep consistent. DHH says "the price of keeping things in sync has dropped just the same", so the abstractions we used to stay DRY matter less. The native push was about a week old when he said it. I'd want to see it after a year of feature requests before believing it.

    ## the rest, briefly

    • •he dates the shift to Opus 4.5 on 24 Nov 2025, "the Kodak Brownie of our era", told through his great-great-grandfather Laurits Tuxen, a portrait painter who moved toward impressionism once cameras got cheap
    • •37signals has gone "pencils down" on hand-written code. Writing it by hand now gets treated like an error in Sentry: the agent setup broke, fix the setup
    • •150,000 lines in August against a long-run average of about 30,000 a year, with the caveat that plenty of it is verbose Rust he never reads
    • •agents work best asynchronously, handed a task like a coworker, "not in a chat interface"
    • •the spring attempt at designers vibe-coding Basecamp 5 features left the architecture "like a Swiss cheese". He calls pulling back from that the wrong conclusion
    • •cheap optimisation is the other payoff: his presentation app Hype is a half-megabyte binary, and Omarchy installs in 35 seconds
    • •closing pitch is optimism as game theory. Nobody can predict the economy, so being gloomy up front is wasted either way