ElBruno.FoundryLocalMonitor
0.5.17
See the version list below for details.
dotnet tool install --global ElBruno.FoundryLocalMonitor --version 0.5.17
dotnet new tool-manifest
dotnet tool install --local ElBruno.FoundryLocalMonitor --version 0.5.17
#tool dotnet:?package=ElBruno.FoundryLocalMonitor&version=0.5.17
nuke :add-package ElBruno.FoundryLocalMonitor --version 0.5.17
ElBruno.FoundryLocalMonitor
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 |
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, available models
- ⚙️ 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
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 → merge model lists
(kernel call, ~1ms) (800ms timeout each) (union by ModelId)
This means the monitor detects:
- Models loaded via
foundry model load(CLI path) - Models loaded via the C#
FoundryLocalManagerSDK (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
- Windows 10/11
- .NET 10 runtime
- Foundry Local installed
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
- Foundry Local — runtime foundation
- Hardcodet.NotifyIcon.Wpf — tray icon support
| Product | Versions 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. |
This package has no dependencies.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.5.30 | 102 | 7/6/2026 |
| 0.5.29 | 90 | 7/6/2026 |
| 0.5.28 | 84 | 7/6/2026 |
| 0.5.27 | 89 | 7/6/2026 |
| 0.5.26 | 95 | 7/6/2026 |
| 0.5.25 | 93 | 7/6/2026 |
| 0.5.24 | 98 | 7/6/2026 |
| 0.5.23 | 90 | 7/6/2026 |
| 0.5.22 | 109 | 7/6/2026 |
| 0.5.21 | 95 | 7/6/2026 |
| 0.5.20 | 96 | 7/6/2026 |
| 0.5.19 | 100 | 7/6/2026 |
| 0.5.18 | 94 | 7/6/2026 |
| 0.5.17 | 102 | 7/5/2026 |
| 0.5.16 | 95 | 7/5/2026 |
| 0.5.15 | 103 | 7/5/2026 |
| 0.5.14 | 104 | 7/5/2026 |
| 0.5.13 | 92 | 7/5/2026 |
| 0.5.12 | 105 | 7/4/2026 |
| 0.5.10 | 102 | 7/4/2026 |