New in 0.13Saved grant limits, one-touch renewal, paired relay agents and an agent skill

Dummy keys for your VMs. Real ones stay on your Mac.

Paste a key into Keysrs once. Your scripts, agents and cloud VMs get dummy keys that only work through your Mac: on loopback, or through a small Worker in your own Cloudflare account. The real key stays in the Keychain behind Touch ID. And the menu bar shows your Claude Code, Codex and Grok limits before they bite.

Free and MIT licensed. No account, no license key. macOS 14+ on Apple Silicon.

Signed & notarized by Apple Runs only on 127.0.0.1 Source on GitHub Free, MIT licensed

Cloud VMs and agents

Your VMs get a dummy key.
The real one never leaves.

A VM, a GitHub Actions job or a cloud coding session can't reach your Mac's loopback. Deploy the small relay Worker into your own Cloudflare account and it can. keys wrap rewrites a project's .env so every provider key becomes a dummy token and a URL at your Worker.

  1. Wrap the env file.One Touch ID. The real keys go into the Keychain; the file gets dummy tokens and your Worker's URL, and the original is backed up beside it.
  2. Ship the file.Copy it to the VM, the Actions secret, the cloud session. Nothing in it works without your Mac.
  3. Calls come home.Each call reaches your Worker, rides one WebSocket your Mac opened, gets the real key swapped in on loopback and goes to the provider. It lands in your usage chart like any other.
zsh — ~/evals
$ keys wrap .env --relay https://keysrs-relay.you.workers.dev
1 value in .env looks like a provider key: OPENAI_API_KEY
Touch ID in Keysrs to compare them with the vault…
plan for .env:
  wrap  OPENAI_API_KEY -> evals-openai  (new vault key, OpenAI at api.openai.com)
  set   OPENAI_BASE_URL=https://keysrs-relay.you.workers.dev/evals-openai
each wrapped key gets a client token (POST and GET, 30 days) and the gateway turned on
Apply this plan? [y/N] y
wrapped 1 variable in .env:
  OPENAI_API_KEY -> evals-openai (added to the vault) client #4
  OPENAI_BASE_URL -> relay
Keysrs

Keysrs is trying to match 1 value in .env against the vault and wrap them.

Touch ID or enter your password to allow this.

Use Password…Cancel

If a dummy key leaks.

It can call that one provider, through your Mac, until you revoke it or it expires. The real key is unchanged, so there is nothing to rotate.

  • One key, one hostA token is bound to one vault key and its provider.
  • Expires on its own30 days by default, a year at most. keys client revoke ends it now.
  • Only while your Mac is onNo Mac, no gateway, no calls.
  • Every call countedEach one is a row in your usage. Request bodies never are.

The Worker is a pipe.

You deploy it from the repo into your own account and can read every line. The free Workers plan is enough, and Keysrs hosts nothing.

  • Never sees a keyThe swap happens on your Mac. The Worker carries requests and answers.
  • Holds one secretThe relay secret only lets your Mac connect. It is never a stand-in for a token.
  • Your Mac has to be onOff or asleep, nothing is served: a call waits up to a minute for the Mac, then gets a retryable 503.
  • Cloudflare only, for nowOne Worker with a SQLite-backed Durable Object. The protocol is in the repo; other routes are welcome.

Key vault

Tell Claude the key's name.
Touch ID does the rest.

No copying, no pasting, no .env files. Your agent asks Keysrs by name, you touch the sensor, and it gets a short grant for that one task. It never sees the key. The Keysrs agent skill, inside the app, teaches it how.

  1. Say the name.“Run the evals with codex-astra from Keysrs.” That's the whole instruction.
  2. Touch ID.macOS shows which key, which task and for how long. One touch.
  3. That's it.Claude gets a 30-minute grant scoped to one key and one host. Lock your Mac and it ends.
claude — ~/evals
> run the eval suite with codex-astra from Keysrs

⏺ I'll ask Keysrs for a grant on codex-astra.
⏺ Bash(keys grant codex-astra --task "run evals")
  ⎿  Touch ID in the Keysrs site…
     grant 3f9c2a71  codex-astra -> OpenAI (api.openai.com)
       expires  2026-09-24T06:43:00Z  (30 min)
