Hall Monitor
Hall Monitor is the Tauri v2 desktop application for monitoring a running Hall API. It shows enrolled workers, live routing decisions, and governance alerts at a glance.
Platforms: macOS, Linux, Windows.
Download: pyhall.dev/tools
First-Time Setup
On first launch, Hall Monitor walks you through a brief setup sequence:
- Passphrase prompt — enter a passphrase to protect local app state.
- Setup wizard — the wizard copies the
hall scaffoldcommand to your clipboard so you can enroll your first worker from the terminal. Follow the on-screen steps. - Main app — after setup completes, the main dashboard loads.
Authentication
Hall Monitor uses GitHub OAuth for login. The JWT issued on successful login is held in memory for the session only — it is never written to disk.
If you close and reopen Hall Monitor, you will be asked to authenticate again.
Namespace Management
After logging in, Hall Monitor displays your registered namespaces from the pyhall.dev registry. You can view namespace details and manage enrollment from the UI.
Running a Local Hall API
pip install pyhall-wcp flaskpython -m hall_api.server# [hall-api] PyHall API v0.3.0 starting on http://127.0.0.1:8765The server listens on http://localhost:8765 by default. Point Hall Monitor at this URL.
Environment variables:
| Variable | Default | Description |
|---|---|---|
HALL_API_PORT | 8765 | Port to listen on. |
HALL_API_HOST | 127.0.0.1 | Host to bind. |
HALL_DB_PATH | hall.db | SQLite database path. |
Connecting to a Remote Hall API via SSH Tunnel
If your Hall API is running on a remote server, use an SSH tunnel to access it securely without exposing it to the internet.
ssh -L 8765:localhost:8765 user@your-serverThen point Hall Monitor at http://localhost:8765. Traffic is forwarded through the SSH connection.
The Six Screens
Hall Monitor has six screens, accessible via the sidebar.
Hall Status
The main dashboard. Shows the health of the connected Hall API and summary metrics:
- Hall version and connection status
- Workers enrolled
- Total decisions / decisions today
- Denials today
- Last updated timestamp
Live Feed
A real-time stream of routing decisions, newest first. Each row shows:
- Timestamp
- Capability ID
- Tenant ID
- Environment
- Outcome (allowed / denied)
- Selected worker
- Blast score
Decisions update on each poll interval.
Crew on Books
The worker registry — all enrolled workers with their details:
- Worker ID and species ID
- Capabilities handled
- Risk tier
- Enrollment timestamp
- Status
Alerts
Governance alerts from the Hall, newest first. Alerts are raised for events like worker code hash mismatches (DENY_WORKER_TAMPERED), controls violations, and other governance failures.
Each alert shows:
- Timestamp
- Level (warning / critical)
- Code
- Message
- Affected worker and capability (if applicable)
Enroll Worker
A form to enroll a new worker directly from the UI. Submits to the POST /enroll endpoint. Required fields:
- Worker ID
- Worker Species ID
- Capabilities (comma-separated)
- Risk Tier
- Artifact Hash
The form computes the artifact hash on the client when a record JSON is pasted.
Config
Connection configuration for Hall Monitor:
- Hall API URL — the base URL of your Hall API (e.g.,
http://localhost:8765) - Poll interval — how often to refresh data (seconds)
- Notifications — enable/disable desktop notifications for new alerts
Settings are persisted locally in the app.
Poll Behavior
Hall Monitor polls the Hall API on a configurable interval (default: every 5 seconds). It fetches:
GET /status— for the Hall Status screenGET /workers— for the Crew on Books screenGET /dispatches?limit=50— for the Live Feed screenGET /alerts— for the Alerts screen
No WebSocket connection is required. The Hall API is stateless HTTP.