30 august 2026 · düsseldorf
blackberry → claude code
A BlackBerry Classic's keyboard, pointed at Claude Code on the Mac, since 15 June 2026.
I talk to Claude through a BlackBerry from 2014. In January 2022 the company switched off the servers that approve new software for it, and one factory reset would kill the phone for good. I use it because twelve years on I still type faster on that keyboard than on anything else I own.
Real keys with a real click, a frame your thumbs know without looking. Typing prompts is the one thing this phone does better than anything modern, and prompts are most of what I type now.
So I pointed it at Claude Code. The design is deliberately dumb. The phone talks over WiFi to the Mac, where Claude runs in a session that stays alive when the phone drops off. On this path the phone contributes a keyboard and a battery.
01A BlackBerry Classic from 2014 as a keyboard-first terminal into Claude Code on the Mac, over WiFi, since 15 June 2026. The phone contributes a keyboard and a battery.
02The platform underneath is dead. The signing servers went off in January 2022, a factory reset would brick the phone, and its browser shipped in 2013. Every piece needed its own workaround.
03It outgrew the terminal. The Mac serves the phone a BlackBerry-style hub of 30 small apps, a BBM-styled chat drives a live agent, and since 22 August the phone approves Claude Code's permission prompts.
04Claude Code also runs on the phone itself, slowly. A second phone, a Q10, runs the same stack. Still going.
The keyboard
The README's third sentence is the claim the whole project rests on, "The keyboard is the whole point". A physical keyboard under a square screen makes a bad phone in 2026 and a very good terminal. The screen only has to show what I typed and what came back.
It is also a keyboard missing most of what a terminal needs. No Escape key, no arrows. Hold the space bar for about a second, a green M appears in the corner, then one letter stands in for the missing key. e is Escape, which is how I interrupt Claude mid-run. None of that remapping is mine. It came verbatim from mordak's Term48, which Term49 continues.
The phone can only ever run one command on the Mac. It connects, and the Mac answers with a menu.
Claude: [Enter]=TUI r=resume q=Q&A a=agentic
c=Cursor w=web (touch UI) >
Enter opens the full Claude interface. r reopens a recent session as a copy, so the phone reads old history while the Mac's own session stays untouched. q is read-only, a lets Claude act without stopping to ask. c attaches Cursor instead, and w opens the touch dashboard. Typing a line and pressing Enter is the one interaction this phone is perfect at. Ctrl-o lets go of the session and it keeps running on the Mac. It feels like a pocket teletype into the Mac.
The dead parts
Step one was installing a terminal, and step one is where the ecosystem starts fighting. The only apps that install at all are the ones signed before those servers went off. Term49 is one of them, and it is the only reason this project exists. Getting a signed app onto the phone was a dead end four times over. The usual sideloader needs a USB link macOS 26 no longer brings up, so it sits at "Connection: None" forever. My own research notes end that page with one line, "There is no working on-device .bar installer for a stock BB10 phone today."
The path that works is a Java tool dug out of BlackBerry's old developer kit on archive.org. It only speaks a version of encryption modern Java has deleted, so it runs on an old Java with that line hand-edited back in. Developer mode on, both machines on the same WiFi, and a 2026 Mac ships software to a 2014 phone.
Five wrong developer-mode passwords lock the phone, so the deploy script asks for it blind and keeps it out of the command history.
And you never wipe.
The phone will only boot BlackBerry's own system, and the one alternative operating system that covers it lists it as not booting. So everything I add sits on top of the OS instead of replacing it. That is BerryCore, sw7ft's Unix toolkit for BlackBerry 10, and it comes off again with one delete. Opening Term49 now asks one question first.
BB: [Enter]=Mac l=local >
There are two phones doing this now. A Q10 came later, runs the same hub, and it is the one in most of the photos here. Neither can look the Mac up by name, so its numeric address is written straight into the phone's settings. The commit that first patched them all said exactly what to do about that, "pin the Mac to this IP via a router DHCP reservation … or it will drift again." It drifted again, and again, and the same eleven files got corrected by hand each time. None of these fights was hard. There were just so many of them.
Two doors
There are two doors into the phone. BerryHub is daily life, Term49 is the keyboard escape hatch. BerryHub is a web dashboard the Mac serves to the phone's browser, and the README says why it had to be a browser. "The terminal can't read the touchscreen or trackpad … The stock browser can — touch + optical trackpad + physical keyboard, all at once."
That browser shipped in 2013 and is missing most of what a page is built with today, so every screen is put together on the Mac before the phone sees it. Each app is one small Python file. By late June there were 30 of them, weather and transit for Düsseldorf, a dictionary, radio, a quick-note box straight into my notes repo.
On 13 August the whole thing got rebuilt to feel like the phone it lives on. The home screen is a BlackBerry Hub list now, Berry at the top, Applications at the bottom, the old icon grid demoted to a second page.
Berry is the door I use most. It is a chat thread styled after BlackBerry Messenger, with two buttons doing very different jobs. Send asks a question and nothing can change. Do it picks a project folder and lets the agent work for real, in the same session the menu attaches to. While it works, the thread shows a live card. When it wants an approval the card turns amber and the answer is a 1, 2 or 3 right in the thread.
The Mac buzzes the phone
The newest layer runs the other direction, the Mac reaching out to the phone. When Claude Code on the Mac wants permission to do something, the Mac sends an email, because push into the BlackBerry Hub is the one notification channel a phone this old still accepts. The phone buzzes, the request comes up, and y or n plus Enter settles it. If anything in that chain fails, the normal prompt appears on the Mac as if nothing happened. The decision record there literally reads "approved from BlackBerry".
The phone runs Android apps too, on a version of Android from 2013. Three apps are built, signed and sitting in the repo. A hello app, a unit converter, and Berryle, which its own source file introduces as "a Wordle for the BlackBerry physical keyboard."
Some of it has started running on the phone alone. A journal keeps one entry a day and serves the page to itself, written so it still works with the Mac off and the WiFi off. A notes tool syncs to git, and its header explains the choice that makes it work at all, "The only network it touches is git-over-SSH … so sync works where every system-HTTPS app fails."
No Mac in this picture
Claude Code runs on the phone itself. So much for a keyboard and a battery. BerryCore's port of it is a build from early June, hand-patched for BB10 and frozen there until sw7ft repackages it. The stock browser cannot open claude.ai, so the login gets approved on the Mac and handed back to the phone, which finishes signing itself in. It runs on the same subscription as everything else here, and it is slow. A reply in the photo below took 34 seconds.
Everything that lets this phone work was decided before I owned it. Term49's signature was minted while the servers were still up, and signatures hold. The phone still refuses anything but BlackBerry's own system, and one wipe would still end it. And it is sitting there running Opus.