AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
Menu-bar quota meter for AI coding tools on macOS. Claude Code and Codex from the real endpoints, plus five more — and it answers the only question worth asking: at this pace, do you reach the reset? English and 简体中文.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Every AI coding quota you have, in the 22 points beside your clock. But its real job is to find you at the moment it is your turn. English and 简体中文, following the Mac or set in the app. Or download the .dmg from pwestudio.site/aibar. They are the same file, signed and notarised by Apple — it opens with no security warning, no right-click "Open", nothing to allow in privacy settings. If your copy warns you, it is not one of ours. Requires macOS 13 or later on an Apple Silicon Mac. There is no Intel build.README 전문 보기 ↗
Every AI coding quota you have, in the 22 points beside your clock. But its real job is to find you at the moment it is your turn.
PWE · 天域出品
English · 简体中文
English and 简体中文, following the Mac or set in the app. The panels are real usage on the author's Mac (1.6.8, 2026-10-18); the menu bar strip uses sample figures, drawn by the app.
brew install --cask kenshinice-ai/tap/pwe-ai-bar
Or download the .dmg from pwestudio.site/aibar. They are the same
file, signed and notarised by Apple — it opens with no security warning, no right-click "Open",
nothing to allow in privacy settings. If your copy warns you, it is not one of ours.
Requires macOS 13 or later on an Apple Silicon Mac. There is no Intel build.
English and 简体中文, switchable in settings. The default follows the system — but following the system is not enough on its own: plenty of Chinese speakers run macOS in English on purpose and would never see the Chinese build, so both are offered explicitly.
If you are already signed in to Claude Code, the app reuses that login — no re-entering an account, and no keychain authorisation dialog either. Why not, below.
/api/oauth/usage,
with model-scoped limits listed separately, and the prepaid balance when there is oneThe top of the panel is a countdown bar. The largest number below it answers exactly one question: at this pace, do you reach the reset?
Every reading these services return is a whole number, and long plateaus are normal. The error is not Gaussian noise to be smoothed away — it is quantisation. So there is no regression here, no EWMA and no Kalman filter: all three would be averaging an ε that does not exist. Two bounds instead, over a span of S hours:
rate.low = max(0, Δp − 1) / S
rate.high = (Δp + 1) / S
One expression, three properties worth having. A plateau yields only an upper bound, which gives a lower bound on endurance — so it can say "at least this long" and mean it. A single-step jump has a lower bound of zero, so one step can never announce that you are going to run out. And a burst decays on its own as S grows. The width of the interval is where the uncertainty goes; there is no confidence knob because there does not need to be one. Seven verdicts, each with its own tone.
Full specification: docs/FORECAST_ENGINE_SPEC_2026-09-06.md
The dashboard is the part a dozen other tools already do. This is the part actually worth installing something for:
Session events need hooks: Settings → 会话事件 / Session events → Install. Three hooks are
merged into your existing ~/.claude/settings.json rather than written over it, after validating
it and keeping a byte-for-byte backup; installation stops on a config that is corrupt, unreadable
or a symlink, and installing twice does not add them twice.
| Hook | What it is for |
|---|---|
Notification | Claude has stopped and is waiting → the menu bar steps aside, a notification arrives |
UserPromptSubmit | You replied → the waiting state clears immediately, rather than at the end of the turn |
Stop | Task finished → alert only if you have walked away |
UserPromptSubmit records no text at all — its payload is the thing you just typed, and this event
only needs to end the waiting state.
macOS checks keychain access per record, per program. Claude Code creates its login record with
/usr/bin/security, so the record admits that tool — and this app reads the record through the same
tool, with the same command Claude Code uses. So the read is silent: no dialog, no "Always
Allow", and nothing to grant again after an update or after Claude Code signs in again. The cost is
one subprocess of about 20 ms, run only when the record has changed or five minutes have passed.
It only reads. The app never renews the login and never writes to that record. Up to 1.4.0 it did both, and it cost a real login: on 8 September 2026 three renewals on one machine could not be written back, and that machine's CLI had to sign in again. What reading only costs is under "Before you install".
The token goes to api.anthropic.com and nowhere else. No telemetry, no crash reporting, and no
account of any kind.
The diagnostics print no tokens, account identifiers or server bodies:
| Command | What it does |
|---|---|
--cred | Configuration only |
--credentials | Queries the quota, read-only, and prints when Claude Code last wrote its login and when it expires |
--credprobe | Reads Claude Code's login once through the security tool and prints how long that took |
--popover | Opens the real panel and prints its geometry |
| How it is read | Authorisation? | |
|---|---|---|
| Claude Code | api.anthropic.com/api/oauth/usage, credential read back exactly the way the CLI writes it | none |
| Codex | account/rateLimits/read on codex app-server; falls back to the rollout log | none |
| Cursor | the editor's own state.vscdb, then Connect RPC to api2.cursor.sh | none |
| GitHub Copilot | plugin config → gh's hosts.yml → gh's keychain item, then copilot_internal/user | none |
| Devin | ~/.local/share/devin/credentials.toml, then server.codeium.com | none |
| Grok | ~/.grok/auth.json, then cli-chat-proxy.grok.com | none |
| Antigravity | Google's OAuth document in the keychain, then Cloud Code | none |
| Gemini | Not readable. The desktop app keeps only a settings database with no quota field; the CLI's gemini_cli.token.usage is a token count, not a quota | — |
We did not choose eight different methods for eight tools — each of them decided what it writes to disk, and this is what is there.
Three rules hold for every provider:
Only Claude Code and Codex are on by default. The other five are listed in settings, showing whether they were detected, and you switch them on yourself — switching one on means sending a credential found on your Mac to a vendor you did not ask us to contact. Every other permission this app has is given rather than taken, and an outbound request carrying a token should not be the exception.
Better said here than discovered later.
pricing.json
and are picked by the plan tier in your credential; settings can override them, in USD or
AUD. When the tier cannot be determined the page shows the equivalent cost and no return
multiple — a ratio built on a price nobody confirmed reads exactly as confidently as a correct
one.No third-party dependencies.
swift test # 185 tests
./scripts/build-app.sh # assembles and signs into build/PWE AI Bar.app
open "build/PWE AI Bar.app"
A local build is ad-hoc or Apple Development signed and runs only on the machine that made it; Developer ID signing and notarisation happen on the release machine.
The string tables are a build gate, not a reminder: Tools/loccheck runs before anything is
compiled and fails on a key used in the sources but missing from zh-Hans.lproj, on a translation
nothing uses any more, and on one key given two different English texts. English lives at each call
site and en.lproj is generated from it, so drift is possible in one direction only.
Before changing anything, read docs/HANDOFF.md — it covers the mechanisms that are not obvious from the code (why no keychain dialog appears, why the Claude Code login is only read and never renewed, why the rate is an interval, and how the localisation fails silently if you move one directory), and for each of them, what the previous version got wrong. The full design document is docs/design.html.
The source is MIT — this app reads your credentials, so you should be able to see what it does with them and build a copy yourself to check.
The brand is not included: the names, the wing mark and its vector data, the application icon
and the slogan. Fork it, change it, redistribute it — but a redistributed build must not carry the
wing or use the PWE or Paradise Production names in a way that suggests it is the official release.
Replace Sources/PWEAIBar/Brand/ and the application name with your own.
PWE AI Bar is free and will stay that way: nothing is locked, and the app never asks. If it has earned a place in your menu bar, pwestudio.site/support says how to give something back — one page for every free PWE tool.
The fourth in PWE Studio's menu-bar family, after Loan Bar, Lumen Bar and Monitor — all at pwestudio.site.
PWE · 天域出品