remember
Save decisions, conventions, and preferences to persistent memory; reusing a key updates the entry, while unsafe content is refused with a reason.
Instructions
Save knowledge to persistent memory. Use for decisions, conventions, preferences. UPSERT by key — calling with same key updates the existing entry. Content is screened on write and REFUSED with a named reason (never silently stripped or stored) if it contains invisible/bidi characters, an LLM role tag, an instruction to ignore previous/system instructions, a PEM private key, a prefixed API token (sk-/ghp_/xox*/AKIA), or a literal assignment to a *_PASSWORD/_SECRET/_TOKEN/_API_KEY name. LIMITATION — this screen is partial and must not be relied on as a secret filter: it CANNOT see a secret that has no recognisable prefix and no field name next to it (a bare value pasted on its own line), nor names it does not know. Do not paste credentials here on the assumption they will be caught; record where a secret lives, never its value.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Slug key for UPSERT (e.g. 'api-convention', 'license-decision'). ENFORCED server-side as ^[a-z0-9][a-z0-9-]*[a-z0-9]$ — lowercase alphanumeric and hyphens only, at least two characters, no leading or trailing hyphen. Hyphens, NEVER colons: a colon-delimited key such as 'episode:alice:2026-09-07' is REFUSED with a validation error — it is not normalised or accepted with a warning. | |
| tags | No | Tags for categorization and filtering. A kind: tag also SETS importance_score, which is what decides whether recall returns this entry at its default threshold of 0.3 — so the tag you choose is a retrieval decision, not a label. Base score by kind: kind:pinned 1.0, kind:incident 0.85, kind:decision 0.80, kind:preference 0.80, kind:learning 0.70, kind:fact 0.60, no kind: tag 0.50, kind:session-checkpoint 0.30. kind:session-checkpoint is a DOWNGRADE that overrides every other kind: tag on the same entry — tagging it alongside kind:decision yields 0.30, not 0.80. Any kind: value not in that list (e.g. kind:canonical-decision) is unrecognised and scores 0.50. Two boosts of +0.10 each, capped at 1.0: content mentioning icp / architecture / license / security / money, and a relevance:<n> tag whose n is >= 0.8. | |
| scope | No | workspace | project | agent (default: project). | |
| reason | No | Why this memory is worth writing — what a future thread should be able to do with it, or what changed if you are correcting an existing key. Recorded on the revision alongside the content, so a later reader can judge whether the entry still applies instead of guessing from the text alone. Optional today and about to become required; write it now. | |
| content | Yes | What to remember (markdown). | |
| relevance | No | Relevance score 0-1 (default 1.0 when omitted). NOT the same field as importance_score: relevance is a caller-set ranking hint, importance_score is computed from tags (see tags) and is the field min_importance filters on. A relevance:<n> TAG with n >= 0.8 does feed importance_score by +0.10; this numeric parameter does not. | |
| thread_id | No | Thread identifier for same-session memory grouping. Auto-populated from the runner state file when omitted. | |
| expires_at | No | RFC3339 timestamp or Go duration (e.g. '72h') when this memory should expire. | |
| project_id | No | Project ID (required for project scope). | |
| source_url | No | Optional URL/path to the source of this knowledge (task ID, PR, file path). | |
| attach_context | No | When false, disables auto-injection of thread_id and source_task_id. Use for cross-cutting records not tied to the active task. | |
| source_task_id | No | UUID of the Mesh task that produced this memory. Auto-populated from the runner state file (FIDDLER_STATE_FILE) or the active checkout. Enables Amendment 2/3 KG edge hooks. | |
| expected_version | No | Make the write conditional: it succeeds only if the stored version still matches this number, and is REFUSED with both version numbers if someone else wrote to the key in between. Pass the version returned by your previous remember/recall of this key. Omit for last-write-wins. |