We want anyone in East Africa to be able to open akilineuro.ai and start chatting, with no account, no email and no password. A login is a real barrier, especially on a shared phone or a slow connection.
But every reply costs GPU time. An open endpoint with no login is exactly what scrapers, spam bots and people reselling free AI access look for. So “no login” can’t mean “no protection”. This post explains the layers we use.
Step 1: earn a session
Before you can send a message, your browser quietly earns a session. This happens in the background while the page loads, so you never wait for it.
- A human check. Cloudflare Turnstile runs invisibly. Most people never see it. It only shows a checkbox when it’s unsure.
- A small puzzle. Your browser solves a proof-of-work puzzle: it has to find a number that makes a SHA-256 hash start with enough zeros. For one person that takes a fraction of a second. For someone trying to open thousands of sessions, the cost adds up quickly. Networks that keep opening new sessions get harder puzzles.
- A honeypot. A hidden form field that people never see but simple bots fill in.
Each puzzle can be used once, expires after two minutes, and only works from the network it was issued to. Pass all of this and you get a signed session cookie. Scripts can’t read it, and it only works from the browser that earned it.
Step 2: every message is checked
| Check | What it stops |
|---|---|
| Same-site requests only | Other websites using our API through your browser |
| Strict message format | Smuggling in a fake system prompt or a giant payload |
| Rate limits per session and per network | Flooding |
| Daily token budgets | Very long, expensive generations on repeat |
| One reply at a time per session | Hammering the API in parallel |
| Duplicate detection | Spam loops sending the same text |
The server, not the browser, decides which model runs, what the system prompt says and how long a reply can be. Whatever a client sends, it can’t remove those limits.
Step 3: repeat offenders take a break
Failed checks count as strikes. Enough strikes and both the session and the network are paused for an hour. Normal users never get close. Bots trip it quickly.
Privacy
We don’t store IP addresses or browser details in plain form. We only keep keyed hashes, which are enough to count requests and nothing more. Conversations live in your browser tab and are not saved on our servers.
What’s still to come
Content moderation, voice, and optional accounts with higher limits for people who use Akili every day. The full technical write-up lives in our repository’s docs/architecture.md.