PAMbaseDocs
Guide

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.

Prerequisites

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

ScopeWhy
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.

typescript
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.

typescript
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.

Scope notes by project

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.

Next

Remember & recall · Scope catalog · How memory works