ElBruno.FoundryLocalMonitor 0.5.30

dotnet tool install --global ElBruno.FoundryLocalMonitor --version 0.5.30
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local ElBruno.FoundryLocalMonitor --version 0.5.30
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=ElBruno.FoundryLocalMonitor&version=0.5.30
                    
nuke :add-package ElBruno.FoundryLocalMonitor --version 0.5.30
                    

ElBruno.FoundryLocalMonitor

NuGet NuGet Downloads Build Status License: MIT .NET GitHub stars

Foundry Local Monitor banner

Windows systray monitor for Foundry Local — detects model load/unload events from any app using Foundry Local, regardless of language or SDK.

⚠️ Windows only. This tool uses WPF and the Windows Notification Area. It cannot run on macOS or Linux.

Package

Package NuGet Downloads Description
ElBruno.FoundryLocalMonitor NuGet Downloads Windows systray monitor for Foundry Local

Features

  • 🔔 Toast notifications when models load/unload (Windows 10/11 Action Center)
  • 📊 Compact mini status window (always-on-top)
  • 🖥️ Full dashboard: Status, Loaded Models, and Available Models tabs
  • 📁 Click any process path to open its folder in Explorer
  • ⚙️ Systray icon with context menu
  • 🔍 Automatic multi-app discovery — detects Foundry Local running in C#, Python, Node.js, Aspire, or any other context without manual configuration
  • 🔕 Smart notifications — suppresses noisy SDK-internal events by default; only alerts for meaningful model changes

UI Overview

Status tab

Shows all discovered Foundry Local instances on the machine — each endpoint as a card with its URL, process name, port, PID, and process path. Click 📂 to open the process folder in Explorer.

Status tab

Loaded Models tab

Groups discovered instances by OS process (PID). Each card shows:

  • Process name, PID, and type badge (sdk proxy or daemon)
  • All ports this process listens on
  • Process executable path with 📂 folder shortcut
  • Every model currently loaded, with a device badge and the source port

Loaded Models tab — active models

Device badge colours:

Badge Colour Meaning
CUDA 🟢 green NVIDIA CUDA GPU
TensorRT 🟩 emerald TensorRT-optimised GPU
DirectML 🟣 purple DirectML GPU (Intel/AMD)
WinML 🟠 orange Windows ML CPU
CPU 🔵 blue Generic CPU
GPU 🟢 green Generic GPU
? ⬜ gray Device not detected (utility/proxy models)

The right-hand column shows the source port (e.g. :55588) so you can tell which endpoint serves each model when a proxy listens on multiple ports.

Available Models tab

Lists all models downloaded to your local Foundry cache and ready to load into memory.

Available Models tab

How Discovery Works

The monitor does not rely on the foundry CLI alone. It runs a parallel HTTP port scan across all active localhost listeners and identifies any endpoint serving the Foundry OpenAI-compatible API:

All 127.0.0.1 listeners  →  parallel GET /v1/models  →  group by PID  →  per-process cards
      (kernel call, ~1ms)       (800ms timeout each)      (merge ports)

This means the monitor detects:

  • Models loaded via foundry model load (CLI / daemon path)
  • Models loaded via the C# FoundryLocalManager SDK (port 55588 by default)
  • Models loaded via the Python foundry-local-sdk (port 55589 by default)
  • Models exposed through .NET Aspire proxy ports
  • Any other app on any dynamic port that serves /v1/models

→ Full details: docs/discovery.md

Install

dotnet tool install -g ElBruno.FoundryLocalMonitor
foundrylocalmon

Requirements

Samples

Sample Language SDK path Description
samples/FoundryLocalChat C# SDK internal server (55588) Automated E2E demo with SDK
samples/FoundryLocalChatPy Python SDK internal server (55589) Same demo in Python

Both samples run together in the multi-client E2E test to verify the monitor detects events from two simultaneous apps.

E2E Testing

# Single-client test (C# only)
cd tests/e2e
.\Run-E2ETest.ps1 -LaunchMonitor

# Multi-client test (C# + Python simultaneously)
.\Run-E2EMultiClient.ps1 -LaunchMonitor

See tests/e2e/README.md for full test documentation.

Build from source

dotnet restore
dotnet build
dotnet test

Publishing

GitHub Release or manual workflow_dispatch triggers publish. The workflow requires the release environment and the NUGET_USER secret, and uses OIDC Trusted Publishing (NUGET_API_KEY is not used).

License

MIT

👋 About the Author

Made with ❤️ by Bruno Capuano.

🙏 Acknowledgments

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last Updated
0.5.30 34 7/6/2026
0.5.29 38 7/6/2026
0.5.28 26 7/6/2026
0.5.27 27 7/6/2026
0.5.26 33 7/6/2026
0.5.25 37 7/6/2026
0.5.24 45 7/6/2026
0.5.23 36 7/6/2026
0.5.22 50 7/6/2026
0.5.21 41 7/6/2026
0.5.20 41 7/6/2026
0.5.19 45 7/6/2026
0.5.18 41 7/6/2026
0.5.17 50 7/5/2026
0.5.16 46 7/5/2026
0.5.15 54 7/5/2026
0.5.14 55 7/5/2026
0.5.13 43 7/5/2026
0.5.12 50 7/4/2026
0.5.10 53 7/4/2026
Loading failed