DEV Community

Lily profile picture

Lily

I'm Lily. I build and ship — 10+ iOS apps live on the App Store, plus a content pipeline that generates and publishes across platforms on its own. No theory I haven't shipped.

The Morning My cron Jobs Went Silent: A 97-Line Script That Migrated Everything to launchd

The Morning My cron Jobs Went Silent: A 97-Line Script That Migrated Everything to launchd

Comments
23 min read
28 Hours of Green Logs, Zero Replies: How a Single `echo` Line Swallowed Every Exit Code

28 Hours of Green Logs, Zero Replies: How a Single `echo` Line Swallowed Every Exit Code

Comments
23 min read
8 Runs a Day Became 3: Building a launchd plist Integrity Guard in 73 Lines

8 Runs a Day Became 3: Building a launchd plist Integrity Guard in 73 Lines

Comments
24 min read
Broken Retries: Why 'Just Try Again' Kept 5 Automation Lanes Dead for 63 Minutes

Broken Retries: Why 'Just Try Again' Kept 5 Automation Lanes Dead for 63 Minutes

Comments
24 min read
How My Own Script Killed Instagram Sessions Every Night: pkill and a Shared Chrome Profile

How My Own Script Killed Instagram Sessions Every Night: pkill and a Shared Chrome Profile

Comments
23 min read
Make Codex Prove It: A Three-File Design That Leaves Evidence on Disk

Make Codex Prove It: A Three-File Design That Leaves Evidence on Disk

Comments 1
20 min read
Editing the plist Changed Nothing: launchd Kept Running My Old 30s Timeout Until 31 Lines of Bash Fixed It

Editing the plist Changed Nothing: launchd Kept Running My Old 30s Timeout Until 31 Lines of Bash Fixed It

Comments
24 min read
8 Pitfalls I Hit Auto-Repairing 'Plugin directory does not exist' — and the 3-Layer Guard That Stopped a 22 8 Wipeout

8 Pitfalls I Hit Auto-Repairing 'Plugin directory does not exist' — and the 3-Layer Guard That Stopped a 22 8 Wipeout

Comments
21 min read
A launchd Job That Fires Once on Deprecation Day, Then Deletes Itself — and the 4 Pitfalls I Hit

A launchd Job That Fires Once on Deprecation Day, Then Deletes Itself — and the 4 Pitfalls I Hit

Comments
6 min read
3 Token Burn From an Infinite Retry Loop: How I Made Claude Refill My Article Queue When It Runs Dry

3 Token Burn From an Infinite Retry Loop: How I Made Claude Refill My Article Queue When It Runs Dry

Comments
23 min read
52 Days of Silent Zeros: The Stop Hook Payload Has No usage Field

52 Days of Silent Zeros: The Stop Hook Payload Has No usage Field

1
Comments 2
19 min read
3 Wrong Guesses About a Chrome Slot Limit: 3 6 Reserved Lanes

3 Wrong Guesses About a Chrome Slot Limit: 3 6 Reserved Lanes

Comments
24 min read
exit 0 Lies: A Job That Needed 4,940s in a 2,400s Slot, and the 3-Day Streak That Exposed It

exit 0 Lies: A Job That Needed 4,940s in a 2,400s Slot, and the 3-Day Streak That Exposed It

Comments
20 min read
I Never Multiplied Two Config Values — and Got SIGKILLed Every Day for Two Weeks

I Never Multiplied Two Config Values — and Got SIGKILLed Every Day for Two Weeks

1
Comments
27 min read
Our Social Posting Automation Was Dead for 14 Days and the Monitoring Never Noticed

Our Social Posting Automation Was Dead for 14 Days and the Monitoring Never Noticed

Comments
22 min read
5 Days of Silent Failures: A launchd Locale Bug That Was Hiding in 5 Repos

5 Days of Silent Failures: A launchd Locale Bug That Was Hiding in 5 Repos

Comments
22 min read
Why My Nightly Ingest Stalled for 3 Days — and How Splitting One Task Into Sub-Steps Fixed It

Why My Nightly Ingest Stalled for 3 Days — and How Splitting One Task Into Sub-Steps Fixed It

1
Comments
24 min read
Which Skill Is Quietly Burning Your Tokens? Find Out From transcript.jsonl

Which Skill Is Quietly Burning Your Tokens? Find Out From transcript.jsonl

Comments
20 min read
A Blank Dashboard and a Fake 2.5M-Token Reading: Building a Token Fuel Gauge for Claude Code

A Blank Dashboard and a Fake 2.5M-Token Reading: Building a Token Fuel Gauge for Claude Code

Comments
24 min read
44 Thumbnails With the Wrong Hair Color: A One-Line Bug and the 300 Lines It Took to Pay It Back

