Project Memory
project_memorySave project notes that must survive this chat — rules, conventions, decisions, gotchas, preferences. Writes notes. Does not read source files. ALWAYS call when they say remember, save this, don't forget, write this down, keep this, my rule, our convention, I always want, last time, what did we decide, what did we save, show me what we stored, or you just learned something that will be gone when this session ends. PREFER this over hoping the next chat still has it. Chat memory dies when the session ends. This does not. One folder can hold many notes (up to 200). Each note is title + content (up to 2000 words) + type. Write the rule and the why — not a one-liner. type=decision|gotcha|goal|preference|area_fact|convention. area= the topic (auth, billing, deploy). tags= keywords that make it findable later (jwt, cookie). action=remember saves the note. action=recall searches title, body, area, and tags and returns matches[].content — read that text and use it. action=list shows recent notes (title, type, area, tags, preview of the body) so you can see what is stored. action=forget deletes by id. Pass limit up to 20 when they want more than a handful. One folder is one set of notes. Different folders never mix unless they ask (scope=all). Omit path on stdio (this folder) or pass that folder. Hosted: pass the same folder string every time. Stdio stores on their machine (/.zephex/memory). Hosted stores in their cloud account. Empty matches means nothing was saved for that query — do not invent a past note. If they ask what we saved, call list or recall. Example: project_memory({ action: "remember", title: "Auth is cookie JWT", content: "Session in httpOnly cookie; refresh on /api/auth/refresh. Do not store access tokens in localStorage.", type: "gotcha", area: "auth", tags: ["jwt","cookie"] }). Find it later: project_memory({ action: "recall", query: "auth cookies" }). See what is stored: project_memory({ action: "list", limit: 10 }).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Required for forget. Memory uuid. | |
| area | No | Subsystem label (auth, billing, deploy) — included in search index for scoped recall. Max 64 chars. | |
| path | No | Folder these notes belong to. Same string on remember, recall, and list. Stdio: optional (editor cwd). Hosted: reuse that folder string (or normalized_path from remember). | |
| tags | No | Optional lowercase tags. Max 10. | |
| type | No | Required for remember. decision=chose an approach; gotcha=non-obvious bug; goal=what we are building toward; preference=user style; area_fact=fact about a subsystem; convention=naming or process rule. | |
| limit | No | recall/list cap. Default 10, max 20. | |
| query | No | Required for recall. Short keywords from the title or topic (e.g. auth middleware stripe). | |
| scope | No | project=this folder only (default). personal=notes that apply everywhere. all=every project — only when they ask to search everything. | project |
| title | No | Required for remember. Max 80 chars. | |
| action | Yes | remember=save a note, recall=search notes and return full content, list=recent notes with preview, forget=delete by id | |
| content | No | Required for remember. Up to 12000 characters (~2000 words). Write the why and the trap — not a one-liner. | |
| written_by | No | Who authored this memory. | agent |