attack-mapping
Check or add ATT&CK technique ids on a finding by grounding each id in an observable. Read this when a triage, investigation, or…
Enrich the indicators of compromise (IPs, domains, hashes, URLs) in a finding. Read this before looking up any IOC so the enrichment checks memory first, uses every intel source you hold in parallel, and states provenance and confidence per source.
$ npx -y skills add Vigil-SOC/vigil --skill ioc-enrichment --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/ioc-enrichmentContext preview
The summary Claude sees to decide when to auto-load this skill.
Enrich the indicators of compromise (IPs, domains, hashes, URLs) in a finding. Read this before looking up any IOC so the enrichment checks memory first, uses every intel source you hold in parallel, and states provenance and confidence per source.
name: ioc-enrichment description: Enrich the indicators of compromise (IPs, domains, hashes, URLs) in a finding. Read this before looking up any IOC so the enrichment checks memory first, uses every intel source you hold in parallel, and states provenance and confidence per source. metadata: vigil-origin: threat_intel profile methodology (epic #882, #930)
Use this procedure whenever a finding, alert or question carries indicators that need external context. It applies to any agent: triage, investigation, reporting or threat intelligence.
1. **Extract indicators.** Read the finding (`get_finding` if you only hold an id) and list every IP, domain, URL, hash, email and file path from `iocs`, `raw_data` and `description`. Separate internal addresses (RFC 1918, loopback, your own ranges) from external ones: internal hosts are pivots, not lookups.
2. **Recall before you look up.** Call `recall_entity` on each external indicator before spending an external lookup. Memory is read-only; it tells you what Vigil has seen about the entity before and orients the search. It never decides the outcome on its own.
3. **Enrich in parallel with whatever you hold.** Issue independent lookups in the same turn rather than one at a time. Use the tools present in your grant, not a fixed list:
for IPs and domains respectively.
the indicator type and values.
sandbox, geolocation), use those too.
report from what the finding and memory already contain, marking each absent source `not queried`. Never end a turn on an announced lookup, and never invent a lookup result.
4. **Identify actor and infrastructure context.** From the returned data, note TTPs, infrastructure overlap, campaign or malware family associations and first/last-seen dates. Attribution is a hypothesis: give it a confidence and the evidence behind it.
5. **State confidence and provenance per source.** For every enriched indicator, report each source by name, what that source said, and the confidence it carried (or your own, labelled as such). Where sources disagree, say which you weight more and why. Never merge sources into one unattributed verdict.
6. **Return indicators to hunt.** End with the actionable list: the indicators (and any related ones surfaced by enrichment) worth hunting across the environment, each with its type, source and confidence, plus the recommended next step (hunt, block, monitor, or dismiss).
When `finding.enrichment.threat_indicators` contains Cloudforce One hits, treat them as ground-truth indicators observed at the edge: cite them with `source='cloudforce_one'` and the STIX `confidence` they carry. When `finding.evidence.cloudy_summary` is present, it is premium per-event context: quote it with its provenance, do not paraphrase it as your own analysis.
Always finish with this report, whatever tools were or were not available, in exactly this layout: one block per external indicator, the indicator echoed exactly as extracted, one `source:` line per source you consulted or could not consult. Only a source that returned data gets a verdict and its own score; a source you did not call is `not queried`, never a guessed result. The `confidence:` line is yours, from the evidence above it.
indicator: <value> type: <ip|domain|url|hash|email> source: <name> — <what it returned>; confidence: <its score> source: <name> — not queried confidence: <high|medium|low> (analyst) recommendation: <hunt|block|monitor|dismiss>
Close with the list of indicators to hunt and the confidence of any attribution, labelled as your own where no source supplied one.
Vigil is an open source, agentic AI SOC released under Apache 2.0. Your playbooks are plain-text Markdown files, your agent logic is readable code, and your integrations use an open standard (MCP). It is a capability you own, not a black box you rent.
Check or add ATT&CK technique ids on a finding by grounding each id in an observable. Read this when a triage, investigation, or…
Grade a periodic outbound flow as c2, suspicious, or benign-periodic. Read this when raw_data shows a repeating connection and…
Write a security report for a chosen audience - technical report, executive summary, or one-page board brief with…
Broad behavioural hunting across the findings detection already scored and the raw telemetry behind them.
How to move a hunt from its hypotheses to verdicts -- what to query next, when to validate, when to stop. Load at the start of a…
Method for working one open case from its findings to a supported disposition. Load at the start of a case.