Skip to main content
← All use cases

The scenario

Everyone on the team notices things about competitors. Someone spots a pricing page change, someone else reads an earnings call, someone notices they are hiring six infrastructure engineers. All of it lands in Slack, scrolls away, and is gone. Three months later nobody can answer “when did they start moving upmarket?” — even though four people watched it happen.

Step 1 — Record signals with the date they happened

The timestamp is the point. A signal recorded without one is undated evidence, and undated evidence cannot answer a question about change.

Step 2 — Ask what changed over a window

Step 3 — See who and what keeps coming up

Entities are extracted as memories are stored, so the graph is already there. The interesting read is usually the rising one: a name that appeared twice last quarter and eleven times this one.

Evals

  1. Record ten dated signals across six months, including two that contradict each other.
  2. Ask what changed. A good answer notes the contradiction rather than picking one silently.
  3. Re-ask with occurred_after set to the midpoint. The answer should narrow.
  4. Check get_graph surfaces the competitor names you actually recorded, and not a long tail of noise — if it does, your memories are too chatty and want tighter extraction settings.

Guardrails

Record public sources only. Competitor intelligence assembled from confidential or improperly obtained material does not become acceptable by being in a database. Keep metadata["source"] filled in so anyone can check where a claim came from.
  • Edges are co-occurrence, not typed relationships. The graph tells you two entities appear together and how often; it does not say one acquired the other. Do not present it as though it does.
  • Contradictions are signal, not error. When a newer fact supersedes an older one, correct it explicitly with a reason rather than deleting the old one — the change is the intelligence.
  • A source that stops reporting looks the same as nothing happening. Memory cannot tell you about the press release nobody fed it.

Built from

Both are complete, runnable scripts: time_travel.py, knowledge_graph.py.