reasoning
Record the thinking behind a conclusion—hypothesis, method, result, revised belief—so future sessions reuse the analysis, not just the fact.
Instructions
Record an analysis worth keeping: what was thought, and what it settled.
For the PROCESS, not the fact it produced -- note() takes the fact. Stored as type='reasoning'; filter search/list_* with type='reasoning' to get these back. ONE analysis per memory: a second hypothesis tested in the same session is its own reasoning().
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| also | No | other domain paths this belongs to, comma-separated: the subjects that cut across the tree `domain` sits in, such as the end-to-end flow a routine is one step of. Every read scoped to one of them returns it. A path `domain` already sits under is dropped as redundant. At most 200 characters each. | |
| tags | No | comma-separated keywords and synonyms. Retrieval is BM25 over content, tags and domain paths, and tags weigh second only to the body, so they make a memory findable by words its own text never uses: the identifier, the error string, the plain phrasing someone will type. A memory with none is reachable only by quoting itself. At most 1000 characters. | |
| title | Yes | one line naming what this memory is about, in the words someone would look for it by. A list shows it instead of the opening of the body, and it outweighs every other field in search, so a title that repeats the type ("note about the parser") names nothing. At most 120 characters; a name that needs more is summarizing the body. | |
| domain | No | the subject this belongs to, as a path from the outermost scope in ('acme/x100/p200'). File it as deep as the fact is specific -- a note about one routine goes on the routine, and still comes back when someone asks about the module or the product above it. At most 200 characters. | |
| result | Yes | what came back. The measurement, not the interpretation. | |
| session | No | groups what one conversation writes. Leave it empty to use this server process's own stamp. | |
| next_time | Yes | what someone hitting this again should do differently. | |
| reasoning | Yes | how you tested it -- what you read, ran or compared. | |
| hypothesis | Yes | what you believed going in, as a claim that could be wrong. | |
| source_ref | No | what the fact came FROM -- a path, a URL, a table name -- so a later pass can check the claim against the thing itself instead of inferring what to check from the wording. At most 500 characters. | |
| review_after | No | when this stops being safe to trust unchecked, as a date ('2026-11-01') or a span from today ('90d'). pulse() counts what is overdue in a scope as `scope.stale` and optimize_scan lists it. Leave it empty for anything that does not go stale -- most facts do not, and a date nobody meant is worse than none. | |
| revised_belief | Yes | what you believe now, and where it differs from the hypothesis. Say plainly when the hypothesis survived unchanged. |