agentic-threat-hunting-framework 0.1.0__py3-none-any.whl

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.
@@ -0,0 +1,339 @@
1
+ Metadata-Version: 2.4
2
+ Name: agentic-threat-hunting-framework
3
+ Version: 0.1.0
4
+ Summary: Agentic Threat Hunting Framework - Memory and AI for threat hunters
5
+ Author-email: Sydney Marrone <athf@nebulock.io>
6
+ Maintainer-email: Sydney Marrone <athf@nebulock.io>
7
+ License: MIT
8
+ Project-URL: Homepage, https://github.com/Nebulock-Inc/agentic-threat-hunting-framework
9
+ Project-URL: Documentation, https://github.com/Nebulock-Inc/agentic-threat-hunting-framework/tree/main/docs
10
+ Project-URL: Repository, https://github.com/Nebulock-Inc/agentic-threat-hunting-framework
11
+ Project-URL: Issues, https://github.com/Nebulock-Inc/agentic-threat-hunting-framework/issues
12
+ Project-URL: Discussions, https://github.com/Nebulock-Inc/agentic-threat-hunting-framework/discussions
13
+ Keywords: threat-hunting,security,cybersecurity,mitre-attack,detection-engineering,soc,blue-team,incident-response,threat-intelligence,agentic-ai
14
+ Classifier: Development Status :: 3 - Alpha
15
+ Classifier: Intended Audience :: Information Technology
16
+ Classifier: Intended Audience :: System Administrators
17
+ Classifier: Topic :: Security
18
+ Classifier: Topic :: System :: Monitoring
19
+ Classifier: License :: OSI Approved :: MIT License
20
+ Classifier: Programming Language :: Python :: 3
21
+ Classifier: Programming Language :: Python :: 3.8
22
+ Classifier: Programming Language :: Python :: 3.9
23
+ Classifier: Programming Language :: Python :: 3.10
24
+ Classifier: Programming Language :: Python :: 3.11
25
+ Classifier: Programming Language :: Python :: 3.12
26
+ Classifier: Programming Language :: Python :: 3.13
27
+ Classifier: Operating System :: OS Independent
28
+ Classifier: Environment :: Console
29
+ Requires-Python: >=3.8
30
+ Description-Content-Type: text/markdown
31
+ License-File: LICENSE
32
+ Requires-Dist: click>=8.0.0
33
+ Requires-Dist: pyyaml>=6.0
34
+ Requires-Dist: rich>=10.0.0
35
+ Requires-Dist: jinja2>=3.0.0
36
+ Provides-Extra: dev
37
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
38
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
39
+ Requires-Dist: flake8>=6.0.0; extra == "dev"
40
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
41
+ Requires-Dist: black>=23.0.0; extra == "dev"
42
+ Requires-Dist: isort>=5.12.0; extra == "dev"
43
+ Requires-Dist: bandit[toml]>=1.7.0; extra == "dev"
44
+ Requires-Dist: pre-commit>=3.0.0; extra == "dev"
45
+ Requires-Dist: types-PyYAML>=6.0.0; extra == "dev"
46
+ Provides-Extra: docs
47
+ Requires-Dist: mkdocs>=1.5.0; extra == "docs"
48
+ Requires-Dist: mkdocs-material>=9.0.0; extra == "docs"
49
+ Dynamic: license-file
50
+
51
+ <p align="center">
52
+ <img src="assets/athf_logo.png" alt="ATHF Logo" width="400"/>
53
+ </p>
54
+
55
+ <h1 align="center">Agentic Threat Hunting Framework (ATHF)</h1>
56
+
57
+ <p align="center">
58
+ <a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.8%2B-blue" alt="Python Version"></a>
59
+ <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
60
+ <a href="https://github.com/Nebulock-Inc/agentic-threat-hunting-framework/stargazers"><img src="https://img.shields.io/github/stars/Nebulock-Inc/agentic-threat-hunting-framework?style=social" alt="GitHub stars"></a>
61
+ </p>
62
+
63
+ <p align="center">
64
+ <strong><a href="#-quick-start">Quick Start</a></strong> •
65
+ <strong><a href="#installation">Installation</a></strong> •
66
+ <strong><a href="#documentation">Documentation</a></strong> •
67
+ <strong><a href="SHOWCASE.md">Examples</a></strong>
68
+ </p>
69
+
70
+ <p align="center">
71
+ <em>Give your threat hunting program memory and agency.</em>
72
+ </p>
73
+
74
+ The **Agentic Threat Hunting Framework (ATHF)** is the memory and automation layer for your threat hunting program. It gives your hunts structure, persistence, and context - making every past investigation accessible to both humans and AI.
75
+
76
+ ATHF works with any hunting methodology (PEAK, TaHiTI, or your own process). It's not a replacement; it's the layer that makes your existing process AI-ready.
77
+
78
+ ## What is ATHF?
79
+
80
+ ATHF provides structure and persistence for threat hunting programs. It's a markdown-based framework that:
81
+
82
+ - Documents hunts using the LOCK pattern (Learn → Observe → Check → Keep)
83
+ - Maintains a searchable repository of past investigations
84
+ - Enables AI assistants to reference your environment and previous work
85
+ - Works with any SIEM/EDR platform
86
+
87
+ ## The Problem
88
+
89
+ Most threat hunting programs lose valuable context once a hunt ends. Notes live in Slack or tickets, queries are written once and forgotten, and lessons learned exist only in analysts' heads.
90
+
91
+ Even AI tools start from zero every time without access to your environment, your data, or your past hunts.
92
+
93
+ ATHF changes that by giving your hunts structure, persistence, and context.
94
+
95
+ **Read more:** [docs/why-athf.md](docs/why-athf.md)
96
+
97
+ ## The LOCK Pattern
98
+
99
+ Every threat hunt follows the same basic loop: **Learn → Observe → Check → Keep**.
100
+
101
+ ![The LOCK Pattern](assets/athf_lock.png)
102
+
103
+ - **Learn:** Gather context from threat intel, alerts, or anomalies
104
+ - **Observe:** Form a hypothesis about adversary behavior
105
+ - **Check:** Test hypotheses with targeted queries
106
+ - **Keep:** Record findings and lessons learned
107
+
108
+ **Why LOCK?** It's small enough to use and strict enough for agents to interpret. By capturing every hunt in this format, ATHF makes it possible for AI assistants to recall prior work and suggest refined queries based on past results.
109
+
110
+ **Read more:** [docs/lock-pattern.md](docs/lock-pattern.md)
111
+
112
+ ## The Five Levels of Agentic Hunting
113
+
114
+ ATHF defines a simple maturity model. Each level builds on the previous one.
115
+
116
+ **Most teams will live at Levels 1–2. Everything beyond that is optional maturity.**
117
+
118
+ ![The Five Levels](assets/athf_fivelevels.png)
119
+
120
+ | Level | Capability | What You Get |
121
+ |-------|-----------|--------------|
122
+ | **0** | Ad-hoc | Hunts exist in Slack, tickets, or analyst notes |
123
+ | **1** | Documented | Persistent hunt records using LOCK |
124
+ | **2** | Searchable | AI reads and recalls your hunts |
125
+ | **3** | Generative | AI executes queries via MCP tools |
126
+ | **4** | Agentic | Autonomous agents monitor and act |
127
+
128
+ **Level 1:** Operational within a day
129
+ **Level 2:** Operational within a week
130
+ **Level 3:** 2-4 weeks (optional)
131
+ **Level 4:** 1-3 months (optional)
132
+
133
+ **Read more:** [docs/maturity-model.md](docs/maturity-model.md)
134
+
135
+ ## 🚀 Quick Start
136
+
137
+ ### Option 1: Python CLI (Recommended)
138
+
139
+ ```bash
140
+ # Clone and install from source
141
+ git clone https://github.com/Nebulock-Inc/agentic-threat-hunting-framework
142
+ cd agentic-threat-hunting-framework
143
+ pip install -e .
144
+
145
+ # Initialize your hunt program
146
+ athf init
147
+
148
+ # Create your first hunt
149
+ athf hunt new --technique T1003.001 --title "LSASS Credential Dumping"
150
+ ```
151
+
152
+ ### Option 2: Pure Markdown (No Installation)
153
+
154
+ ```bash
155
+ # Clone the repository
156
+ git clone https://github.com/Nebulock-Inc/agentic-threat-hunting-framework
157
+ cd agentic-threat-hunting-framework
158
+
159
+ # Copy a template and start documenting
160
+ cp templates/HUNT_LOCK.md hunts/H-0001.md
161
+
162
+ # Customize AGENTS.md with your environment
163
+ # Add your SIEM, EDR, and data sources
164
+ ```
165
+
166
+ **Choose your AI assistant:** Claude Code, GitHub Copilot, or Cursor - any tool that can read your repository files.
167
+
168
+ **Full guide:** [docs/getting-started.md](docs/getting-started.md)
169
+
170
+ ## 🔧 CLI Commands
171
+
172
+ ATHF includes a full-featured CLI for managing your hunts. Here's a quick reference:
173
+
174
+ ### Initialize Workspace
175
+
176
+ ```bash
177
+ athf init # Interactive setup
178
+ athf init --non-interactive # Use defaults
179
+ ```
180
+
181
+ ### Create Hunts
182
+
183
+ ```bash
184
+ athf hunt new # Interactive mode
185
+ athf hunt new \
186
+ --technique T1003.001 \
187
+ --title "LSASS Dumping Detection" \
188
+ --platform windows
189
+ ```
190
+
191
+ ### List & Search
192
+
193
+ ```bash
194
+ athf hunt list # Show all hunts
195
+ athf hunt list --status completed # Filter by status
196
+ athf hunt list --output json # JSON output
197
+ athf hunt search "kerberoasting" # Full-text search
198
+ ```
199
+
200
+ ### Validate & Stats
201
+
202
+ ```bash
203
+ athf hunt validate # Validate all hunts
204
+ athf hunt validate H-0001 # Validate specific hunt
205
+ athf hunt stats # Show statistics
206
+ athf hunt coverage # MITRE ATT&CK coverage
207
+ ```
208
+
209
+ **Full documentation:** [CLI Reference](docs/CLI_REFERENCE.md)
210
+
211
+ ## 📺 See It In Action
212
+
213
+ ![ATHF Demo](assets/athf-cli-workflow.gif)
214
+
215
+ Watch ATHF in action: initialize a workspace, create hunts, and explore your threat hunting catalog in under 60 seconds.
216
+
217
+ **[View example hunts →](SHOWCASE.md)**
218
+
219
+ ## Installation
220
+
221
+ ### Prerequisites
222
+ - Python 3.8-3.13 (for CLI option)
223
+ - Git
224
+ - Your favorite AI code assistant
225
+
226
+ ### CLI Installation
227
+
228
+ ```bash
229
+ git clone https://github.com/Nebulock-Inc/agentic-threat-hunting-framework
230
+ cd agentic-threat-hunting-framework
231
+ pip install -e .
232
+ ```
233
+
234
+ ### Markdown-Only Setup (No CLI)
235
+
236
+ ```bash
237
+ git clone https://github.com/Nebulock-Inc/agentic-threat-hunting-framework
238
+ cd agentic-threat-hunting-framework
239
+ ```
240
+
241
+ Start documenting hunts in the `hunts/` directory using the LOCK pattern.
242
+
243
+ ## Documentation
244
+
245
+ ### Core Concepts
246
+
247
+ - [Why ATHF Exists](docs/why-athf.md) - The problem and solution
248
+ - [The LOCK Pattern](docs/lock-pattern.md) - Structure for all hunts
249
+ - [Maturity Model](docs/maturity-model.md) - The five levels explained
250
+ - [Getting Started](docs/getting-started.md) - Step-by-step onboarding
251
+
252
+ ### Level-Specific Guides
253
+
254
+ - [Level 1: Documented Hunts](docs/maturity-model.md#level-1-documented-hunts)
255
+ - [Level 2: Searchable Memory](docs/maturity-model.md#level-2-searchable-memory)
256
+ - [Level 3: Generative Capabilities](docs/level4-agentic-workflows.md)
257
+ - [Level 4: Agentic Workflows](docs/level4-agentic-workflows.md)
258
+
259
+ ### Integration & Customization
260
+
261
+ - [Installation & Development](docs/INSTALL.md) - Setup, fork customization, testing
262
+ - [MCP Catalog](integrations/MCP_CATALOG.md) - Available tool integrations
263
+ - [Quickstart Guides](integrations/quickstart/) - Setup for specific tools
264
+ - [Using ATHF](USING_ATHF.md) - Adoption and customization
265
+
266
+ ## 🎖️ Featured Hunts
267
+
268
+ ### H-0001: macOS Information Stealer Detection
269
+
270
+ Detected Atomic Stealer collecting Safari cookies via AppleScript.
271
+ **Result:** 1 true positive, host isolated before exfiltration.
272
+
273
+ **Key Insight:** Behavior-based detection outperformed signature-based approaches. Process signature validation identified unsigned malware attempting data collection.
274
+
275
+ [View full hunt →](hunts/H-0001.md) | [See more examples →](SHOWCASE.md)
276
+
277
+ ## Why This Matters
278
+
279
+ You might wonder how this interacts with frameworks like [PEAK](https://www.splunk.com/en_us/blog/security/peak-threat-hunting-framework.html). PEAK gives you a solid method for how to hunt. ATHF builds on that foundation by giving you structure, memory, and continuity. PEAK guides the work. ATHF ensures you capture the work, organize it, and reuse it across future hunts.
280
+
281
+ Agentic threat hunting is not about replacing analysts. It's about building systems that can:
282
+
283
+ - Remember what has been done before
284
+ - Learn from past successes and mistakes
285
+ - Support human judgment with contextual recall
286
+
287
+ When your framework has memory, you stop losing knowledge to turnover or forgotten notes. When your AI assistant can reference that memory, it becomes a force multiplier.
288
+
289
+ ## 💬 Community & Support
290
+
291
+ - **GitHub Discussions:** [Ask questions, share hunts](https://github.com/Nebulock-Inc/agentic-threat-hunting-framework/discussions)
292
+ - **Issues:** [Report bugs or request features](https://github.com/Nebulock-Inc/agentic-threat-hunting-framework/issues)
293
+ - **Adoption Guide:** See [USING_ATHF.md](USING_ATHF.md) for how to use ATHF in your organization
294
+ - **LinkedIn:** [Nebulock Inc.](https://www.linkedin.com/company/nebulock-inc) - Follow for updates
295
+
296
+ ## 📖 Using ATHF
297
+
298
+ ATHF is a framework to internalize, not a platform to extend. Fork it, customize it, make it yours.
299
+
300
+ **Repository:** [https://github.com/Nebulock-Inc/agentic-threat-hunting-framework](https://github.com/Nebulock-Inc/agentic-threat-hunting-framework)
301
+
302
+ See [USING_ATHF.md](USING_ATHF.md) for adoption guidance. Your hunts stay yours—sharing back is optional but appreciated ([Discussions](https://github.com/Nebulock-Inc/agentic-threat-hunting-framework/discussions)).
303
+
304
+ The goal is to help every threat hunting team move from ad-hoc memory to structured, agentic capability.
305
+
306
+ ---
307
+
308
+ ## 🛠️ Development & Customization
309
+
310
+ ATHF is designed to be forked and customized for your organization.
311
+
312
+ **See [docs/INSTALL.md#development--customization](docs/INSTALL.md#development--customization) for:**
313
+ - Setting up your fork for development
314
+ - Pre-commit hooks for code quality
315
+ - Testing and type checking
316
+ - Customization examples
317
+ - CI/CD integration
318
+
319
+ Quick start:
320
+ ```bash
321
+ pip install -e ".[dev]" # Install dev dependencies
322
+ pre-commit install # Set up quality checks
323
+ pytest tests/ -v # Run tests
324
+ ```
325
+
326
+ ---
327
+
328
+ ## 👤 Author
329
+
330
+ Created by **Sydney Marrone** © 2025
331
+
332
+ ---
333
+
334
+ **Start small. Document one hunt. Add structure. Build memory.**
335
+
336
+ Memory is the multiplier. Agency is the force.
337
+ Once your program can remember, everything else becomes possible.
338
+
339
+ Happy hunting!
@@ -0,0 +1,17 @@
1
+ agentic_threat_hunting_framework-0.1.0.dist-info/licenses/LICENSE,sha256=_KObErRfiKoolznt-DF0nJnr3U9Rdh7Z4Ba7G5qqckk,1071
2
+ athf/__init__.py,sha256=OrjZe8P97_BTEkscapnwSsqKSjwXNP9d8-HtGr19Ni0,241
3
+ athf/__version__.py,sha256=esXptUrfVtDh81i72UK2ehkLx1LobFoISaPLeDdwcNM,59
4
+ athf/cli.py,sha256=l7pptt14nWCkdRkLDo2e4KKDA90ZNyxW1wdqMLYIxTg,4280
5
+ athf/commands/__init__.py,sha256=uDyr0bz-agpGO8fraXQl24wuQCxqbeCevZsJ2bDK29s,25
6
+ athf/commands/hunt.py,sha256=BOHk8H5t1LVETUlNFbSmPmmKOEcnqlR5KpTYZxIVBIU,20132
7
+ athf/commands/init.py,sha256=L_29fvZF8SZ1BKh2D6NyDuacCC5JXOTezIxdBnnK88E,10941
8
+ athf/core/__init__.py,sha256=yG7C8ljx3UW4QZoYvDjUxsWHlbS8M-GLGB7Je7rRfqo,31
9
+ athf/core/hunt_manager.py,sha256=tJywunHB_06e0Z3gPWoktGqsLtEyHAO5ZsrUjAXy-IQ,8064
10
+ athf/core/hunt_parser.py,sha256=FUj0yyBIcZnaS9aItMImeBDhegQwpkewIwUMNXW_ZWU,5122
11
+ athf/core/template_engine.py,sha256=vNTVhlxIXZpxU7VmQyrqCSt6ORS0IVjAV54TOmUDMTE,5636
12
+ athf/utils/__init__.py,sha256=aEAPI1xnAsowOtc036cCb9ZOek5nrrfevu8PElhbNgk,30
13
+ agentic_threat_hunting_framework-0.1.0.dist-info/METADATA,sha256=nn-YAzCd2zd-8UkfyT-ruhcmgfJ0yvmJ-M_ll0H5fzU,12900
14
+ agentic_threat_hunting_framework-0.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
15
+ agentic_threat_hunting_framework-0.1.0.dist-info/entry_points.txt,sha256=GopR2iTiBs-yNMWiUZ2DaFIFglXxWJx1XPjTa3ePtfE,39
16
+ agentic_threat_hunting_framework-0.1.0.dist-info/top_level.txt,sha256=Cxxg6SMLfawDJWBITsciRzq27XV8fiaAor23o9Byoes,5
17
+ agentic_threat_hunting_framework-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ athf = athf.cli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Sydney Marrone
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
athf/__init__.py ADDED
@@ -0,0 +1,9 @@
1
+ """Agentic Threat Hunting Framework (ATHF)
2
+
3
+ A memory and automation layer for threat hunting programs.
4
+ Makes every past investigation accessible to both humans and AI.
5
+ """
6
+
7
+ from athf.__version__ import __version__
8
+
9
+ __all__ = ["__version__"]
athf/__version__.py ADDED
@@ -0,0 +1,3 @@
1
+ """Version information for ATHF."""
2
+
3
+ __version__ = "0.1.0"
athf/cli.py ADDED
@@ -0,0 +1,127 @@
1
+ """ATHF command-line interface."""
2
+
3
+ import random
4
+
5
+ import click
6
+ from rich.console import Console
7
+
8
+ from athf.__version__ import __version__
9
+ from athf.commands import hunt, init
10
+
11
+ console = Console()
12
+
13
+
14
+ EPILOG = """
15
+ \b
16
+ Examples:
17
+ # Initialize a new hunting workspace
18
+ athf init
19
+
20
+ # Create your first hunt
21
+ athf hunt new
22
+
23
+ # Search for credential dumping hunts
24
+ athf hunt search "credential dumping"
25
+
26
+ # List all completed hunts
27
+ athf hunt list --status completed
28
+
29
+ # Show program statistics
30
+ athf hunt stats
31
+
32
+ \b
33
+ Getting Started:
34
+ 1. Run 'athf init' to set up your workspace
35
+ 2. Run 'athf hunt new' to create your first hunt
36
+ 3. Document using the LOCK pattern (Learn → Observe → Check → Keep)
37
+ 4. Track findings and iterate
38
+
39
+ \b
40
+ Documentation:
41
+ • Full docs: https://github.com/Nebulock-Inc/agentic-threat-hunting-framework
42
+ • CLI reference: docs/CLI_REFERENCE.md
43
+ • AI workflows: prompts/ai-workflow.md
44
+
45
+ \b
46
+ Need help? Run 'athf COMMAND --help' for command-specific help.
47
+
48
+ \b
49
+ Created by Sydney Marrone © 2025
50
+ """
51
+
52
+
53
+ @click.group(epilog=EPILOG)
54
+ @click.version_option(
55
+ version=__version__,
56
+ prog_name="athf",
57
+ message="%(prog)s version %(version)s\nAgentic Threat Hunting Framework\nCreated by Sydney Marrone © 2025",
58
+ )
59
+ def cli() -> None:
60
+ """Agentic Threat Hunting Framework (ATHF) - Hunt management CLI
61
+
62
+ \b
63
+ ATHF gives your threat hunting program memory and agency by:
64
+ • Structured documentation with the LOCK pattern
65
+ • Hunt tracking and metrics across your program
66
+ • AI-assisted hypothesis generation and workflows
67
+ • MITRE ATT&CK coverage analysis
68
+
69
+ \b
70
+ Quick Start:
71
+ athf init Set up a new hunting workspace
72
+ athf hunt new Create a hunt from template
73
+ athf hunt list View all hunts
74
+ athf hunt search Find hunts by keyword
75
+ athf hunt stats Show program metrics
76
+ """
77
+
78
+
79
+ # Register command groups
80
+ cli.add_command(init.init)
81
+ cli.add_command(hunt.hunt)
82
+
83
+
84
+ @cli.command(hidden=True)
85
+ def wisdom() -> None:
86
+ """Security wisdom for threat hunters."""
87
+ quotes = [
88
+ "The best threat hunters build memory, not just alerts.",
89
+ "Adversaries don't repeat signatures. They repeat behaviors.",
90
+ "A hunt without findings is still a hunt. Absence of evidence is evidence.",
91
+ "Your SIEM doesn't have a storage problem. It has a memory problem.",
92
+ "Indicators expire. Behaviors persist.",
93
+ "The top of the Pyramid of Pain is the adversary's comfort zone. Make them uncomfortable.",
94
+ "Hunt for TTPs, not IOCs. Adversaries swap infrastructure daily, not tactics.",
95
+ "False positives teach you about your environment. True positives teach you about adversaries.",
96
+ "Every expert threat hunter started with their first hypothesis. Keep building.",
97
+ "The LOCK pattern isn't just documentation—it's institutional memory.",
98
+ "Threat intelligence tells you what to hunt. Your environment tells you how.",
99
+ "Behavioral detections age like wine. Signature detections age like milk.",
100
+ "The most dangerous threats blend in. Hunt for the subtle, not the obvious.",
101
+ "A mature hunt program isn't measured by detections. It's measured by learning velocity.",
102
+ "Pivoting is an art. Knowing when to stop pivoting is wisdom.",
103
+ "Your baseline is your best threat intelligence. Protect it.",
104
+ "Hunt like an adversary thinks: what would I do if I were already inside?",
105
+ "The best detection is a hunt hypothesis validated repeatedly.",
106
+ "Memory is the multiplier. Agency is the force.",
107
+ "Document the hunt that found nothing—it eliminates hypotheses for everyone who comes after you.",
108
+ ]
109
+
110
+ console.print(f"\n💭 [italic]{random.choice(quotes)}[/italic]\n")
111
+
112
+
113
+ @cli.command(hidden=True)
114
+ def thrunt() -> None:
115
+ """The real command all along."""
116
+ console.print("\n[bold cyan]🎯 THRUNT MODE ACTIVATED[/bold cyan]\n")
117
+ console.print("[italic]You've discovered the secret: threat hunting has always been 'thrunting'.[/italic]")
118
+ console.print("[italic]Welcome to the club. Now go hunt some threats.[/italic]\n")
119
+
120
+
121
+ def main() -> None:
122
+ """Main entry point for the CLI."""
123
+ cli()
124
+
125
+
126
+ if __name__ == "__main__":
127
+ main()
@@ -0,0 +1 @@
1
+ """ATHF CLI commands."""