Hackathon demo: detect risky passwords, require explicit approval, then run a browser agent in an isolated execution context to change the password and update the vault record only after success.
npm install
cp .env.example .env
npm run devOpen http://localhost:3000.
- Click
Scan. - Choose the
AGI House Democredential. - Click
Repair. - Watch the agent log in to the local demo website, change the password, and update the vault.
- 1Password: set
VAULT_PROVIDER=1passwordand authenticate the officialopCLI. Optional env:OP_VAULT,OP_ITEM_LIMIT,OP_PASSWORD_FIELD. - Daytona: set
DAYTONA_API_KEYandREPAIR_RUNTIME=daytona. For this local demo target, expose the app publicly and setDAYTONA_PUBLIC_BASE_URLbecause a remote sandbox cannot call your laptop'slocalhost.
- No autonomous repair without click approval.
- The agent receives only the selected credential.
- New password is generated locally.
- Vault update happens after the website confirms password change.
- Breach checking can be enabled with
HIBP_LIVE_CHECK=true; it uses SHA-1 k-anonymity range lookup and never sends the full password hash.
# 1Password real vault mode
VAULT_PROVIDER=1password
OP_VAULT="Hackathon Demo"
OP_ITEM_LIMIT=25
# Daytona sandbox repair mode
DAYTONA_API_KEY=...
DAYTONA_TARGET=us
REPAIR_RUNTIME=daytona
DAYTONA_PUBLIC_BASE_URL=https://your-tunnel.example.com- Sign in to 1Password CLI:
op signin
op whoami- For a tightly scoped demo, create a vault named
Hackathon Demo, copy 1-3 login items into it, and set:
VAULT_PROVIDER=1password
OP_VAULT=Hackathon Demo- Add Daytona credentials:
DAYTONA_API_KEY=...
DAYTONA_TARGET=us- To make the bundled demo target reachable from Daytona, expose this app:
cloudflared tunnel --url http://localhost:3000Set DAYTONA_PUBLIC_BASE_URL to the HTTPS tunnel URL, then:
REPAIR_RUNTIME=daytonaFor real sites, the scanner uses an adapter registry:
- Controlled local demo target: repairable.
app.agihouse.org: classified as passwordless because the public sign-in flow exposes magic link and Google sign-in, but no password field.- Other sites: generic browser repair is disabled by default. Enable it with
ENABLE_GENERIC_REPAIR=trueonly for throwaway accounts.
For real sites, the agent first tries standards-based discovery with /.well-known/change-password, then known provider hints, then same-site crawling for account, settings, security, credential, and password pages. A custom 1Password field named change password url is supported as an optional debugging hint, but the demo does not rely on it.
The Daytona browser path starts computer-use services, launches Chromium inside the sandbox, performs the repair, verifies where possible, then updates 1Password. A local ignored repair-recovery.local.json ledger is written before site mutation so the generated password is not lost if the vault update fails.