Install
openclaw skills install @nelsonscott/storagesaverWatch and explain Mac disk usage. Use when the user asks about Mac storage/disk space ("what's eating my disk?", "disk full", "free up space"), wants a visual map of what's on the disk, or wants scheduled storage watching with alerts. Read-only by design: it recommends copy-paste commands, it never deletes anything itself.
openclaw skills install @nelsonscott/storagesaverStorageSaver is a read-only Mac disk scanner that produces an interactive HTML map (sunburst + tree) with plain-English explanations and safety badges (safe / review / never-touch), plus this watcher script for scheduled checks.
npx storagesaver # scan → storagesaver.html in cwd → opens in browser
npx storagesaver --quick # home-folder-only fast pass
For a scheduled setup, clone or install the package once so watcher.js
and the CLI are on disk:
npm install -g storagesaver
# watcher lives at <install>/skill/watcher.js
npx storagesaver scan --no-open --out /tmp/storagesaver.html
(45–90s for a full disk walk).The watcher gathers, classifies, and only speaks when it matters:
<70% silent,
70–84% heads-up, 85–94% getting tight, >=95% urgent.--force overrides.Plain cron example:
0 10 * * 1 NOTIFY_CMD='mail -s "Mac storage" you@example.com' node /path/to/skill/watcher.js
OpenClaw agent example — schedule it as a command cron so the agent delivers the result rather than re-planning the work:
openclaw cron add --name storage-watch --schedule "0 10 * * 1" \
--command "node /path/to/StorageSaver/skill/watcher.js" \
--deliver
NOTIFY_CMD is any shell command: the alert message is piped to stdin
and the freshly generated storagesaver.html path is passed as $1.
Attach that HTML to whatever channel you notify on (email attachment,
chat upload, etc.) — the one-line alert says what to do first; the map is
where the user digs. Without NOTIFY_CMD the message goes to stdout.
State, logs, and JSON reports live under ~/.config/storagesaver/.
Never tell the user an app is "unused" from file timestamps alone. Background utilities (window managers, launchers, clipboard managers) rarely rewrite their prefs while running 24/7. Before flagging any app:
pgrep -f "/Applications/<App>.app/Contents/MacOS"
osascript -e 'tell application "System Events" to get the name of every login item'
mdls -name kMDItemLastUsedDate -raw <App>.app beats prefs-plist
mtime when present (it records actual opens); fall back to
~/Library/Preferences/<bundleId>.plist mtime, the app's
~/Library/Containers/<bundleId> mtime, and Saved Application State.
Take the MOST RECENT signal — the generous estimate.git difftool, etc.) leave almost no signals — always phrase these as
"confirm before deleting", never as certain.The watcher already implements all of this; the playbook is for when you investigate manually or the user questions a finding.
Docker.raw is a grow-only sparse VM disk: docker system prune will NOT shrink it — purge via Docker Desktop.~/Library/CloudStorage is live cloud data: a local rm there is a
cloud delete. Reclaim Google Drive space by reconnecting in Stream
mode, never by deleting files.~/.config/storagesaver/rules.json
(see the project README).