agentic-threat-hunting-framework 0.2.2__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.
Files changed (65) hide show
  1. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/MANIFEST.in +2 -17
  2. {agentic_threat_hunting_framework-0.2.2/agentic_threat_hunting_framework.egg-info → agentic_threat_hunting_framework-0.2.4}/PKG-INFO +1 -1
  3. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/USING_ATHF.md +2 -2
  4. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/agentic_threat_hunting_framework.egg-info}/PKG-INFO +1 -1
  5. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/agentic_threat_hunting_framework.egg-info/SOURCES.txt +26 -22
  6. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/athf/__version__.py +1 -1
  7. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/athf/cli.py +1 -1
  8. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/athf/commands/context.py +29 -15
  9. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/athf/commands/hunt.py +1 -3
  10. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/athf/commands/init.py +45 -0
  11. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/athf/commands/similar.py +2 -2
  12. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/athf/core/hunt_manager.py +7 -0
  13. agentic_threat_hunting_framework-0.2.4/athf/data/__init__.py +14 -0
  14. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/CHANGELOG.md +1 -1
  15. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/INSTALL.md +3 -3
  16. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/README.md +4 -4
  17. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/getting-started.md +2 -2
  18. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/lock-pattern.md +2 -2
  19. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/maturity-model.md +4 -4
  20. agentic_threat_hunting_framework-0.2.4/athf/data/prompts/README.md +172 -0
  21. agentic_threat_hunting_framework-0.2.4/athf/data/prompts/ai-workflow.md +581 -0
  22. agentic_threat_hunting_framework-0.2.4/athf/data/prompts/basic-prompts.md +316 -0
  23. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/pyproject.toml +14 -3
  24. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/LICENSE +0 -0
  25. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/README.md +0 -0
  26. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/agentic_threat_hunting_framework.egg-info/dependency_links.txt +0 -0
  27. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/agentic_threat_hunting_framework.egg-info/entry_points.txt +0 -0
  28. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/agentic_threat_hunting_framework.egg-info/requires.txt +0 -0
  29. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/agentic_threat_hunting_framework.egg-info/top_level.txt +0 -0
  30. /agentic_threat_hunting_framework-0.2.2/assets/athf_level_3.png → /agentic_threat_hunting_framework-0.2.4/assets/ATHF_level_3.png +0 -0
  31. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/assets/athf-cli-workflow.gif +0 -0
  32. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/assets/athf-level0.gif +0 -0
  33. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/assets/athf-level1.gif +0 -0
  34. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/assets/athf-level2.gif +0 -0
  35. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/assets/athf-level3.gif +0 -0
  36. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/assets/athf_fivelevels.png +0 -0
  37. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/assets/athf_lock.png +0 -0
  38. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/assets/athf_logo.png +0 -0
  39. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/assets/athf_manual_v_ai.png +0 -0
  40. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/athf/__init__.py +0 -0
  41. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/athf/commands/__init__.py +0 -0
  42. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/athf/commands/env.py +0 -0
  43. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/athf/commands/investigate.py +0 -0
  44. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/athf/core/__init__.py +0 -0
  45. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/athf/core/attack_matrix.py +0 -0
  46. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/athf/core/hunt_parser.py +0 -0
  47. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/athf/core/investigation_parser.py +0 -0
  48. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/athf/core/template_engine.py +0 -0
  49. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/CLI_REFERENCE.md +0 -0
  50. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/environment.md +0 -0
  51. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/level4-agentic-workflows.md +0 -0
  52. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/docs/why-athf.md +0 -0
  53. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/hunts/FORMAT_GUIDELINES.md +0 -0
  54. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/hunts/H-0001.md +0 -0
  55. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/hunts/H-0002.md +0 -0
  56. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/hunts/H-0003.md +0 -0
  57. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/hunts/README.md +0 -0
  58. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/integrations/MCP_CATALOG.md +0 -0
  59. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/integrations/README.md +0 -0
  60. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/integrations/quickstart/splunk.md +0 -0
  61. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/knowledge/hunting-knowledge.md +0 -0
  62. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4/athf/data}/templates/HUNT_LOCK.md +0 -0
  63. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/athf/utils/__init__.py +0 -0
  64. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/setup.cfg +0 -0
  65. {agentic_threat_hunting_framework-0.2.2 → agentic_threat_hunting_framework-0.2.4}/setup.py +0 -0
@@ -7,23 +7,8 @@ include USING_ATHF.md
7
7
  include INSTALL.md
8
8
  include CHANGELOG.md
9
9
 
10
- # Include all markdown documentation in docs/
11
- recursive-include docs *.md
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.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>
@@ -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.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/utils/__init__.py
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
- templates/HUNT_LOCK.md
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
@@ -1,3 +1,3 @@
1
1
  """Version information for ATHF."""
2
2
 
3
- __version__ = "0.2.2"
3
+ __version__ = "0.2.4"
@@ -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.
@@ -22,6 +22,9 @@ Examples:
22
22
  # Export context for macOS platform hunts
23
23
  athf context --platform macos
24
24
 
25
+ # Combine filters: persistence hunts on Linux
26
+ athf context --tactic persistence --platform linux
27
+
25
28
  # Export full repository context (large output)
26
29
  athf context --full
27
30
 
