The growth loop
Memory vs opportunity
People and posts go in opportunities; conclusions, decisions, drafts and rules go in memory.
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
idor 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 withtrack. - 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 and log_action defaults. |
experiment_id | One experiment per opportunity. |
source | Free text, for example the tool that found it. |
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.