I’m going to do something different in this post. I typically have AI help write the blog post since writing isn't what I want to spend my time doing. But this weekend, I've been listening to a lot of Steve Yegge articles and in one of them he specified how he doesn't let AI write his blog posts since agents aren't that great at doing it. And I agree. The posts, that I've let AIs generate entirely, read like AI slop. I really should go back and rewrite them in my own words. I'll add a backlog item for that.
Step 1: Android AutoOTP
While working on the NCI Field Report website, I was having to copy a lot of one time passwords (OTPs) from Gmail to login. I eventually created a UI with password login so I could use auto fill, but this wasn’t part of the requirements, so the password login is only accessible by direct url which requires an extra step when testing on mobile to type in this url, which I run into when testing on Vercel preview environments. This prompted me to think of a quicker way to login. I remembered how iPhones can copy OTPs from the mail app and auto fill them into the input. I also have an app called FilterBox that copies OTPs from Google Messages to clipboard. Although, it doesn't auto fill. So last weekend, I created an an Android app to copy OTPs from any notification. The app works by listening to notifications, reading the content, and copying 4-8 digit strings.

One of the edge cases I ran into right away was a Spotify notification containing a song that had 1007 in the title. My app would repeatedly copy 1007 to clipboard since Spotify notifications update every second. I initially considered just limiting it to Gmail, since that is the reason I built the app, but since software is so cheap to produce right now, I decided to try both approaches and stuck with the more complex approach of letting the user select which app they want to listen to for flexibility. Initially, all app and services are selected, so I included options to clear all app selections or to select all at any point. I also included a search bar to filter app titles by keyword. Currently, I have Gmail and Google Messages selected.
Step 2: Attempt at MacOS AutoOTP
The following weekend, I decided to create a native MacOS app that essentially does the same thing. Reads notifications and copies 4-8 digit strings from them. Unfortunately, on the later versions of MacOS, notifications aren't accessible by app or cli. After some research, I stumbled across a way to access just the notifications that are currently displayed by reading a sqlite db on the filesystem. But to get the OTP to display in a notification meant that I had to use the mail client since Gmail doesn't include the body in the browser notification. Also, Google Messages notifications are incredibly flaky and don't always come through. Probably doesn’t help that Arc sleeps bookmarks that aren’t being used often. I tried to access Mail directly like you can with iMessage data, but I couldn't find a way to do that. One pain point I found is that Mail notifications come 5-10 seconds after Gmail receives the email. So while you're waiting for an OTP, you come to the conclusion that it would've been quicker to just open Gmail and manually copy the OTP.
The MacOS app just wasn't going to do the trick. I also tried using other apps that have solved this problem in the past MessAuto and 2fhey. But they no longer seem to work. So I started looking into other apps to see how they handle reading notifications. I specifically looked into Raycast and their extension marketplace to see if there were any notifications managers that I could read from. That's when I discovered AirSync.
Step 3: AirSync
AirSync connects your android device to your Mac and has all sorts of cool features like screen mirroring and media control. But one feature that caught my eye was a feature where it syncs Android notifications to Mac. Perfect! I could update my app to read these notifications instead of the Mac notifications.
I also noticed a setting called Clipboard sync. Clipboard sync is the idea that you sync the clipboard on your Android device with the clipboard on your Mac. Any text you copy on your phone is paste-able on your Mac and vice versa. This revolutionary idea would prevent the need to have a MacOS app for reading notifications at all, since I already have a perfectly good TOP copying android app.
Unfortunately, the setting in AirSync does not work. But this finding pushed me to search for other apps that did the same thing. That's when I discovered ClipSync.
Step 4: ClipSync (v1 beta)
An app that was released 6 days ago at the time of this writing. Man what a perfect time to be solving this problem. ClipSync is a system where you install an android app and a MacOS app then scan a QR code created by the MacOS app to create an end-to-end encrypted pairing that's stored in a Firestore. Each time you copy text to your clipboard, the app saves that clipboard item to the Firestore and using a web socket connection, updates the clipboard on the other device.
This approach worked well but I took a peek under the hood since the code was available on GitHub and found that they were using Firebase. I've heard horror stories of entire Firebase databases being leaked due to Firebase encouraging bad practices around security so for the sake of security and wanting to learn how the system works, I forked the project and rewrote it to use Convex instead. There were also some bugs and UI elements that didn't do anything, so I fixed these bugs and removed/replaced the UI elements. Now I have complete control over the database, backend, and client apps. There are still some bugs that I'll be working on to fix over the next few days but overall the app solves the problem I was having where I wanted OTPs to automatically save to my clipboard on both Android and MacOS.
Update 3/1/26
After about a month of ClipSync usage, I ended up switching to KDE Connect, due to some bugs in ClipSync that I couldn’t get over, and it works much better than ClipSync.
Step 5: KDE Connect
One of the bugs was an issue where if you copy something to clipboard on Mac, it would cause the clipboard sync event to occur from Android to Mac so that the latest clipboard item on Mac is the latest clipboard item from Android. So what you just copied on Mac is not what you are going to paste. So frustrating!
Another bug was no persistent device pairing storage on Mac. If you close the Mac app and reopen, you have to go through the pairing process again.
KDE Connect doesn’t have these issues and is easy to setup. For the setup, I used the Google Play version of KDE Connect on Android and used a forked version of Soduto on Mac.
Update 4/11/26
After about a week of KDE Connect, the clipboard sync feature quit working and I was unable to get it back to a working state ☹️ … so back to ClipSync we go.
At first, I tried to fix my fork of ClipSync, OTPSync, which had some major issues, particularly with how Claude setup Convex… this one was a bit demoralizing to discover ngl. I checked my Convex usage after a few days of running OTPSync and discovered that the app had used 526k function calls 💀 Thankfully this was still under the free tier limit of 1 million, but still… this was not going to cut it. Turns out that Claude had setup polling in addition to web socket connection so that changes in the clipboard were checked every half second and parings were checked every second… sigh. Yes, Convex is realtime by default, so this should not have been the setup to begin with. This was one of the first projects where I was completely out of my realm in terms of developer expertise so I was fully relying on Claude and wasn’t reading any of the code. I’ve learned my lesson on that front. Always read the code that Claude outputs!!
Anyways, even after fixing this, I was still not having the experience I wanted, so I decided to check out the ClipSync github repo to check the PRs and issues to see if anyone else was having the issues that I had. And that is when I discovered ClipSync version 2.
Step 6: ClipSync (v2)
ClipSync v2 was a major release, well actually the only release, since the previous version. It added new features like Auto OTP Copy for both SMS via SMS reading permission and Email via notification access. SMS reading allows for quicker OTP copies since it doesn’t have to wait for Google Messages to send the notification. It also can run in the background when the phone screen is locked, so I can get OTPs on my Mac while my phone is in my pocket or just has the display off on my desk. It also fixed several bugs, which improved some jankiness with the Android keyboard whenever I would copy some text.
There are still some issues that will hopefully be resolved in a future update.
One of those issues is when I copy something on my Mac and I have a fullscreen video playing on my Android, the video will exit fullscreen and turn in picture-in-picture mode. Not sure why this happens. But I’ve noticed if you disable ClipSync’s accessibility permission, you can avoid this issue. On Samsung, you can set up a button shortcut to disable ClipSync’s accessibility permission quickly by pressing the power and volume up buttons at the same time.
Another issue occurs when I have the keyboard open on my Android device and receive an OTP, the message appears as if it has been copied multiple times, so when I try to quick paste it from my keyboard toolbar, it disappears for a second then reappears. This is a bit of a nitpick, but previously in my Android OTP copy app, the OTP only copied once, so I was able to immediately use the OTP without having to wait an extra second, so ClipSync is a bit of a degraded experience in this regard. However, it’s a small price to pay for clipboard syncing between my Mac and my Android.
Overall, I’m really digging the new ClipSync update. It’s just about everything I’ve wanted out of this journey by being able to sync OTPs from my Android to Mac. But it’s even better because I can now copy text between my Mac and my Android, which has already been tremendously useful. I used to have to create a trello card on my Mac/Android, then go open the Trello card on my other device and copy the text. But now I can just copy the text and boom, it’s ready to paste.
Sources:
Steve Yegge’s articles: https://steve-yegge.medium.com/
Specific Yegge article where he discusses avoiding AI writing slop despite being heavily into AI coding: https://steve-yegge.medium.com/the-future-of-coding-agents-e9451a84207c
Android AutoOTP: https://github.com/kalenwallin/android-otp-copy
MessAuto: https://github.com/LeeeSe/MessAuto
KDE Connect: https://kdeconnect.kde.org/
My version of ClipSync called OTPSync can be found here: https://github.com/kalenwallin/OTPSync
