Docs›Under the hood
How it works
The architecture, what keeps sessions alive, and how the app is secured. Back to the README.
browser ──HTTPS / WebSocket──▶ Hydor server (Node.js, Fastify)
├─ one small runner process per live session
│ └─ claude (stream-json) or codex app-server
├─ indexer: reads the agents' transcripts into SQLite full-text search
├─ tmux server for the terminals
└─ the web app (React), served from dist/web
- Transcripts are the source of truth. History comes from the files Claude Code and Codex write themselves, which is why sessions started in VS Code or a terminal show up too. The live stream only adds what is not written yet: text as it streams, commands still running, approvals.
- Agents outlive the server. Each live agent runs under a detached runner that holds its input and output and logs everything. Restart or upgrade the server and it reconnects, replaying what it missed.
- Your accounts, your machine. The app talks to the agents through their official command-line tools and never sees your model credentials; sign-in happens in the agents' own login flows.
Security#
- Password stored as a scrypt hash.
- Wrong passwords are counted by address over an hour (IPv6 by its /64). From the third, the sign-in page also
asks for the characters in a picture the server draws itself, with no outside service; each picture is good for
one try, and a misread costs none. The tenth stops sign-ins from that address for an hour. Ten from anywhere bring
the picture to everyone, sixty stop every sign-in. The counts are kept in the database, so a restart lifts no
pause;
set-passwordclears them. - A visitor's address comes from
X-Forwarded-Foronly when the request reaches the app from this computer or a private network (a proxy, Docker's network), read from the end the proxy adds to; otherwise it is the connection's own, so no one can claim a new address for each try. - Session cookie is
HttpOnly,SameSite=Strict, andSecureover HTTPS. - Every state-changing request and WebSocket has its
Originchecked. - Strict Content Security Policy.
- Files you open are served from a sandboxed origin, so they cannot run as part of the app.
- Listens on localhost only unless you change
HOST. - Access tokens for other machines are stored as hashes. The tokens this machine holds for others never reach the browser; its server adds them when it forwards your requests.
Disclaimer#
Hydor is an independent project, not affiliated with or endorsed by Anthropic or OpenAI. Claude and Claude Code are trademarks of Anthropic; Codex and ChatGPT are trademarks of OpenAI. Using the agents through this app is subject to your agreements with those companies.
Change this page on GitHub · the app's Help shows the same text