TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
Make your Claude and Codex limits last the week.
ProductivitySwift · HTMLGitHub @HMDRAMS-DEVOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
A calm Claude and Codex usage tracker for the macOS menu bar. Paces your weekly limit so it lasts the week.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Pacer shows how much of each weekly limit you've used. Tell it when you want to use your limit by, for example "all of it by Friday", and how to spread it. Pacer then tells you when you're running hot and will run out early, or when you have room to lean in.Read the full README ↗Pacer shows how much of each weekly limit you've used. Tell it when you want to use your limit by, for example "all of it by Friday", and how to spread it. Pacer then tells you when you're running hot and will run out early, or when you have room to lean in.
| Weekly and 5-hour limits | Daily breakdown | |
|---|---|---|
| Codex | GET https://chatgpt.com/backend-api/wham/usage, the request behind /status in Codex. It uses the ChatGPT sign-in Codex stores in ~/.codex/auth.json. If that fails, Pacer falls back to rate_limits events in ~/.codex/sessions/**/*.jsonl. | Measured. Pacer combines rate_limits events from the logs with the live readings it saves while running. |
| Claude | GET https://api.anthropic.com/api/oauth/usage, the request behind /usage in Claude Code. It uses the sign-in Claude Code stores in your Keychain (Claude Code-credentials). | Estimated. The exact weekly total is spread across days in proportion to token counts in ~/.claude/projects/**/*.jsonl. |
Things to know:
/usr/bin/security and the Codex auth.json file, and never refreshes or rewrites either. If a sign-in expires, run claude or codex once to refresh it.For each tool, Pacer lays your plan over the current limit window. It takes the spending days between the window start and your finish day, weighted by the plan's shape and spread evenly across your working hours. That gives an expected-usage curve.
The math is in Pacer/Model/PaceMath.swift and covered by PacerTests/PaceMathTests.swift.
Requirements: macOS 15 or later, Xcode 16 or later, and XcodeGen.
xcodegen generate
xcodebuild -project Pacer.xcodeproj -scheme Pacer -destination 'platform=macOS' test
open Pacer.xcodeproj # then Run
Pacer isn't sandboxed, because it reads ~/.claude and ~/.codex and calls security. That means it can't ship on the Mac App Store.
To render the popover, setup, and main window to PNGs for design review:
TEST_RUNNER_PACER_SNAPSHOTS=1 xcodebuild -project Pacer.xcodeproj -scheme Pacer -destination 'platform=macOS' test -only-testing:PacerTests/SnapshotRender
The images land in $TMPDIR/PacerSnapshots.
To build the downloadable disk image, run scripts/make-dmg.sh. It builds Release and writes site/downloads/Pacer.dmg with a drag-to-Applications window. It signs with the HMDFV Inc. Developer ID; scripts/release.sh notarizes it.
The app icon is drawn in code. To change it, edit scripts/render-icon.swift and run swift scripts/render-icon.swift from the repo root. The README banner is scripts/readme-banner.html; run scripts/render-banner.sh to re-render it.
Both the app and the site use Sparkle. The app reads site/appcast.xml from the website once a day. An update found right after launch opens Sparkle's window; one found later waits as an "Update available" tile in the popover. Check for Updates… is in the popover's ⋯ menu and in Settings.
To ship a release, bump CFBundleShortVersionString and CFBundleVersion in project.yml, commit, then run:
scripts/release.sh "What changed, in a sentence or two."
It builds the disk image, notarizes it when a ramihmd-notary notarytool profile exists, signs it for Sparkle, creates the GitHub release, adds the release to site/appcast.xml, commits, pushes, and deploys the site. The Sparkle signing key lives in the login keychain; back it up with generate_keys -x (the tool is in Xcode's SourcePackages at artifacts/sparkle/Sparkle/bin).
MIT
The Claude and OpenAI marks in Pacer/Assets.xcassets come from Simple Icons (CC0). They're trademarks of Anthropic and OpenAI, used here only to label each tool. Pacer isn't affiliated with or endorsed by either company.