# How a memory is created

A memory is written in one of four ways: a person types it into the viewer, the Connect Assistant is asked to remember it, a phone call produces it when the call is closed, or somebody corrects behaviour that was wrong. Each records what was written and where it came from, and every one of them lands in the same place — a `connect_memory` row at a named tier.

- **Status:** Available
- **Audience:** both
- **In the app:** #/relationships, #/data
- **Last verified:** 2026-09-10
- **Canonical:** https://connectbyjbrh.com/docs/memory/creating-memory/

## By hand

The memory viewer is mounted from the mailbox row, the channel screen and the contact panel, and the tier you are writing at is determined by where you opened it. Opening it from a contact writes contact memory; opening it from a mailbox row writes endpoint memory. That is deliberate — choosing a tier from a dropdown is the step people get wrong, and the screen you came from is usually the right answer.

Write one claim per row. A row containing three unrelated statements cannot be superseded when one of them stops being true, cannot be forgotten selectively, and spends the whole tier's budget on a call for the sake of the one sentence that mattered.

## Through the Assistant

The [Connect Assistant](/docs/assistant/) has `remember` among its writing tools and `recall` among its read-only ones, so "remember that this customer only wants WhatsApp" is a complete instruction. The Assistant is working inside the workspace, under the same isolation as any other caller, and the screen context it is given is checked against the database before it is trusted — so a memory written from a conversation about the wrong record is caught at the door rather than stored.

> **Careful** The Assistant's rights are deliberately narrower than a person's. It cannot set pricing and it cannot clear a do-not-contact entry. A request to "forget that they asked us not to call" is refused rather than quietly performed, and the refusal is recorded — a refusal is a decision, and the [audit trail](/docs/autonomy/) keeps it.

## From a phone call

When a call ends, `/engine/end` runs the same `voice.end_call` the turn-based path uses: summary, lead, memory and follow-up, in one place for both engines. What is learned about the person is written as contact memory there, which is why a fact spoken on the phone is in front of Connect on the next email without anybody re-typing it.

Two filters sit in front of that. A call with fewer than two caller lines and fewer than five caller words is never sent to the summariser at all — ten one-turn rows once carried an invented afternoon at the sales desk, and the cheapest fix for a summariser with nothing to work from is not to ask it. And a call that was never a conversation has its own word: `no_answer` rang and nobody picked up, `not_reached` never rang. Neither produces a lead and neither is treated as a source of facts.

Names get a filter of their own, at the `connect_memory.remember` door as well as at lead capture and person upsert. A form of address is never stored as a name, and a name-keyed fact whose subject is a pronoun, a suffix or "the caller" is refused outright — see [memory from a phone call](/docs/memory/memory-from-call/).

## As a correction

The fourth route is the one that matters most and is used least. When Connect does something you did not want, the reflex is to fix that one message — reject the draft, rewrite the reply, take the call yourself. That is a decision about one message, not a lesson. Nothing about rejecting a held draft writes memory.

Turning it into a lesson is a separate, deliberate act: write the reason at the tier it belongs to. "This customer is not to be offered the annual plan" at the contact tier changes every future conversation with them; rejecting one draft changes one draft. [Correcting what Connect knows, end to end](/docs/workflows/memory-correction/) follows that from the wrong behaviour to the changed reply.

**Reject a draft** — Stops one message. Recorded against the thread. Writes no memory.
**Edit a draft and send it** — Sends your words. Writes no memory. Connect will draft the same way next time.
**Write a memory** — Changes the next piece of work, and every one after it, at the tier you chose.
**Write a block** — Stops contact on a channel entirely, and holds across channels and future conversations.

## Questions

### Does Connect write memory from every email it reads?

No. Reading a thread does not by itself produce a memory row — threads and messages are already stored and readable, and duplicating them as memory would bloat the tier without adding anything. Memory is written deliberately: by a person, by the Assistant on request, or at the end of a call.

### Can I write a memory for somebody who is not a contact yet?

Not at the contact tier, because there is no person to attach it to. Create the person first — or let the conversation that identifies them create one — and then write it. Anything genuinely true before you know who they are usually belongs at the endpoint or workspace tier anyway.

### Is a memory applied immediately?

It applies to the next piece of work, not to work already in flight. A call already in progress has had its brief rendered once and will not pick it up; a draft already written is unchanged. Send the next reply, or place the next call, and it is there.

## Related

- [The four memory tiers](https://connectbyjbrh.com/docs/memory/tiers/)
- [Memory from an email or a chat](https://connectbyjbrh.com/docs/memory/memory-from-conversation/)
- [Memory from a phone call](https://connectbyjbrh.com/docs/memory/memory-from-call/)
- [Editing a memory](https://connectbyjbrh.com/docs/memory/editing/)
- [Correcting what Connect knows, end to end](https://connectbyjbrh.com/docs/workflows/memory-correction/)
- [Connect Assistant](https://connectbyjbrh.com/docs/assistant/)

## What this page is based on

- docs-source/sources/GENERAL.md §6 — where the viewer is mounted from
- docs-source/sources/GENERAL.md §8 — Assistant tools and narrower rights
- docs-source/sources/PHONE.md §3 — /engine/end runs voice.end_call
- docs-source/sources/PHONE.md §9 — NOT_A_CONVERSATION and the summariser floor
