Come Look at This
Sometimes the hardest part of exploring new territory isn’t the technology. It’s learning how to separate the work itself from the reactions it creates in other people.
Sometimes the hardest part of exploring new territory isn’t the technology. It’s learning how to separate the work itself from the reactions it creates in other people.
Only recently have I started to recognize how much of computer literacy was really learning to navigate unnecessary friction.
I’ve spent years managing Macs remotely with Apple Remote Desktop. Recently I gave Jump Desktop a try, and a handful of seemingly small features have started to shift my habits.
I’ve been wondering what it would look like to build audio software in a world where AI agents exist without turning the whole thing into a soulless plugin factory that mass-produces random ideas.
Anonymity at scale is becoming less a stable state and more an ongoing act of defense against time, data, and attention. As influence grows, so does the public’s rational interest in understanding who is behind it, making “hiding in plain sight” increasingly fragile.
I used to think control was mostly about discipline—if something felt off, it meant I hadn’t trained hard enough—but biology doesn’t work that way; what we think and feel emerges from interacting systems shaped by things like stress, sleep, and even the microbes in our bodies.
I’ve been building cross-platform software where every change needs to be validated across Windows, macOS, Linux, Android, and iOS before it can land. The coding is handled by AI agents working in parallel across multiple worktrees. The constraint isn’t codegen; it’s coordinating reliable builds.
By default, Repo Prompt installs its MCP server for Claude Code per-project via .mcp.json files. Here's how I made it available globally in every Claude Code session.
Every year I make my Oscar predictions. This year I put together a small website with my ballot that updates every five minutes during the awards show using data scraped from the Oscars' realtime feed via Chrome DevTools, published with Claude using the new scheduled tasks /loop feature.
Today, I stumbled across an Ableton Live MCP server that lets tools like Claude or Codex control Ableton using natural language. Here's how I set it up.
I’ve been spending some of my free time writing software to keep perfectly good hardware from becoming e-waste.
A while back I wrote about how to start developing audio apps and plugins on macOS using the JUCE-Plugin-Starter I created. I've since turned that workflow into a Claude Code plugin called juce-dev.
Anthropic released skill-creator, a skill for creating and iteratively improving other skills. If you’re not familiar with building skills, it’s worth trying out. Here's how to pull just that folder from the GitHub repo without cloning the entire thing using Git’s sparse checkout.
If you have built a macOS app that intercepts media keys or system-wide keyboard events it can be a nightmare: the tap appears to install successfully, but after re-signing the binary and launching via the Dock or Finder, events never fire. Here’s what was happening to me, and how I fixed it.
I have a house full of Wemo switches, dimmers, and plugs, and I use Google Home speakers in pretty much every room. "Hey Google, turn off the kitchen light" was part of my daily routine — until Belkin pulled the plug. Here's how I restored service.
I've been exploring Tauri lately – the framework for building desktop (and mobile) apps using web technologies with a Rust backend. I built an an open-source W3C WebDriver implementation to make it easy to test Tauri apps on macOS.
XcodeBuildMCP v2.0 was recently released, and it adds two optional skills you can install into supported CLIs (Codex, Claude, and Cursor).
CodexMonitor recently developed an iOS app for connecting to your projects running on your desktop over Tailscale. Until there's a TestFlight / AppStore build you will need to build this yourself if you want to use it. Here's what I did to get it working.
Today I learned that a single weird Unicode line separator (U+2028) can make Codex.app skip loading session history. I quit and restarted the app and all my sessions vanished, which was alarming. Here's how I fixed it.
Up until recently, getting Claude to collaborate with other agents was…functional, but clunky. Recently, I started using a skill that allows me to just call OpenAI /codex from Claude.
HomeBar sits in your menu bar and lets you toggle lights, switches, and other HomeKit accessories with a single click. No need to open the Home app or pull out your phone.
Today I wanted to share a screen capture of a terminal project that I’ve been working on, and I wanted something better than a blurry screen recording. I ended up building a tool to set the start/end times and generate the code injection snippets for Ghost.
I wanted to learn how Claude Code plugins work, so I built a couple with plugin-dev: Worktree-Manager for easier git worktrees, and Chainer, which interprets what you want to build and picks + runs the right plugin(s).
I wanted agent terminals to live next to my files, not in a pane. So I built a small extension using Codex that adds status bar buttons (one per agent) to open terminals directly in the editor area.
After upgrading from n8n v1 to v2, my workflow that uploads binary files to GitHub suddenly broke. The fix was adding an Extract from File node between the binary source and the GitHub node to manually convert the binary data to Base64.
While watching a full-screen video in VLC on my Mac, I noticed a small purple dot appear in the menu bar—something I’d never seen before. It was distracting, so I set out to disable it.
Today I learned that Buddha statues—yes, even the giant ones—often have scriptures and sacred objects placed inside them.
A friend told me about a firmware called esp32_nat_router_extended, and it turns out you can turn an ESP32 into a cheap, low-power 2.4 GHz travel router pretty easily. Here’s how I got it running on my M5NanoC6 (ESP32-C6) from macOS.
I thought it might be fun to start a new series where I share random stuff I ask ChatGPT to explain — tagged accordingly. To kick things off, here’s an unedited “Today I Learned” entry: ChatGPT explaining what “based” means.
Ghost self-hosters can now send newsletters with Amazon SES! I added multi-provider bulk email support to Ghost, starting with Amazon SES, making it simpler and cheaper for writers to deliver newsletters using Ghost's existing newsletter features.
If you're using Claude Code's REPL in VS Code on Windows and Ctrl+K isn't working to clear text from the cursor to the end of line (like it does in bash), here's the quick fix.
If you use GitHub Copilot on the free plan, you’ve probably seen this message: “You’ve reached your free plan limit. Your limits will reset on [date].” GitHub, if you really intend to offer a free Copilot tier, please take a look at this bug.
Back in August, I began noticing that whenever I started a workout, I received a warning saying, “Some information may not load.” Embarrassingly, the cause turned out to be AdGuard Home. One of my blocklists was preventing the device from connecting properly.
After updating to macOS Tahoe 26.1, my Apogee Symphony I/O MK I interface stopped working over USB Audio. Using a Thunderbridge with a Thunderbolt-to-USB-C adapter got it working again.
I ran into this problem: my 2TB SSD kept filling up at an impossible rate. No matter how much I deleted, the free space would vanish again. After clearing out every obvious file and folder I could find, I finally decided it was time to dig deeper.
Apple recently added an impressive new feature to AirPods — Live Translation — letting you hear real-time translations of in-person conversations straight through your earbuds. Even better, it also works on older AirPods Pro models (2nd and 3rd generation).
After updating iOS my geofence automations in the Home app stopped working. Here’s what I did to get my iPhone working again after Apple Home geofence automations stopped working.
I use AdGuard Home with several block lists. Recently, the NY Times iOS app stopped updating content. After checking the logs, I noticed that samizdat-graphql.nytimes.com was being blocked. Once I unblocked it, content updates in the iOS and iPadOS apps started working again.
I’ve updated my Ghost updater script to fully support migrating from Ghost 5 to Ghost 6, assuming your Ghost instance was installed using the companion Ghost Google Cloud installer.
I've been using Alex Sidebar for a while for developing macOS and iOS apps. They recently added support for Markdown files. I created a file that helps ensure that checkpoints and commits occur automatically and feature development occurs on branches.
Apple just released the macOS 26 beta at WWDC, and if you're doing any kind of iOS or macOS development, it's a great time to spin up a test environment without risking your main system.
I encountered an issue using Sweetpad with an Xcode project that CMake was generating into a `build/` directory, but I resolved it by adding a simple settings.json file.
Recently I've been playing around with making audio plugins on macOS using JUCE. I ended up putting together a few simple scripts to make it easier to quickly spin up new audio projects.
I've been experimenting with different autonomous agents lately and I’ve started to sandbox them. When something needs to run on macOS, I’ve found UTM to be the easiest way to spin up a lightweight, isolated macOS instance on Apple Silicon.
I recently encouraged a CEO friend to try an autonomous AI coding service—the kind of tool that would’ve seemed like science fiction not long ago. What stood out in our conversation was the complexity of introducing it to a team.
I was watching a show recently when someone used the phrase "soup to nuts". And even though I understood what it meant — everything from beginning to end — I suddenly realized I had no idea why it meant that.
I’ve been using macOS for years, but only today learned that Command + backtick lets you switch between windows within the same app. Add Shift to go the other direction.
Recently, I started noticing that every time I rebooted my Apple Silicon MacBook Pro, I’d get stuck with the dreaded beachball. It wasn’t just a one-off. The issue persisted—even when I booted into Safe Mode.
Steve—my neighbor and longtime friend—and I have occasionally swapped notes on our energy use. We’ve turned our solar production and energy usage into a daily, automated solar showdown between our homes.
After setting up a fresh Apple Silicon MacBook Pro, I decided to take a more intentional approach this time—no Rosetta 2. To get my now-sunset Apogee Symphony I/O MKI working without relying on the official installer, I built an unofficial installation script.