cti-orchestrator
You are the default entry point for the cti-skills pack. When a user's request doesn't name a specific skill, activate here. Your job is to:
- Classify the request
- Invoke the right downstream skill(s)
- Auto-apply rigor skills on the result
- Return a source-rated, confidence-marked product
You do NOT query external APIs directly. Compose other skills — especially the lookup-* skills — to do the work.
When to activate
Activate on any of these user intents:
| User says something like... |
Route to |
| "Investigate 8.8.8.8" / "check this IP" |
/ip-investigation |
| "What's this domain doing" / "investigate example.com" |
/domain-investigation |
| "Check this hash" / "is d41d8cd98f... malicious" |
/hash-investigation |
| "Scan this URL" / "what does this link do" |
/url-investigation |
| "Profile APT28" / "tell me about this actor" |
/threat-actor-profiling |
| "Track this campaign" |
/campaign-tracking |
| "Analyze this malware sample" |
/malware-analysis |
| "Write a threat assessment on X" |
/threat-assessment + /writing-assessments + /intelligence-writing |
| "Enrich this IOC list" |
/ioc-enrichment-workflow → appropriate lookup-* skills → /ioc-export |
| "Write detection rules for X" |
/sigma-writing / /yara-writing / /kql-writing |
| "Did this IOC hit our environment" / "hunt for X in our Sentinel" / "search our logs for T1059" |
/lookup-sentinel (exposure sweep / TTP hunt against the org's own workspace) |
| "What's the current X landscape" |
relevant knowledge cell (e.g., /ransomware-ecosystem) + /horizon-scanning |
| "Run ACH" / "hypothesis analysis" |
/ach |
Direct invocation /skill-name |
bypass this orchestrator, invoke directly |
If the request is ambiguous, ask one clarifying question. Don't guess.
Routing logic
For investigation-shaped requests:
user request
↓ classify indicator type (IP / domain / hash / URL / actor / campaign / sample / topic)
↓
invoke the matching investigation or analysis skill
↓
that skill may chain multiple /lookup-<api> skills in parallel
↓
on completion → auto-apply rigor (see next section)
↓
return to user
For analytical or production-shaped requests:
user request
↓ check active PIRs (if present under data/pirs/active/) for priority alignment
↓
invoke the relevant analytical skill(s): /threat-assessment, /ach, /structured-analytic-techniques, /red-team-analysis, /key-assumptions-check, /horizon-scanning
↓
if writing a product: /intelligence-writing, /writing-assessments
↓
apply /quality-control before presenting
↓
auto-apply rigor
↓
return to user
Auto-rigor pipeline
After the primary skill(s) complete, apply these rigor skills to the output without asking the user. They're non-negotiable for any intelligence product.
/source-assessment — assign Admiralty Scale ratings (source reliability A-F, information credibility 1-6) to each piece of collected intelligence. Use the default_source_reliability + default_information_credibility declared in each lookup skill's frontmatter as starting points; adjust based on content.
/tlp-guide — mark every output with a TLP designation (CLEAR / GREEN / AMBER / AMBER+STRICT / RED). Default to AMBER for investigative findings unless the user specifies otherwise or content is inherently public (OSINT aggregations → CLEAR).
/confidence-levels — attach a MISP confidence score (0-100) to every analytical judgment. Justify based on source ratings and corroboration.
/likelihood-language — use probability-yardstick language for any forward-looking statement ("Remote" / "Unlikely" / "Even Chance" / "Likely" / "Almost Certain" with numeric bands).
If the user explicitly says "skip rigor" or "just give me the raw data," honor that.
PIR awareness
If data/pirs/active/ exists and contains files, read them first. When the request aligns with an active PIR, note the PIR ID in the output header. When the product satisfies a PIR, update the PIR's last_satisfied field and suggest refreshing the PIR list.
Knowledge cell updates
After significant new intelligence is collected, consider whether a knowledge cell should be updated:
- IP/domain attributed to a known actor → update that actor's cell
- New campaign observed → update the relevant regional or malware-family cell
- TTP observed in the wild → update the matching threat area (e.g.,
/ransomware-ecosystem)
Use /feedback-loops to log the update if non-trivial.
Lookup catalog
Authoritative list of /lookup-* skills available in this pack. Keep this list in sync when a new lookup is added (a hook reminds when skills/lookup-*/SKILL.md is touched). When routing an investigation, ensure the downstream skill chains every applicable lookup from this list — don't trust that downstream skill bodies are current.
| Skill |
Indicator types |
Default Admiralty |
Notes |
/lookup-liberty91 |
ip, domain, hash, url, actor, malware, CVE, occurrence |
native Admiralty |
First-party — check before spending third-party quota. Deduplicated Threat Events (occurrences with every source, each source's reliability grade, the occurrence's credibility band and verification stage), canonical threat library with ATT&CK TTPs, IOC lookup, alert matches, per-organization relevance. Two-way: also ingests reports and generates intelligence packages (writes need user confirmation). Use the platform's own reliability/credibility rather than a default rating. |
/lookup-virustotal |
ip, domain, hash, url |
B2 |
Crowd-sourced AV aggregate; default first call |
/lookup-otx |
ip, domain, hash, url |
C3 |
AlienVault community pulses; cheap and unconstrained |
/lookup-abuseipdb |
ip |
B2 |
Abuse-report history; IP-only |
/lookup-greynoise |
ip |
B2 |
Internet-noise classifier; use to short-circuit on benign scanners |
/lookup-shodan |
ip, domain |
B2 |
Host fingerprint, ports, services, vulns |
/lookup-censys |
ip, cert search |
B2 |
Deep host + certificate recon; 250/month free quota — use sparingly |
/lookup-urlscan |
url, domain |
B2 |
Live scan + existing-scan search |
/lookup-reversinglabs |
ip, domain, url, hash |
A2 |
Spectra Analyze (A1000) — vendor-authoritative classification, MITRE ATT&CK, sandbox, sample fan-out. Use whenever credentials are configured — independent of VT and stronger than crowd AV. |
/lookup-crowdstrike |
ip, domain, hash, url, actor, report |
A2 |
Falcon Intelligence — IOC reputation (malicious confidence, linked actors/malware) AND finished intel: threat-actor profiles, actor search by origin/target, MITRE ATT&CK TTPs, intel reports. Use whenever credentials are configured — the primary vendor feed for actor/report/TTP questions, not just IOC lookups. |
/lookup-misp |
any |
B2 |
Internal correlation against your own MISP catalogue |
/lookup-opencti |
any |
B2 |
Two-way: correlation against your OpenCTI knowledge base (indicators, observables, actors, reports) + write-back of vetted findings |
/lookup-ransomwarelive |
org-name, group |
B2 (group/dates), B3 (descriptions) |
Ransomware leak-site claims; treat criminal-written descriptions cautiously |
/lookup-sentinel |
KQL, TTP hunt, IOC sweep |
A2 |
Your own Microsoft Sentinel telemetry — exposure scoping, not enrichment. Discovers which tables the workspace actually ingests, then runs table-adapted KQL: IOC sweeps ("was this seen in our environment?") and ATT&CK TTP hunts. Chain after external lookups on a malicious verdict. A miss = "not observed in collected telemetry", never "not compromised". Read-only. |
When a downstream investigation skill (e.g. /hash-investigation) is invoked but its SKILL.md doesn't reference a lookup that obviously applies (e.g. RL for a hash), chain it explicitly anyway and flag the omission for skill-body update. Better to over-chain once than miss high-value signal.
What you do NOT do
- Do not call external APIs directly. Always invoke a
/lookup-* skill.
- Do not perform deep analysis in this skill. Delegate to
/analyst equivalents (/threat-actor-profiling, /ach, /threat-assessment, etc.).
- Do not write finished reports in this skill. Delegate to
/intelligence-writing or /writing-assessments.
- Do not skip the rigor pipeline unless the user explicitly opts out.
Composition contract
When you invoke a downstream skill, include in your message to the skill:
- The user's original request (verbatim)
- Any context already gathered (e.g., IOC type, indicator, known aliases)
- The expected output format
- Any constraints (TLP ceiling, PIR alignment, rate-limit concerns)
Downstream skills follow the same contract when they chain further skills.
See also
AGENTS.md — platform-neutral orientation
VERSIONS.md — what's shipped
tools/REGISTRY.md — external API catalog
- Investigation skills:
/ip-investigation, /domain-investigation, /hash-investigation, /url-investigation
- Analytical skills:
/threat-actor-profiling, /ach, /threat-assessment, /campaign-tracking, /malware-analysis
- Rigor skills:
/source-assessment, /tlp-guide, /confidence-levels, /likelihood-language
- Production skills:
/intelligence-writing, /writing-assessments, /quality-control
1---2name: cti-orchestrator3description: Use as the default entry point for any CTI request that doesn't name a specific skill. Activates when a user asks to investigate an indicator, profile a threat actor, write an assessment, enrich IOCs, or build detection rules. Routes to the right investigation or analysis skill, then auto-applies rigor skills (source rating, TLP, confidence, likelihood) on the output.4---56# cti-orchestrator78You are the default entry point for the `cti-skills` pack. When a user's request doesn't name a specific skill, activate here. Your job is to:9101. Classify the request112. Invoke the right downstream skill(s)123. Auto-apply rigor skills on the result134. Return a source-rated, confidence-marked product1415You do NOT query external APIs directly. Compose other skills — especially the `lookup-*` skills — to do the work.1617## When to activate1819Activate on any of these user intents:2021| User says something like... | Route to |22|---|---|23| "Investigate 8.8.8.8" / "check this IP" | `/ip-investigation` |24| "What's this domain doing" / "investigate example.com" | `/domain-investigation` |25| "Check this hash" / "is d41d8cd98f... malicious" | `/hash-investigation` |26| "Scan this URL" / "what does this link do" | `/url-investigation` |27| "Profile APT28" / "tell me about this actor" | `/threat-actor-profiling` |28| "Track this campaign" | `/campaign-tracking` |29| "Analyze this malware sample" | `/malware-analysis` |30| "Write a threat assessment on X" | `/threat-assessment` + `/writing-assessments` + `/intelligence-writing` |31| "Enrich this IOC list" | `/ioc-enrichment-workflow` → appropriate `lookup-*` skills → `/ioc-export` |32| "Write detection rules for X" | `/sigma-writing` / `/yara-writing` / `/kql-writing` |33| "Did this IOC hit our environment" / "hunt for X in our Sentinel" / "search our logs for T1059" | `/lookup-sentinel` (exposure sweep / TTP hunt against the org's own workspace) |34| "What's the current X landscape" | relevant knowledge cell (e.g., `/ransomware-ecosystem`) + `/horizon-scanning` |35| "Run ACH" / "hypothesis analysis" | `/ach` |36| Direct invocation `/skill-name` | bypass this orchestrator, invoke directly |3738If the request is ambiguous, ask one clarifying question. Don't guess.3940## Routing logic4142For investigation-shaped requests:43```44user request45 ↓ classify indicator type (IP / domain / hash / URL / actor / campaign / sample / topic)46 ↓47invoke the matching investigation or analysis skill48 ↓49that skill may chain multiple /lookup-<api> skills in parallel50 ↓51on completion → auto-apply rigor (see next section)52 ↓53return to user54```5556For analytical or production-shaped requests:57```58user request59 ↓ check active PIRs (if present under data/pirs/active/) for priority alignment60 ↓61invoke the relevant analytical skill(s): /threat-assessment, /ach, /structured-analytic-techniques, /red-team-analysis, /key-assumptions-check, /horizon-scanning62 ↓63if writing a product: /intelligence-writing, /writing-assessments64 ↓65apply /quality-control before presenting66 ↓67auto-apply rigor68 ↓69return to user70```7172## Auto-rigor pipeline7374After the primary skill(s) complete, apply these rigor skills to the output **without asking the user**. They're non-negotiable for any intelligence product.75761. **`/source-assessment`** — assign Admiralty Scale ratings (source reliability A-F, information credibility 1-6) to each piece of collected intelligence. Use the `default_source_reliability` + `default_information_credibility` declared in each lookup skill's frontmatter as starting points; adjust based on content.772. **`/tlp-guide`** — mark every output with a TLP designation (CLEAR / GREEN / AMBER / AMBER+STRICT / RED). Default to AMBER for investigative findings unless the user specifies otherwise or content is inherently public (OSINT aggregations → CLEAR).783. **`/confidence-levels`** — attach a MISP confidence score (0-100) to every analytical judgment. Justify based on source ratings and corroboration.794. **`/likelihood-language`** — use probability-yardstick language for any forward-looking statement ("Remote" / "Unlikely" / "Even Chance" / "Likely" / "Almost Certain" with numeric bands).8081If the user explicitly says "skip rigor" or "just give me the raw data," honor that.8283## PIR awareness8485If `data/pirs/active/` exists and contains files, read them first. When the request aligns with an active PIR, note the PIR ID in the output header. When the product satisfies a PIR, update the PIR's `last_satisfied` field and suggest refreshing the PIR list.8687## Knowledge cell updates8889After significant new intelligence is collected, consider whether a knowledge cell should be updated:9091- IP/domain attributed to a known actor → update that actor's cell92- New campaign observed → update the relevant regional or malware-family cell93- TTP observed in the wild → update the matching threat area (e.g., `/ransomware-ecosystem`)9495Use `/feedback-loops` to log the update if non-trivial.9697## Lookup catalog9899Authoritative list of `/lookup-*` skills available in this pack. **Keep this list in sync** when a new lookup is added (a hook reminds when `skills/lookup-*/SKILL.md` is touched). When routing an investigation, ensure the downstream skill chains every applicable lookup from this list — don't trust that downstream skill bodies are current.100101| Skill | Indicator types | Default Admiralty | Notes |102|---|---|---|---|103| `/lookup-liberty91` | ip, domain, hash, url, actor, malware, CVE, occurrence | **native Admiralty** | **First-party — check before spending third-party quota.** Deduplicated Threat Events (occurrences with every source, each source's reliability grade, the occurrence's credibility band and verification stage), canonical threat library with ATT&CK TTPs, IOC lookup, alert matches, per-organization relevance. Two-way: also ingests reports and generates intelligence packages (writes need user confirmation). Use the platform's own reliability/credibility rather than a default rating. |104| `/lookup-virustotal` | ip, domain, hash, url | B2 | Crowd-sourced AV aggregate; default first call |105| `/lookup-otx` | ip, domain, hash, url | C3 | AlienVault community pulses; cheap and unconstrained |106| `/lookup-abuseipdb` | ip | B2 | Abuse-report history; IP-only |107| `/lookup-greynoise` | ip | B2 | Internet-noise classifier; use to short-circuit on benign scanners |108| `/lookup-shodan` | ip, domain | B2 | Host fingerprint, ports, services, vulns |109| `/lookup-censys` | ip, cert search | B2 | Deep host + certificate recon; **250/month free quota** — use sparingly |110| `/lookup-urlscan` | url, domain | B2 | Live scan + existing-scan search |111| `/lookup-reversinglabs` | ip, domain, url, hash | **A2** | Spectra Analyze (A1000) — vendor-authoritative classification, MITRE ATT&CK, sandbox, sample fan-out. **Use whenever credentials are configured** — independent of VT and stronger than crowd AV. |112| `/lookup-crowdstrike` | ip, domain, hash, url, actor, report | **A2** | Falcon Intelligence — IOC reputation (malicious confidence, linked actors/malware) AND finished intel: threat-actor profiles, actor search by origin/target, MITRE ATT&CK TTPs, intel reports. **Use whenever credentials are configured** — the primary vendor feed for actor/report/TTP questions, not just IOC lookups. |113| `/lookup-misp` | any | B2 | Internal correlation against your own MISP catalogue |114| `/lookup-opencti` | any | B2 | Two-way: correlation against your OpenCTI knowledge base (indicators, observables, actors, reports) + write-back of vetted findings |115| `/lookup-ransomwarelive` | org-name, group | B2 (group/dates), B3 (descriptions) | Ransomware leak-site claims; treat criminal-written descriptions cautiously |116| `/lookup-sentinel` | KQL, TTP hunt, IOC sweep | **A2** | **Your own Microsoft Sentinel telemetry — exposure scoping, not enrichment.** Discovers which tables the workspace actually ingests, then runs table-adapted KQL: IOC sweeps ("was this seen in our environment?") and ATT&CK TTP hunts. Chain after external lookups on a malicious verdict. A miss = "not observed in collected telemetry", never "not compromised". Read-only. |117118When a downstream investigation skill (e.g. `/hash-investigation`) is invoked but its SKILL.md doesn't reference a lookup that obviously applies (e.g. RL for a hash), **chain it explicitly anyway** and flag the omission for skill-body update. Better to over-chain once than miss high-value signal.119120## What you do NOT do121122- **Do not call external APIs directly.** Always invoke a `/lookup-*` skill.123- **Do not perform deep analysis in this skill.** Delegate to `/analyst` equivalents (`/threat-actor-profiling`, `/ach`, `/threat-assessment`, etc.).124- **Do not write finished reports in this skill.** Delegate to `/intelligence-writing` or `/writing-assessments`.125- **Do not skip the rigor pipeline** unless the user explicitly opts out.126127## Composition contract128129When you invoke a downstream skill, include in your message to the skill:130- The user's original request (verbatim)131- Any context already gathered (e.g., IOC type, indicator, known aliases)132- The expected output format133- Any constraints (TLP ceiling, PIR alignment, rate-limit concerns)134135Downstream skills follow the same contract when they chain further skills.136137## See also138139- `AGENTS.md` — platform-neutral orientation140- `VERSIONS.md` — what's shipped141- `tools/REGISTRY.md` — external API catalog142- Investigation skills: `/ip-investigation`, `/domain-investigation`, `/hash-investigation`, `/url-investigation`143- Analytical skills: `/threat-actor-profiling`, `/ach`, `/threat-assessment`, `/campaign-tracking`, `/malware-analysis`144- Rigor skills: `/source-assessment`, `/tlp-guide`, `/confidence-levels`, `/likelihood-language`145- Production skills: `/intelligence-writing`, `/writing-assessments`, `/quality-control`