For developers

Add your own checks without touching the app

A module is a folder with a manifest and a script. Write it in PowerShell or Python, drop it in, and it shows up in the catalog next to the 55 that ship with Muon Insight.

01Anatomy

A module is a folder

The manifest tells Muon Insight what the module is called, which category it belongs to, what type it is, and whether it supports remote computers, needs confirmation or can be cancelled. The app reads the manifest; the entry point does the work.

modules/
└─ print-queue-age/
   ├─ module.json   # manifest
   ├─ main.ps1      # entry point (or main.py)
   └─ README.md     # help for technicians
Diagram of a module folder with its manifest and entry point

02Manifest

Declare what the module does

Module types match the catalog: diagnostic, action, log_collector, analyzer and integration. Set requires_confirmation on anything that changes the computer.

Example only. Field names are from the current manifest schema.

{
  "schema_version": "1.0",
  "id": "example.print-queue-age",
  "name": "Print Queue Age Check",
  "version": "1.0.0",
  "description": "Reports print jobs older than a threshold.",
  "category": "Printing",
  "language": "powershell",
  "entry_point": "main.ps1",
  "module_type": "diagnostic",
  "supports_local": true,
  "supports_remote": true,
  "requires_confirmation": false,
  "supports_cancellation": true,
  "timeout_seconds": 120
}

03Module SDK

PowerShell and Python

The SDK is the boundary between your module and the app. It loads the run context, reports progress, checks for cancellation and returns one normalized result, which is how your module's output ends up as findings.

PowerShell

Import-MuonContext
Read the run context
Write-MuonProgress
Report progress
Test-MuonCancellation
Honor a cancel request
New-MuonFinding
Build a finding
Complete-MuonModule
Return the result

Python

ModuleContext.from_argv()
Read the run context
context.progress()
Report progress
context.cancelled()
Honor a cancel request
context.result()
Return the result

04Custom packs

Combine modules into a pack

A pack is a JSON file that lists modules to run in one go. Steps can depend on earlier steps or be marked optional, and can pass parameters to a module.

Publish your modules and packs through the content repository's development, pilot and production channels. About channels

{
  "schema_version": "1.0",
  "id": "pack.example-slow-logon",
  "name": "Slow Logon Triage",
  "description": "Checks Group Policy health, then collects logon traces.",
  "modules": [
    { "module_id": "windows.group-policy-health", "depends_on": [], "optional": false, "parameters": {} },
    { "module_id": "logs.startup-logon", "depends_on": [], "optional": true, "parameters": {} }
  ]
}

Developer guide

The module developer guide covers the full manifest reference, the run context, result formats and examples. It ships inside the app and is published here too.

Free public beta

Build on Muon Insight

Download the app, open the module developer guide, and write your first module.