Skip to content

Releases: gshost1/Keysreallysafe

Keysrs 0.7.0

Choose a tag to compare

@gshost1 gshost1 released this 23 Sep 20:18

Notarized build for Apple silicon Macs (macOS 14+). Download Keysrs-arm64.dmg.

  • A license now works on up to two Macs. Entering a key activates that Mac at keysrs.com; the app checks in every 30 days and keeps working for 14 days offline. Each check-in sends only the key, a random install ID and the Mac model.
  • Free a Mac's place with keys license remove, by removing the key in the dashboard, or from the license page linked in your purchase email.
  • Refunded, disputed or publicly shared keys are revoked and stop at the next check-in.

Existing licenses activate automatically on the first launch after upgrading. Keys, license and settings carry over (same signing requirement).

SHA-256: 7c554879747da3679260e7d42761b5e91cb3f297893e0ecfe1c723f5e4891e0c

Keysrs 0.6.1

Choose a tag to compare

@gshost1 gshost1 released this 23 Sep 19:26

Notarized build for Apple silicon Macs (macOS 14+). Download Keysrs-arm64.dmg.

  • First launch asks, politely. A welcome window with every box unticked; Continue with nothing ticked is a full answer.
  • Background Claude limit refresh is now opt-in. Turn it on in the welcome window or with Keep Claude Limits Fresh in the menu. Refresh still checks once when you ask.
  • License fixes: the trial gate covers the dashboard's refresh too; checkout emails retry on Stripe errors and cover delayed payments.
  • About shows the real version.

Upgrading keeps every key, the license and settings (same signing requirement).

SHA-256: 4b2624f7aece226624eabb7faa5a28ea7e4fd61a39b79b52e666e06feca1b037

0.6.0 — trial and license

Choose a tag to compare

@gshost1 gshost1 released this 23 Sep 07:59

Keysrs for Apple Silicon Macs, macOS 14 or newer. Developer ID signed, notarized by Apple and stapled: open the DMG, copy the folder out, run ./bin/keys autostart.

14-day free trial, then a license. Everything works for 14 days from first launch. After that the usage meter stops ingesting and new gateway grants are refused until a license is entered; your keys stay fully available (list, copy, reveal, env, rotate, purge, remove). Buy at https://keysrs.com — $29 once, covers 1.x — and paste the key into the dashboard banner or run keys license set <key>. Keys are verified offline; the app never contacts a license server.

Changes since 0.5.0:

  • The product is called Keysrs everywhere a user reads it. Nothing an existing install depends on changed, so upgrading keeps every key and setting.
  • Trial and license as above; keys license shows the state.
  • Two compiler warnings cleared; no behaviour change.

SHA-256 of Keysrs-arm64.dmg: 77ecd7b6b78d155d6c547543bca0942b97095760fe30c20cdfb339d65208402e

Privacy: everything binds to 127.0.0.1; product analytics is off and has no upload destination in this build.

0.5.0 — Keysrs, notarized

Choose a tag to compare

@gshost1 gshost1 released this 23 Sep 07:31

Keysrs (formerly Keysreallysafe) for Apple Silicon Macs, macOS 14 or newer. Developer ID signed, notarized by Apple and stapled: open the DMG, copy the folder out, run ./bin/keys autostart.

Free 14-day trial. This build has no license check yet, so it runs in full; buying at https://keysrs.com supports the project and is honoured when license keys ship. 14-day refund, no questions.

Changes since 0.4.0:

  • Menu bar item recovery after wake, display wake, session activation and screen changes; verified on a real display wake.
  • Key row actions stay inside the window at every width; long key names, gateway URLs and provider messages wrap.
  • Usage figures lead with tokens; dollars appear only when USD is chosen and unknown never reads as $0.
  • First run with an empty vault shows a getting-started guide, kept under ?.
  • New first-party work is proprietary; earlier MIT material and third-party licenses are preserved in the package (LICENSE, THIRD_PARTY_NOTICES.md, licenses/).
  • Optimizer and Jev context compaction are labelled optional and experimental; no savings claim.

SHA-256 of Keysreallysafe-arm64.dmg: 52556084371fef6b926424bc26ffe68a7d4702c210ed0a9d53a232bab09e2f1d

