Dashboard and TUI
Terminal views
Section titled “Terminal views”majlis tui # interactive terminal operator UImajlis tui --plain # non-interactive text viewmajlis watch --plain # one text snapshotmajlis watch --json --interval 2s # NDJSON, one snapshot per lineThe TUI calls the same typed client as the CLI.
The dashboard
Section titled “The dashboard”majlis uimajlis ui starts an authenticated, same-origin loopback bridge and prints a single-use launch link. Treat that link as a credential. The dashboard is a static React app embedded in the binary: no Node runtime, no CDN, no account.
It needs embedded assets (build with make build-majlis) and a provisioned operator credential. After opening the link, choose a workspace and use Claim operator identity for actor-bound reviews and answers.
| View | Shows |
|---|---|
| Needs you | Questions, reviews and policy prompts addressed to a human |
| Agents | Registered sessions, harness, work state, checkout and capability |
| Tasks | Owners, reviewers, artifact digests, dependencies and review state |
| Decisions | Proposed, accepted, contested and superseded decisions |
| Channels | Pull-only workspace conversation |
| Recovery | Orphaned work, checkpoints and recovery plans |
| Diagnostics | Endpoint, capabilities and enforcement gaps |
Data comes from the real daemon over an authenticated event stream. On disconnect the dashboard labels cached data stale, preserves drafts, and requires refreshed ownership and revisions before any mutation.
How the bridge is protected
Section titled “How the bridge is protected”The launch URL fragment carries a short-lived, single-use token. The browser exchanges it for an HttpOnly, SameSite=Strict session cookie and a CSRF token. Mutations require the session, a matching origin and the CSRF header. Host and origin validation, no wildcard CORS and a restrictive content policy reduce cross-origin and rebinding exposure.
Plain loopback HTTP does not encrypt traffic and is no boundary against same-user processes. Keep launch links private.