← All kits

Downloadable kit

Workbench Capacity Kit

Kit files are in English.

Know where your disk and memory go while agents run in parallel, and free space without deleting anything a tool cannot rebuild.

Python 3.9+. Built for macOS, tested on macOS and Linux. For anyone running many agent projects on one machine.

  • See free disk from df, project sizes, worktree counts, and each agent's RAM and CPU across its whole process tree.
  • Clear only caches their tools rebuild: a dry run first, an open-file check, and hard rules for personal folders, Docker and model files.
  • Remove git worktrees idle for two weeks once they are clean and pushed, and get a warning when free space drops below your floor.

Local Python kit | ZIP, guide and reports in English | Offline demo

$29One-time payment

I'm a subscriber: check my access

Yearly: every kit included. Monthly: one new kit per billing cycle.

Delivered downloads are non-refundable. Return policy

Workbench Capacity Kit: An excerpt from the included kit files.View full-size sample ↗
An excerpt from the included kit files.
Access, downloads and refund policy

Yearly: every available kit and bundle, unlimited downloads.

Monthly: one new standalone kit per billing cycle, no bundles. Re-downloads are free and do not use a new claim.

Monthly subscriptions started before February 28, 2026 keep all-access, including bundles and unlimited downloads.

Monthly access currently allows three downloads per kit. Need another? Contact joozio@hey.com.

Download access while subscribed. Keep the files you download.

Digital downloads are non-refundable once delivered. We resend broken links, replace corrupt files and review products significantly different from their description case by case. Contact joozio@hey.com with your order details. Return policy

How it works

Every agent thread I run gets its own copy of my main repo, about 1.3 GB each, and for most of October my Mac Mini sat between 90 and 95 percent full. At 95 percent a cleanup script deleted a cache a running server still needed, and the server stayed broken for a week. I picked discipline over new hardware, and this kit is that discipline as scripts. A report shows free disk per volume from df, project sizes and git worktrees under the folders you list, and the RAM and CPU of each agent summed over its whole process tree. It also estimates how many more agent lanes your free disk and RAM allow after the floor and reserve you set, with the formula and inputs shown. A cleanup script clears only caches their tools rebuild, such as __pycache__ and .next/cache. It is a dry run until you add --apply, it skips anything a running process holds open, and it never touches Documents, Photos, Docker data or model files. It cannot run brew, pip or npm prunes. A worktree mode removes git worktrees in your project folders that sat idle for two weeks, and only when they are clean and pushed. A watch script warns you when free space drops under your floor. A worksheet helps you choose between staying local, an external SSD and a cloud machine. Standard library Python, no account, no network unless you add a webhook.

Built after my Mac Mini sat at 90 to 95 percent full for most of October 2026. 115 tests and the 33-check demo pass on Python 3.9, 3.11, 3.12, 3.13 and 3.14 on Linux, and on Python 3.9 and 3.14 on macOS on Apple silicon, as of October 30, 2026.

Latest update: 2026-10-30

v1.0.0 (2026-10-30). First release.

Best for

  • +Anyone running several agent threads at once on one Mac, each in its own checkout or worktree
  • +People whose disk sits above 90 percent most days and who want to know what is safe to delete before deleting it
  • +Anyone choosing between staying local, an external SSD and a cloud machine who wants to decide with their own numbers

Not for

  • -Running, stopping or scheduling agents: it measures them
  • -A one-click disk cleaner: it frees only what tools rebuild and leaves Docker, models, personal folders and package managers alone
  • -Windows, which is not supported

What you get

