VoiceMark Wallet is a phone app that turns your voice into a credential. When you sign up, you create two types of VoiceMark — both stored in the wallet, both checked on every approval:
On each approval the backend runs three independent checks:
All three must pass. The Cloud VoiceMark is generated on every approval and rendered in the app — incorporating it as a fourth verification signal (shape-based match) is on the roadmap. When a script or agent running on your laptop needs an API key — OpenAI, Stripe, whatever — it sends a push to your phone. You speak a short phrase. The key is released only after all checks clear.
No passwords to copy. No 2FA codes to type. The approval lives on your phone, authenticated by something that can't be phished or leaked.
Right now, most developers keep API keys in .env files, shell profiles, or hardcoded in scripts. Those files sit on disk permanently. Any process — or person — with access to your laptop can read them. They get accidentally committed to git. They get pasted into Slack. They persist long after the project ends.
With VoiceMark Wallet, keys never touch your filesystem. A script requests a key at runtime; a push arrives on your phone; you speak; the key appears in your shell for that session only. Even if your laptop is fully compromised, an attacker can't get the key without also holding your phone and speaking in your voice.
Every access is logged. Every release is voice-gated. And because it's out-of-band — approval happens on a physically separate device from the one making the request — there's no way for a rogue script to self-approve.
$(voicemark secret get openai) in your script. Push arrives. You speak. Key's in the shell. The script carries on.app.voicemark.dev in Safari — not Chrome, not Firefox. The PWA install only works from Safari.npm install -g voicemarkvoicemark login and paste it. Now the CLI can reach your phone. (See friction note below.)export KEY=$(voicemark secret get openai). A push arrives on your phone. Open the notification, swipe right, speak the phrase. Done.Run these in order. Each one tests a different part of the approval flow. Use the dummy keys below — they're fake strings, but the wallet stores and returns any value, so the full flow works exactly as it would with real keys.
sk-test-vm-aabb1122ccdd3344eeff5566aabb7788
sk_test_vm_1a2b3c4d5e6f7a8b9c0d1e2f
sk-ant-test-vm-aabb1122-ccdd-3344-eeff-5566aabb7788
voicemark secret add <name> <value> for each — e.g. voicemark secret add openai-test sk-test-vm-aabb...export KEY=$(voicemark secret get openai-test)echo $KEY — you should see the full test string.
voicemark secret get stripe-testvoicemark secret get anthropic-testvoicemark secret get openai-testThe design principle is phone + voice. Your phone is the wallet — it's a separate hardware device, your VoiceMark lives in it, and every approval happens on it. That's the security model and it doesn't change.
What shouldn't be there is the QR code. Right now setup requires copying a key from the phone and pasting it into voicemark login on the Mac — that's one extra step between you and phone + voice only. The Terminal also shows a QR code as a fallback if a push notification doesn't arrive, which you scan to open the approval screen.
Next step — scan-to-link: open the wallet, tap to show a pairing QR, scan from the CLI. One QR, one scan, done. The approval flow after that is push → phone → voice — no QR involved.
End goal — voice pairing: no QR ever. voicemark login sends a push to your phone the same way a key request does — "Authorise this laptop?" arrives as a notification. You speak to approve it. The CLI gets its session token. Everything after that is push → phone → voice. The same pattern as T1 above, applied to setup itself.
The backend change needed is small: it's the same challenge pipeline, triggered by a login request rather than a secret fetch. The QR fallback also goes away once push delivery is reliable — it exists today purely as a safety net for missed notifications.
Once setup is voice-native, the wallet can expand to any credential type that benefits from out-of-band voice approval:
When anything needs a credential or an authorisation, it asks your phone. Your phone asks your voice. No passwords to copy, no tokens to manage, no QR codes to scan. Just: push to phone, speak, approved.