
Agentic memory for CTI in Python — STIX ज्ञान ग्राफ, खतरा-अभिनेता उपनाम समाधान, ऑफलाइन-प्रथम RAG, Claude Code और LangChain एजेंटों के लिए MCP सर्वर
साइबर खतरा बुद्धिमत्ता के लिए बनाया गया एकमात्र एजेंटिक मेमोरी सिस्टम।
जब कोई वरिष्ठ विश्लेषक संगठन छोड़ता है, तो दो या तीन वर्षों का संदर्भ उनके साथ चला जाता है — ग्राहक वातावरण, पिछली जांचें, अभिनेता TTP, झूठी-सकारात्मक पैटर्न, हर कठिन-अर्जित "रुको, हमने यह पहले देखा है।" ZettelForge एक एजेंटिक मेमोरी सिस्टम है जो इस प्रकार बनाया गया है कि संदर्भ टीम के पास ही रहे।
यह विश्लेषक नोट्स और खतरा रिपोर्टों से CVEs, खतरा अभिनेताओं, IOCs और ATT&CK तकनीकों को निकालता है, उपनामों को हल करता है (APT28 = Fancy Bear = STRONTIUM = Sofacy), एक STIX 2.1 ज्ञान ग्राफ बनाता है, और हर पिछली जांच को आपके विश्लेषकों को — और MCP के माध्यम से Claude Code को — प्राकृतिक भाषा में प्रस्तुत करता है। पूरी तरह से इन-प्रोसेस चलता है। कोई API कुंजी नहीं। कोई क्लाउड नहीं। कोई डेटा होस्ट नहीं छोड़ता।
स्टार करें · pip install zettelforge · दस्तावेज़ · ThreatRecall (होस्टेड) · परिवर्तन लॉग
v2.6.2 (2026-04-27): कॉन्फ़िग वेब एडिटर सभी enum फ़ील्ड (LLM/एम्बेडिंग प्रदाता, लॉग स्तर, PII क्रिया, संश्लेषण प्रारूप) के लिए कार्यशील ड्रॉपडाउन और एक कार्यशील Apply बटन के साथ आता है। नया
[crewai]एक्स्ट्रा ZettelForge को CrewAI टूल के रूप में उजागर करता है —pip install zettelforge[crewai]। पूर्ण परिवर्तन लॉग
यदि ZettelForge आपके द्वारा चलाए जाने वाले CTI वर्कफ़्लो में फिट बैठता है, तो एक स्टार सबसे तेज़ संकेत है कि इस श्रेणी में निवेश जारी रखना उचित है।
हर SOC विश्लेषकों को खोता है। जब वे जाते हैं, तो जांच संदर्भ, अभिनेता आरोपण, और पर्यावरण-विशिष्ट झूठी-सकारात्मक पैटर्न उनके साथ चले जाते हैं। उनके प्रतिस्थापी एक ही टिकट फिर से खोलते हैं, एक ही रिपोर्ट फिर से पढ़ते हैं, और शुरू से एक ही मानसिक मॉडल फिर से बनाते हैं।
सामान्य-उद्देश्य AI मेमोरी सिस्टम सुरक्षा टीमों के लिए इसे ठीक नहीं करते हैं। वे APT28 को Fancy Bear से नहीं बता सकते, यह नहीं जानते कि CVE-2024-3094 XZ Utils बैकडोर है, Sigma या YARA को पार्स नहीं कर सकते, और MITRE ATT&CK तकनीक आईडी की कोई अवधारणा नहीं रखते। जब कोई CTI विश्लेषक उन्हें एक साल की इंटेल रिपोर्ट देता है, तो उन्हें चैट इतिहास पर धुंधली सिमैंटिक खोज मिलती है।
ZettelForge उन विश्लेषकों के लिए बनाया गया था जो खतरा ग्राफ़ में सोचते हैं। यह स्वचालित रूप से CVEs, खतरा अभिनेताओं, IOCs और ATT&CK तकनीकों को निकालता है, नामकरण परंपराओं में उपनामों को हल करता है, कारण संबंधों के साथ एक ज्ञान ग्राफ बनाता है, और इरादा-जागरूक मिश्रित खोज का उपयोग करके यादों को पुनर्प्राप्त करता है — सभी इन-प्रोसेस, बिना किसी बाहरी API निर्भरता के।
मेमोरी वृद्धि CTI कार्यों पर छोटे और बड़े मॉडलों के बीच 33% अंतर को बंद करती है (CTI-REALM, Microsoft 2026, बड़े-मॉडल बेसलाइन के रूप में GPT-4 का उपयोग करते हुए)। कार्यप्रणाली और तुलनाओं के लिए पूर्ण बेंचमार्क रिपोर्ट देखें।
इकाई निष्कर्षण — स्वचालित रूप से CVEs, खतरा अभिनेताओं, IOCs (IP, डोमेन, हैश, URL, ईमेल), MITRE ATT&CK तकनीकों, अभियानों, घुसपैठ सेटों, उपकरणों, लोगों, स्थानों और संगठनों की पहचान करता है। पूरे समय STIX 2.1 प्रकारों के साथ रेगेक्स + LLM NER।
ज्ञान ग्राफ — इकाइयाँ नोड बन जाती हैं, सह-घटना किनारे बन जाती है। LLM कारण त्रिक का अनुमान लगाता है ("APT28 उपयोग करता है Cobalt Strike")। अस्थायी किनारे और अधिक्रमण ट्रैक करते हैं कि खुफिया जानकारी कैसे विकसित होती है।
उपनाम समाधान — APT28, Fancy Bear, Sofacy, STRONTIUM सभी एक ही अभिनेता नोड में हल हो जाते हैं। संग्रहण और स्मरण पर स्वचालित रूप से काम करता है।
मिश्रित पुनर्प्राप्ति — वेक्टर समानता (768-dim fastembed, ONNX) + ग्राफ ट्रैवर्सल (ज्ञान ग्राफ किनारों पर BFS), इरादा वर्गीकरण द्वारा भारित। पाँच इरादा प्रकार: तथ्यात्मक, अस्थायी, संबंधपरक, खोजपूर्ण, कारण।
मेमोरी विकास — evolve=True के साथ, नई इंटेल की मौजूदा मेमोरी से तुलना की जाती है। LLM ADD, UPDATE, DELETE, या NOOP तय करता है। पुरानी इंटेल अधिक्रमित हो जाती है। विरोधाभास हल हो जाते हैं। डुप्लिकेट छोड़ दिए जाते हैं।
RAG संश्लेषण — direct_answer प्रारूप के साथ सभी संग्रहीत यादों में उत्तरों को संश्लेषित करें।
आर्किटेक्चर द्वारा इन-प्रोसेस — एम्बेडिंग के लिए fastembed (ONNX), वैकल्पिक स्थानीय LLM अनुमान के लिए llama-cpp-python, भंडारण के लिए SQLite + LanceDB, और डिफ़ॉल्ट रूप से localhost पर Ollama। कोई बाहरी API कुंजी आवश्यक नहीं है। पहली बार चलाने पर आउटबाउंड नेटवर्क एक्सेस हो सकता है जब एम्बेडिंग/LLM मॉडल डाउनलोड होते हैं; मॉडल प्रीलोड होने के बाद, यह पूरी तरह से ऑफ़लाइन (एयर-गैप्ड होस्ट सहित) चल सकता है।
OCSF स्कीमा में ऑडिट लॉगिंग — हर ऑपरेशन ओपन साइबर सिक्योरिटी स्कीमा फ्रेमवर्क प्रारूप में एक संरचित घटना उत्सर्जित करता है। आप लॉग स्ट्रीम के साथ क्या करते हैं (SIEM, WORM स्टोर, कुछ नहीं) यह आप पर निर्भर है।
pip install zettelforge
from zettelforge import MemoryManager
mm = MemoryManager()
# CTI संग्रहीत करें — रेगेक्स के माध्यम से इकाइयाँ (CVEs, अभिनेता, ATT&CK IDs, IOCs) निकाली गईं
mm.remember("APT28 uses Cobalt Strike for lateral movement via T1021")
mm.remember("APT28 (Fancy Bear) targets NATO defense contractors with spear-phishing")
mm.remember("CVE-2024-3094 is the XZ Utils backdoor (CVSS 10.0) affecting sshd")
# पुनर्प्राप्ति वेक्टर + ग्राफ खोज को मिलाती है; उपनाम समाधान सक्रिय होता है (Fancy Bear -> APT28)
for note in mm.recall("What tools does Fancy Bear use?", k=3):
print(f"[{note.metadata.tier}] {note.content.raw}")
यह किसी भी बाहरी सेवा के बिना एक नए pip install पर काम करता है। एम्बेडिंग fastembed (~80MB ONNX मॉडल पहली कॉल पर डाउनलोड) के माध्यम से इन-प्रोसेस चलती है। MemoryManager() डिफ़ॉल्ट रूप से ~/.amem/ पर लिखता है; ZETTELFORGE_DATA_DIR या कॉन्फ़िग के माध्यम से ओवरराइड करें। एक चलने योग्य प्रति examples/quickstart.py पर मौजूद है।
ollama pull qwen3.5:9b && ollama serve
# Ollama चलने के साथ, synthesize() संग्रहीत नोटों में एक वास्तविक सारांश लौटाता है
answer = mm.synthesize("Summarize known APT28 TTPs")
print(answer["synthesis"]["answer"])
# बैकग्राउंड LLM NER भी अतिरिक्त इकाइयों के साथ संग्रहीत नोटों को समृद्ध करता है
ZettelForge स्वचालित रूप से Ollama का पता लगाता है। एक अलग प्रदाता (local llama-cpp, litellm 100+ प्रदाताओं के लिए, परीक्षणों के लिए mock) का उपयोग करने के लिए, कॉन्फ़िगरेशन देखें। LLM के बिना, synthesize() अभी भी एक संरचित प्रतिक्रिया लौटाता है लेकिन answer फ़ील्ड एक फ़ॉलबैक प्लेसहोल्डर है — केवल remember और recall पिप-ओनली मोड में उपयोगी परिणाम उत्पन्न करते हैं।
# नई इंटेल आती है -- evolve=True मेमोरी विकास को सक्षम करता है:
# LLM तथ्य निकालता है, मौजूदा नोटों से तुलना करता है, ADD/UPDATE/DELETE/NOOP तय करता है
mm.remember(
"APT28 has shifted tactics. They dropped DROPBEAR and now exploit edge devices.",
domain="cti",
evolve=True, # मौजूदा APT28 नोट अधिक्रमित हो जाता है, डुप्लिकेट नहीं
)
हर remember() कॉल एक पाइपलाइन को ट्रिगर करती है:
हर recall() कॉल दो पुनर्प्राप्ति रणनीतियों को मिलाती है:
pip install zettelforge
अपने प्रोजेक्ट रूट (या वैश्विक पहुँच के लिए ~/.claude/.claude.json) में .claude.json बनाएँ या संपादित करें:
{
"mcpServers": {
"zettelforge": {
"command": "python3",
"args": ["-m", "zettelforge.mcp"]
}
}
}
यदि ZettelForge किसी वर्चुअल वातावरण में स्थापित है, तो उस Python इंटरप्रेटर का पूरा पथ उपयोग करें:
{
"mcpServers": {
"zettelforge": {
"command": "/home/user/.venvs/zettelforge/bin/python",
"args": ["-m", "zettelforge.mcp"]
}
}
}
Claude Code प्रारंभ करें और उपकरणों की उपलब्धता सत्यापित करें:
claude
# सत्र के अंदर, पूछें: "What tools do you have available from zettelforge?"
सात उपकरण उजागर होते हैं: zettelforge_remember, zettelforge_recall, zettelforge_synthesize, zettelforge_entity, zettelforge_graph, zettelforge_stats, और zettelforge_sync (एंटरप्राइज़ पैकेज की आवश्यकता है)। पूर्ण स्कीमा, JSON-RPC अनुरोध/प्रतिक्रिया उदाहरण, त्रुटि कोड, और आलसी-सिंगलटन जीवनचक्र के लिए MCP प्रोटोकॉल संदर्भ देखें। समस्या निवारण, वर्चुअलएनवी पथ, और मैन्युअल टूल परीक्षण के लिए, सेट-अप-MCP-सर्वर देखें।
प्रकाशित अकादमिक बेंचमार्क के विरुद्ध मूल्यांकन:
स्कोर स्तंभ Ollama-होस्टेड मॉडल के साथ चलाए गए ZettelForge मापों की रिपोर्ट करता है, एक अपवाद के साथ: LOCOMO पंक्ति को v2.1.1 पर मूल्यांकन ग्रेडिंग के लिए Ollama क्लाउड जज का उपयोग करके पुनः मापा गया (स्थानीय जनरेशन नहीं)। बेंचमार्क-विशिष्ट कार्यप्रणाली, संस्करण इतिहास, और प्रति-सूट जज कॉन्फ़िगरेशन के लिए पूर्ण बेंचमार्क रिपोर्ट देखें।
Sigma और YARA नियम प्रथम श्रेणी के मेमोरी प्रिमिटिव हैं। एक नियम को पार्स, मान्य करें और अंतर्ग्रहण करें और इसके टैग ग्राफ किनारे बन जाते हैं: MITRE ATT&CK तकनीक, CVEs, खतरा-अभिनेता उपनाम, उपकरण, और मैलवेयर परिवार उसी ऑन्टोलॉजी में हल होते हैं जैसे हर दूसरा नोट। एक साझा DetectionRule सुपरटाइप SigmaRule और YaraRule उपप्रकार रखता है, ताकि एक एकल नियम UUID दोनों प्रारूपों में संबोधित करने योग्य हो।
Sigma नियमों को विक्रयित SigmaHQ JSON स्कीमा के विरुद्ध मान्य किया जाता है। YARA नियमों को plyara के साथ पार्स किया जाता है और CCCS YARA मेटाडेटा मानक (टियर: strict, warn, non_cccs) के विरुद्ध जांचा जाता है। अंतर्ग्रहण आइडेम्पोटेंट है — अपरिवर्तित नियम का पुनर्अंतर्ग्रहण एक सामग्री-हैश्ड source_ref के माध्यम से मूल नोट लौटाता है।
from zettelforge import MemoryManager
from zettelforge.sigma import ingest_rule as ingest_sigma
from zettelforge.yara import ingest_rule as ingest_yara
mm = MemoryManager()
ingest_sigma("rules/proc_creation_win_office_macro.yml", mm)
ingest_yara("rules/webshell_china_chopper.yar", mm, tier="warn")
# SigmaHQ या एक निजी नियम रिपॉजिटरी से बल्क अंतर्ग्रहण
python -m zettelforge.sigma.ingest /path/to/sigma/rules/
python -m zettelforge.yara.ingest /path/to/yara/rules/ --tier warn
# CI फिक्स्चर जाँच -- पार्स + मान्य, कोई लेखन नहीं
python -m zettelforge.sigma.ingest rules/ --dry-run
एक LLM नियम व्याख्याकार (zettelforge.detection.explainer.explain) किसी भी DetectionRule के लिए एक संरचित JSON सारांश — इरादा, प्रमुख फ़ील्ड, चोरी नोट्स, झूठी-सकारात्मक परिकल्पनाएँ — उत्पन्न करता है। यह v1 में मांग पर समकालिक रूप से चलता है; एसिंक संवर्धन-कतार वायरिंग v1.1 के लिए है। ZETTELFORGE_EXPLAIN_RPM (डिफ़ॉल्ट 60 कॉल/मिनट) के माध्यम से दर-सीमित।
संदर्भ: Sigma spec, SigmaHQ rules, CCCS YARA, YARA docs।
पूर्ण ATHF हंट्स को ZettelForge मेमोरी में अंतर्ग्रहित करें। MITRE तकनीक और IOCs निकाले जाते हैं और ज्ञान ग्राफ में लिंक किए जाते हैं।
python examples/athf_bridge.py /path/to/hunts/
# 12 hunt(s) parsed
# Ingested 12/12 hunts into ZettelForge
examples/athf_bridge.py देखें।
ThreatRecall ZettelForge का वाणिज्यिक वितरण है जिसमें एंटरप्राइज़ एक्सटेंशन सक्षम हैं। यह डिफ़ॉल्ट रूप से प्रबंधित SaaS के रूप में प्रस्तुत किया जाता है, वर्गीकृत वातावरणों के लिए वैकल्पिक स्व-होस्टेड ऑन-प्रिम और एयर-गैप्ड परिनियोजन के साथ। एंटरप्राइज़ ऐड-ऑन:
SaaS बिना किसी बुनियादी ढाँचे को बनाए रखने के मिनटों में परिनियोजित होता है। स्व-होस्टेड उन वातावरणों के लिए एक परिनियोजन योग्य बंडल के रूप में भेजा जाता है जहाँ आउटबाउंड नेटवर्क एग्रेस प्रतिबंधित या निषिद्ध है।
प्रतीक्षा सूची में शामिल हों — वर्तमान में डिज़ाइन पार्टनर ऑनबोर्डिंग।
सभी विकल्पों के लिए config.default.yaml देखें।
डेवलपमेंट सेटअप के लिए CONTRIBUTING.md देखें।
MIT — LICENSE देखें।
पैट्रिक रोलैंड द्वारा निर्मित — LinkedIn | SOC सेवाओं के निदेशक, Summit 7 Systems | नौसेना परमाणु अनुभवी | CISSP, CCP (CMMC 2.0 Professional)
ZettelForge MIT-लाइसेंस प्राप्त है। रिपॉजिटरी को स्टार करें, मुद्दे खोलें, और PR जमा करें — सभी योगदानों का स्वागत है।
| क्षमता | ZettelForge | Mem0 | Graphiti | Cognee |
|---|
| CTI इकाई निष्कर्षण (CVEs, अभिनेता, IOCs) | हाँ | नहीं | नहीं | नहीं |
| STIX 2.1 ऑन्टोलॉजी | हाँ | नहीं | नहीं | नहीं |
| खतरा अभिनेता उपनाम समाधान | हाँ (APT28 = Fancy Bear) | नहीं | नहीं | नहीं |
| कारण त्रिक के साथ ज्ञान ग्राफ | हाँ | नहीं | हाँ | हाँ |
| इरादा-वर्गीकृत पुनर्प्राप्ति (5 प्रकार) | हाँ | नहीं | नहीं | नहीं |
| इन-प्रोसेस / कोई बाहरी API आवश्यक नहीं | हाँ | नहीं | नहीं | नहीं |
| OCSF स्कीमा में ऑडिट लॉग | हाँ | नहीं | नहीं | नहीं |
| MCP सर्वर (Claude Code) | हाँ | नहीं | नहीं | नहीं |
| बेंचमार्क | यह क्या मापता है | स्कोर |
|---|
| CTI पुनर्प्राप्ति (CTIBench उपसमूह) | आरोपण, CVE लिंकेज, मल्टी-हॉप | 75.0% |
| RAGAS | पुनर्प्राप्ति गुणवत्ता (कीवर्ड उपस्थिति) | 78.1% |
| LOCOMO (ACL 2024) | वार्तालाप मेमोरी रिकॉल | 22.0% |
| चर | डिफ़ॉल्ट | विवरण |
|---|
AMEM_DATA_DIR | ~/.amem | डेटा निर्देशिका |
ZETTELFORGE_BACKEND | sqlite | SQLite सामुदायिक बैकएंड। TypeDB एक्सटेंशन के माध्यम से उपलब्ध। |
ZETTELFORGE_LLM_PROVIDER | local | local (llama-cpp) या ollama |