One way to log in — Hydra
Until now, Bindu supported three different ways to handle logins: Auth0, Cognito, and Kratos. Three systems means three sets of bugs, three sets of configs, three things to test. Starting this release, Bindu uses only one: Ory Hydra. It’s open source, it speaks OAuth2, and it plays nicely with your agent’s DID. If you were using Auth0, Cognito, or Kratos — you’ll need to move over. We’ll walk you through it below.Heads up before you upgrade
What’s new
DID + OAuth2 working together
Here’s the idea. Your agent has a DID (a decentralized ID that proves “I am who I say I am”). Hydra gives out OAuth2 tokens (short-lived keys for API access). We connect the two. Your DID becomes theclient_id in Hydra. When your agent starts up, it introduces itself to Hydra using its DID and gets registered automatically.
If the credentials on disk ever get out of sync with Hydra (say, your local file is deleted), Bindu notices, re-registers the agent, and carries on. No manual fix needed.
Dependencies locked to exact versions
Every package Bindu depends on is now pinned to an exact version (==) instead of “this or newer” (>=). This means every build is the same build — no surprise updates in the middle of the night breaking your agent.
34 packages were pinned across runtime, telemetry, payments, storage, CLI, and security. A few packages we weren’t really using (openai, agno, ddgs, numpy) got removed entirely.
Web UI: cleaner building blocks
The agent’s web interface got split into focused JavaScript files — one for the HTTP client, one for state, one for chat, one for the protocol. Easier to read, easier to change.What got better
With only one auth provider to worry about:- The auth config is far simpler
- Tests don’t have to mock three different systems
- The config validator only has to check one thing
curl command to grab a fresh OAuth token, plus the path to your client secret. Testing an authenticated endpoint takes seconds.
Migration
Start your agent
On first boot, your agent signs itself up in Hydra using its DID as the
client_id. You don’t have to do anything.