A local, file-based detection workflow lab for reviewer-verifiable telemetry and detection demos.
Latest milestone: v0.6.0 — fourth demo and config-change investigation.
- telemetry-window-demo
- ai-assisted-detection-demo
- rule-evaluation-and-dedup-demo
- config-change-investigation-demo
| Demo | Input | Deterministic core | LLM role | Main artifacts | Guardrails / non-goals |
|---|---|---|---|---|---|
| telemetry-window-demo | JSONL / CSV events | Windows Features Alert thresholds |
None | features.csvalerts.csvsummary.json3 PNG plots |
MVP only No realtime No case management |
| ai-assisted-detection-demo | JSONL auth / web / process | Normalize Rules Grouping ATT&CK mapping |
JSON-only case drafting | rule_hits.jsoncase_bundles.jsoncase_summaries.jsoncase_report.mdaudit_traces.jsonl |
Human verification required No autonomous response No final verdict |
| rule-evaluation-and-dedup-demo | JSON raw rule hits | Scope resolution Cooldown grouping Suppression reasoning |
None | rule_hits_before_dedup.jsonrule_hits_after_dedup.jsondedup_explanations.jsondedup_report.md |
No realtime No dashboard No AI stage |
| config-change-investigation-demo | JSONL config changes Policy denials Follow-on events |
Normalize Risky-change rules Bounded correlation |
None | change_events_normalized.jsoninvestigation_hits.jsoninvestigation_summary.jsoninvestigation_report.md |
No realtime No dashboard No AI stage |
telemetry-lab is a small portfolio repository for constrained detection workflows. It is not a SIEM, dashboard, or monitoring platform; it is organized as four local, file-based demos that are reproducible from committed sample data and intentionally scoped for public review rather than production use.
telemetry-window-demo turns timestamped event streams into sliding-window feature tables, cooldown-reduced rule-based alerts, PNG timeline plots, and machine-readable run summaries.
ai-assisted-detection-demo uses deterministic normalization, detection, case grouping, and ATT&CK mapping, then limits the LLM to JSON-only case summarization. Human verification is required, there is no autonomous response, and the demo does not produce a final incident verdict.
rule-evaluation-and-dedup-demo starts from raw rule hits and makes cooldown behavior legible. It shows which hits were kept, which were suppressed, how scope was resolved, and why repeated hits collapsed into fewer retained alerts.
config-change-investigation-demo follows risky configuration changes into bounded follow-on evidence such as policy denials and service signals. It stays deterministic, file-based, and review-oriented, with no added AI stage.
python -m pip install -e .
python -m telemetry_window_demo.cli run --config configs/default.yamlUse the same Python interpreter for install, tests, and demo commands. On machines with multiple Python installs, replace python with the intended interpreter path.
To run the test suite in a fresh environment, install the dev extra with python -m pip install -e ".[dev]".
Other demo entrypoints:
python -m telemetry_window_demo.cli run-ai-demopython -m telemetry_window_demo.cli run-rule-dedup-demopython -m telemetry_window_demo.cli run-config-change-demo
Useful inspection commands:
python -m telemetry_window_demo.cli summarize --input data/raw/sample_events.jsonl
For CSV inputs, pass a .csv file to --input; use --timestamp-col when the timestamp column is not named timestamp.
The run --config configs/default.yaml command reads data/raw/sample_events.jsonl and regenerates:
data/processed/features.csvdata/processed/alerts.csvdata/processed/summary.jsondata/processed/event_count_timeline.pngdata/processed/error_rate_timeline.pngdata/processed/alerts_timeline.png
With the bundled default sample, the current repo state produces:
41normalized events24windows12alerts after a60second cooldown
Why it is worth a quick look:
- it shows a full telemetry path from raw events to operator-facing outputs
- the sample inputs and outputs are reproducible in-repo
- a second bundled scenario gives a slightly richer walkthrough without changing the basic CLI flow
For a quick coherence pass across the demos:
- Run
python -m telemetry_window_demo.cli run --config configs/default.yamland confirmdata/processed/summary.jsonreports41events,24windows, and12alerts. - Run
python -m telemetry_window_demo.cli run-rule-dedup-demoand confirmdemos/rule-evaluation-and-dedup-demo/artifacts/dedup_report.mdshows10raw hits reduced to6retained alerts with4suppressions. - Run
python -m telemetry_window_demo.cli run-config-change-demoand confirmdemos/config-change-investigation-demo/artifacts/investigation_report.mdshows4normalized changes,3risky changes, and3investigations. - Run
python -m telemetry_window_demo.cli run-ai-demoand confirmdemos/ai-assisted-detection-demo/artifacts/case_report.mdshows3deterministic cases with human verification and no final incident verdict.
Default sample:
- config:
configs/default.yaml - input:
data/raw/sample_events.jsonl - outputs:
data/processed/ - current summary:
41events,24windows,12alerts,summary.jsonincluded
Richer sample:
- config:
configs/richer_sample.yaml - input:
data/raw/richer_sample_events.jsonl - outputs:
data/processed/richer_sample/ - current summary:
28events,24windows,8alerts,summary.jsonincluded
Runtime input support:
.jsonl.csv
Required fields for both formats on every row or record:
timestampby default, or the column named bytime.timestamp_colin a run configevent_typesourcetargetstatus
Input and output validation:
- config paths, event inputs, and plot CSV inputs must point to files
- required event fields must be present and non-empty
- custom timestamp columns cannot reuse required event field names
- plot input tables validate required columns, datetime values, numeric ranges, and window bounds
Cooldown behavior:
- repeated alerts are keyed by
(rule_name, scope) - scope prefers the first available entity-like field in this order:
entity,source,target,host - when no entity-like field is present, cooldown falls back to per-
rule_namebehavior
demos/rule-evaluation-and-dedup-demo/README.mdexplains the third demo and links its committed before/after dedup artifactsdemos/config-change-investigation-demo/README.mdexplains the config-change investigation demo and its committed artifactsdocs/reviewer-path.mdmaps common review questions to the right demo and artifactsdocs/sample-output.mdsummarizes the committed sample artifactsdocs/roadmap.mdsketches the next demo directionsdata/processed/summary.jsoncaptures the default run in machine-readable formdata/processed/richer_sample/summary.jsoncaptures the richer scenario packtests/keeps regression coverage close to the CLI behavior and windowing logic
- add a focused auth/login anomaly triage walkthrough on top of the existing window features
- add a compact config-change drift follow-up scenario using the current deterministic evidence model
- keep sample-output docs and public repo presentation aligned with the checked-in demo state
This repository is a portfolio prototype, not a production monitoring system.
- No real-time ingestion
- No streaming state management
- No alert routing or case management
- No dashboard or service deployment
- Sample-data driven only
