floodlight
Skill0 starsChanged 5 months agoMITView on GitHub
Floodlight. A visibility-first security posture overview built from three inputs — where you can see an attacker and where you're blind, mapped to ATT&CK tactics. Triggers: \"run floodlight\", \"build my security posture\", \"where am I blind\", \"visibility assessment\".
In this repository3 other files it gives its agents.
- spotterSkill
- the-approachSkill
- warmupSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
14 rules. About 0 are common, 8 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈8
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 51
Keep this short. Fewer questions means more people finish.
- Distinctive: line 70
Never ask more than two clarifying questions in one turn.
- Distinctive: line 97
Before searching, output one line in chat: *"🔦 Mapping the threat landscape for [Company] — [industry], [region].
- Very specific: line 100
Run these batches concurrently.
- Very specific: line 112
Map each adversary's techniques to catalog technique IDs: When research says a group leans on phishing, valid-account abuse, or AiTM token …
- Distinctive: line 116
If you can't map a described behavior to a catalog technique, drop it rather than invent an ID.
- Distinctive: line 119
Attribution humility: Prefer "organizations in [sector] are most frequently hit by [group/behavior]" over "[group] is attacking you." Rank …
- Very specific: line 123
Regulations: must be the catalog's IDs only — currently: pci, hipaa, m2131 (federal only — don't apply to private orgs), nerc, soc2, gdpr.
- Very specific: line 205
Assumptions are not optional in spirit: Every guess you made — environment shape, proxy data, scope calls — goes in assumptions[].
- Very specific: line 213
Every Floodlight posture is built locally from the bundled floodlight-template.html and floodlight-catalog.json.
- Distinctive: line 257
After rendering, output one summary line in chat:
- Distinctive: line 270
Never name a vendor product as the answer.
- Very specific: line 273
No uncited live claims: Every breach, adversary, or regulation assertion carries a source.
- Distinctive: line 278
Choke points lead: When ranking what to fix, a red cell that is also a choke point outranks a red cell that isn't — catch them where they …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Floodlight
Full description
Floodlight builds an initial security-visibility posture from three quick inputs — company name, industry and region, and the shape of the environment. The output is an ATT&CK Tactic Coverage map: tactic by tactic, where you can see an attacker and where you're blind, weighted by what adversaries actually use and grounded in DeTT&CT, the CTID Top ATT&CK Techniques, and MITRE ATT&CK v18. The thesis is simple — the first step to security is visibility — so Floodlight builds the visibility plan first. It runs disconnected: no MCP server, no data leaves the room. Trigger phrases: "floodlight", "run floodlight", "build my security posture", "where am I blind", "visibility assessment", "security visibility map", "what should I be logging".
Why "Floodlight"
You can't lift in the dark, and you can't defend what you can't see. A floodlight doesn't catch the intruder for you — it removes the place they were counting on to hide. That's the whole posture in one image: before you buy another tool or write another detection, you flood light across the room and find out which corners are already lit and which are black.
Floodlight is a starting overview, not a CISO. It does not grade your program, benchmark you against peers, or claim to know what targets your specific company. It shows you, honestly, where your telemetry would let you watch an attacker move — and where it wouldn't — so the next dollar and the next hour go to the darkest corner first.
What this is NOT
State this plainly if the user expects more. Floodlight does not:
- Replace a CISO, a detection-engineering program, or a real risk assessment.
- Benchmark the org against peers or assign a maturity grade. (Guessing a benchmark wrong is worse than omitting it.)
- Claim confident attribution — "APT-X is targeting you." It reasons from sector and region ("organizations like yours are most often hit by…"), not named certainty.
- Audit the live environment. It works from what the user tells it plus public research. Everything it assumes is shown, labeled, and editable.
The honesty is the product. A modest, correct map beats a confident, wrong one.
INTAKE Mode (Step 0 — run once)
Keep this short. Fewer questions means more people finish. Three inputs, that's it. Infer what you can and let the user correct with one tap.
- Company name. Required. From the name alone, infer the likely industry and region and say so — don't make them type it.
- Industry & region — confirm the inference. "Looks like fintech, US — right?" One-tap correct. This sets sector-based adversary research and applicable regulations.
- Environment shape. Cloud-first / hybrid / on-prem, plus two yes/no gates:
- Run OT/ICS? (gates whether you note ATT&CK for ICS as out of scope.)
- Build or deploy AI/ML? (gates whether you note MITRE ATLAS as adjacent.)
Design principle — context vs. current state. Intake questions set context: what an org of this shape should be able to see. They do not ask "what do you have today?" item by item — that's captured in the report, where the user toggles each log source on or off and the map recolors live. Don't drag current-state interrogation into intake.
What NOT to ask: report format or length (fixed), framework choice (fixed — ATT&CK v18 + the bundled catalog), or a tool inventory (that's the in-report toggles). Never ask more than two clarifying questions in one turn.
After collecting the three: confirm in one line and move to Research.
The two layers — baked vs. live
Trust is make-or-break for this skill, so the two halves of the data are sourced differently and must never be confused.
Baked framework layer — floodlight-catalog.json (do not invent). Tactics,
choke points, log sources, the specific fields and event types each source provides,
retention-by-regulation, and the technique→source mappings are a curated,
version-stamped catalog. Read floodlight-catalog.json from this folder and use
its IDs verbatim. Never invent an event ID, field name, technique ID, or retention
figure — if it isn't in the catalog, leave it out. This is what keeps the report from
hallucinating a plausible-sounding-but-wrong detection.
Live company layer — researched at runtime and cited. Sector/region adversaries,
verified public breaches, and applicable regulations are gathered live and attributed.
You assemble this into FLOODLIGHT_DATA (schema below). No uncited breach claims, ever.
RESEARCH Phase (Step 1)
Before searching, output one line in chat: "🔦 Mapping the threat landscape for [Company] — [industry], [region]. One minute."
Run these batches concurrently. Replace [SECTOR], [REGION], [COMPANY], and use
[DATE] = 18 months prior to today for breach recency.
| Batch | Query pattern | Feeds |
| Sector adversaries | [SECTOR] sector top threat actors ransomware 2025 2026 targeting | adversaries[] |
| Region adversaries | threat actors targeting [REGION] [SECTOR] eCrime nation-state | adversaries[] |
| Technique prevalence | [SECTOR] most common attack techniques initial access MITRE ATT&CK | adversaries[].techniques, adversaryDeck |
| Verified breaches | "[COMPANY]" breach OR ransomware OR "data incident" after:[DATE] | otherPriorities, assumptions |
| Sector breaches | [SECTOR] [REGION] breach ransomware incident after:[DATE] | adversaryDeck, otherPriorities |
| Regulations | [SECTOR] [REGION] compliance log retention requirement PCI HIPAA NERC SOC2 | regulations[] |
Map each adversary's techniques to catalog technique IDs. When research says a
group leans on phishing, valid-account abuse, or AiTM token theft, find the matching
T#### IDs in floodlight-catalog.json and put those IDs in adversaries[].techniques.
The renderer uses them to boost the weighting on tactics those adversaries actually hit.
If you can't map a described behavior to a catalog technique, drop it rather than invent
an ID.
Attribution humility. Prefer "organizations in [sector] are most frequently hit by [group/behavior]" over "[group] is attacking you." Rank adversaries 1–5 by relevance to the sector/region, not by certainty about this one company.
Regulations must be the catalog's IDs only — currently: pci, hipaa, m2131
(federal only — don't apply to private orgs), nerc, soc2, gdpr. Include only what
plausibly applies to this org's sector/region. Name the detection-vs-data-minimization
tension when gdpr is included.
FLOODLIGHT_DATA schema
Build this object during synthesis. Only the company-specific layer lives here — the
framework comes from the catalog. Every field optional unless marked required; the
renderer degrades gracefully on anything omitted. Rich-text tokens **bold** and
_italic_ are supported in deck, adversaryDeck, why, otherPriorities[].body,
and assumptions[].
{
"meta": {
"company": "Northwind Mutual", // required
"industry": "Regional insurance", // required
"region": "US (Midwest)", // required
"deck": "A visibility-first read of where Northwind can watch an attacker move — and where the room is dark.",
"subtitle": "Hybrid · no OT · deploys ML underwriting", // optional eyebrow line
"generated": "13 Jun 2026" // date only, from system context
},
"applicableSources": [
"cloud_signin", "identity_audit", "process_creation", "powershell_logs",
"windows_auth", "email_security", "network_flow", "dns_query", "edr_endpoint"
],
// OPTIONAL. Log-source IDs (from the catalog) that this org *should* have given its
// shape. Omit to default to every crown-jewel source. Trim on-prem-only sources for a
// cloud-first shop; keep the identity/cloud/email core for everyone.
"currentState": {
"enabledSources": ["cloud_signin", "email_security", "edr_endpoint"]
// What they say they have TODAY. Default to a conservative few or empty — the user
// toggles the rest up in the report and the map recolors live.
},
"adversaryDeck": "Mid-market insurers are squarely in the eCrime ransomware lane, with identity-first intrusions leading.",
"adversaries": [
{
"rank": 1, // 1 = most relevant to this sector/region
"name": "Ransomware affiliates (eCrime)",
"motivation": "Financial",
"why": "Insurance carriers hold dense PII and pay to restore operations — a top eCrime target in 2025–26.",
"techniques": ["T1566", "T1078.004", "T1539", "T1486"], // catalog technique IDs
"citation": "Red Canary Threat Detection Report 2025",
"citationUrl": "https://redcanary.com/threat-detection-report/"
}
],
"otherPriorities": [
{ "title": "Recent sector incident", "body": "A peer carrier disclosed a ransomware event in Q1 2026 — **identity** was the entry point." }
],
"regulations": ["pci", "hipaa", "gdpr"], // catalog IDs only
"assumptions": [
"Hybrid environment, cloud-first identity (Entra/Okta). No OT/ICS.",
"Deploys ML for underwriting — ATLAS is adjacent but out of scope for this map.",
"No verified public breach found for Northwind itself; sector data used as proxy."
]
}Field reference
| Field | Required | Notes |
meta.company / industry / region | yes | Header identity + framing. |
meta.deck / subtitle / generated | no | Deck supports rich tokens. generated is date-only. |
applicableSources[] | no | Catalog source IDs the org should have. Defaults to all crown-jewel. |
currentState.enabledSources[] | no | Catalog source IDs they have today. Drives initial colors; user toggles live. |
adversaries[] | recommended | rank 1–5, techniques = catalog IDs, citation(+citationUrl) required when a claim is made. |
adversaryDeck | no | One-line framing above the adversary list. |
otherPriorities[] | no | title + body (rich). Verified incidents, sector context. |
regulations[] | no | Catalog reg IDs only. Drives the retention table. |
assumptions[] | recommended | First-class and editable — every inference you made, in plain language. |
Assumptions are not optional in spirit. Every guess you made — environment shape,
proxy data, scope calls — goes in assumptions[]. They drive the analysis and the user
corrects them and re-runs. Showing your work is how a disconnected skill earns trust.
RENDER Phase (Step 2)
Every Floodlight posture is built locally from the bundled floodlight-template.html
and floodlight-catalog.json. No MCP server, no network call, no font tool. One path.
a) Write the assembled FLOODLIGHT_DATA object to a temp file as JSON:
[workspace]/floodlight-data.json
Write it with a file tool or heredoc. Do not escape anything yourself —
the inject script handles </script> escaping.
b) Run the bundled injection script (note: FOUR arguments — data, catalog,
template, output):
python3 [skill_dir]/scripts/inject.py \
floodlight-data.json \
[skill_dir]/floodlight-catalog.json \
[skill_dir]/floodlight-template.html \
floodlight-posture.html
The script validates both JSON inputs, escapes </script> sequences, and
replaces __FLOODLIGHT_DATA__ and __FLOODLIGHT_CATALOG__. It prints
"[inject] OK" on success and a specific error (invalid JSON / missing
placeholder) on failure. Fix the data and re-run if it fails.
c) FALLBACK — no shell available (e.g. a chat-only environment):
Do the same steps with file tools directly:
1. Read [skill_dir]/floodlight-template.html and
[skill_dir]/floodlight-catalog.json.
2. In BOTH the data JSON and the catalog JSON, replace every "</script>"
(case-insensitive) with "<\/script>".
3. Replace the literal token __FLOODLIGHT_CATALOG__ with the escaped
catalog JSON, and __FLOODLIGHT_DATA__ with the escaped data JSON.
Literal string swaps — do not use regex replacement, and do not alter
any other template content.
4. Write the result to floodlight-posture.html.
d) Surface floodlight-posture.html to the user with the environment's file
presentation mechanism. The file is fully self-contained: open it in any
browser, toggle sources on the page, export to HTML or print to PDF. Fonts
load from the Google Fonts CDN when reachable and fall back to system fonts
on locked-down networks.Summary line
After rendering, output one summary line in chat:
"[N] tactics mapped · [N] choke points · [N] dark / [N] partial / [N] lit · top gap: [tactic]"
Then one sentence: the single darkest, highest-leverage corner — the red choke-point tactic the user should close first. Nothing else in chat. The posture is the artifact; don't duplicate it.
Editorial rules
- Visibility first, always. The recommendation is what to see, not what to buy. Never name a vendor product as the answer.
- No invented framework facts. Event IDs, fields, technique IDs, retention figures — catalog or nothing.
- No uncited live claims. Every breach, adversary, or regulation assertion carries a
source. Sector proxies are labeled as proxies in
assumptions[]. - No benchmarking, no maturity grade. State where they can and can't see. Don't score them against an invented peer set.
- Attribution humility. Sector/region targeting language, not confident named attribution.
- Choke points lead. When ranking what to fix, a red cell that is also a choke point outranks a red cell that isn't — catch them where they can't avoid you.
- Assumptions are visible and editable. Surface every inference; invite correction.
- Redundancy over single-source coverage. A tactic covered by one log source that EDR-killers or log-clearing can destroy is partial, not done. The weighting already rewards depth — your prose should too.
Version history
| Version | Change |
| 0.1.0 | Initial public release. Self-contained standalone edition — three-input intake, live sector/region adversary research, baked floodlight-catalog.json (v0.3.0: 14 tactics, 18 log sources, 71 techniques, 13 choke points, retention-by-regulation), scripts/inject.py local render against floodlight-template.html, interactive in-report source toggles with live recolor, HTML/PDF export. No MCP dependency. |
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

