Skans Docs/How-tos/Install & approve the Windows agent
How-tos
Install & approve the Windows agent
Windows servers and workstations are managed by the Skans agent — a lightweight service that runs on the endpoint and handles patching, inventory, Defender health, compliance checks, logs, and metrics, reporting back over mutual TLS. This is the agent lane; cameras and IoT go the agentless route instead.
From a Windows device’s detail page (or the wizard’s Find & secure devices step), choose Deploy agent. Skans publishes the agent through GPO / SYSVOL to its managed-computers OU. The target picks it up and installs it on its next Group Policy refresh or reboot.
TEXT
Deploy agent → published to GPO (Skans computers OU)
→ installs at next gpupdate / reboot
There’s no installer to carry from machine to machine — the appliance pushes it. (An opt-in immediate push exists for when you don’t want to wait for the next policy cycle; the GPO path is the default.)
Note
The agent installs as a Windows service (SkansAgent, automatic, restart-on-failure) and sends a liveness heartbeat to the appliance over mTLS. On workstations it also installs a small tray status helper.
Warning
A double-click, hand-carried agent installer is not a shipped path yet — today the agent is deployed by the appliance over GPO. If you see a reference to a standalone MSI wizard, treat it as roadmap.
2. Licence acceptance happens at install, and is recorded #
The agent package has no licence dialog and can’t have one — it installs as SYSTEM in session 0, where a dialog is an invisible hang. So acceptance is asserted on the install command (ACCEPTEULA=1) and written to the endpoint, rather than clicked on the endpoint.
The deployment Skans generates for you already states it. The acceptance it asserts is the one you gave in the console when you chose to deploy the agent to this site — not the technician at the machine, who isn’t present. If you build your own deployment by hand, you must state it too, or the install is refused rather than proceeding with no agreement in force.
Each endpoint keeps its own record under HKLM\SOFTWARE\SkansLabs\Agent:
Value
What it is
LicenseAcceptedSha256
SHA-256 of the licence text as the installer renders it — the agreement’s identity
LicenseAcceptedProductVersion
the build that recorded it
LicenseAcceptedBy
the account the installer ran as
LicenseAcceptedLocalDate
the machine’s local clock — Windows Installer exposes no UTC, so it is named for what it is
LicenseAcceptedUiLevel
whether the install was attended
That record is also load-bearing, not just a paper trail: an upgrade reads it and proceeds on the acceptance already given. Delete it and the next silent upgrade is refused.
Note
If a release changes the licence text, updates stop rather than accepting new terms for you. The recorded hash no longer matches, and the agent refuses the update before installing it — so you get one clear refusal per endpoint instead of a fleet that installs, fails, rolls back and retries. Accept the new terms on the install to resume. Upgrades of an existing installation are otherwise never gated: patching shouldn’t stop over a licence formality.
Two steps genuinely can’t be done purely from the console — the wizard walks you through them:
Domain-join the Windows box (needs a reboot and credentials on the machine).
Machine-certificate bootstrap — on its first domain policy cycle the box auto-enrolls its own machine certificate from the built-in CA. That certificate is the trust anchor the agent’s mutual-TLS connection uses.
The agent binary is Authenticode code-signed before rollout using a dedicated code-signing identity from the built-in CA. This isn’t optional polish: the appliance’s own Defender ASR ransomware rule blocks unsigned interactive Skans binaries, so an unsigned agent won’t run. Signed agents install cleanly with zero Defender detections — the signature travels with the bytes into SYSVOL, and the publisher refuses to ship a package it can’t verify as signed.
An agent that has installed and checked in appears in the console immediately as pending — you don’t wait for a discovery cycle. Approve it on the device’s detail page.
By design, a pending agent receives no commands until you approve it. On approval, Skans automatically:
Correlates the agent to the right device record (by directory GUID, then IP, then hostname), so you get one correctly-typed row instead of duplicates,
seeds the telemetry planes — inventory, metrics, and Defender health are enabled by default (you can opt out), and
unifies the record to the machine’s directory object.
Note
Approval is manual by default. An optional setting (agent.autoApproveAdJoined) can auto-approve, but it’s off by default and fail-closed — even when on, it requires both a client certificate that chains to the Skans root and an enrolling hostname that matches a known, enabled directory computer.
sequenceDiagram
autonumber
actor Op as Operator
participant A as Windows Agent
participant H as Agent Hub :7326
participant C as Trusted Core
A->>H: enroll (client cert, mutual TLS)
H->>C: relay over local pipe
C-->>A: pending — awaiting approval
Op->>C: approve the device
loop every ~45s
A->>H: check in
H->>C: relay (hub holds no key)
C-->>A: signed command set
Note over A: verify signature, then execute
A->>H: report results + telemetry
H->>C: relay to monitoring store
end
The agent only ever dials out to the hub on 7326; it has no inbound listener. The hub is a low-privilege relay that holds no signing key — every command the agent runs is signed by the trusted core.
On the device’s detail page you should see the agent online, a valid machine certificate, inventory populated, and a per-device compliance readout. Anything the agent hasn’t actually measured yet reads as not verified rather than being assumed green — only an on-box reading counts.