Troubleshooting & FAQ
Account & passkeys
My passkey manager won't work / the app says it's unsupported. Your passkey derives your wallet keys, so it needs a manager that supports the WebAuthn PRF extension. Use 1Password, iCloud Keychain (iOS 18 / macOS 15+ in Safari), Windows Hello, or Google Password Manager. See Passkeys & your account.
I lost my device / my passkey is gone. Restore from the sign-in page with Lost your passkey? and your 24-word recovery phrase. It creates a fresh passkey and moves your funds and history to it. Without the phrase there's no reset — that's the trade-off that keeps the account yours alone. See Recovery.
Can I use my account on another device or browser? Your passkey comes with you if your passkey manager syncs across devices. Your conversation history doesn't follow on its own — it's stored encrypted on the device where the chat happened. Turn on syncing to keep every device up to date through a folder or storage bucket you own, or move history once with Back up chats and Restore from backup in Settings → Storage.
Syncing says it can't run in this browser. The folder option needs a desktop Chromium browser (Chrome, Edge, Brave). On Safari, Firefox, or a phone, use the storage bucket option instead — it works everywhere. On Brave, folder access is behind a flag the app points you at. See Syncing your chats.
Syncing says the browser refused to send the request. That's the bucket's CORS rule, which is the one failure a browser isn't allowed to describe. Re-paste the policy from How to set this up in the bucket form. See Syncing your chats.
A chat I deleted came back. If you deleted it while that device wasn't syncing, and then connected it to a fresh folder or bucket, the deletion isn't carried across. Delete it again and it stays gone. See Syncing your chats.
I'm asked to unlock again after stepping away. That's the session lock — by default it locks after 30 minutes of inactivity. Adjust the timeout, or switch between Lock and Log out, in Settings → Session.
Funds & pricing
I sent a deposit but my balance hasn't updated. On-chain deposits take a short time to confirm; the deposit dialog polls for it. ALGO deposits are converted to dollars first — you'll see a converting indicator while that runs. Cross-chain deposits take longer because they're swapped across networks before landing. See Funding.
Why is my balance in dollars when I sent crypto? Your balance is held as USDC (dollars) so per-message pricing is stable. Anything you send is converted on the way in. See Funding → Auto-conversion.
How much does a message cost? The model picker shows each model's rate up front (all fees included), and every reply shows what it actually cost in its footer. A short exchange is usually a fraction of a cent. See Pricing.
I'm out of free messages. Free models are capped at 20 messages per 24 hours per account, counted from your first free message rather than at midnight — so the allowance comes back 24 hours after you started using it, and the app tells you when. Switching to a paid model works immediately. See Pricing → Free models.
Can I get my money back out? Yes — withdraw USDC to any Algorand address at any time from the Deposit dialog. No minimums and no lockups; the balance is in a wallet you control. See Funding → Withdrawals.
Chatting
My reply stopped early / I want to cut it off. Press the stop button (or Esc while it's streaming). You only pay for what was generated. See Chatting.
A long conversation got slower or pricier. Longer context costs more per message. When a chat gets long, ZeroSignal compacts earlier messages into a rollup behind a marker — click it to read the originals; nothing is lost. See Conversations → Long conversations.
A model I want isn't available, or shows as offline. The catalog is live, and the app probes operators continuously — offline or incompatible operators are flagged and skipped. Try another operator for the same model, or leave it on Auto. See Models & operators.
My document upload didn't attach as an image. Documents (PDF, DOCX, XLSX, TXT, Markdown, HTML, CSV) are read as text and added to your prompt, not attached as images. Only image files (PNG, JPEG, WebP, GIF) attach as images for vision models. See Chatting → Attaching files.
Privacy
Is my chat history on your servers? No. History is stored encrypted on your device, and prompts are end-to-end encrypted to the operator you chose. We don't keep server-side copies. See Privacy & security.
The app refused to send a message about privacy/relays. To protect your network identity, requests route through a relay. If no eligible relay is available, the app fails closed — it won't send directly and expose your address. This is usually momentary; try again. See The operator network → Relays.
Using the proxy
zs-proxy connect says the proxy isn't running.
Start it first with zs-proxy proxy start, then run connect again — it
needs to read the live endpoint and model list. See
Quick start.
A request to the proxy fails with 402 wallet_unfunded.
The proxy's wallet doesn't have enough balance (or prepaid reserve) to cover
the request. Run zs-proxy fund, or zs-proxy doctor to see exactly what's
missing. See Wallet & funding.
My agent loop could drain my balance — can I cap it?
Yes — set spend.daily_cap_usdc and/or spend.per_request_cap_usdc in the
proxy's config. See Configuration.
My tool errors on a data: line it doesn't recognize.
Some strict OpenAI clients parse every SSE data: line as a chat chunk and
choke on the proxy's optional cost-breakdown frame. That frame is opt-in
(only sent when the request asks for it), so a plain OpenAI-compatible tool
never sees it — if you're hitting this, you're sending
X-Zs-Usage-Frame from your own code. See
Connecting AI tools → Seeing what you paid.
Still stuck?
If something here didn't help, reach out — and if your build has the Help us debug toggle (Settings → Developer), the diagnostics it collects stay on your device until you choose to share them.