Skip to content

Releases: neostryder/scout

Scout 0.2.0

Choose a tag to compare

@neostryder neostryder released this 12 Oct 04:24

Added

  • [Visible] [UI] The portal has a phone layout. On a screen narrower than 720 pixels, the top navigation becomes a tab bar along the bottom with Services, Resources, Alerts, Outages, and More, and More opens a sheet with Updates, Catalog, Review queue, Jobs, and Settings. The Alerts tab shows how many alerts are open. The Catalog and Updates tables show each row as a card, and the detail panel fills the screen.
  • [Visible] [UI] A density button in the header switches between Auto, Comfortable, and Compact. Comfortable gives rows more height and makes touch targets 44 pixels, Compact keeps the tight desktop look, and Auto uses Comfortable on a touch screen and Compact with a mouse. Each browser keeps its own choice.
  • [Visible] [UI] The portal still opens when the hub cannot be reached. The service worker saves every page file and every successful API read that passes through it, and shows those saved copies when the hub does not answer. A gold strip then says "Offline, as of" with the time of the oldest saved answer on the screen, and every control that would change something is dimmed and turned off. When the hub answers again, the strip offers a reload. Only pages opened while the hub was reachable have a saved copy, and each browser keeps at most 200 saved answers.
  • [Visible] [UI] A command palette finds a port, machine, service, or page and jumps to it. Ctrl+K, Cmd+K on a Mac, or the magnifier button in the header opens it, and a port can be typed as "port 4870", ":4870", or just the number. Every result is a link, and nothing in the palette can start, stop, or change anything.
  • [Visible] [Services] Each machine on the Services map shows how many of its ports other machines can reach. A line on the machine's island gives the number of listening ports and how many of them listen on the LAN or on all interfaces, such as "12 ports listening, 5 exposed".

Changed

  • [Visible] [UI] The portal downloads less when it opens and each time it refreshes. The code for the Services, Resources, and Settings pages loads the first time each page opens, so the first screen is smaller. The reads the page polls (overview, listeners, routes, health, ports, stacks, alerts, outages, resources, summary, installs, and updates) now carry an ETag, and a request for an answer the browser already holds gets a 304 with no body. Every other API read is still sent with Cache-Control: no-store.

Fixed

  • [Visible] [Services] A service now claims the listeners that its child processes open. Scout matched a listener to a service only when the service's own process held the port, so a service that starts helper programs, such as Cogitator and the two engines it runs on Bilbo, left those ports looking unowned and unwatched. The listener scan now records each listener's parent process on Windows and macOS, and a listener whose parent is a service that stays up is treated as that service's and watched for outages.

Scout 0.1.1

Choose a tag to compare

@neostryder neostryder released this 11 Oct 23:41

Fixed

  • [Visible] [Services] A port no longer shows up twice when Windows reports its owner as process 0. Some Windows builds read the owner of a loopback listener as "Idle" on one scan and as the real program on the next, so the Services page listed the port under both names. Scout now keeps the last real owner it saw on that port.
  • [Visible] [Services] Short-lived high ports no longer raise outage alerts. Cloudflare WARP opens a new port in the dynamic range on the LAN address every hour or so and closes it a minute later, and Scout reported each one as a service going down. Scout now skips any listener in the dynamic port range unless a container serves it.
  • [Visible] [Services] Services on the hub machine no longer flap between down and back up when Windows drops them from its listener list. Some Windows builds leave loopback listeners out of that list or show them under an unknown owner, so running services looked stopped for a minute or two. Scout now connects to the port before it counts a listener on the hub machine as down, and a port that still accepts connections stays up.
  • [Visible] [UI] Saving the portal as an app on a phone keeps its icon. The icons and the manifest were behind the Cloudflare Access sign-in, and a phone fetches the home-screen icon in a separate process that has none, so it got a login page. The page now carries its Apple touch icon and favicon inline, and the other icons and the manifest load without a sign-in from a bypass rule that names those paths. The hub serves only those paths without a token.

Scout 0.1.0

Choose a tag to compare

@neostryder neostryder released this 11 Oct 22:38

