I’m finally able to run Linux because of AI.
I’ve tried Linux before, and I failed to stick with it. Every time, I would have hit the blockers below, one after another, and given up.
Now I run it on my main computer, and the blockers get handled for me.
My old PC
I just brought my old PC back: a Threadripper with an RTX 2080 that had been sitting in a closet.
I have a network KVM, a little box that shows another computer’s screen and keyboard in a browser tab, all the way down to the BIOS. Claude Code drove it through the Claude Chrome extension: it read the screen and pressed the keys.
- It upgraded the old install from Debian 11 to Debian 13, in place.
- Through the KVM, it fixed my memory setup in the BIOS. I’d tried turning on the rated memory profile myself once, and the machine went to a black screen. Claude found the one extra timing setting that made all four sticks run at their rated speed, and memory reads went from about 26 to 40 GB per second.
- When it typed through the KVM, the Shift key got dropped, so
:came out as;. In a root shell that’s dangerous. It worked that out and switched to pasting through the KVM’s clipboard tool instead.
That PC now runs local AI models for my main computer.
These were things I’d given up on long ago because of all the blockers. Now it’s purely automated.
Electronics
I took pictures of all the electronics I have lying around and handed them over. Claude Code worked out what each part was, and then started using them.
- A one-inch OLED screen got set up and now plays animations: a bouncing ball and a clock.
- An ATtiny85, a tiny 8-pin chip, got flashed to blink an LED. That took using an Arduino Uno as the programmer, which needed a capacitor on the Uno’s reset pin.
- I don’t really know how capacitors work. So Opus made me an instructional video in the style of 3Blue1Brown, using Manim (the animation library 3Blue1Brown created), narrated by a text-to-speech model running locally on my computer. It runs about ten and a half minutes: resistors, capacitors, pull-ups, RC circuits. It ends on the Arduino’s reset circuit, the same one I’d needed that capacitor for.
The lightning detector
Every lightning strike gives off a radio pulse, a small EMP. I ended up with a detector for it, an Arduino with a six-foot wire and three resistors, checked against a weather satellite. Almost none of that was my idea.
It started with one line from me, late at night, in the middle of asking about other things: “I think there’s a storm coming tonight maybe, or maybe not, if you can check and tell me if that RF reciever can run overnight and record lightning strikes.”
Here’s what I said, and what Claude decided:
| What I said | What Claude decided |
|---|---|
| ”…if that RF reciever can run overnight and record lightning strikes” | Not that receiver. It listens at 2.4 GHz, where lightning is nearly silent. Lightning is loudest at a few thousand cycles per second, low enough for a bare wire on the Uno’s analog pin to hear. It picked three resistors from the Radio Shack packs in my photos, and added a heartbeat every 10 seconds, so a quiet night couldn’t be mistaken for a dead logger. The sketch was written and compiled before I answered. |
| “You want me to find a long wire for the antenna?” | Which wire: the red spool in one of my photos, with the end scraped bare, because it’s probably coated. And where it goes: up the wall, away from the PC and the monitors. |
| “erm could you ascii art what I need to do?” | A wiring diagram. Then it flashed the Uno and set the logger up to keep running after I closed the terminal. |
| “flikcked the light” | It didn’t trust a reading of zero. When the light switch didn’t show up in the log, it designed a two-touch test to tell a quiet switch from a disconnected antenna. Both touches showed, so the rig was alive. |
| “Done. Going to bed regardless.” | It logged all night. In the morning, it checked three airports’ weather records to confirm there had been no storm, so the quiet log was real. |
| “I saw flashes” (I was out, about two miles from the antenna) | It asked me to note each flash I saw, so it could look for a burst within seconds. Four sightings, four matches. |
| “Where do you get the lightning map? Why do we have to wait until tomorrow?” | There was no reason to wait. It pulled NOAA’s GOES-19 satellite data for that evening, 1,828 flashes within 150 km, and lined it up with the log second by second. Then it shifted its own log by random amounts to measure what luck alone would give. |
| “Could you make some sort of cool HTML artifact um, to show the lightning strikes correlated to the satellite?” | A page with a map of every flash, a slider to replay the evening, a timeline, and a table of how far the wire could hear. |
| “What about those flashes 100 kilometers away? Do you think that those might have just been uh, coincidence?” | Yes, they were. It rebuilt the headline around strikes within 25 km: the wire heard 37% of them, against 7 to 10% when the log was shifted, which is chance. The first headline, 84% of bursts matching a flash, was too flattering. |
My part was a handful of questions, some fetching of wire, and four texts. The question that changed the result was mine: whether the far-away matches were coincidence.
The radio
At the end of that night I remembered I own an SDR, a USB radio receiver that can tune across most of the radio spectrum. It had been in a drawer for years. Same deal as the lightning detector: short questions from me, and Claude steering.
| What I said or did | What Claude did |
|---|---|
| I remembered I have an SDR, and plugged it in. | Within minutes it found a temperature sensor I already own, sitting in a drawer, and heard a plane. |
| “couldn’t you track lightning with the SDR?” | Not well: lightning is loudest around 10 kHz, and this dongle can’t tune below 52 MHz. It suggested my computer’s sound card instead, since that’s a receiver for exactly that range. |
| “also could you look for pager traffic?” | It said no. Decoding pages is illegal under US wiretap law, and many carry patient details. It scanned the band to show me it was active, without decoding anything. |
| I put the little antenna on top of my monitor. | It measured the result: worse. The background noise jumped about 10 dB. It told me to get it away from screens and toward a window. |
| “can you scan for signals, off the beaten path? Like non standard stuff?” | It swept everything the dongle could reach. First it threw out a dozen peaks as fakes: the dongle hearing its own clock. What was left: the smart-meter network on my street, walkie-talkies, business radios, and air traffic control. |
| “yeah try reading my meter” | Four water meters in two minutes. To find which one was mine, it had me run a bath and watched which reading jumped. |
| “Can we record voice chatter across all the non standard bands like walkie talkies all night?” | It built a scanner that hops across 37 channels and records anything that lights up. The first night it piled up 42 GB of audio from one channel that never went quiet, and took my terminal down with it. It capped the clips and gave the scanner a hard memory limit. |
| “let’s spawn opus subagents to analyze each set” (that one was my idea) | Seven analysts, one per mystery signal. Two were machines checking in every 8 and every 64 seconds, like clockwork. |
| It decided the antenna was the bottleneck and picked the gear: a dipole antenna kit and a 10-foot USB extension, so the dongle could sit away from the PC. It put them in my cart. | |
| “the antenna you bought doesn’t connect to the dongle” | It owned the mistake: it hadn’t checked which plug my old dongle had. It recommended a new dongle over a $6 adapter. I bought an RTL-SDR Blog V3, which takes the antenna directly. |
| “let’s explore what we can find on the Blog V3 now” | A live map of every plane in range. Overnight it logged about 1,350 aircraft, the farthest 80 km out. It also caught pilots talking to DFW Tower and transcribed them: “Tower, Bluestreak 5309, visual, 17 left.” |
| It noticed tire-pressure sensors that kept showing up at my house, all reading about 26 PSI, and told me to check my tires. | |
| “those are my tires, they all said 25 one said 24 on my dash” | It built a tire logger. It checks my tires every half hour and warns me if one starts dropping faster than the others, which is the early sign of a nail. |
The antenna is in my window now.
What it fixed on my main computer
- The switch itself. Which slot the new drive goes in (read from the motherboard manual), how to keep Secure Boot on with the NVIDIA driver, and why Debian stable over a rolling release.
- Moving off Windows. 140 old project folders, 162 GB, sorted by a short rulebook into keep, move and drop, and then the old Windows disk images deleted.
- Video. On NVIDIA with Wayland, three separate things were broken. The video player couldn’t start OpenGL. Chrome silently decoded video on the CPU, because Debian’s driver bridge was older than the version Chrome needs. VLC lost its picture entirely. All three causes were found and fixed.
- The KVM switch. When I switch the KVM to my work laptop, the main monitor turns off, and it comes back when I switch home. The trigger is the USB mic behind the KVM appearing and disappearing.
- Speakers going silent after some reboots. The login screen’s sound service and mine raced for the sound card at boot, and the loser quietly dropped an output.
- Guitar Pro 8, a Windows app, running under Wine in its own sandbox.
- Window control on Wayland. The old X11 tools can’t see windows on Wayland, so it worked out KDE’s own scripting interface instead.
- The desktop eating memory. The desktop shell grew to 4.5 GB. The cause was the wallpaper slideshow, a known KDE bug.
- Bluetooth. My chair speaker’s receiver was invisible to the PC. That one is a known Intel bug, diagnosed but not fixed.
- Slow startup. Boot time, terminal launch and Claude Code launch, each measured and then sped up.
- Local models. A 27-billion-parameter model fits and runs on my 16 GB graphics card on bare-metal Linux.
It broke things too
- A hard freeze. One session set up encrypted swap on a loop device, which is a known kernel deadlock, and the machine froze hard later that day. It went back to a plain swap file.
- Local models silently on the CPU. Another session reloaded Docker, which quietly took the GPU away from running containers. A model “loaded fine” and then ran at 4 tokens a second. The fix that stuck was changing how Docker hands the GPU to containers.
Unlocked
This is unlocking my ability to do things. It feels like magic. All of these were out of reach for so long, because of time and endurance, or laziness, and now they’re unlocked.
I still don’t understand how capacitors work.