Skip to content
Development
Skill

/baseline-alignment

Inforcer's core drift-detection surface: baseline templates, tenant alignment scores, alignment details (the per-policy breakdown of a tenant against its assigned baseline), and reading deployed tenant policy state. Read-only.

From plugin
msp-claude-plugins
52200 skills146 agents200 commands4 MCP

Claude Code

$ npx -y skills add wyre-ai/msp-claude-plugins --skill baseline-alignment --agent claude-code

SKILL.md

baseline-alignment.SKILL.md
name: "Inforcer Baseline Alignment"
description: >
  Inforcer's core drift-detection surface: baseline templates, tenant
  alignment scores, alignment details (the per-policy breakdown of a tenant
  against its assigned baseline), and reading deployed tenant policy state.
  Read-only.
when_to_use: >-
  When listing baseline templates, reading a tenant's alignment score, or inspecting
  per-policy drift against an assigned baseline.
  Use when: inforcer baseline, baseline template, tenant alignment, alignment
  score, alignment details, policy drift, drift detail, or tenant policies.

Inforcer Baseline Alignment & Drift

Inforcer's central idea: each managed tenant is measured against an assigned **security baseline** (a template of policy settings). The gap between the tenant's deployed state and that baseline is **drift**. This skill covers listing baselines, reading alignment scores, and — most importantly — pulling the **per-policy alignment details** that show exactly where a tenant has drifted.

Read [api-patterns](../api-patterns/SKILL.md) for headers, region, the envelope, and pagination, and [tenant-management](../tenant-management/SKILL.md) for resolving a tenant to its integer Client Tenant ID. Every alignment/policy call is tenant-scoped by that integer id.

Anti-triggers

  • **Fixing the drift** — Inforcer's API cannot deploy a policy,

remediate, or restore configuration; those exist only in the Inforcer UI. The M365 changes themselves are `cipp-users`, `cipp-security`, or `cipp-standards`, and CIPP's `Remediate`-mode standards are the auto-fix mechanism Inforcer lacks.

  • **CIPP's version of "baseline" and "drift"** — CIPP standards and

BPA measure a different template with different findings; the two scores are not comparable. Use `cipp-standards`.

  • **The threshold that turns a score into aligned / semi-aligned /

drifted** — that classification lives in `inforcer-compliance-reporting`.

  • **What change caused a drift** — the alignment surface shows state,

not history; use `inforcer-audit-events`.

Tools

`inforcer_baselines_list`

List the security **baseline templates** defined in Inforcer. Returns baseline objects (id, name, and the policy settings each baseline prescribes). Baselines are the "golden" definition a tenant is compared against.

inforcer_baselines_list()

`inforcer_alignment_scores`

Read the **alignment score** for a tenant — the headline measure of how closely the tenant matches its assigned baseline.

inforcer_alignment_scores(clientTenantId=1423)

Use this for the at-a-glance "how aligned is this tenant?" answer. Score classification (aligned / semi-aligned / drifted) is threshold-driven — see [compliance-reporting](../compliance-reporting/SKILL.md).

`inforcer_alignment_details`

Pull the **per-policy drift breakdown** — the detailed list of how each policy in the tenant compares to the baseline. This is where you see *which* policies are aligned and *which* have drifted, not just the aggregate score.

inforcer_alignment_details(clientTenantId=1423)

Returns, per policy, the baseline-expected state and the tenant's actual state so you can pinpoint exactly what diverged. This is the primary input to any drift report.

`inforcer_policies_list`

List the **deployed policy state** for a tenant (read-only). Shows what policies are actually in place on the tenant, independent of the baseline comparison.

inforcer_policies_list(tenant="Acme")

The `tenant` argument accepts a friendly name, a DNS name, an Azure AD tenant GUID, or the numeric Client Tenant ID; the server resolves the first three to the numeric id before calling Inforcer.

Use this to inspect the tenant's real configuration when an alignment detail is ambiguous, or to confirm what is actually deployed.

What to look for in an alignment review

| Finding | Why it matters | |---------|----------------| | Low alignment score | The tenant has drifted materially from its baseline; investigate `inforcer_alignment_details` | | Policy present in baseline but absent on tenant | A required control was never deployed or was removed | | Policy deployed but with weaker settings than baseline | Silent weakening — looks "configured" but doesn't meet baseline | | Many small drifts vs one critical drift | Triage by control impact, not count — one missing MFA/identity control outweighs many cosmetic diffs | | Tenant with no assigned baseline | Nothing to measure against; alignment is meaningless until a baseline is assigned |

Workflow patterns

Single-tenant drift deep-dive

ctid    = resolve("Acme")                 # integer Client Tenant ID
score   = inforcer_alignment_scores(clientTenantId=ctid)
details = inforcer_alignment_details(clientTenantId=ctid)
drifted = [p for p in details if p['aligned'] is False]

Start from the score for the headline, then read `alignment_details` to list the drifted policies. Cross-reference `inforcer_policies_list` when you need the tenant's actual deployed value for a policy.

Portfolio drift sweep

For each tenant from `inforcer_tenants_list`, pull `inforcer_alignment_scores`, then drill into `inforcer_alignment_details` only for tenants below an alignment threshold. This keeps the sweep cheap while still surfacing the per-policy detail where it matters. Page `continuationToken` to completion on every list.

Caveats

  • Inforcer's API is **read-only** for alignment. You can **see** drift in

full detail, but you **cannot** deploy a policy, remediate the drift, or restore configuration through the API. Those actions exist only in the Inforcer UI — surface them as recommendations, never as something this plugin performs.

  • The API is **community-sourced** (no official public docs); field

names such as `aligned` and the exact `alignment_details` shape are illustrative and credited to [`royklo/InforcerCommunity`](https://github.com/royklo/InforcerCommunity).

  • Alignm
Read more
@wyre-technology
Ships withmsp-claude-plugins

One command to supercharge Claude Code for MSP workflows. Then restart Claude Code. That's it. Documentation: mcp.wyre.ai

52200 skills146 agents4 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
52
Star history of wyre-technology/msp-claude-plugins on GitHub, a chart by star-history.com

Other skills on msp-claude-plugins.

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills10d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc11d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react1d252k
@facebook@facebookInstall Skill

Questions about baseline-alignment.

Which coding agents can use baseline-alignment?
baseline-alignment installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.