Skip to content

Instantly share code, notes, and snippets.

View julioarguello's full-sized avatar

Julio Argüello julioarguello

View GitHub Profile
@julioarguello
julioarguello / README.md
Created October 24, 2026 20:15
docker-space-guard: keep Docker Desktop's VM disk from filling up on macOS ("no space left on device" while the Mac has hundreds of GB free). LaunchAgent prunes old containers, unused images and build cache weekly or above 80 %; never touches volumes.

docker-space-guard: stop Docker Desktop's VM disk from filling up on macOS

TL;DR

  1. Docker Desktop has its own disk. Every image, container, volume and build cache lives inside one virtual disk (Docker.raw) with a fixed size limit. Your Mac can have hundreds of GB free while that disk is at 97 % and builds fail with no space left on device.
  2. On dev Macs it fills up fast. Agents and worktrees build images, spin up throwaway containers and leave build cache behind. Nobody cleans it.
  3. Two fixes, use both: raise the limit (Settings → Resources → Advanced → Disk usage limit) and install this LaunchAgent, which prunes rebuildable things weekly, or right away when the disk passes 80 %.
  4. Volumes are never touched. They hold your local databases. Prune them by hand when you know what's inside.

Real-world case behind this gist

@julioarguello
julioarguello / README.md
Last active October 21, 2026 15:33
cf-zombie-clean: reap ORPHANED Cloudflare MCP bridges (mcp-remote) and workerd on macOS. Born from Google Antigravity leaking MCP processes (PPID 1) and Cloudflare API 429s; kills only orphans, logs every PID, readable name in Login Items.

cf-zombie-clean: reap orphaned Cloudflare MCP bridges and workerd on macOS

TL;DR

  1. AI coding tools leak MCP processes. When a conversation or session ends, clients such as Google Antigravity (and others) often leave their MCP servers running. On macOS they are re-parented to launchd (PPID 1) and live forever. [1][2][3]
  2. With the Cloudflare MCP servers this hurts twice. Each leaked mcp-remote bridge keeps an authenticated session to Cloudflare. Pile up enough of them and the Cloudflare API answers HTTP 429 (rate limited). They also eat RAM.
  3. Reap orphans, not old processes. The safe signal is "my parent is gone" (PPID 1), not "I'm older than N hours". Killing by age also kills live sessions and live dev servers, and a dev server whose runtime you kill just respawns it, forever.
  4. Install once, check the log. A per-user LaunchAgent runs every 30 min. It shows up in Login Items as cf-zombie-clean.sh and logs every PID it kills.

Origin

@julioarguello
julioarguello / README.md
Last active October 21, 2026 07:57
fseventsd-alert: get a dialog with a Restart button when macOS fseventsd runs away (tens of GB of RAM, pinned CPU) on agent/worktree-heavy dev Macs. Not malware: evidence, references and a safe opt-in restart.

fseventsd-alert: get warned when macOS fseventsd runs away

TL;DR

  1. fseventsd is not malware. It is Apple's file-change daemon. Spotlight, Time Machine, Dropbox, IDEs, dev servers, Docker and AI agents all depend on it. Its memory budget is ~30 MB.
  2. On dev Macs it leaks. Lots of watcher churn (AI agent sessions, dozens of git worktrees, long-running wrangler dev/vite/esbuild watchers, test runners) makes it grow to tens of GB. It never gives that memory back, pins a CPU core and pushes the Mac into swap.
  3. Restarting it is safe and instant: sudo kill -TERM $(pgrep -x fseventsd). launchd respawns it at a few MB. There is no config knob, and the daemon can't be disabled.
  4. Prevent and watch: exclude your projects folder and every hidden folder in ~ from Spotlight, clean up stale worktrees, orphaned watchers and headless browsers, and install the alert below. It shows a Restart button for fseventsd and a Close them button for orphaned dev processes, and ne
@julioarguello
julioarguello / promotional-plans-zoom.svg
Last active May 3, 2024 07:08
es-ares-ecom-openapi-alcampo_public
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
_377921c1b414c313d0310f0e159870a3.adiberia.com. 1 IN CNAME 2d80b2c192970a715c9e6e6858e933ee.91a6ce27ae1824777bd984e3f687e557.Wb3DsP6B.comodoca.com.
_48b3de17868bc969af063831893cee3b.adiberia.com. 1 IN CNAME a3ce56287dc626d75ab8b625e94700a9.05f1017c3e99ec8f0b1d59c0c824abd5.sectigo.com.
_dmarc.adiberia.com. 1 IN TXT "v=DMARC1;p=none;"
_sip._tls.adiberia.com. 1 IN SRV 100 1 443 sipdir.online.lync.com.
_sipfederationtls._tcp.adiberia.com. 1 IN SRV 100 1 5061 sipfed.online.lync.com.
acdkim1._domainkey.adiberia.com. 1 IN CNAME dkim.acdkim1.acems1.com.
acdkim2._domainkey.adiberia.com. 1 IN CNAME dkim.acdkim2.acems1.com.
adiberia.com 3600 IN SOA mario.ns.cloudflare.com. dns.cloudflare.com. 2046210118 10000 2400 604800 3600
adiberia.com. 1 IN A 13.80.255.59
adiberia.com. 1 IN MX 10 adiberia-com.mail.protection.outlook.com.
@julioarguello
julioarguello / heapdump.groovy
Created January 5, 2024 14:57
[Heap dump using groovy] Take a heap dump from Groovy console #sapcommerce #performance
"tail /opt/hybris/data/hybristomcat.java.pid".execute().text
"jmap -dump:format=b,file=/NFS_DATA/transfer/incoming/export/20181014-heapdump.bin 91724".execute().text
"tar -zcvf /NFS_DATA/transfer/incoming/export/20181014-heapdump.bin.tgz /NFS_DATA/transfer/incoming/export/20181014-heapdump.bin.hprof".execute().text
"chmod 777 /NFS_DATA/transfer/incoming/export/20181014-heapdump.bin.addons".execute().text
"chmod 777 /NFS_DATA/transfer/incoming/export/20181014-heapdump.bin.tgz".execute().text
@julioarguello
julioarguello / 2repos-sync.sh
Created December 5, 2016 17:27 — forked from yorammi/2repos-sync.sh
Sync 2 remote repositories script - Just define the 3 variables (use export command for that!)
#!/bin/bash
# REPO_NAME=<repo>.git
# ORIGIN_URL=git@<host>:<project>/$REPO_NAME
# REPO1_URL=git@<host>:<project>/$REPO_NAME
rm -rf $REPO_NAME
git clone --bare $ORIGIN_URL
if [ "$?" != "0" ]; then
echo "ERROR: failed clone of $ORIGIN_URL"