Deployed with the tools you already run. No tickets from confused users.
Start with a read-only connection to Google Workspace or Microsoft 365 and see findings before anything is installed. Then add the sensors: a managed browser extension and a small desktop agent that install silently through your existing endpoint management and enroll with one token.
| You manage endpoints with | Covers | How sensors are rolled out |
|---|---|---|
| Google Admin console | Chrome on any OS, ChromeOS | Force-install by extension ID, then paste the managed policy JSON |
| Microsoft Intune | Edge and Chrome on Windows; agent on Windows and macOS | Settings catalog for the extension; script or package for the agent |
| Jamf Pro | Agent and browsers on macOS | Configuration profile plus a policy that runs the installer |
| Kandji | Agent on macOS | Custom profile plus custom app or script |
| Group Policy | Edge and Chrome on domain-joined Windows | ExtensionInstallForcelist and the extension policy keys |
Connect your identity provider first.
The fastest way to see what is in use touches no endpoint. Both connections use credentials you create in your own tenant, are read-only, and can be revoked from your side at any time.
Google Workspace. Create a service account, enable domain-wide delegation for it, and authorise one scope, admin.reports.audit.readonly. Paste the key file and the address of an admin to impersonate. GhostAudit reads the audit log for third-party app grants and SAML sign-ins.
Microsoft 365 / Entra ID. Register an app, grant it the Directory.Read.All application permission with admin consent, and enter the tenant id, client id and secret. Add AuditLog.Read.All if you want sign-in counts; that also needs Entra ID P1 or P2.
Test the connection, run a sync, and AI tools appear in discovery with the people and permissions involved. Credentials are encrypted before they are stored and are never returned by the API.
These connections show which AI tools were given access to work accounts. They do not show time spent, or tools used with a personal account. The sensors do.
- Connects with
- Your own service account, with domain-wide delegation
- Permission
- One read-only scope: admin.reports.audit.readonly
- Reads
- Third-party OAuth grants and SAML app sign-ins, from the admin audit log (last 180 days)
- Never requests
- Mail, files, calendar entries or any content
- Connects with
- An app you register in your own tenant; client-credentials flow
- Permission
- Directory.Read.All. Optionally AuditLog.Read.All for sign-in counts
- Reads
- Enterprise applications, permission grants and assignments. With Entra ID P1 or P2, sign-ins (last 30 days)
- Never requests
- Mail, files, calendar entries or any content
Two policies per browser: install it, then configure it.
The extension supports Chrome and Edge. Rollout is the standard pattern for any managed extension:
- 01Force-install it with the browser's extension install policy.
- 02Configure it through managed storage with three keys: your server URL, an enrollment token and, optionally, a lock on the options page.
With both keys present the extension enrolls on its own within seconds, and users cannot disconnect it or point it elsewhere. Removing the policy stops collection and deletes its local data.
Step-by-step instructions cover the Google Admin console (Chrome on any OS and ChromeOS), Microsoft Intune and Group Policy (Edge and Chrome on Windows) and configuration profiles on macOS. The Deploy screen in GhostAudit generates the snippets with your server address filled in.
Updating to 1.1. Version 1.1 of the extension adds host access to the AI tool sites in the catalog, which browsers require before the optional sensitive-data warning can run there. Force-installed browsers accept the new permission silently. An extension that someone installed by hand is disabled by Chrome or Edge after the update until that person accepts it, which is one more reason to deploy by policy.
{
"serverUrl": { "Value": "https://ghostaudit.northwind.example" },
"enrollmentToken": { "Value": "vle_REPLACE_ME" },
"disableUserOptions": { "Value": true }
}One idempotent command, run by your MDM.
The agent runs on macOS 12 or later (Apple silicon and Intel) and Windows 10 1809 or later (x64 and ARM64). Everything reduces to one command, run as root or SYSTEM, which copies the binary to a protected location, writes an admin-only configuration, enrolls the device and registers the service. Re-running it upgrades in place and keeps the device identity.
There is no user interaction, no reboot, and on macOS no privacy-permission prompt, because the agent needs none. It does not update itself; you ship new versions the same way you shipped the first.
A note on packaging, so there are no surprises in your pilot: the agent's binaries and installers are not yet code-signed or notarized. Deployment today is by script through Jamf, Kandji or Intune, with a SHA-256 checksum published for each build. If your endpoint policy only allows signed software, start with the browser extension and the identity connections, and add the agent when signed packages are available.
Since version 1.1 the agent also reports which AI agent clients and MCP servers are configured for the signed-in user, by name, package or hostname. It is on by default and can be turned off for the organization; see AI agent discovery.
- Jamf Pro, Kandji and Intune instructions for macOS
- Intune, SCCM and Group Policy for Windows
status,collect --once --dry-runandinventory --dry-runfor verification on a test machine
ghostaudit-agent install \ --server https://ghostaudit.northwind.example \ --token vle_REPLACE_ME \ --email-domain northwind.example # see exactly what would be reported, without sending anything ghostaudit-agent collect --once --dry-run
See what is enrolled, and stop what should not be.
The Devices page lists every enrolled sensor with its type, operating system, version and last check-in, so you can compare coverage with your asset inventory. Sensors send a heartbeat every 15 minutes by default.
Enrollment tokens are created in the console, shown once, and can expire or be revoked. Revoking a device makes the server answer 401; the sensor then stops, and re-enrolls only if its token is still valid. Revoke the token as well and it stops for good.
Policy changes, such as a tool's status, the identity mode or enforcement, reach sensors on their next policy check without any redeployment.
Example workspace. Names and figures are illustrative.
| Device | Sensor | Last seen | |
|---|---|---|---|
NW-MBP-0412 macOS 15.1 | Desktop agent | 9f2c…e41a | 2 min ago |
NW-LT-2207 Windows 11 | Desktop agent | 51ab…07cd | 4 min ago |
Chrome 131 Windows 11 | Browser extension | 51ab…07cd | 4 min ago |
Edge 131 Windows 11 | Browser extension | c80e…2b19 | 11 min ago |
Chrome 131 ChromeOS | Browser extension | 3d6f…a902 | 1 h ago |
What it costs a device, and what it sends.
The agent samples the process list and the TCP connection table every 30 seconds, keeps only matches against the AI tool catalog, and sends five-minute aggregates. On macOS it runs as a low-priority background daemon. If the server is unreachable, events queue locally, up to 5,000, and are sent later with backoff.
Network requirements are simple: outbound HTTPS to your GhostAudit server address, with support for an explicit proxy. Sensors contact no other destination.
For the security and privacy review that will come with the rollout, hand over the security page and privacy by design. They list every field collected.
The sensor compares hostnames and app names with your AI tool list, in memory. Anything not on the list is discarded on the spot.
One aggregate per listed tool per five-minute window: tool, hostname or process name, seconds active, and identity as your setting allows.
Our cloud or your own infrastructure. Sensors talk to this server and nothing else: no analytics, no third-party endpoints.
Sign-in through your identity provider, events to your SIEM, seats from a CSV.
Three things IT is usually asked to set up after the pilot.
Single sign-on. OpenID Connect with Okta, Microsoft Entra ID, Google Workspace or another compliant provider, on Govern and Enterprise. You verify your email domain with a DNS TXT record, enter the issuer, client id and secret, and test. You can then require SSO for everyone except owners. New users are created on first sign-in with a default role. SAML is not supported.
User provisioning. SCIM 2.0, on the same plans: point Okta or Entra ID at the SCIM base URL with a bearer token an owner generates, as a custom SCIM application (there is no gallery listing). The identity provider then creates, updates and deactivates users on your verified domains, and deactivating someone ends their GhostAudit sessions immediately. Users only: groups are not synchronised and roles stay in GhostAudit.
Log export. Up to five destinations: an HTTPS webhook with signed deliveries, a Splunk HTTP Event Collector, or Datadog Logs. Each chooses which streams it receives.
AI licences. Record what you pay for and import seat lists as CSV from the vendor consoles. Licence utilisation shows which seats are used.
Example workspace. The Licences screen, with illustrative figures.
- Active
- Low use
- Inactive
- Not monitored
| Licence | Seats | Use | Inactive | Est. savings |
|---|---|---|---|---|
ChatGPT Enterprise $60 per seat per month | 180 | 121 active · 22 low use | 31 | $1,860Per month |
Microsoft 365 Copilot $30 per seat per month | 250 | 128 active · 41 low use | 74 | $2,220Per month |
GitHub Copilot Business $19 per seat per month | 85 | 71 active · 6 low use | 8 | $152Per month |
Claude Team $25 per seat per month | 40 | 29 active · 5 low use | 4 | $100Per month |
Savings are estimates: sensors only see enrolled devices, and seats nobody can measure are left out of the figure.
Our cloud, or a container on your infrastructure.
Most teams use the hosted service. If you need to keep the data in your own environment, the GhostAudit server is a single container image plus Postgres, with install, update and backup scripts. It serves its own sensor downloads, so endpoints never fetch binaries from anywhere but your server. Self-hosting is part of the Enterprise plan; see pricing.
One link for staff: approved tools, requests, the policy and a short course.
The questions IT gets about AI are the same every week: can I use this, how do I get that, where is the policy. The employee AI hub answers them on one page, and turns "can I use this" into a request with a decision and a reason.
Employees reach it through your OpenID Connect single sign-on, a link you create, or the browser extension's popup. It is not a console account. An emailed sign-in link also exists in the code, but the hosted service does not send email yet. See a live example.
Interactive example with fictional records.
Which AI tools we have approved, how to ask for a new one, our AI policy and a 13-minute course.
Questions
- Do users have to sign in to the extension or agent?
No. Sensors enroll with the token you deploy. Identity, if you use a named or pseudonymous mode, comes from your MDM (for example a Jamf variable), from a configured email domain, or from the managed extension policy.
- What happens when a laptop is offline?
Events queue on the device and are sent when the server is reachable again. The queue is bounded at 5,000 events; beyond that the oldest are dropped.
- Are the desktop agent installers signed?
Not yet. The binaries and installers are not code-signed or notarized today. The agent is deployed by script through your endpoint management, and each build has a published SHA-256 checksum.
- Can we use SAML for single sign-on?
No. Single sign-on uses OpenID Connect. SAML is not supported.
- Does it support SCIM?
Yes. SCIM 2.0 user provisioning is included with single sign-on on Govern and Enterprise: create, update and deactivate, with deactivation ending sessions immediately. Groups are not synchronised, and the app is configured as a custom SCIM application, not from the Okta or Entra gallery.
- Is Linux supported?
The supported desktop platforms are macOS and Windows. The browser extension runs in Chrome and Edge on any operating system, including ChromeOS and Linux.
- How do we uninstall?
Remove the extension policy, and run the agent's
uninstallcommand through your MDM. It stops the service and removes the binary, configuration, queue and logs. Then revoke the devices and the token in the console.
- AI usage monitoringWhat the sensors report and how policy works.
- Shadow AI discoveryThe Google Workspace and Microsoft 365 connections in detail.
- Licence utilisationFind the AI seats nobody uses.
- How to find unused ChatGPT, Copilot and Claude seatsWhere each vendor reports activity.
- SecurityData handling and the honest list of what is not there yet.
- PricingPer covered employee, with a 14-day trial.
Pilot on ten devices before you plan the rollout.
Start a 14-day trial with every Govern feature, connect one discovery source and enroll a handful of devices. No card is needed to start, and nobody is asked to change how they work.