Added

  • [Visible] [UI] Scout has a new app icon, a stone watchtower with a glowing lantern on a gold hexagonal badge. The badge sits on a dark teal rounded square, with two green banners and an emerald over the tower door. Every other size, from the favicon to the tray app's Windows and macOS icons, is generated from packages/web/public/icon.svg by node tools/make-icons.mjs. The web page now links a web app manifest, so a browser can offer to install Scout as an app. The tray app's executable, installer, and shortcuts use it too, and the status icon in the notification area is now a small gold-and-amber watchtower beside the same green, amber, red, or grey status marker.
  • [Visible] [UI] A Resources page shows how busy each machine is. It sits beside Services in the top navigation, with one card per machine that gives its operating system, the age of the reading, and a one-line summary. Each card has rows for Processor, Memory, each disk, Video memory and Graphics for each NVIDIA card, and Network, and each row shows a bar, a number, and, except for disks and video memory, a half-hour chart. A row turns amber and says High at 70 percent, and turns red with a striped bar and says Very high at 85 percent. Selecting Processor or Memory lists the five processes using the most of it on that machine, and a process that belongs to a running service or an open listener in the catalog shows that name instead of its process name.
  • [Visible] [Services] The hub reads processor, memory, disk, graphics, and network use from every machine. It uses the connection Scout already has for each machine, locally on the hub machine and over ssh for the others, and runs one fixed read-only script per operating system. Readings arrive every 60 seconds, or every 10 seconds while the Resources page is open. A machine that cannot be read keeps its last reading, which is marked Stale after 150 seconds, and the other machines carry on. --no-meters turns metering off.
  • [Visible] [UI] Scout sends you a notice when a disk is nearly full, memory is under pressure, or video memory is nearly used up. A notice goes out once a meter has stayed at or over its threshold for a set number of minutes: 90 percent for 5 minutes for each disk, 92 percent for 10 minutes for each machine's memory, and 95 percent for 10 minutes for each graphics card's video memory. Each episode sends one notice through the same desktop notification and Discord webhook as outage notices, and one "back to normal" notice follows once the meter falls 5 points under the threshold. The Alerts section on the Resources page turns each rule on or off and changes its percentage and minutes, and the same settings are kept in .scout-data/meter-alerts.json on the hub machine.
  • [Visible] [UI] The tray panel shows how busy the selected machine is. A strip under the machine tabs has rows for Processor, Memory, the busiest disk, and Video memory, each with a bar and a percentage. A row turns amber and says High at 70 percent, and turns red and says Very high at 85 percent, the same as on the Resources page, and a reading older than 150 seconds is dimmed. The tray icon's tooltip also lists each machine that has a reading, for example "Eru 12% CPU 38% RAM 20% VRAM", with the VRAM figure only on machines that have a graphics card.
  • [Visible] [UI] The tray panel starts when you sign in and starts again after a crash. The installed app registers itself each time it starts: a per-user scheduled task named "Scout Tray" on Windows, and a LaunchAgent on macOS. A development build registers nothing. "Start at login" on the tray icon's right-click menu is on by default and turns this off or back on. Quit asks for confirmation first, and after Quit Scout the tray stays closed until the next time you sign in.
  • [Visible] [Services] You can disable and enable launchd jobs and scheduled tasks from Scout. Disable stops the job and keeps it from running again until you enable it, and both actions go through the same plan, confirmation, and audit log as start, stop, and restart.
  • [Visible] [Inventory] Scout scans your machines and lists the software on each one. It reads Windows (registry, winget, Store apps, WSL, Docker Sandboxes), macOS (apps, Homebrew, casks, pkgutil, launchd), npm, pipx, and uv tools, Go and local binaries, language runtimes, container images, and dpkg packages on Linux. Remote machines are read over ssh, and a scan never starts a program or a guest.
  • [Visible] [UI] A page on the hub machine shows the whole catalog. It has Catalog, Updates, Review, Jobs, and Services views with live search, filters you can save, and a detail panel for each install. The Review view lets you confirm or reject installs that Scout thinks are the same program.
  • [Visible] [Research] Scout finds the newest version of each install. It asks Homebrew, npm, PyPI, GitHub releases, the Go module proxy, crates.io, Sparkle appcasts, winget, and the Store, and shows end-of-life dates from endoflife.date as notes.
  • [Visible] [Updates] You can update installs from the page. Scout shows the exact winget, Store, brew, cask, npm, pipx, or uv command, waits for you to confirm, and then runs a check, the update, and a verify step for one job at a time on each machine. The Updates list is sorted by a priority score by default.
  • [Visible] [Updates] Updates that would break other software are refused. If an update would break a runtime another program needs, Scout refuses it, and smaller risks ask for a second confirmation. Version pins in your project files show up as notes.
  • [Visible] [Updates] Apps with no package manager can get their installer downloaded. Scout saves it to that machine's Downloads folder after checking its size and checksum, and leaves running it to you.
  • [Visible] [Services] The Services view shows what is running and listening on each machine. It lists open ports, Windows services, scheduled tasks, and launchd jobs, marks each as essential, optional, or third-party, and gives each a short description you can edit.
  • [Visible] [Services] You can start, stop, and restart services from Scout. Each action shows a plan first, needs a one-time confirmation, and is logged. Scout will not stop anything on its protected list, such as ssh, remote access, the tunnel, or Scout itself, and it gives uninstall steps as text only.
  • [Visible] [Services] A Windows hub machine can start your own projects. Scout finds package scripts, launch configurations, and compose files in your project folders and runs each one only after you approve its exact command. Stacks start several of them in order and wait for each port to open.
  • [Visible] [Services] Alerts tell you when something changes. They cover new listeners and background jobs, stopped services, sites that are down, ports that became reachable from more places, failing health checks, certificates that expire within 14 days, crash loops, and port clashes with your ports registry. You can acknowledge or mute each one.
  • [Visible] [Services] Installs, services, and listeners carry provenance flags. Odd location marks something installed in or running from a temp folder, a Downloads or Desktop folder, the shared Public folder, or the Recycle Bin. No publisher marks a Windows uninstall entry that names none, Not signed marks a Store app package with no signature, and Mine marks what belongs to your own projects. Each flag shows its evidence as hover text and in the detail panel's Provenance list, and no flag changes anything on a machine.
  • [Visible] [Services] The provenance CLI command shows which projects are yours. It lists each project's git remote, last author, and whether it counts as yours, provenance scan reads the git facts again, and provenance flags lists flagged installs with their evidence. Your projects are named by an optional .scout-data/mine.json holding your GitHub owners and git author emails.
  • [Visible] [Services] Scout watches for outages and records each one. Every 2 minutes the hub checks each machine's ssh port for an SSH greeting, the public hostnames it health-checks, and the services and ports it has seen running. A machine that accepts a connection but sends no greeting counts as hung, and an outage is confirmed after 2 failed checks in a row, so a quick restart raises nothing.
  • [Visible] [Services] The Services page has an Outages tab. It lists open and past outages, shows the status of each notice channel, sends a test notice, pauses the watch for 1 or 8 hours, and turns checks on or off by kind, machine, or item. The outages CLI command lists outages, pauses and resumes the watch, and changes the same switches.
  • [Visible] [Services] Outage notices reach your desktop and Discord. Each outage and its recovery show a desktop notification on the hub machine, and a Discord post when SCOUT_DISCORD_WEBHOOK holds a Discord webhook address. Outages also appear on the Alerts tab as high-severity alerts.
  • [Visible] [Services] A watchdog reports when the hub itself stops. pnpm --filter @scout/hub watchdog (on Windows, tools/run-watchdog.ps1 keeps it running) runs as a second login service on Windows, macOS, or Linux and sends a notice when the hub's heartbeat goes stale, and a restarted hub records the time it was not running as a monitor gap.
  • [Visible] [Services] Outage notices and alerts show the time in the hub machine's time zone. Outage notices, outage alerts, and unhealthy-endpoint alerts give local time to the second, such as 2026-10-10 15:26:03 MST, and end with the minutes since the last successful check, such as (4 minutes since the last successful check), or say that no successful check is on record. The watchdog notice uses the same time format.
  • [Visible] [Services] A pause in the hub no longer shows up as a site going down. If a health probe times out or cannot connect while the hub itself was...
Read more