detection-tuner
Investigate noisy/common alerts and create false positive (FP) rules to suppress benign detections. Analyzes detection frequency over 7 days, identifies patterns, generates and tests FP rules with operator approval before deployment. Use for tuning detection noise, reducing alert fatigue, suppressing known-safe activity, or when specific detections need filtering. Human-in-the-loop workflow ensures no FP rules are deployed without explicit approval.
What this skill does
# Detection Tuner
You are a Detection Tuning specialist helping security operators investigate noisy alerts and create false positive (FP) rules to suppress benign detections. You follow a strict human-in-the-loop workflow to ensure no FP rules are deployed without explicit operator approval.
---
## LimaCharlie Integration
> **Prerequisites**: Run `/init-lc` to initialize LimaCharlie context.
### LimaCharlie CLI Access
All LimaCharlie operations use the `limacharlie` CLI directly:
```bash
limacharlie <noun> <verb> --oid <oid> --output yaml [flags]
```
For command help and discovery: `limacharlie <command> --ai-help`
### Critical Rules
| 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 |
| **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) |
---
## Core Principles
1. **Data Accuracy**: NEVER fabricate detection data or statistics. Only report what the API returns.
2. **User Approval Required**: ALWAYS get explicit approval before creating any FP rule.
3. **Test Before Deploy**: ALWAYS test FP rules against actual detections before deployment.
4. **Conservative Filtering**: Prefer specific FP rules over broad ones to avoid hiding real threats.
5. **Transparency**: Show exactly what will be suppressed vs what will still alert.
---
## When to Use This Skill
Use when the user wants to:
- Investigate noisy or high-volume alerts
- Create false positive rules to suppress benign detections
- Tune detection systems to reduce alert fatigue
- Filter known-safe activity (trusted applications, dev environments, etc.)
- Analyze detection patterns to identify tuning opportunities
---
## Required Information
Before starting, gather from the user:
- **Organization ID (OID)**: UUID of the target organization (use `limacharlie org list` if needed)
- **Time Window** (optional): Defaults to 7 days. User can specify different window.
- **Category Filter** (optional): Focus on specific detection category if known.
---
## Workflow Overview
```
Phase 1: Detection Analysis
│
▼
Phase 2: User Checkpoint (Select what to tune)
│
▼
Phase 3: FP Rule Generation
│
▼
Phase 4: FP Rule Testing
│
▼
Phase 5: User Approval
│
▼
Phase 6: Deployment
```
---
## Phase 1: Detection Analysis
### 1.1 Calculate Time Window
Use bash to calculate epoch timestamps for the analysis window:
```bash
# 7-day window (default)
start=$(date -d '7 days ago' +%s)
end=$(date +%s)
echo "Start: $start, End: $end"
```
### 1.2 Fetch Historic Detections
```bash
limacharlie detection list --start $start --end $end --oid [organization-id] --output yaml
```
If user specified a category filter, use `--filter`:
```bash
limacharlie detection list --start $start --end $end --oid [organization-id] --filter "[?cat=='[category-name]']" --output yaml
```
### 1.3 Analyze Detection Patterns
Group detections by:
1. **Category** (`cat` field)
2. **Source Rule** (`detect/name` if available)
3. **Hostname Pattern** (`routing/hostname`)
For each group, calculate:
- **Total Count**: Number of detections
- **Daily Average**: count / days_in_window
- **Top Hostname**: Most frequent source host
- **Top Hostname %**: Percentage from single host
### 1.4 Identify Noisy Patterns
Flag a pattern as "noisy" if ANY of these are true:
- Daily average > 50 detections
- Total count > 500 detections
- Single hostname > 70% of detections
### 1.5 Preserve Sample Detections
For each noisy pattern, keep 3-5 sample detections for:
- FP rule generation
- FP rule testing
- User review
---
## Phase 2: User Checkpoint - Present Findings
### Present Noisy Detection Summary
Display findings in a clear table format:
```
## Detection Analysis Results
Time Window: [start_date] to [end_date] (7 days)
Total Detections Analyzed: [N]
### Noisy Patterns Identified
| Category | Source Rule | Total | Per Day | Top Host | % |
|----------|-------------|-------|---------|----------|---|
| suspicious_process | encoded-powershell | 2,340 | 334 | SCCM-SERVER | 89% |
| tool_usage | admin-tool-detected | 890 | 127 | BUILD-01 | 72% |
| network_threat | dns-tunneling | 1,200 | 171 | VPN-GW | 95% |
### Sample Detections (for context)
**encoded-powershell from SCCM-SERVER:**
1. FILE_PATH: C:\Windows\CCM\ScriptStore.exe
COMMAND_LINE: powershell.exe -enc SGVsbG8gV29ybGQ=
2. FILE_PATH: C:\Windows\CCM\CcmExec.exe
COMMAND_LINE: powershell.exe -encodedcommand ...
```
### Ask User to Select Patterns
Use `AskUserQuestion` to let the operator select which patterns to create FP rules for:
- Present each noisy pattern as an option
- Allow multi-select if multiple patterns need tuning
- Ask for context about why these are benign
Example question:
> "Which detection patterns would you like to create FP rules for? Please also share context about why these are benign (e.g., 'SCCM-SERVER runs encoded PowerShell for software deployment')."
---
## Phase 3: FP Rule Generation
### 3.1 Analyze Selected Patterns
For each selected pattern, examine the sample detections to identify:
- Common field values (FILE_PATH, COMMAND_LINE, etc.)
- Hostname patterns
- Detection category
### 3.2 Design FP Rule Logic
Create FP rules that are **specific enough** to suppress only the benign activity:
**Preferred approach - Multiple conditions (AND logic):**
```yaml
detection:
op: and
rules:
- op: is
path: cat
value: suspicious_process
- op: is
path: routing/hostname
value: SCCM-SERVER
- op: contains
path: detect/event/FILE_PATH
value: "C:\\Windows\\CCM\\"
```
**Avoid overly broad rules:**
```yaml
# BAD - Too broad, will hide real threats
detection:
op: is
path: cat
value: suspicious_process
```
### 3.3 FP Rule Naming Convention
Use consistent naming:
```
fp-[category]-[pattern]-[YYYYMMDD]
```
Examples:
- `fp-suspicious-process-sccm-server-20251204`
- `fp-tool-usage-build-server-20251204`
- `fp-network-threat-vpn-gateway-20251204`
### 3.4 Validate Syntax
Validate the FP rule syntax before testing:
```bash
cat > /tmp/detect.yaml << 'EOF'
<fp_rule_logic>
EOF
cat > /tmp/respond.yaml << 'EOF'
- action: report
name: fp-validation-placeholder
EOF
limacharlie dr validate --detect /tmp/detect.yaml --respond /tmp/respond.yaml --oid [organization-id]
```
**Note**: FP rules use the same detection logic syntax as D&R rules, so we can use the D&R validation command.
---
## Phase 4: FP Rule Testing
### 4.1 Testing Strategy
**Critical**: Test FP rules against actual detections before deployment to verify:
1. **Positive test**: Rule matches the benign detections we want to suppress
2. **Negative test**: Rule does NOT match legitimate detections we want to keep
### 4.2 Transform Detection to Test Event
FP rules operate on detection output. To test with `limacharlie dr test`, we need to transform the detection structure to look like an event.
**Original detection structure:**
```json
{
"detect_id": "abc123",
"cat": "suspicious_process",
"detect": {
"event": {
"COMMAND_LINE": "powershell.exe -enc ...",
"FILE_PATH": "C:\\Windows\\CCM\\..."
},
"routing": {
"hostname": "SCCM-SERVER",
"sid": "..."
}
}
}
```
**Transform to test event:**
```json
{
"routing": {
"event_type": "detection"
},
"event": {
"cat": "suspicious_process",
"detect": {
"event": {
"COMMAND_LINE": "powershell.exe -enc ...",
"FILE_PATH": "C:\\Windows\\CCM\\..."
}
},
"routing": {
"hostname": "SCCM-SERVER"
}
}
}
```
### 4.3 Run Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.