Skip to content

Commit 13a501d

Browse files
authored
Merge pull request #68 from wrhalpin/copilot/update-readme-file
docs: update README to reflect 99 connectors and new agent sub-packages
2 parents 82cd88c + ce41002 commit 13a501d

1 file changed

Lines changed: 84 additions & 11 deletions

File tree

README.md

Lines changed: 84 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# GNAT 🪰
22

3-
**GNAT's Not Another TIP** — A production-ready Python library for unified threat intelligence operations across 95 security platforms.
3+
**GNAT's Not Another TIP** — A production-ready Python library for unified threat intelligence operations across 99 security platforms.
44

55
[![Python](https://img.shields.io/badge/python-3.9%2B-blue)](https://python.org)
66
[![License](https://img.shields.io/badge/license-Apache%202.0-blue)](LICENSE)
@@ -11,10 +11,10 @@
1111

1212
---
1313

14-
GNAT provides a single, consistent abstraction layer over 95 security platforms — threat intelligence platforms, SIEMs, EDRs, vulnerability scanners, SOAR tools, network sensors, AI assistants, and cloud security posture products. Every connector implements the same interface and bidirectional STIX 2.1 translation, making automation portable: switch platforms, add sources, or replace tools without rewriting pipelines, schedules, or reports.
14+
GNAT provides a single, consistent abstraction layer over 99 security platforms — threat intelligence platforms, SIEMs, EDRs, vulnerability scanners, SOAR tools, network sensors, AI assistants, and cloud security posture products. Every connector implements the same interface and bidirectional STIX 2.1 translation, making automation portable: switch platforms, add sources, or replace tools without rewriting pipelines, schedules, or reports.
1515

1616
```
17-
[ 95 Platforms ] → GNATClient → STIX 2.1 ORM → Ingest / Export / Report / Schedule / Research
17+
[ 99 Platforms ] → GNATClient → STIX 2.1 ORM → Ingest / Export / Report / Schedule / Research
1818
```
1919

2020
---
@@ -52,12 +52,12 @@ GNAT provides a single, consistent abstraction layer over 95 security platforms
5252

5353
| Layer | What it does |
5454
|-------|-------------|
55-
| **95 Connectors** | Uniform CRUD + bidirectional STIX 2.1 translation for every supported platform |
55+
| **99 Connectors** | Uniform CRUD + bidirectional STIX 2.1 translation for every supported platform |
5656
| **STIX 2.1 ORM** | Indicator, ThreatActor, Vulnerability, Malware, AttackPattern, Relationship, Observables |
5757
| **Ingest Pipelines** | 14 source readers × 12 mappers; pull from any platform, file, feed, or database |
5858
| **Export Pipelines** | EDL files, Netskope CE, STIX bundles, CSV; configurable filters + transforms + delivery |
5959
| **FeedScheduler** | Drift-corrected cron scheduling for all job types; APScheduler/Celery adapters |
60-
| **AI Agents** | ResearchAgent (Claude), ParsingAgent (STIX extraction from text), CopilotReader (M365) |
60+
| **AI Agents** | ResearchAgent (Claude), ParsingAgent (STIX extraction from text), CopilotReader (M365); quality/, security/, and repo_maintenance/ sub-agent packages |
6161
| **NLP Queries** | Natural-language query engine — built-in rule-based or Claude-backed structured extraction |
6262
| **Research Library** | Team knowledge base with staging/curation workflow, TTL management, and deduplication |
6363
| **Automated Reports** | PDF, HTML, DOCX, Markdown; daily/weekly/annual; AI-assisted synthesis; email + SharePoint delivery |
@@ -110,6 +110,7 @@ GNAT provides a single, consistent abstraction layer over 95 security platforms
110110
| `opencti` | OpenCTI | API key |
111111
| `hibp` | Have I Been Pwned (HIBP) | API key |
112112
| `synapse` | Vertex Project Synapse | API key / Bearer |
113+
| `osint_feed` | Generic OSINT Feed (TAXII 2.x / STIX-JSON) | None / Basic / API key / Bearer / OAuth2 |
113114

114115
### SIEMs & Log Analytics
115116

@@ -152,6 +153,7 @@ GNAT provides a single, consistent abstraction layer over 95 security platforms
152153
| `darktrace` | Darktrace Enterprise Immune System | HMAC public/private key |
153154
| `nozomi` | Nozomi Networks Guardian / Vantage (OT/IoT) | API token / Basic |
154155
| `dragos` | Dragos Platform (OT/ICS Threat Intelligence) | Basic (API key + secret) |
156+
| `cisco_umbrella` | Cisco Umbrella (Investigate / Enforcement / Management) | Multiple API keys (Investigate, Enforcement, Management) |
155157

156158
### Vulnerability Management
157159

@@ -180,6 +182,7 @@ GNAT provides a single, consistent abstraction layer over 95 security platforms
180182
| `upguard` | UpGuard Vendor Risk + CAASM + DRP | API key |
181183
| `aws_security` | AWS Security Hub / GuardDuty | AWS SigV4 (access key + secret) |
182184
| `securityscorecard` | SecurityScorecard Security Ratings | API token |
185+
| `jupiterone` | JupiterOne (CAASM / Cyber Asset Graph) | Bearer (API key) |
183186

184187
### Asset & Endpoint Management
185188

@@ -206,14 +209,15 @@ GNAT provides a single, consistent abstraction layer over 95 security platforms
206209
| `tanium` | Tanium Endpoint Management & Security | API token / session |
207210
| `trendmicro_visionone` | Trend Micro Vision One XDR | Bearer token |
208211

209-
### AI Assistants
212+
### AI Assistants & Collaboration
210213

211214
| Key | Platform | Auth |
212215
|-----|----------|------|
213216
| `copilot` | Microsoft Copilot for Security | DirectLine / Bearer |
214217
| `chatgpt` | OpenAI ChatGPT | API key |
215218
| `gemini` | Google Gemini | API key |
216219
| `grok` | Grok AI | API key |
220+
| `discord` | Discord (IOC extraction / CTI notifications) | Bot token |
217221

218222
---
219223

@@ -536,13 +540,15 @@ APScheduler and Celery adapters for existing infrastructure.
536540

537541
## AI Agents & Research Library
538542

539-
### AI Agents
543+
### Core AI Agents
540544

541545
| Agent | Role | Backend |
542546
|-------|------|---------|
543547
| `ResearchAgent` | Topic-driven synthesis; feed-driven monitoring | Claude API (`web_search` tool) |
544548
| `ParsingAgent` | Extract STIX objects from unstructured text | Claude API |
545549
| `CopilotReader` | Query M365 content (SharePoint, Teams, mail) via DirectLine | Microsoft Bot Framework |
550+
| `ConnectorHealthJob` | Periodic connector health checks + schema drift detection | Built-in |
551+
| `LLMClient` | Unified LLM facade — Claude, OpenAI, Grok, Gemini with automatic fallback | Multiple |
546552

547553
All AI-extracted objects are capped at `confidence_ceiling = 60` (configurable) and tagged
548554
`x_source_type = "ai_extracted"`. Default export pipelines use `ConfidenceFilter(min=70)`,
@@ -555,6 +561,59 @@ model = claude-sonnet-4-6
555561
ai_confidence_ceiling = 60
556562
```
557563

564+
### Quality Agents (`gnat/agents/quality/`)
565+
566+
Automated connector assurance pipeline — runs during CI and on-demand:
567+
568+
| Agent | Role |
569+
|-------|------|
570+
| `FixtureCoverageAgent` | Identifies connectors missing test fixtures; generates coverage gap reports |
571+
| `NormalizationRegressionAgent` | Runs golden-fixture regression tests to detect STIX normalization drift |
572+
| `ContractAgent` | Verifies all 8 required `ConnectorMixin` methods are present and correctly typed |
573+
574+
```python
575+
from gnat.agents.quality import NormalizationRegressionAgent, ContractAgent
576+
577+
agent = NormalizationRegressionAgent(policy=RegressionPolicy(fail_on_drift=True))
578+
result = agent.run_all() # compare against golden fixtures
579+
580+
contract = ContractAgent()
581+
profile = contract.check("crowdstrike") # ContractCheckResult
582+
```
583+
584+
### Security Agents (`gnat/agents/security/`)
585+
586+
Two sub-packages for runtime secrets management and code hygiene:
587+
588+
**Hygiene** (`gnat/agents/security/hygiene/`):
589+
590+
| Module | Role |
591+
|--------|------|
592+
| `leak_scanner` | Scans connector output for accidental credential/PII leakage |
593+
| `unsafe_patterns` | Detects unsafe coding patterns (hardcoded secrets, bare `except`, etc.) |
594+
| `duplicate_detector` | Flags duplicate connector registrations and conflicting key aliases |
595+
596+
**Secrets Management** (`gnat/agents/security/secrets/`):
597+
598+
| Component | Role |
599+
|-----------|------|
600+
| `SecretsBroker` | Central resolver — dispatches to configured provider (vault, env, INI) |
601+
| `providers/` | Pluggable backends: `AzureKeyVaultProvider`, `CyberArkProvider`, `MemoryProvider` |
602+
| `SecretResolver` | Resolves `${secret:key}` interpolation tokens inside INI config values |
603+
| `SecretsAuditLog` | Immutable append-only log of every secret access for compliance |
604+
605+
### Repository Maintenance Agents (`gnat/agents/repo_maintenance/`)
606+
607+
Automated connector lifecycle management:
608+
609+
| Component | Role |
610+
|-----------|------|
611+
| `DiscoveryEngine` | Scans the connector directory; detects new, modified, or stale connectors |
612+
| `RepairPlanner` | Generates `RepairPlan` (diff-based) for connectors that have drifted from the `ConnectorMixin` contract |
613+
| `VerificationEngine` | Runs post-repair verification checks and produces `VerificationResult` |
614+
| `MaintenanceExecutor` | Orchestrates discovery → repair → verify → PR creation end-to-end |
615+
| `ConnectorRegistry` | Queryable in-memory registry of all `ConnectorSpec` entries with metadata |
616+
558617
### Research Library
559618

560619
Three-tier team knowledge base with controlled promotion:
@@ -969,10 +1028,10 @@ gnat/
9691028
├── client.py # GNATClient — top-level facade
9701029
├── config.py # INI-based config (GNAT_CONFIG → ~/.gnat/config.ini → ./gnat.ini)
9711030
├── clients/
972-
│ ├── __init__.py # CLIENT_REGISTRY (95 connectors)
1031+
│ ├── __init__.py # CLIENT_REGISTRY (99 connectors)
9731032
│ └── base.py # urllib3 BaseClient + GNATClientError
9741033
├── orm/ # STIX 2.1 ORM (STIXBase + 8 object types + observables)
975-
├── connectors/ # 95 platform connectors — each: BaseClient + ConnectorMixin
1034+
├── connectors/ # 99 platform connectors — each: BaseClient + ConnectorMixin
9761035
│ └── base_connector.py # ConnectorMixin (8-method contract + capabilities() + call())
9771036
├── ingest/ # SourceReaders (14), RecordMappers (12), IngestPipeline
9781037
│ └── _ioc_classifier.py # RUST_AVAILABLE shim for optional Rust hot-path
@@ -981,9 +1040,23 @@ gnat/
9811040
├── context/ # Workspace, WorkspaceManager, GlobalContextRegistry
9821041
│ └── tenant.py # TenantRegistry + TenantWorkspaceManager (multi-tenant isolation)
9831042
├── agents/ # AI agent layer
1043+
│ ├── llm.py # LLMClient — unified Claude/OpenAI/Grok/Gemini facade
9841044
│ ├── copilot.py # CopilotReader (M365 DirectLine, token refresh)
9851045
│ ├── research.py # ResearchAgent + ParsingAgent
986-
│ └── health_monitor.py # ConnectorHealthJob — health + schema drift detection
1046+
│ ├── health_monitor.py # ConnectorHealthJob — health + schema drift detection
1047+
│ ├── quality/ # Connector quality assurance agents
1048+
│ │ ├── fixture_coverage.py # FixtureCoverageAgent — test fixture gap detection
1049+
│ │ ├── normalization_regression.py # NormalizationRegressionAgent — golden-fixture regression
1050+
│ │ └── contract.py # ContractAgent — ConnectorMixin contract verification
1051+
│ ├── security/ # Security hygiene + secrets management agents
1052+
│ │ ├── hygiene/ # leak_scanner, unsafe_patterns, duplicate_detector
1053+
│ │ └── secrets/ # SecretsBroker, SecretResolver, SecretsAuditLog, providers/
1054+
│ └── repo_maintenance/ # Connector lifecycle automation
1055+
│ ├── discovery.py # DiscoveryEngine — detect new/stale connectors
1056+
│ ├── repair.py # RepairPlanner — generate diff-based repair plans
1057+
│ ├── verifier.py # VerificationEngine — post-repair contract checks
1058+
│ ├── executor.py # MaintenanceExecutor — end-to-end orchestration
1059+
│ └── registry.py # ConnectorRegistry — in-memory ConnectorSpec store
9871060
├── research/ # ResearchLibrary, ResearchEntry, CurationJob
9881061
├── reports/ # ReportGenerator, ReportJob, 4 renderers, email + SharePoint delivery
9891062
├── viz/ # TabularView, GraphView, GrafanaServer, sigma.js export
@@ -1075,7 +1148,7 @@ make docs # Sphinx HTML docs (docs/build/html/)
10751148
└──────────────────┬──────────────────────┘
10761149
10771150
┌──────────────────▼──────────────────────┐
1078-
│ CONNECTOR LAYER (95 platforms) │
1151+
│ CONNECTOR LAYER (99 platforms) │
10791152
│ BaseClient + ConnectorMixin │
10801153
│ authenticate · health_check │
10811154
│ get/list/upsert/delete · to/from_stix │

0 commit comments

Comments
 (0)