From liongard
Manages Liongard inspectors, launchpoints, inspection scheduling via cron, on-demand triggers, and troubleshooting via API. Covers templates for IT environments like AWS, Azure.
npx claudepluginhub wyre-technology/msp-claude-plugins --plugin liongardThis skill uses the workspace's default tool permissions.
Inspections are the core mechanism by which Liongard captures IT documentation. The inspection system consists of three key components:
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Compresses source documents into lossless, LLM-optimized distillates preserving all facts and relationships. Use for 'distill documents' or 'create distillate' requests.
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": "admin@acme.local",
"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