Liongard Inspections — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Liongard Inspections (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Inspections are the core mechanism by which Liongard captures IT documentation. The inspection system consists of three key components:
The relationship flows: Inspector (template) -> Launchpoint (configuration) -> Inspection (execution) -> System (discovered data)
Inspectors are pre-built templates provided by Liongard that define what technology platform to inspect and what data to collect. Liongard provides hundreds of built-in inspectors covering:
| Category | Examples |
|---|---|
| Identity & Access | Active Directory, Azure AD, Duo Security, Okta |
| Email & Collaboration | Microsoft 365, Google Workspace, Exchange |
| Networking | Cisco Meraki, Fortinet, SonicWall, Ubiquiti |
| Virtualization | VMware vSphere, Hyper-V, Nutanix |
| Backup & DR | Datto, Veeam, Acronis, StorageCraft |
| Security | SentinelOne, Sophos, Bitdefender, Huntress |
| Cloud | AWS, Azure, GCP |
| Infrastructure | Windows Server, Linux, DNS, DHCP, Certificates |
GET /api/v1/inspectors?page=1&pageSize=100
X-ROAR-API-KEY: {api_key}Response:
{
"Data": [
{
"ID": 100,
"Name": "Active Directory",
"Description": "Inspects Active Directory domain controllers, users, groups, GPOs",
"Category": "Identity & Access",
"Version": "3.2.1",
"RequiresAgent": true,
"CredentialType": "Domain Admin"
},
{
"ID": 101,
"Name": "Microsoft 365",
"Description": "Inspects M365 tenant configuration, users, licenses, security",
"Category": "Email & Collaboration",
"Version": "4.1.0",
"RequiresAgent": false,
"CredentialType": "App Registration"
}
],
"TotalRows": 250,
"HasMoreRows": true,
"CurrentPage": 1,
"TotalPages": 3,
"PageSize": 100
}GET /api/v1/inspectors/{inspectorId}
X-ROAR-API-KEY: {api_key}Response:
{
"ID": 100,
"Name": "Active Directory",
"Description": "Inspects Active Directory domain controllers, users, groups, GPOs",
"Category": "Identity & Access",
"Version": "3.2.1",
"RequiresAgent": true,
"CredentialType": "Domain Admin",
"DataPoints": [
"Users",
"Groups",
"Group Policy Objects",
"Domain Controllers",
"Organizational Units",
"DNS Zones",
"DHCP Scopes",
"Certificate Authorities"
]
}| Field | Type | Description |
|---|---|---|
ID | int | Unique inspector identifier |
Name | string | Inspector display name |
Description | string | What the inspector checks |
Category | string | Technology category |
Version | string | Inspector version |
RequiresAgent | boolean | Whether a local agent is needed |
CredentialType | string | Type of credentials required |
DataPoints | array | List of data points collected |
Launchpoints are the configured instances that bring together all components needed to run an inspection:
| Component | Purpose |
|---|---|
| Inspector | Which template to use |
| Environment | Which customer this is for |
| Agent | Which agent runs the inspection |
| Credentials | How to authenticate to the target |
| Schedule | When to run inspections |
| Configuration | Inspector-specific settings |
| Field | Type | Required | Description |
|---|---|---|---|
ID | int | System | Unique launchpoint identifier |
InspectorID | int | Yes | Associated inspector template |
EnvironmentID | int | Yes | Target environment |
AgentID | int | Conditional | Agent to use (if inspector requires) |
Name | string | Yes | Launchpoint display name |
Status | string | No | Active, Inactive, Error |
Schedule | string | No | Cron expression for scheduling |
LastInspection | datetime | System | Last successful inspection |
NextInspection | datetime | System | Next scheduled inspection |
CreatedOn | datetime | System | Creation timestamp |
UpdatedOn | datetime | System | Last update timestamp |
GET /api/v1/launchpoints?page=1&pageSize=100
X-ROAR-API-KEY: {api_key}Response:
{
"Data": [
{
"ID": 5001,
"InspectorID": 100,
"EnvironmentID": 1234,
"AgentID": 501,
"Name": "Acme Corp - Active Directory",
"Status": "Active",
"Schedule": "0 2 * * *",
"LastInspection": "2024-02-15T02:00:00Z",
"NextInspection": "2024-02-16T02:00:00Z",
"CreatedOn": "2023-06-01T10:00:00Z",
"UpdatedOn": "2024-02-15T02:15:00Z"
}
],
"TotalRows": 500,
"HasMoreRows": true,
"CurrentPage": 1,
"TotalPages": 5,
"PageSize": 100
}GET /api/v1/launchpoints?environmentId={environmentId}&page=1&pageSize=100
X-ROAR-API-KEY: {api_key}GET /api/v1/launchpoints/{launchpointId}
X-ROAR-API-KEY: {api_key}POST /api/v1/launchpoints
X-ROAR-API-KEY: {api_key}
Content-Type: application/json{
"InspectorID": 100,
"EnvironmentID": 1234,
"AgentID": 501,
"Name": "Acme Corp - Active Directory",
"Schedule": "0 2 * * *",
"Configuration": {
"DomainController": "dc01.acme.local",
"Username": "[email protected]",
"Password": "encrypted-credential-reference"
}
}Response:
{
"ID": 5002,
"InspectorID": 100,
"EnvironmentID": 1234,
"AgentID": 501,
"Name": "Acme Corp - Active Directory",
"Status": "Active",
"Schedule": "0 2 * * *",
"CreatedOn": "2024-02-15T09:00:00Z"
}PUT /api/v1/launchpoints/{launchpointId}
X-ROAR-API-KEY: {api_key}
Content-Type: application/json{
"Schedule": "0 3 * * *",
"Name": "Acme Corp - Active Directory (Updated)"
}DELETE /api/v1/launchpoints/{launchpointId}
X-ROAR-API-KEY: {api_key}Warning: Deleting a launchpoint removes all associated systems and historical inspection data.
Launchpoints use standard cron expressions for scheduling:
┌───────── minute (0-59)
│ ┌─────── hour (0-23)
│ │ ┌───── day of month (1-31)
│ │ │ ┌─── month (1-12)
│ │ │ │ ┌─ day of week (0-6, Sun=0)
│ │ │ │ │
* * * * *| Cron Expression | Description |
|---|---|
0 2 * * * | Daily at 2:00 AM |
0 */6 * * * | Every 6 hours |
0 0 * * 0 | Weekly on Sunday at midnight |
0 8 1 * * | Monthly on the 1st at 8:00 AM |
*/30 * * * * | Every 30 minutes |
0 2 * * 1-5 | Weekdays at 2:00 AM |
POST /api/v1/launchpoints/{launchpointId}/run
X-ROAR-API-KEY: {api_key}Response:
{
"InspectionID": 99001,
"LaunchpointID": 5001,
"Status": "Queued",
"QueuedAt": "2024-02-15T14:30:00Z"
}| Status | Description |
|---|---|
Queued | Inspection is waiting to be picked up by agent |
Running | Inspection is currently executing |
Completed | Inspection finished successfully |
Failed | Inspection encountered an error |
Timeout | Inspection exceeded maximum runtime |
To trigger multiple inspections for an environment:
async function runAllInspections(environmentId) {
// Get all launchpoints for the environment
const response = await fetch(
`https://${instance}.app.liongard.com/api/v1/launchpoints?environmentId=${environmentId}&pageSize=500`,
{
headers: { 'X-ROAR-API-KEY': process.env.LIONGARD_API_KEY }
}
);
const data = await response.json();
const results = [];
for (const lp of data.Data) {
if (lp.Status !== 'Active') continue;
const runResult = await fetch(
`https://${instance}.app.liongard.com/api/v1/launchpoints/${lp.ID}/run`,
{
method: 'POST',
headers: { 'X-ROAR-API-KEY': process.env.LIONGARD_API_KEY }
}
);
results.push({
launchpointId: lp.ID,
name: lp.Name,
success: runResult.ok
});
// Stagger requests
await sleep(500);
}
return results;
}| Code | Message | Resolution |
|---|---|---|
| 400 | Invalid launchpoint data | Check required fields |
| 401 | Unauthorized | Verify API key |
| 404 | Launchpoint not found | Confirm launchpoint ID |
| 404 | Inspector not found | Verify inspector ID exists |
| 409 | Duplicate launchpoint | Name must be unique per environment |
| 422 | Invalid schedule | Check cron expression syntax |
| 429 | Rate limited | Wait and retry (300 req/min) |
| Error | Cause | Resolution |
|---|---|---|
| Agent offline | Agent not reporting | Check agent host connectivity |
| Authentication failed | Bad credentials | Update launchpoint credentials |
| Target unreachable | Network issue | Verify firewall rules and DNS |
| Timeout | Inspection took too long | Check target system performance |
| Inspector error | Bug in inspector | Update inspector or contact support |
Inspector (InspectorID)
|
+-- Launchpoint (LaunchpointID)
|
+-- Environment (EnvironmentID)
+-- Agent (AgentID)
+-- Schedule (Cron Expression)
+-- Configuration (Credentials, Settings)
|
+-- Inspections (InspectionID)
| +-- Status (Queued/Running/Completed/Failed)
| +-- Duration
| +-- Timestamp
|
+-- Systems (SystemID)
+-- System Details
+-- Dataprints~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.