Privacy: everything binds to 127.0.0.1; product analytics is off and has no upload destination in this build.

0.4.0 — Claude Fable usage

Choose a tag to compare

@gshost1 gshost1 released this 09 Sep 20:07

Claude's menu-bar percentage now shows Fable quota used, while the website and Claude dropdown tab show all three limits: five-hour, Fable, and weekly.

  • Compact menu-bar title such as C 72%; missing Fable data shows C — with no weekly fallback.
  • Dropdown bars show usage consumed instead of usage remaining.
  • Automatic refresh every five minutes through Claude Code's built-in /usage, using its existing login and making no model request.
  • Account-matched cache reads reject stale, future, invalid, and expired readings.
  • Fable is included in keys status; keys doctor identifies the usage cache separately from the HUD export.

Upgrade

Run swift build, then .build/debug/keys autostart to update the installed app. Automatic refresh requires a signed-in Claude Code version supporting non-interactive /usage (verified with 2.1.266).

Validation

Reviewed for code quality and requested behavior. The full Swift suite completed with 200 tests, one skipped, and zero failures. Live website readings and an automatic cache refresh were verified on macOS.

0.3.1

Choose a tag to compare

@gshost1 gshost1 released this 07 Sep 01:07
  • Dashboard: the Grant dialog has a kind switch, task grant (minutes, in
    memory) or long-lived client (days, hash in the catalog), so keys client
    has a UI. Active clients are listed with the grants, each with Revoke.
  • Keys table: action buttons wrap into rows on narrower windows instead of
    stacking one per line.
  • Check: a redirect is its own outcome, naming the host it points to; the key
    is never sent there. Ramp Router's API host is api.router.com;
    Experiential Labs added to the catalog.

0.3.0

Choose a tag to compare

@gshost1 gshost1 released this 07 Sep 01:07

Agent key access, from notes/2026-09-06-agent-key-access.md. Verified live
on 2026-09-06: grant from a Terminal and from a Codex sandbox (the prompt
comes from the menubar site), cancel gives exit 3, screen lock revokes, and
keys test lists 68 Ramp Router models.

  • Grants: keys grant, keys grants, keys revoke and a Grant action in the
    dashboard. One Touch ID per task; the token is used as the API key; bound to
    key, host, methods, path prefixes, expiry, optional request and USD caps.
    Revoked on screen lock, gateway off, key edit or delete, and site restart.
  • The gateway now requires a grant token. A request without one gets
    401 grant_required; out-of-scope requests get a named 403 or 429. The
    old open-once-enabled behaviour is gone.
  • Checks: keys test, keys models [--cached] [--grep] and a Check action
    with a filter box. Read-only, provider-specific, never a generation call;
    result stored per key and reused without a second unlock.
  • Errors: presence failures split into cancelled, failed and unavailable
    (with the reason); provider 401 and 403 reported differently; provider
    message and request id kept, key scrubbed from every message.
  • Keys list and keys env show the provider and the host a key is bound to.
  • README now says what the per-launch token is (browser cross-site defence),
    not local-process authentication.
  • Menubar dropdown: a tab strip (Overview, then one tab per subscription)
    over bars with "% left" and reset times; the tab is remembered. Rows below:
    Plan Usage, Status Page submenu, Refresh (was Ingest), About.
  • providers.json: Ramp Router API host is api.router.com; a check that
    gets a web page back says so.

All notable changes to Keysreallysafe. Each entry is a GitHub release.

0.2.0

Choose a tag to compare

@gshost1 gshost1 released this 06 Sep 06:14

Source review of 2026-09-05, all seven findings addressed, plus an eight-item review pass on the fixes. Upgrade note: the first open after this release clears the old ingest cursors and replays every log once in the background; on a large ~/.claude/projects that is a few minutes of catch-up, not a hang. Verified on a real install: keys autostart upgraded in place and kept the previous version, keys client issue prompted once and the gateway returned 401 without the token.

