Skip to content

Add plugin entry: host-monitor - #128

Open
MateoCerquetella wants to merge 2 commits into
get-bb:mainfrom
MateoCerquetella:submit-machine-monitor
Open

Add plugin entry: host-monitor#128
MateoCerquetella wants to merge 2 commits into
get-bb:mainfrom
MateoCerquetella:submit-machine-monitor

Conversation

@MateoCerquetella

@MateoCerquetella MateoCerquetella commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

What the plugin does

Host Monitor adds a live multi-machine fleet view to bb with CPU, RAM, disk,
network throughput, load, uptime, connection state, threshold colors, host
details, a compact sidebar summary, and a movable floating monitor. It also
provides an on-demand, searchable process ledger with guarded stop actions.

Screenshots

Fleet dashboard

Host Monitor dashboard with a four-machine fleet and selected host details

Process ledger

Host Monitor process ledger with sortable resource columns and guarded stop actions

Floating monitor

Movable Host Monitor window showing CPU, RAM, download, and upload across four machines

Release source

  • Repository: https://github.com/MateoCerquetella/bb-plugins.git
  • Plugin id: host-monitor
  • Package: bb-plugin-host-monitor@0.1.0
  • Subdirectory: plugins/host-monitor
  • Release: host-monitor/v0.1.0
  • Marketplace range: ^0.1.0
  • Tag prefix: host-monitor/
  • Release commit: 04fc439cc69d76f78bb6bb1f853e421a1b9e90a0

The retired machine-monitor/v0.1.0 tag remains immutable at its original
release commit. The ids are separate; existing installations do not update
across the rename.

Plugin validation

  • Marketplace id derivation resolves host-monitor.
  • Focused SDK check, TypeScript, 145 tests, and server/app/host build passed.
  • Root npm workspace check passed for Host Monitor, Taskboard, and Usage Tracker.
  • Built metadata reports plugin id host-monitor, BB 0.40.0, and SDK 0.4.21.
  • Package dry-run contains 37 expected files, including the README, three
    sanitized screenshots, and every server/app/host artifact.
  • Live UI covered cards, rows, masked host details, processes, sidebar and
    floating views, threshold continuity, keyboard interactions, retired-route
    behavior, and request/asset/class paths under the new id only.

Marketplace validation

  • npm ci --ignore-scripts passed with no vulnerabilities.
  • npm run build passed and composed 83 entries.
  • Host Monitor Git source liveness passed against the public
    host-monitor/v0.1.0 tag and matching plugins/host-monitor manifest.
  • The repository-wide check exits non-zero only for the existing Taskboard and
    Usage Tracker entries, whose npm packages were unpublished on 2026-08-26;
    this rename does not modify those unrelated listings.
  • Entry id/filename, vendored icon, subdirectory, range, and tag prefix all use
    host-monitor; the icon bytes retain SHA-256 112563319707acd7….

Permissions and security

Host Monitor is full-trust bb plugin code and ships a host worker to enrolled
macOS, Linux, and Windows machines. It reads OS resource metrics, system
details, one validated primary IP address, and an on-demand bounded process
projection. The IP is masked by default. It does not collect credentials,
usernames, command lines, executable paths, working directories, environment
variables, MAC addresses, netmasks, or interface lists, and sends no data to
third-party services.

Process stop actions are limited to freshly revalidated same-user processes.
They require an explicit dialog and a 60-second one-use confirmation token.
System PIDs, Host Monitor and its ancestors, other/unknown owners,
unverifiable identities or ancestry, and all processes while elevated remain
protected. Linux and macOS use graceful termination first and require a
separate force confirmation if the process persists; Windows is force-only.
There are no bulk, tree, or automatic stop actions.

@MateoCerquetella MateoCerquetella changed the title Add plugin entry: machine-monitor Add plugin entry: host-monitor Aug 27, 2026
@SawyerHood

Copy link
Copy Markdown
Contributor

Automated note from a Claude Code agent, posted on behalf of the marketplace maintainer.

Thanks for the submission — we really want to get this in. For the first run of the marketplace we are aiming for a small set of very polished plugins, and we will open it up more broadly soon. Here is what we found reviewing the source at the tag your entry resolves to and installing it from that entry into a dev build of BB 0.40:

This installs and runs cleanly, and the system-data collection is exactly what the entry advertises — nothing leaves the machine. Two cheap fixes and we will merge it.

1. The entry does not mention that the plugin can stop processes

lib/processes.ts:1181-1271 can terminate processes, and the entry description covers monitoring only. We want to be clear the gating here is unusually careful and we found no way around it: terminateProcess re-collects the inventory, requires the caller's opaque HMAC identity to still match (:1041-1058), then re-validates a second time immediately before signalling (revalidatePosixIdentity, :1129). terminationGate (:890-909) refuses outright when the BB worker is root/Administrator, for pid 0/1 (and 4 on Windows), for its own pid, for unverified or ancestor pids, and for different-user/unknown owners. Windows kills go through a constant PowerShell script taking pid and expected start time via env vars rather than string interpolation, and re-check the start time before Kill().

So this is a disclosure ask, not a security one — please just say in the description that it can stop processes as well as monitor them.

2. Activity is not a valid host icon name

app.tsx:2648 uses icon: "Activity" for the Processes tab. It is in neither CORE_ICON_MAP nor EXTENDED_ICON_NAMES and has never been in the map. The SDK types the field as plain string, so neither tsc nor the install-time build catches it — it silently renders the fallback. ChartColumn or Cpu work. (Terminal at :2626 and :2632 is valid, and your entry icon and bb.branding.icon are both fine.)

Two notes, no action needed

  • lib/sidebar-host-monitor.ts:1839-1860 observes document.documentElement with childList/subtree. You do filter your own surface's mutations before scheduling and the work is requestAnimationFrame-coalesced, which is more than most — it still wakes on every app-wide DOM change.
  • The content-script fallback that matches any button whose textContent is exactly "Host Monitor" (:875) is a theoretical cross-plugin mismatch. The primary selector on data-plugin-icon-asset is correctly scoped, and you restore every attribute on dispose.

What we liked

We enumerated the whole collection surface and it is clean: no process command lines or argv (only the truncated comm/Name, so secrets passed as CLI args are never captured), no usernames, no env vars, no open files, no listening ports, no per-connection network data, and nothing under ~/.bb, ~/.claude or ~/.ssh. Every subprocess is execFile with a literal absolute path and a constant argv array. No agent tools, no CLI, no secrets access. zod is correctly the only runtime dependency.

@SawyerHood SawyerHood left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review (Claude Code agent on behalf of the maintainer): requesting changes per the feedback comment above. Ping here when a new version is published and we will re-check.

@SawyerHood SawyerHood added the blocked Waiting on plugin author changes before it can be listed label Aug 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

blocked Waiting on plugin author changes before it can be listed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants