hack-house/hh
leetcrypt 5676216a2f feat(ui): stacking role badges in roster + chat; drop default pentagram
- introduce a Role model + App::host()/roles_of(): the host is the first
  occupant of the roster (shown the moment they join, no sandbox required),
  and roles are additive — a host who summoned a sandbox and can drive reads
  ✝◆. Badges read the same ACL the broker enforces, so they can never
  advertise a power the room won't honour
- render the stacked badge in the clergy panel and inline next to the author
  on every chat message; split VirtualBox commands into their own help cluster
- default styling: the startup handle prompt now prints ✝ (crypt sigil)
  instead of the inverted pentagram
- README: document VirtualBox VMs, snapshot save/load, AI streaming + recall,
  the badge system, and the expanded theme set
- gitignore out-of-tree experiments, the heavy demo-build kit, and logs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 22:56:10 -07:00
..
direnv-autostart feat(hh): graceful shutdown, crypt default theme, neutralize branding, share-prep 2026-05-31 23:23:19 -07:00
downloads feat(hh): /pw command, RAM-only direnv autostart, robust lets-hack; coven→clergy 2026-05-31 22:29:17 -07:00
src feat(ui): stacking role badges in roster + chat; drop default pentagram 2026-06-04 22:56:10 -07:00
themes feat(theme): add goldcrypt vestment preset 2026-06-02 17:39:31 -07:00
tools chore: rename project coven → hack-house ⛧ 2026-05-30 13:29:14 -07:00
.gitignore feat(hh): graceful shutdown, crypt default theme, neutralize branding, share-prep 2026-05-31 23:23:19 -07:00
Cargo.lock test(client),ci: fuzz frame parsers, VT-x classifier tests, smoke + CI hardening 2026-06-04 22:56:00 -07:00
Cargo.toml test(client),ci: fuzz frame parsers, VT-x classifier tests, smoke + CI hardening 2026-06-04 22:56:00 -07:00
connect.sh fix(ui): batch-drain incoming frames so a sandbox stream can't stall chat 2026-06-02 14:20:40 -07:00
demo-save-load.sh docs(sbx): VirtualBox backend spec, crypto pay-gate, save/load PoC 2026-06-03 10:10:44 -07:00
ensure-docker.sh feat(hh): graceful shutdown, crypt default theme, neutralize branding, share-prep 2026-05-31 23:23:19 -07:00
ensure-vbox.sh feat(sbx): VirtualBox detect-first install + local GUI VM launch 2026-06-03 10:41:32 -07:00
film-save-load.sh docs(sbx): VirtualBox backend spec, crypto pay-gate, save/load PoC 2026-06-03 10:10:44 -07:00
film-virtualbox.sh feat(ui): stacking role badges in roster + chat; drop default pentagram 2026-06-04 22:56:10 -07:00
join.sh feat(hh): Church of Malware neon theme is now the default ⛧ 2026-05-30 20:54:41 -07:00
lets-hack.sh feat(agent): model-agnostic AI agent bridge (PoC) + pin lets-hack demo to main 2026-06-01 02:05:48 -07:00
README.md feat(hh): graceful shutdown, crypt default theme, neutralize branding, share-prep 2026-05-31 23:23:19 -07:00
smoke-e2e.sh test(client),ci: fuzz frame parsers, VT-x classifier tests, smoke + CI hardening 2026-06-04 22:56:00 -07:00
smoke.sh feat(hh): graceful shutdown, crypt default theme, neutralize branding, share-prep 2026-05-31 23:23:19 -07:00
test-features.sh feat(hh): graceful shutdown, crypt default theme, neutralize branding, share-prep 2026-05-31 23:23:19 -07:00

hack-house

encrypted collaborative sessions with a summoned sandbox

zero-knowledge server · end-to-end fernet · srp · ratatui

they want you dependent. we want you free.


hack-house is the evolution of cmd-chat: a multi-user, end-to-end-encrypted terminal session where a small crew shares chat, files, and — when summoned — a disposable sandboxed Linux box they drive together, with real Linux permissions and an owner who can delegate the keys.

The server never sees plaintext. Everything — messages, files, terminal output — is relayed as opaque ciphertext. Close the window, the house empties.

status

This is the Rust client (ratatui) for the unchanged Python (Sanic) server. The wire protocol is JSON-over-WebSocket; SRP + HKDF→Fernet are byte-for-byte compatible with the Python srp / cryptography stack.

phase feature state
P0 Rust↔Python SRP / Fernet crypto parity proven (golden vectors + live + cross-lang E2E)
P2 multi-user session (cap 4, infra for more) + authoritative roster done
P1 ratatui UI (chat, roster, themes, help overlay) done
P3 sandbox box (local / docker / multipass) + shared PTY done
P4 permissions (app drive ACL + VM unix users / sudo) done
P5 file + directory transfer into the shared session done

crypto parity — the load-bearing proof

$ hack-house selftest            # offline: Rust SRP ≡ Python srp golden vectors
$ hack-house handshake <ip> <port> <name> --password <pw> --no-tls
  /srp/verify ok — server identity proven (H_AMK ✓)
  round-trip ✓ decrypted: "the house is open"

tools/gen_vectors.py regenerates the golden vectors from the live Python library (must match the server's _ctsrp backend with rfc5054_enable()).

note: the SRP identity is always the fixed room identity b"chat"; the display name is carried only in JSON, never in the SRP proof. The Python srp package's rfc5054_enable() toggles the active backend's flag — vectors must be generated with the same backend the server actually loads (_ctsrp).

license

MIT · malware bless · hack the planet