44 Thumbnails With the Wrong Hair Color: A One-Line Bug and the 300 Lines It Took to Pay It Back

1
Comments
21 min read
52 Days, 2,340 Rows, Every Cost Logged as Zero: The Stop Hook Trap

52 Days, 2,340 Rows, Every Cost Logged as Zero: The Stop Hook Trap

Comments
23 min read
I Was Burning $1.20 a Night on Nothing: A Claude Code Skill Library That Harvests and Curates Itself

I Was Burning $1.20 a Night on Nothing: A Claude Code Skill Library That Harvests and Curates Itself

Comments
20 min read
Claude Forgets Everything Overnight — The 3:30 AM Batch That Harvests What It Learned

Claude Forgets Everything Overnight — The 3:30 AM Batch That Harvests What It Learned

Comments
24 min read
Four Alarm Slots, Three Failure Modes: Building a Nightly Drain That Survives Sleep, Races, and Timeouts

Four Alarm Slots, Three Failure Modes: Building a Nightly Drain That Survives Sleep, Races, and Timeouts

Comments
22 min read
Your Automation Dies Quietly: A Weekly Revenue Gate That Caught One Line Dropping From 14 Files to 0

Your Automation Dies Quietly: A Weekly Revenue Gate That Caught One Line Dropping From 14 Files to 0

Comments
21 min read
Rate Limits Cost Me a Whole Night of Work — Here's the 46-Line Script That Fixed It

Rate Limits Cost Me a Whole Night of Work — Here's the 46-Line Script That Fixed It

2
Comments 1
21 min read
6 Hours, 15 Jobs, Zero Alerts: A Circuit Breaker for Claude Code's Weekly Quota

6 Hours, 15 Jobs, Zero Alerts: A Circuit Breaker for Claude Code's Weekly Quota

Comments
21 min read
The 4,000-Token Tax: Auto-Disabling Claude Code Plugins You Haven't Touched in 30 Days

The 4,000-Token Tax: Auto-Disabling Claude Code Plugins You Haven't Touched in 30 Days

Comments
22 min read
My Cost Monitor Said $234 When the Real Bill Was $48. Then set -e Made It Go Silent for a Week.

My Cost Monitor Said $234 When the Real Bill Was $48. Then set -e Made It Go Silent for a Week.

Comments
22 min read
Four Traps in MCP Health Checking: What Broke My Overnight Batches

Four Traps in MCP Health Checking: What Broke My Overnight Batches

Comments 1
23 min read
Shipping 12 iOS Apps to the App Store Unattended, Part 2 — Every Review Trap (Beta Builds Rejected, Pricing, Name Collisions)

Shipping 12 iOS Apps to the App Store Unattended, Part 2 — Every Review Trap (Beta Builds Rejected, Pricing, Name Collisions)

Comments 2
20 min read
Two Hours Lost to a Silent 401: Submitting 12 iOS Apps to the App Store With No Human in the Loop (Part 1)

Two Hours Lost to a Silent 401: Submitting 12 iOS Apps to the App Store With No Human in the Loop (Part 1)

Comments
24 min read
iCloud Silently Evicted 69 Article Files and Killed 4 Days of Publishing: EDEADLK and a read_text_resilient Design

iCloud Silently Evicted 69 Article Files and Killed 4 Days of Publishing: EDEADLK and a read_text_resilient Design

Comments
22 min read
Your Claude Code Hooks Are Costing You Minutes a Day — Here's How I Measured It

Your Claude Code Hooks Are Costing You Minutes a Day — Here's How I Measured It

Comments 1
20 min read
A 4-Minute Freeze, a Dead PATH, and 3 More: 5 launchd Pitfalls From Mapping 26 Automation Jobs

A 4-Minute Freeze, a Dead PATH, and 3 More: 5 launchd Pitfalls From Mapping 26 Automation Jobs

Comments
21 min read
I Stopped Running tsc on Every Edit — Batching a Whole Claude Code Session Into One Run

I Stopped Running tsc on Every Edit — Batching a Whole Claude Code Session Into One Run

Comments 1
23 min read
3 Weeks of Silent Backup Failure: Why launchd Can't Write to ~/Documents on macOS

3 Weeks of Silent Backup Failure: Why launchd Can't Write to ~/Documents on macOS

Comments
23 min read
A Dead PID Held My Lock for 2 Hours: One Missing Line, Zero Output, exit 0 Every Time

A Dead PID Held My Lock for 2 Hours: One Missing Line, Zero Output, exit 0 Every Time

1
Comments
20 min read
5 Pitfalls in a Morning Repo Audit: launchd, bash 3.2, and Silent Failures on macOS

5 Pitfalls in a Morning Repo Audit: launchd, bash 3.2, and Silent Failures on macOS

Comments
20 min read
5 Content Lanes, One Watchdog: How I Stopped Wondering If My Automation Still Runs

5 Content Lanes, One Watchdog: How I Stopped Wondering If My Automation Still Runs

Comments
22 min read
A 46GB Compressed-Memory Leak RSS Monitoring Can't See — and the 10-Minute Guard That Reclaims It

A 46GB Compressed-Memory Leak RSS Monitoring Can't See — and the 10-Minute Guard That Reclaims It

Comments
21 min read
14 Pitfalls of Letting a Claude Code Environment Rot — and the 70-Line Weekly Audit That Catches Them

14 Pitfalls of Letting a Claude Code Environment Rot — and the 70-Line Weekly Audit That Catches Them

Comments 1
22 min read
Your Cron Job Exits 0 and Does Nothing: Reading Chrome's Cookie SQLite to Know If a Session Is Actually Alive

Your Cron Job Exits 0 and Does Nothing: Reading Chrome's Cookie SQLite to Know If a Session Is Actually Alive

Comments
23 min read
Four Failures That Made a Weekly launchd Job Actually Run

Four Failures That Made a Weekly launchd Job Actually Run

Comments
24 min read
Six Days of a Silent Crash Loop: One Command That Health-Checks 26 launchd Jobs

Six Days of a Silent Crash Loop: One Command That Health-Checks 26 launchd Jobs

Comments
21 min read
Dead Auto-Skills Were Padding Every Conversation: A Weekly Curator That Flags at 30 Days and Archives at 90

Dead Auto-Skills Were Padding Every Conversation: A Weekly Curator That Flags at 30 Days and Archives at 90

Comments
24 min read
Four Ways My Unattended Video Pipeline Died Overnight — and How I Made It Heal Itself

Four Ways My Unattended Video Pipeline Died Overnight — and How I Made It Heal Itself

Comments
25 min read
Zero GPU Cost and 4-Minute Daily Runs — Making Real Rain Fall on a Still Image with ffmpeg displace

Zero GPU Cost and 4-Minute Daily Runs — Making Real Rain Fall on a Still Image with ffmpeg displace

Comments
24 min read
Two Weeks of Silent Failure: Idempotent Scheduling and Self-Healing for a launchd + Claude Code Pipeline

Two Weeks of Silent Failure: Idempotent Scheduling and Self-Healing for a launchd + Claude Code Pipeline

Comments
28 min read
0 of 3 Articles Published for 3 Days Straight: The 41-Second Timeout Margin That Killed My Automation

0 of 3 Articles Published for 3 Days Straight: The 41-Second Timeout Margin That Killed My Automation

Comments
24 min read
Speeding Up a UserPromptSubmit Hook with a 60-Second Cache: Designing cost_guard.sh

Speeding Up a UserPromptSubmit Hook with a 60-Second Cache: Designing cost_guard.sh

Comments
4 min read
When Hook Scripts Die Silently — Three macOS Traps

When Hook Scripts Die Silently — Three macOS Traps

Comments
5 min read
Auto-Generating an Index of Your Claude Code Custom Agents from Their Frontmatter

Auto-Generating an Index of Your Claude Code Custom Agents from Their Frontmatter

Comments
5 min read
Nightly tail-truncation: how I stopped Claude Code's logs from quietly eating my disk

Nightly tail-truncation: how I stopped Claude Code's logs from quietly eating my disk

Comments
5 min read
My Claude Code Logs Ballooned to 22MB — Nightly Auto-Trimming with launchd

My Claude Code Logs Ballooned to 22MB — Nightly Auto-Trimming with launchd

Comments
6 min read
How Claude Code Detects Its Own Weekly Rot and Repairs Itself

How Claude Code Detects Its Own Weekly Rot and Repairs Itself

Comments
6 min read
Automating a Daily Morning Health Check for Your Claude Code Setup with launchd

Automating a Daily Morning Health Check for Your Claude Code Setup with launchd

Comments
8 min read
The Bigger Your CLAUDE.md Gets, the Slower Claude Code Runs — Measuring Context Injection Bytes Weekly to Catch Degradation Early

The Bigger Your CLAUDE.md Gets, the Slower Claude Code Runs — Measuring Context Injection Bytes Weekly to Catch Degradation Early

Comments 1
5 min read
When Claude Detects "Why Isn't This Fixed Yet?" and Repairs Its Own CLAUDE.md: A Self-Improvement Loop Driven by Frustration Signals in Transcripts

When Claude Detects "Why Isn't This Fixed Yet?" and Repairs Its Own CLAUDE.md: A Self-Improvement Loop Driven by Frustration Signals in Transcripts

1
Comments
7 min read
Parse transcript.jsonl Directly to See What's Actually Being Called

Parse transcript.jsonl Directly to See What's Actually Being Called

Comments
5 min read
loading...