# Memory vs opportunity

> People and posts go in opportunities; conclusions, decisions, drafts and rules go in memory.

URL: https://mcp-docs.opennomos.com/docs/growth-loop/memory-vs-opportunity

Both are project-scoped and both persist across sessions, so it is easy to put the same thing in both and then maintain it twice. Use this split.

| Put it in… | When it is… | Examples |
| --- | --- | --- |
| **Opportunity** (`track`, `log_action`) | A specific person, post, community or partner you may act on, with a state that changes. | A Reddit thread to reply to. An X account to DM. A newsletter owner you pitched. |
| **Memory** (`memory_add`) | A conclusion, decision, rule, insight or draft: text that stays true without a stage or a due date. | "r/SaaS removes self-promo; reply with help first." "We only talk to people with under 5k followers." A draft reply you have not sent. |
| **Experiment** (`track`) | A bounded attempt on one channel with a metric and a deadline. | "Helpful replies on Reddit for 14 days; stop if fewer than 2 people agree to talk." |

## Rules of thumb

- **A list of people is not a memory.** A 30-person shortlist as one memory entry hits the 4096-byte limit and cannot be filtered or followed up. Make 30 opportunities, put the shared criteria in one memory.
- **Memory references, opportunities hold.** If a memory needs to point at a person, quote the opportunity `id` or URL rather than copying the details. There is no foreign key; this is a convention.
- **When the state changes, it is an opportunity.** If you would write "contacted on Tuesday, follow up Friday", that is `log_action`, not a note.
- **When it is a lesson, it is memory.** After an experiment, save what you learned as a memory (for example `kind: "decision"`) and record the experiment decision with `track`.
- **Drafts live in memory** (there is no draft field on an opportunity). Tag them, for example `["draft", "reddit"]`, and forget them once sent.

## What opportunities can hold today

| Field | Notes |
| --- | --- |
| `title`, `url` | A title or a URL is enough. The URL is normalised (Reddit, X and Xiaohongshu post ids; tracking parameters removed) so the same post is never tracked twice. |
| `kind` | Free text, default `other`. |
| `summary` | Up to 500 bytes of free text. Anything numeric (followers, engagement, tier) has no structured field yet: put it in `summary` or `tags`. |
| `tags` | Up to 20, each up to 60 characters. |
| `priority` | −1, 0 or 1. |
| `stage`, `next_followup` | See [Concepts](https://mcp-docs.opennomos.com/docs/start/concepts.md) and [log_action defaults](https://mcp-docs.opennomos.com/docs/growth-loop/log-action.md). |
| `experiment_id` | One experiment per opportunity. |
| `source` | Free text, for example the tool that found it. |

<Callout type="info" title="Known gaps">
There is no batch stage change (each opportunity is moved by its own `track` item or `log_action`; `track` takes up to 20 items per call), no structured metrics or evidence field, no filter by tag or platform other than paging `get_briefing` with `focus=pipeline`, and one experiment per opportunity.
</Callout>
