Authentication
You sign in to Mod with Google. Your devices do not sign in to sync: each one has its own key and signs its connection to the relay with it. Keys for the services your agents call stay on your Mac.
How it works
Signing in goes through Mod's auth worker, which runs Google sign-in and asks only for your name and email. The sign-in is kept on the machine, in one place that the desktop app and the CLI both read, so signing in once covers every worker on that machine. The window shows whether this Mac is signed in.
You need the sign-in for what Mod pays for or publishes: Mod's own models, voice, and publishing packages to the registry. The agent harnesses you have installed, such as Claude Code, Codex and Cursor, bring their own accounts and work without it. Reading published packages needs no sign-in at all.
Sync does not use the sign-in. Each device makes an Ed25519 key on first run and saves it where only you can read it. The device signs its handshake with the relay using that key. Deleting the key file makes a new key; the key itself is never logged.
Credentials for other services never go in a document, a release or the log. When an agent in a VM needs to call an API with your key, it asks for a grant. On your yes, you put the key in your Mac's Keychain yourself. The VM only gets a URL; the Mac adds the key on the way out to that one host, so the key never enters the VM or passes through the agent. Accounts you connect through a connector, such as Slack, are kept in a file on your own disk that never syncs and that no package can read.
Using it as you build
An agent asks for a grant, checks what the project has, and takes one back:
request_grant { "name": "github-api", "host": "api.github.com" }
list_grants
remove_grant { "name": "github-api" }
After you approve, the question tells you the exact command to put the key on your Mac. It looks like this:
security add-generic-password -U -a mod -s mod-grant-github-api -w
From the agent's next turn, MOD_GRANT_GITHUB_API_URL in the VM reaches https://api.github.com/ with your key added. list_grants says whether each key is on the Mac yet and never shows the key. Removing a grant stops its requests at once; the key stays in your Keychain for you to delete.
You decide which services you connect and when to disconnect them. Never paste a key to an agent: a grant exists so you do not have to.
Limits
- The relay accepts any device that signs its connection, and a lost device's key cannot yet be revoked from another device. Per-device keys that are checked and revocable come with the sharing model (RFC 0345). soon
- If you lose every device, a passkey gets you back in. soon
- Connector accounts are kept in a file readable only by you, not yet in the Keychain.
- A grant is a plain URL, not a proxy for HTTPS. A tool that hard-codes its HTTPS host cannot use one; that work runs on your Mac as a recipe instead.