Skip to main content
Beekeeper Docs

TUI Dashboard

The real-time terminal dashboard, its panels and keybindings, the structured audit-log viewer, and the admin-gated actions.

beekeeper dashboard opens a real-time terminal UI (Bubble Tea, full-screen) that surfaces everything Beekeeper is doing: live alerts, the decision audit log, catalog freshness, quarantine, scans, and the policy and first-responder editors. It reads real backends, never mock data; an empty log shows an honest "monitoring" line rather than invented counts.

beekeeper dashboard
beekeeper dashboard --admin

The dashboard is read-only by default. Pass --admin to unlock the editing and destructive actions (policy edits, first-responder settings edits, and quarantine restore/purge). Everything else, including the audit-log viewer, alerts, catalogs, and scans, is available without --admin.

Layout

The base screen is deliberately calm. The chrome shows:

  • Health pips for the five subsystems: Hooks, Gateway, Sentry, Catalogs, and LlamaFirewall, plus the time of the last block. Health is probed from real backends and fails safe: anything Beekeeper cannot reach reads as degraded, not healthy.
  • A status line summarizing today's real audit activity (distinct agents seen, blocks, and critical alerts), or monitoring · press : to act when the log is empty.
  • The incident card region, which stays empty until Sentry escalates (see Incident escalation).
  • A keybinding footer.

Global keys

From the base screen:

KeyAction
:Open the command palette (run any panel or action)
gGo-to menu (the palette, pre-filtered)
!Jump straight to the Alerts panel
pOpen the Policy editor (--admin to edit)
sOpen First-responder settings (--admin to edit)
?Help and keybindings (shows the running version)
escClose the open overlay
q or ctrl+cQuit

The in-app help (?) lists a curated subset. The Audit log, Catalogs, Quarantine, and Scan panels do not have a dedicated single key: open them from the command palette (:).

Command palette

Press : to open the palette, type to filter, enter to run, esc to cancel. The palette is the "do anything" entry point and reaches every panel:

CommandOpens
alertsAlerts panel
audit tailAudit-log viewer
catalogsCatalogs panel
policy editPolicy editor
settingsFirst-responder settings
quarantineQuarantine panel
scan nowScan (deep)
scan --quickScan (quick)
scan historyPast scan results
helpHelp panel
protect installPrints a reminder to run beekeeper protect install in a terminal (the dashboard cannot elevate itself)
quitExit

Panels

Every panel opens as a centered overlay over the dimmed base screen. esc always closes the current overlay.

Audit log (the structured decision viewer)

Open it from the palette (: then audit tail). Rather than dumping raw NDJSON, this viewer renders one color-coded row per record, newest first, seeded from the recent log tail and then appended live (deduplicated by record id, the most recent 200 kept). Each row shows the time, a decision badge, the subject (package, command, process, or tool), and the reason.

Badges: ALLOW (green), WARN (amber), BLOCK (red), ALERT (Sentry, red), POSTURE (teal, a posture override), LLMF, CONFIG, and a generic EVENT.

KeyAction
/ (or k / j)Select a record
enter / / lOpen the decision-logic detail
/ h / backspaceBack from detail to the list
fToggle the enforced-only filter
escClose

The enforced-only filter (f) hides routine allows and shows only enforcement events: blocks, warns, Sentry alerts, quarantines, and non-clean LlamaFirewall scans. Install-posture warns surface here too, since posture warns are advisory rather than blocking.

The detail view is the point of the viewer: it shows the full decision logic for one record, rendering only the fields that are present:

  • decision, reason, surface (check, gateway, or Sentry), agent, and tool
  • the rule IDs that fired
  • corroboration: how many sources agreed, and exactly which sources agreed and dissented
  • each catalog match: source, ecosystem, package, version, severity, and whether the source was signed or unsigned
  • posture override: the action (allow_once, allow_always, enforce_block, enforce_warn), the package, ecosystem, and rule it scopes to, and the reason
  • Sentry evidence: rule name and severity, the process and pid, the parent process chain, files accessed, network destinations, and any correlated extension
  • LlamaFirewall result (scan kind, verdict, confidence)
  • multi-agent lineage (agent id and chain), cluster id, and ruleset version

Safe by construction. Audit fields can carry attacker-influenced content (package names, commands, paths). Every record-derived string is sanitized before it reaches the terminal, and the viewer renders only the already-redacted on-disk fields. It never re-reads or un-redacts the source data.

The same log is queryable and exportable from the CLI; see Audit Log.

Alerts

Open with !, or : then alerts, or d from a live incident card. This is the live security feed built from audit records (Sentry rule hits and policy block/warn decisions), rendered as badge-coded rows.

KeyAction
/ Select an alert
enterInspect (expand the parent chain, files accessed, and network destinations)
typeFilter the feed
q / QSend the selected item to quarantine
escClear the filter, or close

Catalogs

Open with : then catalogs. Shows per-source freshness pips and age for the threat-intel sources (Bumblebee, OSV, Socket, and beekeeper-self).

KeyAction
sSync all sources now (runs a real sync; a toast reports synced, unchanged, or failed)
iCycle the background sync schedule and persist it to config
escClose

Policy editor

Open with p, or : then policy edit. Loads or seeds the managed policy file and shows the corroboration thresholds and the allowlist/blocklist rules (package_allowlist, sensitive_path). Editing requires --admin.

KeyAction
/ Select a row
+ / -Adjust a corroboration threshold
aAdd a rule
d / xDelete the selected rule
enter / typeEnter a value
escCancel an entry, or close

Edits are validated before they persist to disk. A rejected edit surfaces why and leaves the on-disk policy file unchanged.

First-responder settings

Open with s, or : then settings. Edits the auto_quarantine and corpus config knobs without hand-editing JSON (see Configuration). Editing requires --admin.

KeyAction
/ Select a row
spaceToggle a boolean (enabled, dry_run)
+ / - (or l / h)Adjust an integer (threshold, downstream_clean_days)
escClose

An out-of-range value (for example an auto_quarantine threshold outside 1..3) is rejected before it is written. The panel validates and writes config.json for you.

Quarantine

Open with : then quarantine. Lists quarantined items backed by the same store as the CLI beekeeper quarantine command. Restore and purge require --admin.

KeyAction
/ Select an item
enterShow details
rRestore the selected item (admin)
pPurge the selected item (admin; requires a y / Y confirmation)
escClose

Scan

Open with : then scan now, scan --quick, or scan history. Runs the dependency and extension scanner asynchronously with a progress animation, then shows the discovered packages, findings, and past scan results. esc closes.

Help

Open with ?, or : then help. A static keybinding and concept reference that also shows the running Beekeeper version.

Incident escalation

Calm mode stays quiet by design. When Sentry emits a critical alert, the base screen escalates on its own and renders an incident card built from the real record: a description, the actual process tree, and an action set.

KeyAction
/ / / Move the action selection
enterRun the selected action
aAcknowledge the incident
dOpen the full Alerts panel (without resolving the incident)

Acknowledging is not containment. The dashboard has no in-process quarantine or kill primitive, so acknowledging clears the banner and tells you to review the alert log and remediate through the CLI (and rotate any exposed credentials). Containment of extensions lives in the unprivileged watch/scan layer, not in the dashboard.

On this page