agentic-threat-hunting-framework 0.2.3__tar.gz → 0.2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/MANIFEST.in +2 -17
- {agentic_threat_hunting_framework-0.2.3/agentic_threat_hunting_framework.egg-info → agentic_threat_hunting_framework-0.2.4}/PKG-INFO +1 -1
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/USING_ATHF.md +2 -2
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/agentic_threat_hunting_framework.egg-info}/PKG-INFO +1 -1
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/agentic_threat_hunting_framework.egg-info/SOURCES.txt +26 -22
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/athf/__version__.py +1 -1
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/athf/cli.py +1 -1
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/athf/commands/hunt.py +1 -3
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/athf/commands/init.py +45 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/athf/commands/similar.py +2 -2
- agentic_threat_hunting_framework-0.2.4/athf/data/__init__.py +14 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/CHANGELOG.md +1 -1
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/INSTALL.md +3 -3
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/README.md +4 -4
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/getting-started.md +2 -2
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/lock-pattern.md +2 -2
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/maturity-model.md +4 -4
- agentic_threat_hunting_framework-0.2.4/athf/data/prompts/README.md +172 -0
- agentic_threat_hunting_framework-0.2.4/athf/data/prompts/ai-workflow.md +581 -0
- agentic_threat_hunting_framework-0.2.4/athf/data/prompts/basic-prompts.md +316 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/pyproject.toml +14 -3
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/LICENSE +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/README.md +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/agentic_threat_hunting_framework.egg-info/dependency_links.txt +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/agentic_threat_hunting_framework.egg-info/entry_points.txt +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/agentic_threat_hunting_framework.egg-info/requires.txt +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/agentic_threat_hunting_framework.egg-info/top_level.txt +0 -0
- /agentic_threat_hunting_framework-0.2.3/assets/athf_level_3.png → /agentic_threat_hunting_framework-0.2.4/assets/ATHF_level_3.png +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/assets/athf-cli-workflow.gif +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/assets/athf-level0.gif +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/assets/athf-level1.gif +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/assets/athf-level2.gif +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/assets/athf-level3.gif +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/assets/athf_fivelevels.png +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/assets/athf_lock.png +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/assets/athf_logo.png +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/assets/athf_manual_v_ai.png +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/athf/__init__.py +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/athf/commands/__init__.py +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/athf/commands/context.py +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/athf/commands/env.py +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/athf/commands/investigate.py +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/athf/core/__init__.py +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/athf/core/attack_matrix.py +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/athf/core/hunt_manager.py +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/athf/core/hunt_parser.py +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/athf/core/investigation_parser.py +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/athf/core/template_engine.py +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/CLI_REFERENCE.md +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/environment.md +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/level4-agentic-workflows.md +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/why-athf.md +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/hunts/FORMAT_GUIDELINES.md +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/hunts/H-0001.md +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/hunts/H-0002.md +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/hunts/H-0003.md +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/hunts/README.md +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/integrations/MCP_CATALOG.md +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/integrations/README.md +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/integrations/quickstart/splunk.md +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/knowledge/hunting-knowledge.md +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4/athf/data}/templates/HUNT_LOCK.md +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/athf/utils/__init__.py +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/setup.cfg +0 -0
- {agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/setup.py +0 -0
{agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/MANIFEST.in
RENAMED
|
@@ -7,23 +7,8 @@ include USING_ATHF.md
|
|
|
7
7
|
include INSTALL.md
|
|
8
8
|
include CHANGELOG.md
|
|
9
9
|
|
|
10
|
-
# Include all
|
|
11
|
-
recursive-include
|
|
12
|
-
|
|
13
|
-
# Include templates
|
|
14
|
-
recursive-include templates *.md
|
|
15
|
-
|
|
16
|
-
# Include example hunts
|
|
17
|
-
recursive-include hunts *.md
|
|
18
|
-
|
|
19
|
-
# Include example queries
|
|
20
|
-
recursive-include queries *.spl *.kql *.sql
|
|
21
|
-
|
|
22
|
-
# Include knowledge base
|
|
23
|
-
recursive-include knowledge *.md
|
|
24
|
-
|
|
25
|
-
# Include integration documentation
|
|
26
|
-
recursive-include integrations *.md
|
|
10
|
+
# Include all data files (moved to athf/data/)
|
|
11
|
+
recursive-include athf/data *.md
|
|
27
12
|
|
|
28
13
|
# Include visual assets
|
|
29
14
|
recursive-include assets *.png *.gif *.svg
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentic-threat-hunting-framework
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
4
4
|
Summary: Agentic Threat Hunting Framework - Memory and AI for threat hunters
|
|
5
5
|
Author-email: Sydney Marrone <athf@nebulock.io>
|
|
6
6
|
Maintainer-email: Sydney Marrone <athf@nebulock.io>
|
{agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/USING_ATHF.md
RENAMED
|
@@ -132,11 +132,11 @@ ATHF is designed to work with your existing stack. The README provides:
|
|
|
132
132
|
- **Level 3: Generative Capabilities** - "Bring Your Own Tools" approach with MCP servers or APIs for SIEM, EDR, ticketing, and threat intel
|
|
133
133
|
- **Level 3-4 Examples** - Visual diagrams and detailed workflows showing multi-MCP coordination and autonomous agent patterns
|
|
134
134
|
|
|
135
|
-
See [integrations/README.md](integrations/README.md) and [integrations/MCP_CATALOG.md](integrations/MCP_CATALOG.md) for tool-specific guidance.
|
|
135
|
+
See [integrations/README.md](athf/data/integrations/README.md) and [integrations/MCP_CATALOG.md](athf/data/integrations/MCP_CATALOG.md) for tool-specific guidance.
|
|
136
136
|
|
|
137
137
|
## Maintaining Environmental Context
|
|
138
138
|
|
|
139
|
-
The [environment.md](docs/environment.md) file is a living document that informs hunt planning and enables AI-assisted hypothesis generation at all maturity levels.
|
|
139
|
+
The [environment.md](athf/data/docs/environment.md) file is a living document that informs hunt planning and enables AI-assisted hypothesis generation at all maturity levels.
|
|
140
140
|
|
|
141
141
|
### Who Maintains This File?
|
|
142
142
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentic-threat-hunting-framework
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
4
4
|
Summary: Agentic Threat Hunting Framework - Memory and AI for threat hunters
|
|
5
5
|
Author-email: Sydney Marrone <athf@nebulock.io>
|
|
6
6
|
Maintainer-email: Sydney Marrone <athf@nebulock.io>
|
|
@@ -10,13 +10,13 @@ agentic_threat_hunting_framework.egg-info/dependency_links.txt
|
|
|
10
10
|
agentic_threat_hunting_framework.egg-info/entry_points.txt
|
|
11
11
|
agentic_threat_hunting_framework.egg-info/requires.txt
|
|
12
12
|
agentic_threat_hunting_framework.egg-info/top_level.txt
|
|
13
|
+
assets/ATHF_level_3.png
|
|
13
14
|
assets/athf-cli-workflow.gif
|
|
14
15
|
assets/athf-level0.gif
|
|
15
16
|
assets/athf-level1.gif
|
|
16
17
|
assets/athf-level2.gif
|
|
17
18
|
assets/athf-level3.gif
|
|
18
19
|
assets/athf_fivelevels.png
|
|
19
|
-
assets/athf_level_3.png
|
|
20
20
|
assets/athf_lock.png
|
|
21
21
|
assets/athf_logo.png
|
|
22
22
|
assets/athf_manual_v_ai.png
|
|
@@ -36,24 +36,28 @@ athf/core/hunt_manager.py
|
|
|
36
36
|
athf/core/hunt_parser.py
|
|
37
37
|
athf/core/investigation_parser.py
|
|
38
38
|
athf/core/template_engine.py
|
|
39
|
-
athf/
|
|
40
|
-
docs/CHANGELOG.md
|
|
41
|
-
docs/CLI_REFERENCE.md
|
|
42
|
-
docs/INSTALL.md
|
|
43
|
-
docs/README.md
|
|
44
|
-
docs/environment.md
|
|
45
|
-
docs/getting-started.md
|
|
46
|
-
docs/level4-agentic-workflows.md
|
|
47
|
-
docs/lock-pattern.md
|
|
48
|
-
docs/maturity-model.md
|
|
49
|
-
docs/why-athf.md
|
|
50
|
-
hunts/FORMAT_GUIDELINES.md
|
|
51
|
-
hunts/H-0001.md
|
|
52
|
-
hunts/H-0002.md
|
|
53
|
-
hunts/H-0003.md
|
|
54
|
-
hunts/README.md
|
|
55
|
-
integrations/MCP_CATALOG.md
|
|
56
|
-
integrations/README.md
|
|
57
|
-
integrations/quickstart/splunk.md
|
|
58
|
-
knowledge/hunting-knowledge.md
|
|
59
|
-
|
|
39
|
+
athf/data/__init__.py
|
|
40
|
+
athf/data/docs/CHANGELOG.md
|
|
41
|
+
athf/data/docs/CLI_REFERENCE.md
|
|
42
|
+
athf/data/docs/INSTALL.md
|
|
43
|
+
athf/data/docs/README.md
|
|
44
|
+
athf/data/docs/environment.md
|
|
45
|
+
athf/data/docs/getting-started.md
|
|
46
|
+
athf/data/docs/level4-agentic-workflows.md
|
|
47
|
+
athf/data/docs/lock-pattern.md
|
|
48
|
+
athf/data/docs/maturity-model.md
|
|
49
|
+
athf/data/docs/why-athf.md
|
|
50
|
+
athf/data/hunts/FORMAT_GUIDELINES.md
|
|
51
|
+
athf/data/hunts/H-0001.md
|
|
52
|
+
athf/data/hunts/H-0002.md
|
|
53
|
+
athf/data/hunts/H-0003.md
|
|
54
|
+
athf/data/hunts/README.md
|
|
55
|
+
athf/data/integrations/MCP_CATALOG.md
|
|
56
|
+
athf/data/integrations/README.md
|
|
57
|
+
athf/data/integrations/quickstart/splunk.md
|
|
58
|
+
athf/data/knowledge/hunting-knowledge.md
|
|
59
|
+
athf/data/prompts/README.md
|
|
60
|
+
athf/data/prompts/ai-workflow.md
|
|
61
|
+
athf/data/prompts/basic-prompts.md
|
|
62
|
+
athf/data/templates/HUNT_LOCK.md
|
|
63
|
+
athf/utils/__init__.py
|
{agentic_threat_hunting_framework-0.2.3 → agentic_threat_hunting_framework-0.2.4}/athf/cli.py
RENAMED
|
@@ -40,7 +40,7 @@ Getting Started:
|
|
|
40
40
|
Documentation:
|
|
41
41
|
• Full docs: https://github.com/Nebulock-Inc/agentic-threat-hunting-framework
|
|
42
42
|
• CLI reference: docs/CLI_REFERENCE.md
|
|
43
|
-
• AI workflows: prompts/ai-workflow.md
|
|
43
|
+
• AI workflows: Run 'athf init' to get prompts/ai-workflow.md
|
|
44
44
|
|
|
45
45
|
\b
|
|
46
46
|
Need help? Run 'athf COMMAND --help' for command-specific help.
|
|
@@ -448,9 +448,7 @@ def stats() -> None:
|
|
|
448
448
|
# Easter egg: First True Positive milestone
|
|
449
449
|
if stats["true_positives"] == 1 and stats["completed_hunts"] > 0:
|
|
450
450
|
console.print("[bold yellow]🎯 First True Positive Detected![/bold yellow]\n")
|
|
451
|
-
console.print("[italic]Every expert threat hunter started here.")
|
|
452
|
-
console.print("This confirms your hypothesis was testable, your data was sufficient,")
|
|
453
|
-
console.print("and your analytical instincts were sound. Document what worked.[/italic]\n")
|
|
451
|
+
console.print("[italic]Every expert threat hunter started here. This confirms your hypothesis was testable, your data was sufficient, and your analytical instincts were sound. Document what worked.[/italic]\n")
|
|
454
452
|
|
|
455
453
|
|
|
456
454
|
@hunt.command()
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"""Initialize ATHF directory structure."""
|
|
2
2
|
|
|
3
|
+
import shutil
|
|
3
4
|
from pathlib import Path
|
|
4
5
|
|
|
5
6
|
import click
|
|
@@ -7,6 +8,8 @@ import yaml
|
|
|
7
8
|
from rich.console import Console
|
|
8
9
|
from rich.prompt import Confirm, Prompt
|
|
9
10
|
|
|
11
|
+
from athf.data import get_data_path
|
|
12
|
+
|
|
10
13
|
console = Console()
|
|
11
14
|
|
|
12
15
|
|
|
@@ -107,6 +110,9 @@ def init(path: str, non_interactive: bool) -> None:
|
|
|
107
110
|
_create_hunt_template(templates_path / "HUNT_LOCK.md")
|
|
108
111
|
console.print(" ✓ Created [cyan]templates/HUNT_LOCK.md[/cyan]")
|
|
109
112
|
|
|
113
|
+
# Copy reference files from package data
|
|
114
|
+
_copy_reference_files(base_path)
|
|
115
|
+
|
|
110
116
|
console.print("\n[bold green]✅ ATHF initialized successfully![/bold green]")
|
|
111
117
|
console.print("\n[bold]Next steps:[/bold]")
|
|
112
118
|
console.print(" 1. Customize [cyan]AGENTS.md[/cyan] with your environment details")
|
|
@@ -409,3 +415,42 @@ tags: []
|
|
|
409
415
|
|
|
410
416
|
with open(path, "w", encoding="utf-8") as f:
|
|
411
417
|
f.write(content)
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
def _copy_reference_files(base_path: Path) -> None:
|
|
421
|
+
"""Copy reference files from package data to workspace.
|
|
422
|
+
|
|
423
|
+
Copies knowledge base, prompts, example hunts, docs, and integrations
|
|
424
|
+
from the installed package to the user's workspace.
|
|
425
|
+
"""
|
|
426
|
+
try:
|
|
427
|
+
data_path = get_data_path()
|
|
428
|
+
except Exception:
|
|
429
|
+
# Package data not available (e.g., development mode)
|
|
430
|
+
console.print(" [dim]Skipping reference file copy (package data not available)[/dim]")
|
|
431
|
+
return
|
|
432
|
+
|
|
433
|
+
# Directories to copy from package to workspace
|
|
434
|
+
copy_dirs = ["knowledge", "prompts", "hunts", "docs", "integrations"]
|
|
435
|
+
|
|
436
|
+
for dir_name in copy_dirs:
|
|
437
|
+
src_dir = data_path / dir_name
|
|
438
|
+
dst_dir = base_path / dir_name
|
|
439
|
+
|
|
440
|
+
if src_dir.exists() and src_dir.is_dir():
|
|
441
|
+
try:
|
|
442
|
+
# Copy files, don't overwrite existing
|
|
443
|
+
for src_file in src_dir.rglob("*"):
|
|
444
|
+
if src_file.is_file():
|
|
445
|
+
# Calculate relative path and destination
|
|
446
|
+
rel_path = src_file.relative_to(src_dir)
|
|
447
|
+
dst_file = dst_dir / rel_path
|
|
448
|
+
|
|
449
|
+
# Only copy if destination doesn't exist
|
|
450
|
+
if not dst_file.exists():
|
|
451
|
+
dst_file.parent.mkdir(parents=True, exist_ok=True)
|
|
452
|
+
shutil.copy2(src_file, dst_file)
|
|
453
|
+
|
|
454
|
+
console.print(f" ✓ Copied reference files to [cyan]{dir_name}/[/cyan]")
|
|
455
|
+
except Exception as e:
|
|
456
|
+
console.print(f" [yellow]Warning: Could not copy {dir_name}/: {e}[/yellow]")
|
|
@@ -144,7 +144,7 @@ def _find_similar_hunts(
|
|
|
144
144
|
hunt_files = list(hunts_dir.glob("H-*.md"))
|
|
145
145
|
|
|
146
146
|
if not hunt_files:
|
|
147
|
-
|
|
147
|
+
# Don't print warning - let the output format handle empty results
|
|
148
148
|
return []
|
|
149
149
|
|
|
150
150
|
# Extract hunt content and metadata
|
|
@@ -172,7 +172,7 @@ def _find_similar_hunts(
|
|
|
172
172
|
)
|
|
173
173
|
|
|
174
174
|
if not hunt_data:
|
|
175
|
-
|
|
175
|
+
# Don't print warning - let the output format handle empty results
|
|
176
176
|
return []
|
|
177
177
|
|
|
178
178
|
# Build TF-IDF vectors using searchable text (weighted semantic sections)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""ATHF reference data and templates."""
|
|
2
|
+
|
|
3
|
+
from importlib.resources import files
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def get_data_path() -> Path:
|
|
8
|
+
"""Get the path to ATHF data directory.
|
|
9
|
+
|
|
10
|
+
Returns:
|
|
11
|
+
Path to the athf/data directory containing templates, knowledge,
|
|
12
|
+
prompts, hunts, docs, and integrations.
|
|
13
|
+
"""
|
|
14
|
+
return Path(str(files("athf.data")))
|
|
@@ -144,4 +144,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
144
144
|
|
|
145
145
|
ATHF is a framework to internalize, not a platform to extend. However, if you've adapted ATHF in interesting ways or have feedback, we'd love to hear about it in [GitHub Discussions](https://github.com/Nebulock-Inc/agentic-threat-hunting-framework/discussions).
|
|
146
146
|
|
|
147
|
-
For more on the philosophy, see [
|
|
147
|
+
For more on the philosophy, see [USING_ATHF.md](../../../USING_ATHF.md).
|
|
@@ -215,7 +215,7 @@ pytest tests/ -v --cov=athf --cov-report=term-missing
|
|
|
215
215
|
pytest tests/test_commands.py::TestInitCommand::test_init_creates_structure_non_interactive -v
|
|
216
216
|
```
|
|
217
217
|
|
|
218
|
-
Tests use Click's `CliRunner` to test actual CLI commands rather than mocks. See [
|
|
218
|
+
Tests use Click's `CliRunner` to test actual CLI commands rather than mocks. See [tests/test_commands.py](../../../tests/test_commands.py) for examples.
|
|
219
219
|
|
|
220
220
|
**Documentation**: Keep your fork's documentation current:
|
|
221
221
|
- **AGENTS.md** - Update with your environment details, data sources, team context
|
|
@@ -302,7 +302,7 @@ athf hunt list --status completed --output json | \
|
|
|
302
302
|
|
|
303
303
|
### CI/CD Integration
|
|
304
304
|
|
|
305
|
-
ATHF includes a GitHub Actions workflow ([
|
|
305
|
+
ATHF includes a GitHub Actions workflow ([.github/workflows/tests.yml](../../../.github/workflows/tests.yml)) that runs:
|
|
306
306
|
|
|
307
307
|
- Tests across Python 3.8-3.12 on Ubuntu, macOS, Windows
|
|
308
308
|
- Linting with flake8
|
|
@@ -322,7 +322,7 @@ All tools are configured in `pyproject.toml`:
|
|
|
322
322
|
- **pytest**: Test discovery, coverage reporting
|
|
323
323
|
- **bandit**: Security checks with test exclusions
|
|
324
324
|
|
|
325
|
-
See [
|
|
325
|
+
See [pyproject.toml](../../../pyproject.toml) for full configuration.
|
|
326
326
|
|
|
327
327
|
---
|
|
328
328
|
|
|
@@ -25,7 +25,7 @@ Complete documentation for the Agentic Threat Hunting Framework.
|
|
|
25
25
|
|
|
26
26
|
## Quick Links
|
|
27
27
|
|
|
28
|
-
- [Main README](
|
|
29
|
-
- [AGENTS.md](
|
|
30
|
-
- [Example Hunts](
|
|
31
|
-
- [Using ATHF](
|
|
28
|
+
- [Main README](../../../README.md)
|
|
29
|
+
- [AGENTS.md](../../../AGENTS.md) - AI assistant context
|
|
30
|
+
- [Example Hunts](../../../SHOWCASE.md)
|
|
31
|
+
- [Using ATHF](../../../USING_ATHF.md) - Adoption guide
|
|
@@ -67,7 +67,7 @@ agentic-threat-hunting-framework/
|
|
|
67
67
|
|
|
68
68
|
- [templates/](../templates/) - Ready-to-use LOCK hunt templates
|
|
69
69
|
- [hunts/](../hunts/) - Example hunts showing the LOCK pattern
|
|
70
|
-
- [AGENTS.md](
|
|
70
|
+
- [AGENTS.md](../../../AGENTS.md) - Template for AI context (customize later)
|
|
71
71
|
|
|
72
72
|
## Step 3: Document Your First Hunt (Level 1)
|
|
73
73
|
|
|
@@ -155,7 +155,7 @@ To make your hunts AI-accessible, add context files that describe your environme
|
|
|
155
155
|
|
|
156
156
|
### Customize AGENTS.md
|
|
157
157
|
|
|
158
|
-
1. Open [AGENTS.md](
|
|
158
|
+
1. Open [AGENTS.md](../../../AGENTS.md)
|
|
159
159
|
2. Update the following sections:
|
|
160
160
|
- **Data Sources:** Replace placeholders with your actual SIEM indexes, EDR platforms, etc.
|
|
161
161
|
- **Technology Stack:** List your security tools
|
|
@@ -6,7 +6,7 @@ ATHF formalizes that loop with the **LOCK Pattern**, a lightweight structure tha
|
|
|
6
6
|
|
|
7
7
|
**Why LOCK?** It's small enough to use and strict enough for agents to interpret.
|
|
8
8
|
|
|
9
|
-

|
|
10
10
|
|
|
11
11
|
## The Four Phases
|
|
12
12
|
|
|
@@ -107,7 +107,7 @@ Next iteration: expand to include remote registry and PSExec telemetry for broad
|
|
|
107
107
|
- [H-0001: macOS Information Stealer Detection](../hunts/H-0001.md) - Complete hunt with YAML frontmatter, detailed LOCK sections, query evolution, and results
|
|
108
108
|
- [H-0002: Linux Crontab Persistence Detection](../hunts/H-0002.md) - Multi-query approach with behavioral analysis
|
|
109
109
|
- [H-0003: AWS Lambda Persistence Detection](../hunts/H-0003.md) - Cloud hunting with CloudTrail correlation
|
|
110
|
-
- [Hunt Showcase](
|
|
110
|
+
- [Hunt Showcase](../../../SHOWCASE.md) - Side-by-side comparison of all three hunts
|
|
111
111
|
|
|
112
112
|
## Best Practices
|
|
113
113
|
|
|
@@ -4,7 +4,7 @@ ATHF defines a simple maturity model for evolving your hunting program. Each lev
|
|
|
4
4
|
|
|
5
5
|
**Most teams will live at Levels 1–2. Everything beyond that is optional maturity.**
|
|
6
6
|
|
|
7
|
-

|
|
8
8
|
|
|
9
9
|
## Overview
|
|
10
10
|
|
|
@@ -130,7 +130,7 @@ At Level 2, you add context files to your repository that provide AI assistants
|
|
|
130
130
|
|
|
131
131
|
### Required Context Files
|
|
132
132
|
|
|
133
|
-
#### [AGENTS.md](
|
|
133
|
+
#### [AGENTS.md](../../../AGENTS.md)
|
|
134
134
|
|
|
135
135
|
Provides environmental and structural context:
|
|
136
136
|
|
|
@@ -159,11 +159,11 @@ The AI automatically searches your hunts directory, references past investigatio
|
|
|
159
159
|
|
|
160
160
|
**The combination of AGENTS.md (environmental context) and hunting-knowledge.md (domain expertise) transforms AI assistants from generic helpers into informed threat hunting partners.**
|
|
161
161
|
|
|
162
|
-

|
|
163
163
|
|
|
164
164
|
### Getting Started at Level 2
|
|
165
165
|
|
|
166
|
-
1. Review the included [AGENTS.md](
|
|
166
|
+
1. Review the included [AGENTS.md](../../../AGENTS.md) template
|
|
167
167
|
2. Customize it with your environment details
|
|
168
168
|
3. Review [knowledge/hunting-knowledge.md](../knowledge/hunting-knowledge.md) (already included)
|
|
169
169
|
4. Open your repo in Claude Code or similar AI assistant
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# AI Prompt Library
|
|
2
|
+
|
|
3
|
+
This folder contains prompts to help you accelerate threat hunting at different maturity levels.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## What's Here
|
|
8
|
+
|
|
9
|
+
### basic-prompts.md
|
|
10
|
+
|
|
11
|
+
**Level:** 0-1 (Manual/Documented)
|
|
12
|
+
**Use for:** Copy-paste prompts for ChatGPT, Claude, or other AI assistants
|
|
13
|
+
|
|
14
|
+
Contains three prompt templates:
|
|
15
|
+
|
|
16
|
+
1. **Generate Hypothesis** - From CTI, alerts, or anomalies
|
|
17
|
+
2. **Build Query** - Safe, bounded queries for Splunk, KQL, or Elastic
|
|
18
|
+
3. **Document Results** - Capture findings in LOCK format
|
|
19
|
+
|
|
20
|
+
**When to use:** You're working outside an AI-enabled IDE and need quick assistance with hypothesis generation, query building, or documentation.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
### ai-workflow.md
|
|
25
|
+
|
|
26
|
+
**Level:** 2 (Searchable) - AI with Memory
|
|
27
|
+
**Use for:** AI tools that can read your repository (Claude Code, GitHub Copilot, Cursor)
|
|
28
|
+
|
|
29
|
+
Contains:
|
|
30
|
+
|
|
31
|
+
- System prompt for AI tools
|
|
32
|
+
- 4 core workflows (threat intel, anomaly investigation, proactive hunting, documentation)
|
|
33
|
+
- Complete example conversation showing AI reasoning
|
|
34
|
+
- Tool-specific tips and troubleshooting
|
|
35
|
+
- Quality checklists
|
|
36
|
+
|
|
37
|
+
**When to use:** You have AI tools with file access to your hunt repository and want them to search past hunts, validate against environment.md, and generate context-aware hypotheses.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## How to Choose
|
|
42
|
+
|
|
43
|
+
**Use basic-prompts.md if:**
|
|
44
|
+
|
|
45
|
+
- You're just getting started with AI-assisted hunting
|
|
46
|
+
- You don't have AI tool subscriptions yet
|
|
47
|
+
- You want simple copy-paste templates
|
|
48
|
+
- You're working in a web interface (ChatGPT, Claude.ai)
|
|
49
|
+
|
|
50
|
+
**Use ai-workflow.md if:**
|
|
51
|
+
|
|
52
|
+
- You have Claude Code, GitHub Copilot, or Cursor
|
|
53
|
+
- Your hunt repository has AGENTS.md, knowledge/hunting-knowledge.md, and documented past hunts
|
|
54
|
+
- You want AI to search memory, apply expert hunting frameworks, and apply lessons learned
|
|
55
|
+
- You're ready for more advanced workflows
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Quick Start
|
|
60
|
+
|
|
61
|
+
### Level 0-1: Basic Prompts
|
|
62
|
+
|
|
63
|
+
1. Open [basic-prompts.md](basic-prompts.md)
|
|
64
|
+
2. Copy the prompt template you need
|
|
65
|
+
3. Fill in your context (hypothesis, data sources, results)
|
|
66
|
+
4. Paste into ChatGPT, Claude, or your AI assistant
|
|
67
|
+
5. Review and refine the output
|
|
68
|
+
|
|
69
|
+
**Example:**
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
# You have threat intel about PowerShell abuse
|
|
73
|
+
→ Use "Generate Hypothesis" prompt from basic-prompts.md
|
|
74
|
+
→ Paste CTI report into context section
|
|
75
|
+
→ AI generates testable hypotheses
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Level 2: AI Workflows
|
|
79
|
+
|
|
80
|
+
1. Open your hunt repository in Claude Code, Copilot, or Cursor
|
|
81
|
+
2. Provide the system prompt from [ai-workflow.md](ai-workflow.md)
|
|
82
|
+
3. Ask AI to search past hunts before generating new ones
|
|
83
|
+
4. Follow the workflow guides for common scenarios
|
|
84
|
+
|
|
85
|
+
**Example:**
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
You: "Check if we've hunted T1003.001 before. Use the system prompt from prompts/ai-workflow.md"
|
|
89
|
+
AI: [Searches hunts/, reads environment.md, generates context-aware hypothesis]
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Safety Reminders
|
|
95
|
+
|
|
96
|
+
### AI Assistance ≠ Autopilot
|
|
97
|
+
|
|
98
|
+
- **Always review** AI-generated hypotheses for feasibility
|
|
99
|
+
- **Always test** AI-generated queries on small timeframes first
|
|
100
|
+
- **Always validate** that queries are safe and bounded
|
|
101
|
+
- **Use your judgment** - You know your environment better than AI
|
|
102
|
+
|
|
103
|
+
### Before Running Any AI-Generated Query
|
|
104
|
+
|
|
105
|
+
1. Check for time bounds (`earliest=-Xd`)
|
|
106
|
+
2. Check for result limits (`| head N` or `| take N`)
|
|
107
|
+
3. Test on 1-hour window before expanding to days
|
|
108
|
+
4. Verify it won't impact SIEM performance
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Platform-Specific Tips
|
|
113
|
+
|
|
114
|
+
**Splunk Users:**
|
|
115
|
+
|
|
116
|
+
- Mention "Splunk SPL" in your prompts
|
|
117
|
+
- Specify data models when available
|
|
118
|
+
- AI knows common Splunk patterns (tstats, eval, stats)
|
|
119
|
+
|
|
120
|
+
**KQL Users (Sentinel/Defender):**
|
|
121
|
+
|
|
122
|
+
- Mention "KQL for Sentinel" or "KQL for Defender"
|
|
123
|
+
- Specify table names (SecurityEvent, DeviceProcessEvents, etc.)
|
|
124
|
+
- AI understands Sentinel-specific syntax
|
|
125
|
+
|
|
126
|
+
**Elastic Users:**
|
|
127
|
+
|
|
128
|
+
- Mention "Elastic EQL" or "Lucene query"
|
|
129
|
+
- Specify index patterns
|
|
130
|
+
- Note which Elastic stack version you're using
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Next Steps
|
|
135
|
+
|
|
136
|
+
### After Using Basic Prompts
|
|
137
|
+
|
|
138
|
+
1. Document your hunts using [templates/HUNT_LOCK.md](../templates/HUNT_LOCK.md)
|
|
139
|
+
2. Create AGENTS.md in your repository (see main README)
|
|
140
|
+
3. Ensure knowledge/hunting-knowledge.md is present (included in repo by default)
|
|
141
|
+
4. Progress to Level 2 with ai-workflow.md
|
|
142
|
+
|
|
143
|
+
### After Level 2 Workflows
|
|
144
|
+
|
|
145
|
+
1. See real examples in [hunts/H-0001.md](../hunts/H-0001.md) and [hunts/H-0002.md](../hunts/H-0002.md)
|
|
146
|
+
2. Review format guidelines in [hunts/FORMAT_GUIDELINES.md](../hunts/FORMAT_GUIDELINES.md)
|
|
147
|
+
3. Consider Level 3 (MCP integrations) in [integrations/](../integrations/)
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Customizing for Your Environment
|
|
152
|
+
|
|
153
|
+
Feel free to modify these prompts:
|
|
154
|
+
|
|
155
|
+
- Add your organization's specific data sources
|
|
156
|
+
- Include your ATT&CK coverage gaps
|
|
157
|
+
- Reference your baseline automation
|
|
158
|
+
- Add your threat model priorities
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Contributing
|
|
163
|
+
|
|
164
|
+
Have a better prompt? Found a useful workflow?
|
|
165
|
+
|
|
166
|
+
- Submit a PR with your improvements
|
|
167
|
+
- Share what works in your environment
|
|
168
|
+
- Help others get started faster
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
**Remember: These prompts are training wheels. They help you get started faster, teach you the LOCK pattern, and over time you'll need them less. But they remain useful for complex hunts.**
|