@@ -86,18 +89,20 @@ def context(
86
89
  • With context: 1 command, ~1,000 tokens
87
90
  • Savings: ~2,000 tokens per hunt (~$0.03 per hunt)
88
91
  """
89
- # Validate mutually exclusive options
90
- exclusive_options = sum([bool(hunt), bool(tactic), bool(platform), full])
91
- if exclusive_options == 0:
92
- console.print("[red]Error: Must specify one of: --hunt, --tactic, --platform, or --full[/red]")
92
+ # Validate that at least one filter is provided
93
+ has_filter = any([hunt, tactic, platform, full])
94
+ if not has_filter:
95
+ console.print("[red]Error: Must specify at least one of: --hunt, --tactic, --platform, or --full[/red]")
93
96
  console.print("\n[dim]Examples:[/dim]")
94
97
  console.print(" athf context --hunt H-0013")
95
98
  console.print(" athf context --tactic credential-access")
96
99
  console.print(" athf context --platform macos")
100
+ console.print(" athf context --tactic persistence --platform linux")
97
101
  raise click.Abort()
98
102
 
99
- if exclusive_options > 1:
100
- console.print("[red]Error: Only one filter option allowed at a time[/red]")
103
+ # --full flag is mutually exclusive with other filters
104
+ if full and (hunt or tactic or platform):
105
+ console.print("[red]Error: --full cannot be combined with other filters[/red]")
101
106
  raise click.Abort()
102
107
 
103
108
  # Build context bundle
@@ -158,17 +163,26 @@ def _build_context(
158
163
  if index_path.exists():
159
164
  context["hunt_index"] = _read_and_optimize(index_path)
160
165
 
161
- # Load hunts based on filter
162
- if hunt:
163
- hunt_files = [Path(f"hunts/{hunt}.md")]
164
- elif tactic:
165
- hunt_files = _find_hunts_by_tactic(tactic)
166
- elif platform:
167
- hunt_files = _find_hunts_by_platform(platform)
168
- elif full:
166
+ # Load hunts based on filters (can be combined)
167
+ if full:
168
+ # Full export: include all hunts
169
169
  hunt_files = list(Path("hunts").glob("H-*.md"))
170
+ elif hunt:
171
+ # Specific hunt: only load that one
172
+ hunt_files = [Path(f"hunts/{hunt}.md")]
170
173
  else:
171
- hunt_files = []
174
+ # Combine tactic and platform filters
175
+ if tactic and platform:
176
+ # Both filters: find hunts matching both criteria
177
+ tactic_hunts = set(_find_hunts_by_tactic(tactic))
178
+ platform_hunts = set(_find_hunts_by_platform(platform))
179
+ hunt_files = list(tactic_hunts & platform_hunts) # Intersection
180
+ elif tactic:
181
+ hunt_files = _find_hunts_by_tactic(tactic)
182
+ elif platform:
183
+ hunt_files = _find_hunts_by_platform(platform)
184
+ else:
185
+ hunt_files = []
172
186
 
173
187
  # Load hunt content
174
188
  for hunt_file in hunt_files:
@@ -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
- console.print("[yellow]No hunts found in hunts/ directory[/yellow]")
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
- console.print("[yellow]No hunts available for comparison[/yellow]")
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)
@@ -154,7 +154,14 @@ class HuntManager:
154
154
  results = []
155
155
  query_lower = query.lower()
156
156
 
157
+ # Exclude documentation files
158
+ exclude_files = {"README.md", "FORMAT_GUIDELINES.md"}
159
+
157
160
  for hunt_file in self.hunts_dir.glob("*.md"):
161
+ # Skip documentation files
162
+ if hunt_file.name in exclude_files:
163
+ continue
164
+
158
165
  try:
159
166
  with open(hunt_file, "r", encoding="utf-8") as f:
160
167
  content = f.read()
@@ -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 [../USING_ATHF.md](../USING_ATHF.md).
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 [../tests/test_commands.py](../tests/test_commands.py) for examples.
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 ([../.github/workflows/tests.yml](../.github/workflows/tests.yml)) that runs:
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 [../pyproject.toml](../pyproject.toml) for full configuration.
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](../README.md)
29
- - [AGENTS.md](../AGENTS.md) - AI assistant context
30
- - [Example Hunts](../SHOWCASE.md)
31
- - [Using ATHF](../USING_ATHF.md) - Adoption guide
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](../AGENTS.md) - Template for AI context (customize later)
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](../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
- ![The LOCK Pattern](../assets/athf_lock.png)
9
+ ![The LOCK Pattern](../../../assets/athf_lock.png)
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](../SHOWCASE.md) - Side-by-side comparison of all three hunts
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
- ![The Five Levels of Agentic Hunting](../assets/athf_fivelevels.png)
7
+ ![The Five Levels of Agentic Hunting](../../../assets/athf_fivelevels.png)
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](../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
- ![Manual vs. AI-Assisted Content Creation](../assets/athf_manual_v_ai.png)
162
+ ![Manual vs. AI-Assisted Content Creation](../../../assets/athf_manual_v_ai.png)
163
163
 
164
164
  ### Getting Started at Level 2
165
165
 
166
- 1. Review the included [AGENTS.md](../AGENTS.md) template
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.**