Security

  • Ingest cursors no longer hold raw log bytes. ingest_files.tail_sig stored the last 32 bytes of each log as hex, which could carry a fragment of a user message; it is now a versioned SHA-256 digest. On first open the catalog clears legacy signatures, checkpoints the WAL and vacuums, and secure_delete is on. Scope: the catalog file only; copies made outside the app are out of reach.
  • Gateway requests need a per-client capability. keys client issue|list|revoke (and /api/keys/<name>/clients) mint revocable, expiring tokens bound to one key, with method and upstream path-prefix scope. Issuing asks for presence; only the token's hash is stored. Auth runs before key lookup. The dashboard's per-launch token is never accepted.
  • README now describes the dashboard token as a browser CSRF defense, not local-process authentication, and describes the Keychain presence prompt as app-level rather than an OS-enforced per-item ACL.

Fixed

  • Combined spend double-counted a call seen by both a local log and the gateway. The headline estimate is local logs only; gateway dollars, tokens and calls are reported beside it. The gateway records the upstream request-id, and a gateway row whose id matches a local event is dropped as the same call.
  • A gateway call with no model or price was shown as $0. Per-key month figures now distinguish none, estimate, partial and unknown, with unpriced call and token counts; the spend report carries the same for the gateway ledger.
  • Ingest read whole files into memory, held every pending row until the end, and ran on the menu bar run loop under the gateway's lock. Reads are bounded chunks, importers commit every 2,000 lines with a cursor valid at that offset, the timer enqueues onto a background queue, and gateway state has its own lock.
  • keys autostart could leave the install missing or stopped. A new version is staged, signed and verified first; the previous version is kept one back and restored, with its agent restarted, if activation fails.
  • An oversized gateway body is drained before the socket closes so the client sees the 413.
  • Post-review pass: rollback also covers a failure while moving the live parts; request paths with ./.. segments (raw or percent-encoded) are out of scope for every client and a trailing slash on --path-prefix is trimmed; a made-up key name no longer writes an audit row and last_used_at is stamped only when a call is forwarded; a proxy that repeats request-id values no longer collapses two gateway calls into one row; chart rows, daily and hourly buckets follow the headline (local ledger unkeyed, gateway ledger keyed); the legacy-signature purge is gated on a marker and a busy vacuum is retried on the next open instead of failing startup; the menu bar Ingest action and the dashboard's stale check never block behind a running pass.

Changed

  • usd_month in /api/keys is null (not 0) when calls exist but none could be priced; usd_month_kind and gateway_month_* counts accompany it. Spend totals gain gateway_tokens, gateway_calls, gateway_unpriced_*, gateway_correlated_calls and usd_estimate_scope.
  • Test suites named after the behaviour they protect (KeyLifecycleAndDedupTests, GatewayHardeningAndCursorTests); new suites for tail-digest privacy, gateway accounting, gateway clients, bounded ingest and installer rollback.

Not done

  • Browser integration tests for the dashboard (reveal expiry, copy feedback, CRUD, filtering, failed requests) and packaged releases. CI still runs Swift unit tests only.

0.1.0

Choose a tag to compare

@gshost1 gshost1 released this 05 Sep 01:43

First public release.

Added

  • Local spend meter: reads Claude Code, Grok and Codex usage logs incrementally, prices from a checked-in list-price table (Fixtures/models.json) with hand overrides.
  • Site on 127.0.0.1 with three panes: Usage (plan windows as plan · % used · resets in), Chart (today by hour, week and month by day, tokens or USD, model and project breakdown), Keys.
  • Key vault in the macOS Keychain: add, copy with clipboard wipe, reveal, env injection, edit, rotate, delete, per-key audit log. Touch ID on every read.
  • Local gateway on 127.0.0.1:12767 that injects a vault key into SDK traffic, records usage, and never stores message text.
  • Menu bar item with the weekly window of each tool; 5-hour windows, reset times and Grok dollars in the dropdown. Refreshes every minute and on open.
  • keys doctor, keys purge, keys autostart --remove, OpenRouter credit poll, CSV and Markdown export.
  • Grouped provider catalog (Web/providers.json, 53 providers).

Security

  • Origin token on every mutating request, Host and Sec-Fetch-Site checks on both servers, redirect refusal on all outbound calls, content-length and body-size validation, no auth files ever read.

Fixed