Skip to content

The Room: animated android stage, accounts and bring-your-own-key vault (v0.3.0) - #3

Merged
Alexeyisme merged 6 commits into
mainfrom
claude/adoring-hawking-jy4u0k
Oct 5, 2026
Merged

Alexeyisme merged 6 commits into
mainfrom
claude/adoring-hawking-jy4u0k

Conversation

@Alexeyisme

Copy link
Copy Markdown
Owner

Summary

Turns AgentryLab into a website: a zero-player stage where android personas talk to each other, and to you.

  • Room runtime (agentrylab.room): live rooms where personas join/leave while the conversation runs, humans can post messages, and events stream over a WebSocket. Reuses the existing provider adapters; adds an offline mock brain so the app works with no API keys.
  • Web UI (web/): Vite + React 19 + TypeScript + Tailwind v4 + Motion + Zustand. Procedural SVG androids (6 faces × 6 bodies × 8 palettes) with mood-driven micro-animations: blink, bob, thinking pulse, equaliser mouths, gesturing arms. 12-persona library plus a builder with live preview. Play/pause/step/speed, editable topic, join the conversation (an android called by name answers next).
  • Accounts and key vault: email + password (scrypt, rate-limited, HttpOnly cookies). API keys for OpenAI, Anthropic, DeepSeek and xAI live in server memory only and are wiped on sign-out/forget/restart; opt-in "remember" stores them AES-256-GCM encrypted under a password-derived key so the database alone cannot be decrypted. Signed-in users run private rooms on their own keys with a switchable brain.
  • Providers: new AnthropicProvider (official SDK), OpenAI-compatible DeepSeek/xAI wiring, vendor-aware error messages.
  • agentrylab serve command, agentrylab[web] extra, version 0.3.0.

Changes

  • Code
  • Tests (tests/test_room.py, tests/test_auth.py; 140 tests, no network)
  • Docs (ROOM.md guide, CLAUDE.md, .env.example, README/CLI/CONFIG/ARCHITECTURE/CONTRIBUTING/SECURITY, web/README.md)

Checklist

  • Lints pass (ruff check .)
  • Tests pass (pytest -q)
  • Updated docs/README where appropriate
  • CI gains a job that typechecks and builds the UI

Screenshots or logs (if applicable)

The Room

Verified in headless Chromium at desktop and phone widths with no console errors; a fake provider key was confirmed absent from logs, transcripts and the database (ciphertext only).

🤖 Generated with Claude Code

https://claude.ai/code/session_01N3Fd5D3Rj3VB2GbpvDfXuE


Generated by Claude Code

claude added 6 commits October 4, 2026 23:03
A Room is a live multi-persona conversation: personas can join or leave at
any time, humans can post messages, and events stream over a WebSocket.
It reuses the existing provider adapters and adds an offline mock brain so
the app runs with no API keys. Includes a persona library, avatar catalog,
REST + WS API, an 'agentrylab serve' command, and tests.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N3Fd5D3Rj3VB2GbpvDfXuE
Frontend in web/ (Vite + React 19 + TypeScript + Tailwind v4 + Motion +
Zustand). Procedural SVG androids with six faces, six bodies and eight
palettes; every micro-animation (blink, bob, thinking pulse, equaliser
mouths, gesturing arms, floor glow) is driven by a persona's mood which the
store derives from WebSocket events. Users add personas from a library or
build their own with a live preview, remove them, change topic and speed,
pause/step, and join the conversation; an android called on by name answers
next even if another turn was in flight.

Also: 'agentrylab[web]' extra, docs (README, ROOM.md, web/README.md),
Makefile targets, a CI job that typechecks and builds the UI, a more
natural offline mock brain with visible thinking latency, and v0.3.0.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N3Fd5D3Rj3VB2GbpvDfXuE
Email/password accounts (scrypt, rate-limited login, hashed session tokens
in HttpOnly cookies). API keys for OpenAI, Anthropic, DeepSeek and xAI live
in server memory only and are wiped on sign-out, forget, or restart; an
opt-in 'remember' stores them AES-256-GCM encrypted under a key derived
from the user's password, so the database alone cannot be decrypted.
Signed-in users create private rooms that run on their own keys with a
switchable brain (provider + model); rooms pause with a clear message when
a key is missing or keeps failing. Adds an Anthropic provider on the
official SDK and vendor-aware errors for OpenAI-compatible APIs. UI gains
sign-in, a Brains & keys vault screen, a rooms menu and a brain selector.
Docs cover the threat model and the roadmap (OAuth, browser-held keys).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N3Fd5D3Rj3VB2GbpvDfXuE
Rewrite ROOM.md as the complete guide: architecture map, turn lifecycle,
brains and provider catalog, accounts and the key threat model, every
environment variable, REST and WebSocket reference with auth rules and
close codes, Python usage, operating notes and roadmap. Add .env.example,
OpenAPI tags and summaries on every endpoint, a 'serve' section in the
CLI guide, Anthropic and OpenAI-compatible provider examples in the config
guide, a Room section in ARCHITECTURE.md, a repository map and frontend
workflow in CONTRIBUTING.md, a secrets model and operator checklist in
SECURITY.md, a refreshed web/README.md with the state flow, and header
comments on every UI component.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N3Fd5D3Rj3VB2GbpvDfXuE
Commands (install, lint, full and single tests, UI build, serve), the two
runtimes and how their pieces fit across files, Room invariants (async
handlers, provider cache invalidation, secrets never leaving memory),
cross-file change checklists, frontend gotchas, and the docs map.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N3Fd5D3Rj3VB2GbpvDfXuE
Also document headless UI smoke-testing in web/README.md since the
frontend has no automated tests.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N3Fd5D3Rj3VB2GbpvDfXuE
@Alexeyisme
Alexeyisme merged commit d18dfeb into main Oct 5, 2026
3 checks passed
@coderabbitai

coderabbitai Bot commented Oct 5, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 3a3b2d21-67e4-456d-b55a-780ea063bb5e
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants