i woke up to 4 merged PRs i didn't write
Woke up this morning and had four pull requests open against Transcripted. I didn’t write any of them. Spent about 20 minutes reading through the diffs over coffee, then merged them.
That last part matters. These aren’t auto-merging. Each task opens a PR on a branch, you get the full diff, you review it like any other PR before it touches main. You’re still responsible for what ships. You’re just not the one who had to be awake and present to do the work.
Here’s what had run overnight:
PR #83 — security audit. Two real vulnerabilities found and fixed. Audio recording files — raw WAV captures of meeting audio, which are essentially biometric voice data — were being written with default permissions (644), meaning they were world-readable on disk. Not great. Fixed by applying 0o600 immediately after file creation in AudioFileManager.swift and AudioDeviceRecovery.swift. The second issue was a force-unwrapped URL construction in ModelDownloadService that would crash if a model filename or ID contained URL-unsafe characters. Replaced with guarded construction that falls through to the next mirror instead of crashing. No SQL issues, no hardcoded secrets, no path traversal — the audit checked all of that too and documented what it found (and didn’t find).
PR #84 — CLAUDE.md sync. There are CLAUDE.md files scattered across the Transcripted directory tree — one per major module. They’re context documents that explain architecture decisions, patterns, and conventions to any AI agent working in that part of the codebase. After weeks of shipping, these had drifted. The sync task read through recent commits, compared them against what the CLAUDE.md files said, and updated 8 files across the repo to reflect what’s actually true now. It’s the kind of documentation work that always falls off the list.
PR #82 — simplification sweep. Deleted 35 lines across TranscriptionTaskManager.swift, SavedPillView.swift, and FloatingPanelView.swift. Dead branches, redundant state checks, overly nested conditionals. Not glamorous but this is the refactor work that normally accumulates until you can’t ignore it anymore.
PR #81 — code review. One line fix in TranscriptionTaskManager.swift. Small thing, but it’s the kind of thing a reviewer catches.
All four merged by 9am. I had coffee while doing it.
The setup is Claude Code desktop with scheduled tasks. You configure what you want it to do, when to run, and what repo to work in. The tasks run in background while your machine is idle — in my case, overnight. Each task opens a PR on whatever branch it used, and you review it before anything lands on main.
This is the thing I keep coming back to. The value isn’t just “it saved me time.” It’s that these tasks happen on a cadence that I would never actually maintain manually. I would not sit down every Sunday night and do a security audit. I would not go through every CLAUDE.md after every sprint and update it. I would definitely not run a simplification pass every week. These things would happen once at the start and then drift until they were embarrassing.
Running them on a schedule means they just… stay current. The security posture doesn’t degrade. The documentation doesn’t lie. The codebase doesn’t accumulate cruft at the rate it naturally wants to.
The security PR is the one that got me. The audio permissions bug — world-readable voice recordings — is exactly the class of thing that slips through because it’s not a crash, not a test failure, not a user-visible bug. It’s a hygiene issue that you only catch if you’re specifically looking for it with fresh eyes and a checklist. I was too close to the code to see it. The agent wasn’t.
I’ve been thinking about what the right framing is for this. It’s not “AI writes your code for you.” It’s more like having a contractor who shows up overnight, does exactly the work you scoped, and leaves a clean paper trail. You still scope the work. You still review and merge. But the work happens on a cadence that doesn’t depend on your energy or whether you felt like doing maintenance on a Sunday.
That’s the unlock. Not the individual PRs — it’s the compounding effect of maintenance that actually happens.
Transcripted is open source. Free, local, macOS only.