⏺ Granted for 30 min. I never see the key.
⏺ Running 48 evals through the grant… 
Keysrs

Keysrs is trying to grant "run evals" the key codex-astra for OpenAI at api.openai.com, 30 min.

Touch ID or enter your password to allow this.

Use Password…Cancel

Keys in the Keychain. Only names on screen.

Paste a key once. Every copy, reveal or grant asks for Touch ID, and clipboard copies wipe after 20 seconds.

NameValueLast used
codex-astra••••••••In use by Claude
anthropic-prod••••••••Yesterday
openrouter••••••••3 days ago

A grant is one task, not your key.

Every grant is short-lived and fenced in. When it ends, the agent's access ends with it.

  • One key, one hostChange either and the grant is void.
  • Expires on its ownYou pick how long. One touch renews it with the same token.
  • Lock screen revokesSo do rotating the key, revoking the grant and a restart.
  • Counted in your usageEvery call lands in the chart. Request bodies never do.

Usage meter

Every plan limit,
before it bites.

Reads the files Claude Code, Codex and Grok already write. No logins, no scraping, no provider websites.

Every plan window at a glance.

Five-hour, weekly and model windows as “% used · resets in”, straight from the files each tool keeps on your Mac.

Claude
5-hour94% · 22m left
Weekly71% · resets Sun
Codex
5-hour48% · 3h 02m left
Weekly67% · resets Thu
Grok
Weekly58% · resets Mon

Tokens measured. Dollars on request.

USD comes from a published list-price table, only when you ask.

TokensUSD
1.84Mtoday
ClaudeCodexGrok

Not tracked. Never guessed.

A plan Keysrs can't read from your Mac shows as not tracked, with a link to that provider's own dashboard. No estimates dressed up as measurements.

Claude Code, Codex, Grokmeasured from local files
Anything elsenot tracked · open dashboard

This week, by day and model.

Today by hour, the week or month by day. Filter by tool or model and export CSV with the raw columns.

Privacy

Built so there's nothing to trust us with.

Not a policy promise. It's how the app is wired, and the source is public so you can check.

Your Mac
Usage files~/.claude, ~/.codex, ~/.grok
macOS KeychainKey values, behind Touch ID
Local catalogToken counts, never prompts
KeysrsDashboard and gateway on 127.0.0.1 only
analytics.keysrs.com Share to compare, only if you turn it on

One report a day of usage totals per tool and public model. Off by default. Leave it off and the app never calls us.

Your Worker The relay, only if you turn it on

One WebSocket from your Mac to a Worker in your own Cloudflare account, carrying your VMs' requests and the answers. Never a key. Off at every launch until you turn it on.

Never touches: provider websitesbrowser cookiesother tools' auth filesyour prompts

Your data stays on your Mac

  • Dashboard and API bind to 127.0.0.1 only.
  • The relay is the one optional connection out: your Mac dials a Worker you deployed, and keys never go over it.
  • No account, no sign-up, no license check.
  • Optional “share to compare” is off by default. Turned on, it sends daily usage totals per tool and public model, never prompts, keys, key or project names, paths or device IDs.

No scraping, no borrowed logins

  • Never opens provider websites, cookies or browser sessions.
  • Never reads other tools' auth files.
  • Claude limits come from Claude Code's own /usage, with no model request.

Secrets stay secret

  • Key values never touch the database, a log, the page or the key-list API.
  • Gateway request bodies never reach the usage catalog.
  • Every read of a secret asks for you. Every time.

Every detail, including the exact analytics schema, is in the source and the privacy page.

Download

Free. Yours for good.

MIT licensed: use it, read it, change it, share it. No trial, no account, no license key.

Keysrs for Mac

Free

Open source · every update included

macOS 14+ on Apple Silicon. Signed and notarized by Apple. Open the disk image and drag Keysrs to Applications.

  • Usage meter for Claude Code, Codex and Grok
  • Key vault in the Keychain, behind Touch ID
  • Scoped gateway grants for scripts and agents
  • Relay Worker for VMs and cloud agents, in your own Cloudflare account
  • Chart and CSV export of what your Mac measured
  • MIT licensed, source on GitHub

