"Keep doesn't hold the key to itself. It asks the brain to check you in, then hands you a wristband that only works on this machine, for a week."
Keep stores no PIN
The front door is a PIN, but here's the twist: Keep stores no PIN of its own. It delegates PIN verification to cwkPippa over loopback. When you enter the PIN, Keep asks cwkPippa "is this right?" on the local machine, and cwkPippa answers. Keep never holds the secret. That's a deliberate boundary — the one system that owns identity (cwkPippa) also owns the credential check, and Keep, the finance surface, is kept out of the secret-storage business entirely. One fewer place the PIN lives is one fewer place it can leak.
The wristband: an IP-bound, time-bound cookie
A successful check mints a session cookie with several deliberate properties. It's HMAC-signed (tamper-evident — you can't forge or edit it), IP-bound (it only works from the address it was issued to, so a stolen cookie is useless elsewhere), seven-day (it expires, so access isn't permanent), HttpOnly (JavaScript can't read it, blunting theft via script injection), and SameSite=Strict (it won't ride along on cross-site requests, blocking a class of CSRF). Each attribute closes a specific attack; together they make the wristband hard to steal and useless if stolen.
The HTTP/HTTPS split most people miss
Keep is reachable two ways: plain HTTP on the LAN/tailnet, and HTTPS via Tailscale Serve. Here's a subtle trap the design handles: browser cookies are scoped by hostname, not by port. So a naive cookie for the HTTP port and one for the HTTPS port would share a name and silently overwrite each other, letting a less-secure session replace a more-secure one. Keep uses separate cookie names for HTTP and HTTPS precisely so the two sessions can't clobber each other. And the HTTPS session gets the Secure flag (via the trusted loopback proxy header) while HTTP can't — so the more-secure path is genuinely more secure, not accidentally downgraded.