annotate
Build and verify a PII gold set with HUMAN annotators (first-class). Launch the browser annotator, label spans per the codebook,…
Scan and clean macOS caches, package-manager data, crash dumps, and app caches to reclaim disk space. Deterministic — a config registry (targets.json) plus two scripts (survey.py read-only, clean.py executor) do all the measuring and deleting; the agent only relays a compressed
$ npx -y skills add glebis/claude-skills --skill disk-cleanup --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/disk-cleanupContext preview
The summary Claude sees to decide when to auto-load this skill.
Scan and clean macOS caches, package-manager data, crash dumps, and app caches to reclaim disk space. Deterministic — a config registry (targets.json) plus two scripts (survey.py read-only, clean.py executor) do all the measuring and deleting; the agent only relays a compressed
name: disk-cleanup description: Scan and clean macOS caches, package-manager data, crash dumps, and app caches to reclaim disk space. Deterministic — a config registry (targets.json) plus two scripts (survey.py read-only, clean.py executor) do all the measuring and deleting; the agent only relays a compressed summary and makes the few human-judgment calls. IMPORTANT — use this skill whenever the user's request on macOS involves: freeing disk space, cleaning/clearing caches, "disk is full", "clean up my Mac", "free up space", "what's eating my disk", "running low on disk", needing space for an install, or any low-storage complaint. Covers the whole workflow survey → choose → clean → empty Trash.
**Deterministic by design.** All target knowledge lives in `targets.json`; all measuring and deleting lives in `scripts/survey.py` (read-only) and `scripts/clean.py` (executor, **dry-run by default**). They run headless with **zero dependencies** (stdlib only) — a user can run them in a terminal without any agent. The agent's job is small: run the scripts, relay the compressed output, and decide the handful of things that need human judgment.
python3 scripts/survey.py # read-only: sizes, risk, flags, uncategorized. Touches nothing. python3 scripts/survey.py --json # same, machine-readable (preferred for the agent) python3 scripts/clean.py --preset safe # DRY-RUN plan (default — nothing deleted) python3 scripts/clean.py --preset safe --go # execute (safe risk only) python3 scripts/clean.py --preset full --allow-medium --go --empty-trash # safe+medium, then empty Trash python3 scripts/clean.py --ids cargo-registry-cache,go-mod-cache --go # specific targets python3 scripts/clean.py --preset safe --skip ollama-models --go # exclude one
`trash` is used for all file removal (never `rm`); freed space sits in Trash until emptied (`--empty-trash`, or the user empties it). Sizes are `du` estimates — approximate on APFS.
refused even if named by id. `advisory` targets only print guidance, never execute.
`allowed_roots` entry → must not be a symlink → never `$HOME` or `/`. Anything failing is skipped and reported, not deleted.
1. Run `python3 scripts/survey.py --json`. Relay the **compressed** summary: disk free, `safe`/`medium` recoverable totals, any `flags` (e.g. crash-loop), and the top targets. Do not dump the whole JSON. 2. **Auto-path:** for a plain "clean up safe stuff", show the `safe` total and run `clean.py --preset safe --go` (offer `--empty-trash`). Safe targets are regenerable. 3. **Escalate to the user ONLY for** (these are genuine judgment calls the scripts deliberately refuse to auto-decide):
ML-model targets (`ollama-models`, `huggingface-models`) carry a `last_used_days` field (newest file atime under the target, aggregate across all models in that store — not per-model) as a "how stale is this" signal; surface it before suggesting deletion.
Chrome whole-dir, Xcode Archives, `mo clean` deep-clean); never act on them automatically. For `mole-deep-clean`: suggest the user run `mo clean` themselves (interactive TUI, permanent deletes, sudo for system caches) — never invoke it from the agent. **Never shell out to `mo` at all** (not even `--dry-run`): it's TUI-only and blocks waiting for a real terminal even in dry-run mode — confirmed hanging under a piped subprocess, `stdin=DEVNULL`, and even a `script(1)`-allocated pty. A `mole` flag in survey.py's output only reads the mtime of mole's own leftover `~/.config/mole/clean-list.txt` (last-run recency), never invokes it.
4. Run `clean.py` with the resolved selection. Relay the result (`freed_human`, disk before→after).
Add or correct targets by editing `targets.json` — no code change needed. Each target: `{id, category, risk, method, paths|find, regenerates, priority, note}`. Methods:
whose name doesn't match `exclude_patterns`. The dry-run **lists every file by name** for review.
Keep installed software at `risk: never` (learned the hard way: `uv/tools`, `uv/python`, `~/.rustup/toolchains`, `~/.bun`, `~/.deno` are NOT caches). Every non-advisory target's paths must resolve under `allowed_roots` or preflight will (correctly) refuse them.
`config.json` ships **generic, public-safe defaults**. Anything personal — names, family names, a non-English tax/legal/financial vocabulary — or machine-specific goes in **`config.local.json`** (gitignored). `load_config()` deep-merges it over `config.json`: **lists are unioned** (local terms only *add* protection to the Downloads exclude list), scalars override. See `config.local.example.json`
~100 skills for Claude Code — meeting pipelines, research, image generation, TDD, publishing, personal analytics, and Claude Code ops. Each skill is a self-contained folder with a SKILL.md; Claude triggers them from natural language.
Build and verify a PII gold set with HUMAN annotators (first-class). Launch the browser annotator, label spans per the codebook,…
De-identify a session transcript (file or folder) by redacting PII LOCALLY before any sharing or cloud use. Produces a redacted…
Run a corpus-scale, STATS-ONLY PII audit over a folder of session transcripts LOCALLY and produce an aggregate report — counts by…
Residual re-identification RISK CHECK on text you have ALREADY redacted (defensive, dual-use). Use when the user asks to "check…
Put the real values back into an analysis that was produced from GREEN (placeholder) text — LOCALLY, using the user's own…