# Giving guidance on a thread

Guidance is a short direction attached where the work happens — "quote delivery at four weeks, not two", "do not discuss the renewal until legal have replied". Written against the contact or the thread it becomes memory at that tier and reaches every later piece of work about that person; typed into a single draft it changes that draft only.

- **Status:** Available
- **Audience:** both
- **Channels:** email
- **In the app:** #/inbox, #/needs-you
- **Last verified:** 2026-09-10
- **Canonical:** https://connectbyjbrh.com/docs/email/guidance/

## Two things that both look like telling Connect something

**A steer on one draft** — You are editing this reply. It goes out as you left it, and nothing about the next message is different. Use it for a one-off: a date, a name, a sentence you want removed.
**A direction recorded as memory** — You are changing what Connect knows. It is resolved at its tier — workspace, channel, endpoint or contact — every time work touches that scope, including conversations that do not exist yet.

The screens do not force you to choose, which is convenient and is also where the mistake lives. A steer that should have been memory has to be repeated every week; a memory that should have been a steer keeps surfacing long after the reason for it expired.

## Where a direction lands

| You mean | Record it at | Reaches |
|---|---|---|
| "For this customer, always…" | The contact tier | Every channel, every future thread with that person |
| "On this mailbox, always…" | The endpoint tier | Everything sent from that mailbox |
| "In email generally, never…" | The channel tier | All email, whoever it is to |
| "For this business, always…" | The workspace tier | Everything Connect does |
| "Just in this reply…" | Nowhere durable | This draft only |

Resolution is narrowest-first, the same order autonomy uses, so a contact-tier direction beats a channel-tier one when the two disagree. `tiers()` returns an empty tier rather than dropping it, which is why the memory viewer can show you "nothing is set here" as a real answer instead of a blank space you have to interpret.

> **Note** Directions that *constrain* behaviour are read through `directives()`, which looks only at the tag list. A block is the clearest example — see [Blocking a sender](/docs/email/blocking/). Prose guidance is read as context, and prose that was meant as a constraint is the commonest reason a direction seems to be ignored.

## Writing one that works

1. **Say the behaviour, not the feeling.** "Be more careful with this account" cannot be applied. "Never quote a delivery date to this account without checking stock" can.
2. **Put the boundary in it.** A direction with no end condition is a direction somebody deletes in a year without knowing whether it still applies.
3. **Prefer the narrowest tier that covers the case.** A workspace-wide rule written because of one awkward customer will surprise you on an unrelated thread.
4. **Check it in the viewer.** The memory viewer is mounted from the mailbox row, the channel screen and the contact panel, so you can read exactly what Connect now holds at that tier — and forget it there too.

A rejection is not guidance. Rejecting a draft records a decision about one message and stops that message; it does not teach anything. If the reason will recur, the guidance has to be written down separately, which is the point made on [Approving and rejecting a draft](/docs/email/approve-reject/).

## How long it lasts

Until somebody forgets it. There is no expiry, and that is a deliberate trade: a direction that silently lapsed would be worse than one that outlived its usefulness, because the failure would be invisible. What keeps it honest is that memory is readable — a person can see every tier and remove anything at it.

For a direction that genuinely has a date on it — "say nothing about pricing until the first of next month" — pair it with a follow-up so somebody is asked to revisit, rather than trusting that a future reader will work out that the rule expired.

## Questions

### Does guidance override autonomy?

No. Autonomy decides whether Connect may send at all; guidance shapes what the message says. A thread under `ask_before_send` still waits for a person however precise the direction is, and a direction cannot grant permission it was not given.

### Will guidance apply to a draft that has already been written?

Not by itself — an existing draft is a finished artefact. Regenerate it if you want the new direction reflected, which is the trade described on [Regenerating a draft](/docs/email/regenerate-draft/).

### Where can I see everything Connect has been told about one customer?

The memory viewer opened from that contact shows every tier that applies to them, including the empty ones, and lets you forget any single row. Reading it before you add another direction usually prevents the contradiction you were about to create.

## Related

- [Memory in Connect](https://connectbyjbrh.com/docs/memory/)
- [How a reply is drafted](https://connectbyjbrh.com/docs/email/draft-generation/)
- [Approving and rejecting a draft](https://connectbyjbrh.com/docs/email/approve-reject/)
- [What Connect may do](https://connectbyjbrh.com/docs/autonomy/)
- [Making a correction actually change behaviour](https://connectbyjbrh.com/research/memory-correction-that-sticks/)

## What this page is based on

- GENERAL.md §6 — memory, four tiers, `tiers()` and `directives()`
- GENERAL.md §5 — autonomy scopes, narrowest first
- `backend/app/connect_memory.py`
- `webapp/src/features/memory/viewer.js`