Not an AI subscription and no API credits: you use your own provider accounts.

Questions

Which tools does it read?

Claude Code, OpenAI Codex CLI and Grok CLI, from the session logs and usage caches they already keep in your home folder. Anything else shows as not tracked with a link to that provider's dashboard.

Does it need my provider passwords?

No. It reads files your tools already wrote and never touches their login or auth files. For the vault you paste an API key once; it comes out only after Touch ID.

How does a VM get a dummy key?

Run keys wrap on the project's env file with your Worker's URL. After one Touch ID, every provider key in it is in the Keychain and the file holds a dummy token plus a base URL at your Worker. Copy that file to the VM. Each call goes Worker, your Mac, provider, with the real key added on your Mac. The gateway forgets its keys when Keysrs quits; keys gateway on brings one back after a relaunch.

What if my Mac is off?

Nothing is served. A call that arrives while the Mac is away waits in the Worker for up to a minute, then gets a 503 marked retryable. Sleep doesn't turn the relay off: it redials when the Mac is awake again, and the waiting calls follow. Keep Mac Awake for Relay Calls, off by default, holds off idle sleep while a call is open.

Does the Worker see my keys?

No. It is a pipe you deploy from the repo into your own Cloudflare account; Keysrs hosts none. It holds one relay secret that lets your Mac connect, carries requests and answers, and never has a provider key. If a dummy key leaks, it works for that one provider through your Mac until you revoke it or it expires, 30 days by default, and the real key is untouched.

Why Cloudflare only?

It's the one host the relay knows today: a Worker with a SQLite-backed Durable Object, which the free plan includes. The protocol is documented in the repo, and other routes are welcome.

Can I choose which remote agents use the relay?

Yes. keys relay pair issue gives one agent its own pairing credential, sent as an x-ksf-pair header. Turn on keys relay pair require on and your Mac refuses every relayed call without a live pairing, before the request reaches the gateway. Pairing is an extra gate: the call still needs its token. Turning it off again takes Touch ID.

Do I have to approve every grant from scratch?

No. Save the limits you keep typing as a profile (keys profile add) and ask for a grant under it; the Touch ID prompt still spells out exactly what you approve. A grant that ran out can be renewed in place, for up to a day after it ended: one touch, same scope, same token, so a running agent keeps going.

How does my agent learn to use Keysrs?

Give it the Keysrs agent skill. It ships inside the app, at Keysrs.app/Contents/Resources/Skills/keysrs, and in the repo. Copy that folder into your agent's skills folder, such as ~/.claude/skills for Claude Code; the agent guide lists Droid, Codex and Grok too. It teaches the agent to ask for a grant by the key's name and read the JSON answers, and to leave deleting keys, long-lived tokens and the relay to you. Keysrs never writes into an agent's folders itself.

Is the dollar figure real?

Tokens are real: they're what your Mac measured. Dollars are an estimate from a published list-price table, hidden until you choose USD. Anything unpriced reads as unknown, not $0.

Is it really free?

Yes. Keysrs is MIT-licensed open source with no trial, license key or paid tier.

What Macs does it run on?

macOS 14 Sonoma or newer on Apple Silicon. The download is Developer ID signed and notarized by Apple. No Intel build yet.

How do I install it?

Open the disk image, drag Keysrs to Applications and open it. It adds itself to your login items (Start at Login in the Keysrs menu turns that off) and puts the meter in the menu bar. Closing the window keeps the meter running; ⌘Q quits. Coming from 0.9? Open the new app once: it removes the old background agent and keeps your keys and history.

How does it update?

By itself. Check for Updates in the Keysrs menu finds a newer release, and Update Now downloads it from GitHub, checks its checksum and Apple signature, replaces the app and restarts it. The automatic daily check is off until you turn it on and installs nothing by itself.

How do I uninstall?

Quit Keysrs and drag it to the Trash. To delete your data too, first run keys purge: it deletes the local catalog and every Keychain item the app created, after Touch ID. Nothing is left behind.

Know your limits.
Keep your keys.