Files
hack-house/hh
leetcrypt e49dbca451
CI / rust client (hh) (macos-latest) (push) Waiting to run
CI / rust client (hh) (ubuntu-latest) (push) Waiting to run
CI / rust coverage (push) Waiting to run
CI / python server (3.10) (push) Waiting to run
CI / python server (3.11) (push) Waiting to run
CI / python server (3.12) (push) Waiting to run
CI / headless e2e smoke (push) Waiting to run
CI / dependency audit (push) Waiting to run
CI / secret scanning (push) Waiting to run
refactor(ai): strip Goose harness (Phase 1) — native/simple host-side only
Remove the Goose agentic harness across the codebase per
docs/spec-native-harness.md §3. Goose made N sequential model calls inside the
sandbox (slow on CPU-only hardware) and forced an in-container→host Ollama
gateway that tripped the rootless-Podman slirp4netns loopback bug.

- bridge.py: delete _run_goose/_goose_argv/_goose_present + GOOSE_* consts and
  the present-cache; __init__ now takes harness="simple"/max_turns=5; granted
  !task runs _run_simple until the native loop lands (Phase 2).
- __main__.py: --harness {native,simple} (was {goose,simple}); drop
  --goose-max-turns, add --max-turns; default harness simple.
- app.rs: /ai start accepts native|simple (plain aliases simple) instead of a
  bare plain flag; refresh harness comments.
- sbx.rs: remove the in-container Ollama gateway (Docker host-gateway / Podman
  slirp4netns host-loopback) and the dk_bootstrap OLLAMA_HOST env — kills the
  slirp4netns loopback bug; drop Goose comments.
- bootstrap.sh: drop goose from the prereq probe.
- bootstrap-ai.sh: remove the entire Goose install block, --no-goose flag,
  GOOSE_INSTALLER_URL, host config writer, and goose_bin helper.
- sandbox-bootstrap.sh: remove the in-sandbox Goose binary install + config.
- spec-goose-harness.md: banner — harness portion superseded; Podman stays.

cargo check + py_compile clean. No Goose refs remain (headroom/ untouched).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-08 13:03:41 -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