Notes.
Build a notes / productivity app whose entries become searchable memory — durable facts the user can recall from any connected app, not just yours. Write each note once; it's findable everywhere.
You have a connection token from the connect flow — the credential issued after the user grants access. It carries these scopes (per-app read/write permissions):
memory:write:note.*, memory:read:note.*.
Scopes to request
| Scope | Why |
|---|---|
memory:write:note.* | save notes as memory |
memory:read:note.* | search and resurface past notes |
The .* wildcard matches every sub-scope (e.g. note.work, note.personal) so one grant covers all your projects.
What to write
Remember each note as a durable memory, scoping each by project. The content is just natural-language text — no LLM required to write.
const res = await pambase.remember({content: "Draft the Q3 roadmap before the offsite.",kind: "goal",scope: "note.work",});// res -> { accepted: true, memoryIds: ["mem_…"] }
How to read — Pattern C
Fetch ranked rows with recall (full-text + semantic) and render them in your own UI. The scope filter is a prefix, so "note" matches every note.* sub-scope.
const { memories } = await pambase.recall({query: "roadmap offsite",scope: "note",limit: 10,});// memories -> [{ id, type, scope: "note.work", content, importance, occurredAt }, …]for (const m of memories) render(m.content, m.occurredAt, m.importance);
Proactive (optional)
Want to react when another app writes a note to shared memory? Subscribe to the memory.created webhook — a server-to-server callback PAMbase fires as memory is written — and refresh your UI or send a reminder.
Use sub-scopes like note.work and note.personal. A read scope of memory:read:note.* matches all of them, while a user can grant another app just memory:read:note.work. See remember & recall.