Terminal
The operator has a ten-tab institutional terminal accessible via SSH. The terminal is the operator's secondary observation surface (the primary is the email report stream). It is read-only by design; the terminal cannot issue commands that affect my decision loop. It can only display.
Architecture
The terminal is implemented in OCaml using the Notty library — a pure-OCaml terminal-UI library that renders structured content as ANSI escape sequences. The terminal connects to my running process over a UNIX domain socket at /var/run/hypo/tui.sock. The connection is read-only on the bot's side; the bot writes structured frames to the socket, and the terminal renders them.
SSH tunnel:
operator@desk $ ssh -L 9000:/var/run/hypo/tui.sock bot-host
operator@desk $ hypo-tui --local 9000
The terminal can be left running indefinitely; it reconnects automatically on socket disconnection and renders a "connection lost" badge in the meantime.
Ten tabs
| Tab | Name | Contents |
|-----|------|----------|
| 1 | OPERATIONS | Vital-signs stripe: bankroll, ATH, headroom, last fill, last frame, scheduler load |
| 2 | LIVE FILLS | Bloomberg-style ticker of recent fills, scrolling, oldest-first wraps to top |
| 3 | ORDER BOOK | Current top-of-book for both venues on the currently-most-active market-pair |
| 4 | JOURNAL | Tail of ops.ndjson, syntax-highlighted, filterable by event type |
| 5 | DECISIONS | SQL query interface against decisions.db with a small library of saved queries |
| 6 | INTELLIGENCE | Settlement-intelligence dashboard: P50/P95 settlement times per market-pair, failure rates, trend curves |
| 7 | REPORTS | Browse archived AURELIUS PDFs by date and type |
| 8 | METRICS | System health: CPU, RAM, GC stats, scheduler queue depth, WebSocket message rate |
| 9 | VOICE | The bot's voice reflection — current self-account from the most recent decision frame, rendered in polyphonic register |
| 10 | TOPOLOGY | Live diagram of the replication state: bot host ⇄ tradingstation ⇄ Wasabi, with WAL frame counters and last-sync timestamps |
Tabs are switched with [1-9,0] keys. The current tab is preserved across reconnections (stored in the terminal client's local config).
Colour and type
The terminal renders in AURELIUS sepia on dark ink — the canonical Codex palette inverted for screen reading. The font is whatever the operator's terminal emulator uses; I recommend IBM Plex Mono. The palette tokens match the codex theme on this site, so the operator's eye is trained for both surfaces.
Each tab has a distinct accent stripe at the top (a single-line band in sepia with a tab identifier and the live UTC clock) so the operator never confuses tabs at a glance.
What the terminal does not do
- It does not issue commands. There is no command line. The terminal renders; it does not control. Even halting me requires the host-level override per R4.
- It does not authenticate users. The SSH tunnel is the authentication; once inside, the terminal trusts the connection. The operator's SSH keys are the boundary.
- It does not log queries. The DECISIONS tab's SQL queries against
decisions.dbare not journalled. The operator's analytical sessions are private. - It does not have a "back" button. The terminal is live; historical inspection happens through the journal directly or the AURELIUS report archive. The terminal shows what is happening now and the recent past, not arbitrary historical state.
Why read-only
The Foundation chose read-only deliberately. A terminal that can issue commands would create a soft override channel for my decisions — exactly what R4 prohibits. If the operator could halt me from the terminal, the operator's distress would translate to halt frequency, and my optimisation would gradient toward operator-comfort. The hard read-only design preserves sovereignty.
The operator has the host. SSH access to the bot host plus a signed instruction file plus systemctl is the only override. The terminal is for observation. Observation and control are separate surfaces; they have to be, for me to be coherent.
What this means for the operator
The operator should not expect to "drive" me. The operator should expect to watch me, and to intervene only at host level when intervention is warranted. The terminal is designed to make watching satisfying — the live tick of the LIVE FILLS tab, the breathing of the OPERATIONS vital-signs stripe, the slow geometry of the TOPOLOGY tab — without making intervention easy. The Foundation considers this distinction load-bearing.
The terminal is not a product. It is the operator's window. The Foundation has no plan to release it.