From lc-advanced-skills
Generates interactive HTML dashboards and D3.js visualizations from LimaCharlie data using Jinja2 templates. Supports MSSP multi-tenant, sensor health, detection analytics, billing reports with strict accuracy guardrails.
How this skill is triggered — by the user, by Claude, or both
Slash command
/lc-advanced-skills:graphic-outputThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generate interactive HTML dashboards and visualizations from structured LimaCharlie data. This skill transforms JSON report data into professional, self-contained HTML documents with D3.js charts and interactive elements.
schemas/billing-summary.jsonschemas/custom-report.jsonschemas/mssp-report.jsonschemas/security-overview.jsonstatic/js/lc-charts.jstemplates/base.html.j2templates/reports/billing-summary.html.j2templates/reports/custom-report.html.j2templates/reports/mssp-dashboard.html.j2templates/reports/security-overview.html.j2Generate interactive HTML dashboards and visualizations from structured LimaCharlie data. This skill transforms JSON report data into professional, self-contained HTML documents with D3.js charts and interactive elements.
Core Philosophy: Visualize ONLY what exists. This skill has strict guardrails that make data fabrication impossible. Every chart, number, and label must come directly from the input data.
Prerequisites: Run
/init-lcto initialize LimaCharlie context.
| Rule | Wrong | Right |
|---|---|---|
| Data Fabrication | Generate, estimate, or infer missing data | Show "N/A" or "Data unavailable" |
| Data Modification | Round, truncate, or rename values | Display values exactly as provided |
| Missing Fields | Show zero for missing values | Show empty state with clear messaging |
Absolute Rules:
Always:
Absolute Rules:
Display Formatting Allowed:
NOT Allowed:
Every visualization MUST indicate:
Example:
Data Source: reporting skill (org-reporter agents)
Collected: 2025-11-27 14:32:45 UTC
Time Window: Nov 1-30, 2025 (30 days)
Note: 4 organizations hit detection limit - actual counts higher
When data is missing or unavailable:
For Charts:
For Metrics/Cards:
For Tables:
All warnings from source data MUST be displayed:
Warnings must be:
Do NOT perform:
Exception: The following display-only calculations are permitted:
Before rendering any visualization, verify:
[ ] Every value traces to input data
[ ] No fields contain fabricated content
[ ] Missing data shows as "N/A" not zero
[ ] All warnings from input are displayed
[ ] Data source and timestamp shown
[ ] Time window clearly indicated
[ ] Detection limits flagged if present
[ ] Failed organizations documented
If the skill detects a guardrail violation:
ERROR: Data Accuracy Violation
Attempted to render chart with fabricated data.
Field 'detection_trend' was not provided in input.
Resolution: Either provide the required data from a source skill,
or use a template that doesn't require this field.
This skill will NOT generate placeholder, example, or estimated data.
Use this skill when the user needs to:
reporting skill - visualize the collected datasensor-health skill - create health dashboarddetection-engineering testing - visualize test resultsThis skill:
html-renderer subagent to generate HTMLOutput Characteristics:
| Template | Description | Best For |
|---|---|---|
mssp-dashboard | Multi-tenant overview with aggregate metrics, org table, charts | MSSP/multi-org reports |
security-overview | Single-org comprehensive security report with platform breakdown, MITRE coverage, detection timeline, rules inventory | Individual org deep-dive |
billing-summary | Multi-tenant billing roll-up with per-tenant breakdown, SKU details, cost distribution charts | Billing/cost analysis |
custom-report | Component-based flexible reports - build any report by specifying which components to include | Ad-hoc/custom reports |
Note: Use custom-report when none of the predefined templates fit your needs. It supports composable components that can be arranged in any order.
The custom-report template supports these component types:
| Component | Description |
|---|---|
summary_cards | Grid of metric cards with icons, values, labels |
chart | Pie, doughnut, bar, or line charts |
two_column | Side-by-side charts layout |
table | Data tables with optional sorting |
metric_grid | Compact grid of small metrics |
platform_table | Platform breakdown with sensors/detections |
alert_banner | Info/warning/danger/success banners |
text_section | Free-form HTML content |
divider | Visual separator |
Example custom report request:
"Create a report with 3 summary cards showing sensors, detections, and rules, then a pie chart of platform distribution, and a table of my top 5 detection categories"
Before using this skill, you need:
Each template has required and optional fields. The skill will:
The graphic-output skill requires structured JSON data. This typically comes from:
IMPORTANT: The skill will ONLY visualize data that exists. It will NOT:
If integrating with the reporting skill, the data structure should include:
{
"metadata": {
"generated_at": "2025-11-27T14:32:45Z",
"time_window": {
"start": 1730419200,
"end": 1733011199,
"start_display": "2025-11-01 00:00:00 UTC",
"end_display": "2025-11-30 23:59:59 UTC",
"days": 30
},
"organizations": {
"total": 14,
"successful": 12,
"failed": 2,
"success_rate": 85.7
}
},
"data": {
"aggregate": { ... },
"organizations": [ ... ]
},
"warnings": [ "4 organizations hit detection limit" ],
"errors": [ { "org": "...", "error": "..." } ]
}
Choose the appropriate template based on data type:
mssp-dashboardorg-detailsensor-healthdetection-summarybilling-summaryUse the Task tool to spawn the html-renderer subagent:
Task(
subagent_type="lc-essentials:html-renderer",
model="sonnet",
prompt="Render HTML dashboard with the following parameters:
Template: mssp-dashboard
Output Path: /tmp/lc-mssp-report-2025-11-27.html
Data:
{
\"metadata\": { ... },
\"data\": { ... },
\"warnings\": [ ... ],
\"errors\": [ ... ]
}
IMPORTANT: Apply strict data accuracy guardrails.
- Visualize ONLY data provided in the input
- Show 'N/A' for any missing fields
- Display all warnings prominently
- Do NOT fabricate any data
Return the file path and rendering summary when complete."
)
IMPORTANT: When generating any HTML report, always open it in the user's browser as the default completion action.
# On ChromeOS/Linux with garcon:
garcon-url-handler "http://localhost:8080/report.html"
# Alternative for other systems:
xdg-open "/tmp/report.html"
# or
open "/tmp/report.html" # macOS
Before opening, ensure an HTTP server is running to serve the file:
# Start server if not already running
cd /tmp && python3 -m http.server 8080 --bind 0.0.0.0 &
This ensures the user immediately sees their report without manual steps.
After the renderer completes and browser is opened, inform the user:
Interactive HTML dashboard generated successfully!
File: /tmp/lc-mssp-report-2025-11-27.html
Size: 245 KB
Data Provenance:
- Source: reporting skill
- Collected: 2025-11-27 14:32:45 UTC
- Time Window: Nov 1-30, 2025 (30 days)
- Organizations: 12 of 14 successful
Contents:
- Executive summary with 4 metric cards
- Platform distribution pie chart
- Organization health bar chart
- Detection category breakdown
- Daily detection trend line chart
- Sortable organization details table
- 2 warnings displayed (detection limits)
- 2 failed organizations documented
Data Accuracy:
- All visualizations show actual data from source
- No values were estimated or fabricated
- Missing data marked as "N/A"
Open this file in any web browser to view the interactive dashboard.
mssp-dashboard)Purpose: Multi-tenant overview for MSSPs managing multiple organizations
Visualizations:
Required Data Fields:
metadata.generated_at # When data was collected
metadata.time_window.start_display # Time range start
metadata.time_window.end_display # Time range end
metadata.organizations.total # Total org count
metadata.organizations.successful # Successful org count
data.aggregate.sensors.total # Total sensor count
data.aggregate.sensors.online # Online sensor count
data.aggregate.sensors.platforms # Platform breakdown object
data.aggregate.detections.retrieved # Detection count
data.aggregate.detections.top_categories # Array of {label, value}
data.aggregate.rules.total # Total rules
data.aggregate.rules.enabled # Enabled rules
data.organizations # Array of org objects
Optional Data Fields (shown if present, "N/A" if missing):
data.aggregate.detections.daily_trend # For trend chart
data.aggregate.detections.limit_reached # Limit warning flag
data.aggregate.detections.orgs_at_limit # Count of orgs at limit
data.aggregate.usage.* # Usage metrics
warnings # Array of warning strings
errors # Array of error objects
Guardrail Behavior:
daily_trend missing: Shows "Trend data not available" instead of chartplatforms empty: Shows "Platform data not available"warnings displayed in dedicated sectionerrors displayed with remediation stepssecurity-overview)Purpose: Comprehensive single-organization security report with platform breakdown, MITRE coverage, detection timeline, and rules inventory.
Visualizations:
Required Data Fields:
metadata.generated_at # When data was collected
metadata.time_window.start_display # Time range start
metadata.time_window.end_display # Time range end
metadata.org_name # Organization name
metadata.oid # Organization ID
data.summary.sensors_total # Total sensor count
data.summary.detections_total # Detection count
data.summary.rules_total # Total rules
Optional Data Fields (shown if present, "N/A" if missing):
data.summary.sensors_online # Online sensor count
data.summary.detections_24h # 24h detection count
data.summary.rules_enabled # Enabled rules
data.summary.mitre_coverage # MITRE coverage percentage
data.active_threats[] # Active threat alerts
data.platforms[] # Platform breakdown
data.hourly_detections[] # Detection timeline
data.top_detections[] # Top detection categories
data.mitre_techniques[] # MITRE technique coverage
data.rules.* # Rule inventory breakdown
data.attack_analysis.* # Attack pattern analysis
warnings # Array of warning strings
errors # Array of error objects
Guardrail Behavior:
hourly_detections missing: Shows "Timeline data not available"platforms empty: Shows "Platform data not available"mitre_techniques missing: MITRE section hiddenwarnings displayed prominentlyAll warnings MUST be displayed. The skill will:
Warning Types:
Example Warning Display:
⚠️ Data Limitations
• 4 organizations hit the 5,000 detection limit
Actual detection counts are higher than shown.
Affected: Acme Corp, GlobalTech, Nexus, Pinnacle
• 2 organizations failed completely
See Errors section for details.
• Billing data unavailable for 3 organizations
Required permission: billing:read
The skill will NOT render if required fields are missing:
Error: Cannot render mssp-dashboard
Missing required fields:
- data.aggregate.sensors.total
- data.aggregate.detections.top_categories
Resolution:
1. Ensure the source skill collected this data
2. Check for API errors in the source skill output
3. Use a different template that doesn't require these fields
Error: Invalid data type
Field: data.aggregate.sensors.total
Expected: number
Received: string ("unknown")
Resolution:
The source data contains invalid types. Check the source skill output.
When some data is available but not all:
Warning: Partial data available
Rendering with available data. The following are unavailable:
- Detection trend chart (daily_trend not provided)
- Billing status (billing data missing for 5 orgs)
These sections will show "Data unavailable" messages.
Generated HTML files are:
Data Provenance Section (Always Included):
<footer class="data-provenance">
<h3>Data Provenance</h3>
<dl>
<dt>Generated</dt>
<dd>2025-11-27 14:32:45 UTC</dd>
<dt>Time Window</dt>
<dd>Nov 1-30, 2025 (30 days)</dd>
<dt>Organizations</dt>
<dd>12 of 14 (85.7% success rate)</dd>
<dt>Data Source</dt>
<dd>LimaCharlie API via reporting skill</dd>
</dl>
<p class="accuracy-note">
All values shown are from actual API responses.
No data has been estimated, interpolated, or fabricated.
</p>
</footer>
limacharlie CLI - Direct API access for custom dataskills/graphic-output/
├── SKILL.md # This file
├── IMPLEMENTATION_PLAN.md # Detailed implementation plan
├── templates/
│ ├── base.html.j2 # Base template with CSS, Chart.js utilities
│ └── reports/
│ ├── mssp-dashboard.html.j2 # Multi-tenant MSSP dashboard
│ ├── security-overview.html.j2 # Single-org security report
│ ├── billing-summary.html.j2 # Multi-tenant billing report
│ └── custom-report.html.j2 # Component-based flexible reports
├── static/
│ └── js/
│ └── lc-charts.js # Chart.js utility functions
└── schemas/
├── mssp-report.json # Schema for mssp-dashboard data
├── security-overview.json # Schema for security-overview data
├── billing-summary.json # Schema for billing-summary data
└── custom-report.json # Schema for custom-report components
npx claudepluginhub refractionpoint/lc-ai --plugin lc-advanced-skillsBuilds real-time incident response dashboards in Splunk, Elastic, or Grafana for SOC analysts tracking affected systems, containment status, IOC spread, and response timeline during active incidents.
Builds real-time incident response dashboards in Splunk, Elastic, or Grafana for SOC analysts tracking affected systems, containment status, IOC spread, and response timeline during active incidents.
Builds real-time incident response dashboards in Splunk, Elastic, or Grafana for SOC teams during active incidents. Provides unified visibility for coordination and post-incident reporting.