Help us improve
Share bugs, ideas, or general feedback.
From lc-advanced-skills
Evaluates threat reports in LimaCharlie orgs: extracts IOCs (hashes, IPs, domains, paths), hunts compromises, generates LCQL queries and D&R rules for investigations.
npx claudepluginhub refractionpoint/lc-ai --plugin lc-advanced-skillsHow this skill is triggered — by the user, by Claude, or both
Slash command
/lc-advanced-skills:threat-report-evaluationThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Systematically evaluate threat reports to determine organizational impact and create comprehensive defense-in-depth detections.
Conducts threat hunts on Clawdstrike events: timelines, filtered queries, pattern correlations, IOC checks, MITRE ATT&CK mapping, and incident reports.
Creates, tests, and deploys D&R detection rules in LimaCharlie via CLI. Guides threat research, LCQL queries, schema exploration, rule generation, validation, and iterative testing against data.
Autonomous threat hunting using the PEAK framework (Prepare → Execute → Act). Executes hypothesis-driven, intelligence-driven, and baseline hunts against CrowdStrike NG-SIEM. Produces hunt reports, detection backlogs, and visibility gap reports. Use when proactively hunting for threats, validating detection coverage, or responding to new threat intelligence.
Share bugs, ideas, or general feedback.
Systematically evaluate threat reports to determine organizational impact and create comprehensive defense-in-depth detections.
Prerequisites: Run
/init-lcto initialize LimaCharlie context.
All LimaCharlie operations use the limacharlie CLI directly:
limacharlie <noun> <verb> --oid <oid> --output yaml [flags]
For command help and discovery: limacharlie <command> --ai-help
| Rule | Wrong | Right |
|---|---|---|
| CLI Access | Call MCP tools or spawn api-executor | Use Bash("limacharlie ...") directly |
| Output Format | --output json | --output yaml (more token-efficient) |
| Filter Output | Pipe to jq/yq | Use --filter JMESPATH to select fields |
| LCQL Queries | Write query syntax manually | Use limacharlie ai generate-query first |
| D&R Rules | Write YAML manually | Use limacharlie ai generate-detection + limacharlie dr validate |
| Timestamps | Calculate epoch values | Use date +%s or date -d '7 days ago' +%s |
| OID | Use org name | Use UUID (call limacharlie org list if needed) |
This skill uses specialized sub-agents to reduce context usage and enable parallel processing:
Main Skill (Orchestrator)
├── Phase 0: Download report to /tmp/ (keeps content out of main context)
├── Phase 1: Spawn threat-report-parser → Get structured IOCs/behaviors
├── Phase 2: Platform check (lightweight API call)
├── Phase 3: Spawn ioc-hunter agents (parallel, one per org)
├── Phase 4: Spawn behavior-hunter agents (parallel, one per org)
├── Phase 5: User checkpoint - present findings
├── Phase 6: Spawn detection-builder agents (parallel, by layer)
├── Phase 7: User approval - confirm rules to deploy
├── Phase 8: Deploy approved rules
└── Phase 9: Generate final report from aggregated summaries
Before starting, obtain:
IMPORTANT: Before spawning the parser agent, download the report to a local file. This keeps the report content out of the main context and allows sub-agents to process it independently.
# Download HTML/web reports
curl -sL "https://example.com/threat-report.html" -o /tmp/threat_report.html
# Download PDF reports
curl -sL "https://example.com/report.pdf" -o /tmp/threat_report.pdf
# Google Cloud Storage
curl -sL "https://storage.googleapis.com/bucket/report.pdf" -o /tmp/threat_report.pdf
# S3 (public)
curl -sL "https://bucket.s3.amazonaws.com/report.pdf" -o /tmp/threat_report.pdf
Important Notes:
/tmp/ for downloaded files-sL flags to follow redirects silentlyRead tool which handles PDFs nativelySpawn the threat-report-parser agent to extract all IOCs and behaviors. Always pass the local file path from Phase 0 (not the original URL).
Task(
subagent_type="lc-essentials:threat-report-parser",
prompt="Parse threat report and extract all IOCs and behaviors:
Report Source: /tmp/threat_report.pdf
Report Type: pdf"
)
Agent returns structured JSON with:
Display to user: Summary of extracted IOCs and behaviors with counts.
Use a lightweight API call to verify platforms exist in target org(s).
limacharlie event types --oid <oid> --output yaml
Filter IOCs and behaviors to matching platforms only.
Spawn one ioc-hunter agent per organization. For multi-org scenarios, spawn all agents in a SINGLE message for parallel execution.
Task(
subagent_type="lc-essentials:ioc-hunter",
prompt="Search for IOCs in organization '{org_name}' (OID: {oid})
IOCs:
{iocs_json}
Time Window: 30 days"
)
Spawn multiple in parallel for multi-org:
# Single message with multiple Task calls = parallel execution
Task(subagent_type="lc-essentials:ioc-hunter", prompt="...org1...")
Task(subagent_type="lc-essentials:ioc-hunter", prompt="...org2...")
Task(subagent_type="lc-essentials:ioc-hunter", prompt="...org3...")
Agent returns:
Spawn one behavior-hunter agent per organization.
Task(
subagent_type="lc-essentials:behavior-hunter",
prompt="Search for behaviors in organization '{org_name}' (OID: {oid})
Behaviors:
{behaviors_json}
Platforms Available: {platforms}
Time Window: 7 days"
)
Agent returns:
Present aggregated findings to user:
## IOC Hunt Results
### Critical Findings (Immediate Investigation)
- [IOC type]: [value] - Found on [X] sensors
### High Priority Findings
- ...
### No Findings
- [X] IOCs searched, [Y] not found
## Behavior Hunt Results
### Suspicious Activity Detected
- [Behavior]: [X] events on [Y] sensors
- Sample: [hostname]: [command_line]
### No Activity Detected
- ...
## Affected Sensors Summary
| Hostname | IOC Hits | Behavior Hits | Action Required |
|----------|----------|---------------|-----------------|
Ask user: "Continue with detection creation? Which layers are needed?"
Based on findings and user input, spawn detection-builder agents for each detection layer.
Detection Layers:
Task(
subagent_type="lc-essentials:detection-builder",
prompt="Build detections for layer 'process' in organization '{org_name}' (OID: {oid})
Threat Name: {threat_name}
Detection Requirements:
{detection_requirements_json}"
)
Spawn layers in parallel:
Task(subagent_type="lc-essentials:detection-builder", prompt="...layer: process...")
Task(subagent_type="lc-essentials:detection-builder", prompt="...layer: network...")
Task(subagent_type="lc-essentials:detection-builder", prompt="...layer: file...")
Agent returns:
Present all generated rules for approval:
## Generated Detection Rules
### Process Detections (5 rules)
| Rule Name | MITRE | Priority | Status |
|-----------|-------|----------|--------|
| apt-x-process-encoded-powershell | T1059.001 | 8 | validated |
### Network Detections (3 rules)
| Rule Name | MITRE | Priority | Status |
|-----------|-------|----------|--------|
[Show full YAML for each rule if requested]
## Validation Failures
- apt-x-network-exfil: Schema error - bytes_sent not available
## Deploy Rules?
- [ ] Deploy all validated rules
- [ ] Select specific rules to deploy
- [ ] Skip deployment (rules returned for manual review)
For each approved rule, deploy using:
# Write rule to temp file
cat > /tmp/rule.yaml << 'EOF'
detect:
<detect_yaml>
respond:
<respond_yaml>
EOF
limacharlie dr set --key <rule_name> --input-file /tmp/rule.yaml --oid <oid>
Also create IOC lookup tables:
cat > /tmp/lookup.yaml << 'EOF'
<ioc_data>
EOF
limacharlie lookup set --key <threat>-<ioc-type> --input-file /tmp/lookup.yaml --oid <oid>
Generate final report from aggregated agent outputs:
# Threat Report Evaluation: [Report Name]
Date: [YYYY-MM-DD]
Organization: [OID(s)]
## Executive Summary
[2-3 sentences on findings from agent summaries]
## IOC Search Results
| IOC Type | Searched | Found | Critical | High |
|----------|----------|-------|----------|------|
| Hashes | 12 | 2 | 1 | 1 |
| Domains | 8 | 0 | 0 | 0 |
## Behavioral Query Results
| Behavior | MITRE | Events | Sensors | Status |
|----------|-------|--------|---------|--------|
| Encoded PS | T1059.001 | 45 | 3 | Review |
## Detections Created
### D&R Rules Deployed
| Rule Name | Layer | Priority |
|-----------|-------|----------|
### Lookups Created
| Lookup Name | IOC Count |
|-------------|-----------|
## Affected Sensors
| Sensor | Findings | Action |
|--------|----------|--------|
## Recommendations
1. [Action items based on findings]
For comprehensive coverage, ensure agents cover:
All rules follow: [threat-name]-[layer]-[indicator]
Examples:
apt-x-process-encoded-powershellapt-x-network-c2-domainapt-x-file-malicious-dllapt-x-persistence-runkeyPriority-based response actions:
High Priority (8-10):
Medium Priority (5-7):
Low Priority (1-4):
All responses include metadata:
For MSSP scenarios with multiple organizations:
limacharlie org list --output yaml# Parallel IOC hunting across 5 orgs
Task(subagent_type="lc-essentials:ioc-hunter", prompt="...org1...")
Task(subagent_type="lc-essentials:ioc-hunter", prompt="...org2...")
Task(subagent_type="lc-essentials:ioc-hunter", prompt="...org3...")
Task(subagent_type="lc-essentials:ioc-hunter", prompt="...org4...")
Task(subagent_type="lc-essentials:ioc-hunter", prompt="...org5...")
Download fails: Check URL accessibility, try with curl -v for verbose output
Parser fails on PDF: Ensure Phase 0 downloaded to /tmp/, then Read tool (handles PDFs natively)
Too many IOC results: Check for ubiquitous IOCs (>100 hits) - likely weak indicators
Behavior queries return excessive events: Ask agent to refine with more specific exclusions
Rule validation fails: Agent will retry; if still failing, review error in output
Platform missing: Agent automatically skips behaviors/detections for unavailable platforms
This skill uses sub-agents and file-based report handling to reduce main context usage by ~90%:
| Phase | Without Optimization | With Optimization | Savings |
|---|---|---|---|
| Report Download | ~200KB in context | ~0KB (file on disk) | 100% |
| PDF Parsing | ~200KB | ~10KB JSON | 95% |
| IOC Search | ~100KB | ~20KB summaries | 80% |
| Behavior Search | ~150KB | ~15KB summaries | 90% |
| Detection Rules | ~50KB | ~25KB validated | 50% |
Key optimizations:
/tmp/ - never enters main context