heinzel: Skill for Claude Code

.claude/skills/heinzel-macos-cleanup/SKILL.md

heinzel-macos-cleanup is a skill for Claude Code from wintermeyer/heinzel. It costs 112 tokens per session (1,127 once invoked), scanned C, original, MIT.

A macOS cleanup workflow for finding files left by removed apps or removing one installed app and the files it created. It can work on the Mac itself or over SSH.

In plain words
What is it for?
It helps inspect application support files, containers, preferences, caches, startup jobs, helpers, drivers, and installer records before reporting or removing them.
Why use it?
It reduces leftover files and services while requiring an explicit request and using a read-only scan before cleanup.

Skill for Claude Code

Written for Claude Code: argument-hint in frontmatter. Also seen: reads .claude/ paths; mentions CLAUDE.md.

This is wintermeyer/heinzel's own configuration. It tells Claude Code how to work on heinzel itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything heinzel configures →

Reuse

Borrowing it

Nothing to install: this file belongs to wintermeyer/heinzel. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/wintermeyer/heinzel/main/.claude/skills/heinzel-macos-cleanup/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/wintermeyer/heinzel

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for heinzel-macos-cleanup

README.md
[![agentmods](https://agentmods.dev/badge/skills/wintermeyer/heinzel/heinzel-macos-cleanup/github.svg)](https://agentmods.dev/skills/wintermeyer/heinzel/heinzel-macos-cleanup)
Your own site
<a href="https://agentmods.dev/skills/wintermeyer/heinzel/heinzel-macos-cleanup"><img src="https://agentmods.dev/badge/skills/wintermeyer/heinzel/heinzel-macos-cleanup/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for heinzel-macos-cleanup

Your own site · 80×15
<a href="https://agentmods.dev/skills/wintermeyer/heinzel/heinzel-macos-cleanup"><img src="https://agentmods.dev/badge/skills/wintermeyer/heinzel/heinzel-macos-cleanup.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 112 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,127 The whole file, excluding the scripts and references it only reads on demand.
Security scan C 1 finding. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00112 $0.01127
Opus 5.5 $0.00045 $0.00451
Sonnet 5.5 $0.00022 $0.00225
Haiku 4.5 $0.00011 $0.00113

Measured 26d ago against content hash db30bfb1e248, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade C, and why

heinzel-macos-cleanup scanned grade C with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 26d ago.

The scan reads SKILL.md. This mod also ships 2 executable files (scripts/scan.py, scripts/test_scan.py), listed below but not scanned — reading those needs a real analyzer, not pattern matching.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Recursive force deletehighDestructive command

rm -rf with a variable or a broad path is one typo away from removing the wrong tree.

`rm -rf`.
.claude/skills/heinzel-macos-cleanup/SKILL.md · 109 lines

How it starts

The opening of the file, as written. The whole thing — 109 lines — stays where its author put it; the contents beside it link to each section on GitHub.

heinzel-macos-cleanup

Two modes on a macOS machine, local or over SSH:

  • Orphans: leftovers of apps that are no longer installed.
  • Uninstall: one installed app with everything it created.

Never run automatically. Only on explicit user request. The heinzel first-connection pipeline still applies first.

Workflow

  1. Load overrides. Apply the heinzel override chain (later wins):

    • memory/custom-rules/heinzel-macos-cleanup.md if present.
    • memory/servers/<hostname>/memory.md.
    • memory/servers/<hostname>/rules.md if present. memory/custom-rules/all.md is already loaded by the session-start preflight.
  2. Check the scanner runtime. The scanner needs the Python of the Command Line Tools. Probe:

    xcode-select -p && /usr/bin/python3 --version
    

    If the probe fails, do not install anything. On a fresh Mac, /usr/bin/python3 opens an install dialog, and over SSH no one can answer it. Fall back to the manual probes in references/locations.md and say so in the report.

  3. Scan. The scanner only reads. It prints JSON.

    Local:

    /usr/bin/python3 \
      .claude/skills/heinzel-macos-cleanup/scripts/scan.py orphans
    

    Remote (script on stdin, SSH options from CLAUDE.md):

    ssh <options> user@host /usr/bin/python3 - orphans \
      < .claude/skills/heinzel-macos-cleanup/scripts/scan.py
    

    Log in as the user whose apps you clean up, never as root: the scanner reads its own user's Library and refuses root. Ask for the user if the server memory names none. /Library entries need sudo at removal (references/removal.md).

    For the uninstall mode, pass app "<name>" instead of orphans. A name, bundle id or .app path works. Over SSH, the remote shell splits the arguments again, so quote twice: app "'Microsoft Teams'". If the result lists candidates, ask which path is meant and rerun with that path.

  4. Read unreadable. Paths listed there need Full Disk Access for the terminal app (or for sshd-keygen-wrapper over SSH). Report them. Do not guess their contents.

  5. Verify every candidate. The scanner classifies by name and bundle id. Before proposing a removal, confirm it on the live system (rules/verify-before-reporting.md). The checks per class are in references/classification.md.

  6. Report in the format of references/report-format.md.

  7. Ask per group. Propose removal for orphan entries and for vendor entries that verification proved orphaned. Never propose apple or installed. Offer cache as a separate group. Offer custom and unclear entries only one by one, with the finding that makes each one safe.

  8. Remove only what the user approved, as described in references/removal.md. Always move to the Trash. Never rm -rf.

  9. Verify absence. Test each approved path again, or rerun the scanner. Report what is gone and what failed.

  10. Log. Journal and local changelog per rules/changelog.md:

Read the full file on GitHub · 109 lines

Files

What ships with it

6 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 26d ago First seen · 109 lines · 112 tokens per session scan C db30bfb1e248

Subscribe to this mod's changes

heinzel-macos-cleanup is a skill published in the GitHub repository wintermeyer/heinzel (101 stars, last pushed 6d ago), licensed MIT. It adds 112 tokens to every session and 1,127 once invoked, about $0.0004 per session on Opus 5.5. A static security scan graded it C with 1 finding (recursive force delete). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-02.

Related

Other skills, from other repositories

warpctrl

Control and inspect the currently running local Warp application with the warpctrl CLI. Use this skill whenever the user asks the agent to manipulate Warp's own windows, tabs, panes, sessions, input buffer, themes, or UI surfaces; open a file in Warp; inspect local Warp state; or explain how to invoke Warp Control…

warpdotdev/warp · 69 tokens

change-keybinding

Customize Warp keyboard shortcuts (keybindings, keymappings) by editing the user's keybindings.yaml file. Use when the user asks to remap a key combination, rebind an action, change a shortcut, or remove a default keybinding (e.g. "change ctrl+space to ctrl+s", "rebind the command palette to cmd+p", "remove the…

warpdotdev/warp · 82 tokens

create-tab-config

Create new Warp tab config TOML files from natural-language requests. Use when the user wants a new tab config, a new tab layout, or asks for a slash command to generate a tab config.

warpdotdev/warp · 44 tokens

google

Google Workspace integration — Gmail, Drive, Calendar, Contacts, Tasks, and Sheets via gogcli.

thewolffish/wolffish-app · 21 tokens

notion

Read, create, update, and manage Notion pages, databases, and blocks.

thewolffish/wolffish-app · 19 tokens

options

Show the user several alternative pieces of content side by side — code, commands, config, message drafts, any markdown — as one tabbed card they can read and copy. Use it whenever you'd otherwise dump two or more variants of the same thing into your reply.

thewolffish/wolffish-app · 55 tokens