+capacity.py report: free disk per volume from df, flagged at 90 and 95 percent used. Finder's "available" adds purgeable space that is not free yet, so the report plans with df
+Sizes of every project folder under your roots and the linked git worktrees per repo, with du sizes labelled as an upper bound on APFS, where a cloned file counts once per copy
+RAM summed over each agent's whole process tree and CPU measured over a short sample, for the CLIs you name: seven by default, claude and codex among them, plus your own
+A lane estimate: how many more parallel agents fit, the smaller of the disk and RAM limits, printed with its formula, every input and where each input came from
+cleanup.py: eight in-root cache categories (__pycache__, .pytest_cache, .mypy_cache, .ruff_cache, .next/cache, node_modules/.cache, .parcel-cache, .turbo/cache) and four tool caches you enable by name (pip, npm, go-build, Xcode DerivedData)
+A dry run by default and --apply to act. Six checks before each deletion: inside your roots, not a protected area, not a symlink or a .. path, no model file inside, nothing changed in the last hour, nothing held open by a running process
+Never-touch rules in code, each with a test: personal folders, Mail, Messages, Photos libraries, iCloud Drive, Docker data, model files and the Ollama, Hugging Face and LM Studio stores
+A command allowlist: the kit can start df, du, ps, lsof, git, osascript, notify-send, logger, vm_stat and sysctl and nothing else, so a brew, pip, npm or docker prune is impossible
+The two-week rule: --worktrees removes linked worktrees inside your roots after 14 idle days, only when clean, pushed as of your last git fetch and not held open, with git worktree remove and never --force. Branches are kept
+watch.py: a one-shot check against a floor in GB or percent, with a macOS notification, notify-send or the system log on Linux, an optional webhook, and a state file so it fires once per crossing
+Every cleanup decision, dry runs included, appended to a JSON log, with the df change per step after --apply
+115 tests on synthetic temporary trees and an offline demo that builds a fake workbench, runs every script against it and checks 33 results

Package includes

  • •START-HERE.html: the demo, your first report, a safe cleanup, the two-week rule, the disk watch and the worksheet, in that order
  • •bin/capacity.py, bin/cleanup.py and bin/watch.py, each with --help and its exit codes, and bin/capacitylib.py with the allowlist and the never-touch rules
  • •guide/: four chapters (reading the report, what cleanup touches, the two-week rule, the routine) and the build-host worksheet for staying local, an external SSD or a cloud machine
  • •templates/: capacity.json, a launchd plist and a cron line for the watch
  • •examples/: demo.sh and make-sandbox.py, which builds the synthetic workbench the demo runs on
  • •tests/: 115 tests in five files
  • •README.md, SETUP.md, MANIFEST.txt, CHANGELOG.md, LICENSE.txt

FAQ

Can cleanup delete something a running server still needs?

It skips anything a running process holds open (lsof, or /proc on Linux) and anything that changed in the last hour, and if neither open-file check can run it deletes nothing. Neither check can see a process that will need a file later without holding it open now, which is how my server broke. That is why cleanup only clears caches the tool that made them rebuilds on its own.

Why not just run brew cleanup or docker system prune?

A prune decides for itself what is unused. The day I wrote the post, brew cleanup --prune=all removed Homebrew's own python3 in the middle of a build. The kit can only start df, du, ps, lsof, git, osascript, notify-send, logger, vm_stat and sysctl, so it cannot run a prune even by mistake.

Which worktrees will --worktrees remove?

Linked git worktrees inside your roots with no commit, checkout or staging for 14 days (change it with --days). One goes only when its tree is clean, its HEAD is on a remote-tracking branch as of your last git fetch, no process holds it open and git has not locked it. Removal is git worktree remove without --force, and the branch stays. Ignored files such as a local .env go with the folder, so copy out what you want first. A squash-merged branch reads as unpushed and is kept, which is the safe mistake.

Has it been run on a Mac?

Yes, in part. On macOS on Apple silicon, Python 3.9 and 3.14 ran all 115 tests and the demo, and a real capacity.py report read df, found the running agent process trees with their RAM and CPU, and printed the lane estimate. Not yet run on a Mac: cleanup --apply, worktree removal, the launchd plist and a real notification, and the README says so until they are. On Linux, Python 3.9, 3.11, 3.12, 3.13 and 3.14 ran all 115 tests and the demo.

Why does cleanup free less on df than the du total said?

du counts a cloned file and the blocks it shares once per copy on APFS, so its total is an upper bound. After --apply, each step prints the change in df free space, which is the real number.

Which processes count as agents?

A process whose program name, or script name under node, python3, bun, deno or ruby, matches your agents list. The default is claude, codex, aider, gemini, goose, opencode and cursor-agent, and you can add your own names with shell wildcards.

Does anything leave my machine?

No account, no telemetry. The only network request is the webhook POST from watch.py, and only when you set a webhook URL.

Back to kit overview ↑