Terminology reference
This page is the single source of truth for product names, API identifiers, and
entity type vocabulary used across ZettelForge documentation. When in doubt, prefer
the forms listed here over informal variations.
Product names
| Term |
Use |
Avoid |
| ZettelForge |
The open-source CTI memory engine. Always one word, always capitalized. |
"Zettelforge", "zettelforge", "ZF" in prose |
| ThreatRecall.ai |
The hosted SaaS product. Always hyphenated, lowercase "ai". |
"ThreatRecall", "Threat Recall", "threatrecall" in prose |
| ZettelForge OSS |
Acceptable short form when distinguishing from SaaS in the same sentence. |
"ZettelForge open source" (only at first mention) is also acceptable |
ThreatRecall.ai is the commercial hosted product. ZettelForge is the Apache-2.0-licensed
open-source engine. They share a core but are distinct products; do not use the
names interchangeably.
Core API classes
| Term |
Description |
MemoryManager |
The main Python class. PascalCase, two words joined. |
MemoryNote |
The data model for a stored memory. PascalCase. |
get_memory_manager() |
Process-wide singleton factory function. snake_case. |
API methods
Use the exact method names from source; do not shorten or paraphrase them in
code examples or inline code spans.
| Method |
Description |
remember() |
Store one note. |
remember_chunked() |
Split and store a long text as multiple notes. |
remember_with_extraction() |
Two-phase LLM extraction into notes. |
remember_report() |
Ingest a news or threat report with chunking and extraction. |
recall() |
Retrieve notes by blended vector and graph retrieval. |
recall_actor() |
Entity-index lookup by actor name. |
recall_cve() |
Entity-index lookup by CVE ID. |
recall_tool() |
Entity-index lookup by tool name. |
recall_technique() |
Entity-index lookup by ATT&CK technique ID. |
recall_entity() |
Entity-index lookup by type and value. |
synthesize() |
Retrieval-augmented answer generation. |
ingest_relationship() |
Write a knowledge graph edge directly. |
traverse_graph() |
Walk relationship paths outward from an entity. |
get_entity_relationships() |
Return direct knowledge graph neighbors of an entity. |
get_context() |
Return a formatted context string for agent prompts. |
flush() |
Block until background enrichment jobs complete. |
snapshot() |
Export a JSONL snapshot of memory. |
Entity types
These strings are the canonical values used in recall_entity(),
ingest_relationship(), and the entity index. Spell them exactly as shown.
CTI and IOC types (regex-extracted, no LLM required)
| Entity type |
Example |
cve |
CVE-2024-1234 |
intrusion_set |
APT28, UNC4990, FIN7 |
actor |
Lazarus, Sandworm, Volt Typhoon |
tool |
Cobalt Strike, Mimikatz, BloodHound |
campaign |
Operation Aurora |
attack_pattern |
T1059, T1059.001 |
ipv4 |
IPv4 address |
domain |
Registered domain |
url |
HTTP/HTTPS URL |
md5 |
32-character hex hash |
sha1 |
40-character hex hash |
sha256 |
64-character hex hash |
email |
Email address |
| Entity type |
Description |
person |
Named person in non-threat-actor context |
location |
Place name |
organization |
Named organization |
event |
Named event |
activity |
Described activity |
temporal |
Time expression |
Lookup aliases
recall_actor() searches actor, threat_actor, and intrusion_set in one
call. The actor and threat_actor types are interchangeable for lookup but
intrusion_set is preferred for APT/UNC/FIN-style designations.
Knowledge graph relationship types
Canonical relationship label strings used in ingest_relationship() and returned
by get_entity_relationships() and traverse_graph(). See the
KG Edge Schema reference for the complete taxonomy.
CTI and IOC relationship types
| Relationship |
Meaning |
MENTIONED_IN |
Entity appears in a note |
USES_TOOL |
Actor or campaign uses a tool |
EXPLOITS_CVE |
Actor or tool exploits a CVE |
TARGETS_ASSET |
Actor or tool targets an asset |
CONDUCTS_CAMPAIGN |
Actor conducts a campaign |
USES_TECHNIQUE |
Actor uses an ATT&CK technique |
IMPLEMENTS |
Malware implements an ATT&CK technique |
Temporal and note-lifecycle relationship types
| Relationship |
Meaning |
SUPERSEDES |
Note supersedes another note |
TEMPORAL_BEFORE |
Note precedes another temporally |
TEMPORAL_AFTER |
Note follows another temporally |
Conversational relationship types
These are written by the LLM enrichment path and require a configured LLM provider.
| Relationship |
Meaning |
AFFILIATED_WITH |
Person affiliated with an organization |
ATTENDED |
Person attended an event |
LOCATED_AT |
Person or organization at a location |
PARTICIPATES_IN |
Person participates in an activity |
HELD_AT |
Event held at a location |
ORGANIZED_BY |
Event organized by an organization |
OCCURRED_ON |
Event occurred at a temporal point |
BASED_IN |
Organization based in a location |
Epistemic tier values
The tier field on MemoryNote.metadata uses single uppercase letters.
| Value |
Meaning |
A |
Authoritative — from a primary, verified source |
B |
Operational — derived, processed, or synthesized |
C |
Support — background, context, or low-confidence |
TLP values
Traffic Light Protocol markings on MemoryNote.metadata.tlp. Both short forms
(WHITE) and TLP:-prefixed forms (TLP:WHITE) are accepted; the policy layer
normalizes them when making sharing decisions. The field stores whatever value
was passed at ingest time.
| Value |
Rank |
Meaning |
"" (empty string) |
— |
Unclassified; normalized to TLP:CLEAR by the policy |
CLEAR or TLP:CLEAR |
0 |
Unlimited distribution |
WHITE or TLP:WHITE |
0 |
Unlimited distribution (same sharing level as CLEAR) |
GREEN or TLP:GREEN |
1 |
Community-limited distribution |
AMBER or TLP:AMBER |
2 |
Organization-limited distribution |
AMBER+STRICT or TLP:AMBER+STRICT |
3 |
Organization-limited, no further sharing |
RED or TLP:RED |
4 |
Named recipients only |
The default note TLP is TLP:CLEAR. The default share-max TLP (for unauthenticated
export) is TLP:GREEN. TLP:AMBER and higher require an explicit caller identity
matching the configured local identity.
Architecture terms
| Term |
Use |
| knowledge graph |
The entity relationship store. Two words, no hyphen in prose. |
| background worker |
The thread that drains the enrichment queue. Not "agent". |
| enrichment |
LLM-driven causal extraction, NER, and note evolution. Not "processing". |
| blended retrieval |
Combined vector similarity plus graph traversal. Not "hybrid retrieval". |
| fast path |
The write path that returns before LLM enrichment completes. |
| two-phase extraction |
Phase 1 (score facts) plus Phase 2 (decide ADD/UPDATE/NOOP). Hyphenated as a compound modifier. |
| backend |
Storage backend (SQLite or TypeDB). Lowercase in prose; SQLiteBackend as a class name. |
Storage backends
| Term |
Use |
sqlite |
The default backend. Lowercase in config values; "SQLite" in prose. |
typedb |
The TypeDB 3.x backend. Lowercase in config values; "TypeDB" in prose. |
format argument to synthesize() and POST /api/synthesize.
| Value |
Availability |
direct_answer |
ZettelForge OSS and ThreatRecall.ai |
synthesized_brief |
ThreatRecall.ai SaaS only; falls back to direct_answer in OSS |
timeline_analysis |
ThreatRecall.ai SaaS only; falls back to direct_answer in OSS |
relationship_map |
ThreatRecall.ai SaaS only; falls back to direct_answer in OSS |