Vibeleaderboard
Index / app
Visit nameplate.sh
Category
Developer Tools
Rank
No. 577Tools index
Pricing
Open Source
Platform
desktop · cli
Type
APP
Builder
@steipete
GitHub
65 stars
Latest release
v0.3.1
Date

About

Nameplate brands every Mac, Windows, and Linux machine in your fleet with a colored frame, name tag, watermark, and connect splash so you instantly know which machine you just remoted into. All overlays are click-through, fullscreen-safe, and wallpaper-preserving. A fleet config file lets you style every machine from one dotfile, and a bundled CLI lets AI agents summon attention cards when they need a human at the keyboard.

What it does

Every machine in a remote-desktop fleet gets a stable look: a colored frame around each display, a corner name tag, a translucent watermark, and a connect card that plays when a session attaches. A shared JSON file in the user config directory maps lowercase short hostnames to a name, color, and glyph, and edits apply live. Machines with no entry still differ, because the default color is hashed from the hostname across an eight-color palette. Overlay windows are click-through and float above full-screen apps, so nothing changes the wallpaper.

Why it's ranked here

Three implementations ship here, and they are not equal. The Mac side is the deep one: strict concurrency turned on across every target, window levels chosen so menus can still open above the overlay, delayed frame re-syncs because screen data lags a display change, and a fail-safe teardown that acknowledges a waiting caller instead of hanging it. Windows and Linux carry the same identity file and two commands. The build workflow compiles and tests on macOS only, so the other two rest on review alone. Judge it as a strong Mac utility with working ports, not as one even cross-platform app.

What's good

Failure modes got attention. Alert requests are written to disk and announced separately, so a cold launch cannot drop an alert whose notification was missed. Requests older than 120 seconds are discarded, which stops a login replaying stale alerts. The blocking mode returns distinct exit codes for a human click, an app dismissal, and a timeout, so a script can branch on the outcome. Card size is validated before presentation, and an unpresentable card tears itself down rather than leaving a topmost window eating clicks. The hostname read avoids DNS resolution, which would otherwise block launch and trigger a permission prompt.

Tradeoffs

Parity is thin. Blocking acknowledgement, the settings and dismissal commands, and the location field are macOS only. Wayland cannot observe global clicks, so alerts there need an explicit duration, and the compositor must support the layer shell protocol. macOS exposes no public remote-session connect event, so the connect card fires on display wake, screen unlock, and display reconfiguration instead. Those are proxies and can fire with no remote client attached. Linux release tarballs need system GTK4 and X11 libraries already present. Alert duration is clamped between 2 and 120 seconds, so a long-lived banner is not available.

How to use it well

Best fit is someone driving several machines over remote desktop who has lost time typing into the wrong one. Second fit is agent work: a coding agent blocked on approval can raise a topmost card carrying its reason and wait until a human clicks, which suits password prompts and release gates. Pair it with whatever syncs your dotfiles, since identity lives in one small JSON file. It does not do remote control, session recording, or machine inventory, and it sends nothing off the box. Routing that same alert to a phone or a chat channel is a separate tool.

Technical notes+

The macOS app is a SwiftPM package targeting macOS 15 with an app, a CLI, a shared core and two test targets, strict concurrency enabled per target in Package.swift, and Sparkle as the sole dependency. Sources/NameplateCore/Identity.swift holds hostname shortening, hex normalization, WCAG luminance for picking readable text on a colored fill, and an FNV-1a hash that selects the default palette color; Sources/NameplateCore/FleetFile.swift decodes the fleet map and normalizes its keys to short hostnames. Sources/NameplateCore/AttentionRequest.swift is the queued file handoff, with microsecond-stamped filenames sorted lexically for ordering and a 120 second freshness window, and Sources/NameplateCLI/main.swift writes the request, launches the app when needed, posts a Darwin notification, then both polls and waits on a notification for the acknowledgement. Sources/Nameplate/OverlayController.swift builds one borderless non-activating panel per screen at status bar level, and Sources/Nameplate/AttentionController.swift layers pulsating border panels plus a card two levels higher with global and local click monitors. The ports use different transports: linux/nameplate/src/daemon.rs is a newline-delimited JSON Unix socket in the runtime directory that self-spawns the daemon when no socket answers, while windows/Nameplate.App/PipeServer.cs is a single-instance named pipe reading one JSON line per connection. linux/Cargo.toml pins Rust edition 2024 with a 1.92 floor, and .github/workflows/ci.yml runs build, test, and ad-hoc packaging on a macOS runner.

Observed

License
MIT
Languages
Swift on macOS, Rust on Linux, C# on Windows
Install surface
Homebrew cask and formula on macOS and Linux, downloadable ZIP on Windows, DMG on macOS
Interfaces
Menu bar or tray app plus a CLI; splash and alert commands on all three platforms
Platform floors
macOS 15 on Apple silicon; Swift 6.2 with Xcode 26 to build; .NET 8 SDK for Windows; Rust 1.92 with GTK4 and X11 for Linux
Configuration
One JSON fleet file keyed by lowercase short hostname, read by all three platforms, applied live
Blocking mode
Wait returns 0 on click, 3 on app dismissal, 4 on timeout or expiry; default wait limit 600 seconds
Tests
Two Swift test targets declared in the package manifest; the CI job builds and tests on a macOS runner only
Updates
Sparkle for Developer ID builds; Homebrew builds update through Homebrew; dev builds leave it off
Agent integration
A bundled skill document describing the human-approval handoff

Read from README.md, Package.swift, docs/cli.md, docs/configuration.md, Sources/NameplateCLI/main.swift, Sources/Nameplate/OverlayController.swift, Sources/Nameplate/AttentionController.swift, Sources/NameplateCore/FleetFile.swift, Sources/NameplateCore/AttentionRequest.swift, Sources/NameplateCore/Identity.swift, linux/nameplate/src/daemon.rs, linux/Cargo.toml, windows/Nameplate.App/PipeServer.cs, skills/nameplate-attention/SKILL.md, .github/workflows/ci.yml.

What it can do

  • Overlay a colored border frame on a remote desktop display

    Machine identifier and chosen color configurationPersistent colored frame rendered around the screen edges of the target machine

  • Display a name tag label on a remote machine's screen

    Machine name or hostnameVisible name tag overlay on the desktop identifying the machine

  • Apply a watermark to a machine's display

    Custom watermark text or branding configurationSemi-transparent watermark rendered persistently on the desktop

  • Show a connect splash screen when a remote session starts

    Remote connection event and machine branding settingsFull-screen splash overlay announcing which machine was just connected to

  • Apply centralized branding styles to an entire fleet of machines

    A fleet.json configuration dotfile defining per-machine or global stylesConsistent branded overlays deployed across all machines in the fleet

  • Trigger an attention card alert on a machine via CLI

    CLI command invocation with alert parametersOn-screen attention card displayed to prompt a human to interact with the machine

  • Integrate AI agent prompts requiring human approval into the desktop display

    AI agent request for human-in-the-loop confirmationVisual attention overlay surfaced on the target machine requesting human input

Tags

remote desktopfleet managementmacoslinuxwindowssysadminai agentsdevops

Tech Stack

Swift

Media

Nameplate

Comments (0)

No comments yet

Editorially curated, with community endorsements as a secondary signal. Corrections welcome.