Skip to main content
A signal is a grounded observation in the form:
Entity | Attribute | Value
Every piece of data in Kremis enters as a signal. There is no other way to add information to the graph.

Structure

FieldTypeConstraintsDescription
entity_idu64Unique identifier for the entity
attributestringMax 256 bytes, non-emptyThe attribute name
valuestringMax 64 KB, non-emptyThe attribute value

Example

{"entity_id": 1, "attribute": "name", "value": "Alice"}
This signal records that entity 1 has an attribute name with value Alice.

Ingestion Behavior

When a signal is ingested:
  1. Validate — attribute and value length are checked
  2. Node creation — a node is created for the entity (or the existing one is reused)
  3. Property storage — the attribute/value pair is stored as a property on the node
  4. Edge formation — when signals are ingested in sequence, adjacent signals form edges with weight +1
Repeated signals on the same edge cause the weight to increment (saturating arithmetic). This is how patterns emerge — frequently co-occurring signals produce stronger edges.

Input Formats

JSON

[
  {"entity_id": 1, "attribute": "name", "value": "Alice"},
  {"entity_id": 2, "attribute": "name", "value": "Bob"},
  {"entity_id": 1, "attribute": "knows", "value": "Bob"}
]

Text

Colon-separated entity_id:attribute:value per line:
1:name:Alice
2:name:Bob
1:knows:Bob
Last modified on February 19, 2026