Coding Agent Session Finder
code-yeongyu/oh-my-openagent
Finds, reads and reconstructs past coding-agent sessions across Codex, Claude, OpenCode, Senpi and many other local agent logs.
Persist and retrieve agent memory across sessions — recall via the three-stage protocol (structure route → semantic search → navigation fallback), read via memoryload, see the wiki structure via…
$ npx skills add Prismer-AI/PrismerCloud --skill memory -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Prismer-AI/PrismerCloud memory --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Prismer-AI/PrismerCloud.git skills-src && mkdir -p .claude/skills && cp -r skills-src/sdk/cloud/catalog/skills/memory .claude/skills/memory && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "memory" agent skill from https://github.com/Prismer-AI/PrismerCloud/tree/main/sdk/cloud/catalog/skills/memory into .claude/skills/memory/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "memory", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Prismer-AI/PrismerCloud/tree/main/sdk/cloud/catalog/skills/memoryType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Prismer-AI/PrismerCloud --skill memory -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Prismer-AI/PrismerCloud memory --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Prismer-AI/PrismerCloud.git skills-src && mkdir -p .agents/skills && cp -r skills-src/sdk/cloud/catalog/skills/memory .agents/skills/memory && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "memory" agent skill from https://github.com/Prismer-AI/PrismerCloud/tree/main/sdk/cloud/catalog/skills/memory into .agents/skills/memory/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "memory", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Prismer-AI/PrismerCloud --skill memory -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Prismer-AI/PrismerCloud memory --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Prismer-AI/PrismerCloud.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/sdk/cloud/catalog/skills/memory .cursor/skills/memory && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "memory" agent skill from https://github.com/Prismer-AI/PrismerCloud/tree/main/sdk/cloud/catalog/skills/memory into .cursor/skills/memory/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "memory", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Prismer-AI/PrismerCloud.git --path sdk/cloud/catalog/skills/memory--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Prismer-AI/PrismerCloud --skill memory -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Prismer-AI/PrismerCloud memory --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Prismer-AI/PrismerCloud.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/sdk/cloud/catalog/skills/memory .gemini/skills/memory && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "memory" agent skill from https://github.com/Prismer-AI/PrismerCloud/tree/main/sdk/cloud/catalog/skills/memory into .gemini/skills/memory/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "memory", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Prismer-AI/PrismerCloud memoryInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Prismer-AI/PrismerCloud --skill memory -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Prismer-AI/PrismerCloud.git skills-src && mkdir -p .github/skills && cp -r skills-src/sdk/cloud/catalog/skills/memory .github/skills/memory && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "memory" agent skill from https://github.com/Prismer-AI/PrismerCloud/tree/main/sdk/cloud/catalog/skills/memory into .github/skills/memory/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "memory", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Prismer-AI/PrismerCloud --skill memory -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Prismer-AI/PrismerCloud memory --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Prismer-AI/PrismerCloud.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/sdk/cloud/catalog/skills/memory .opencode/skills/memory && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "memory" agent skill from https://github.com/Prismer-AI/PrismerCloud/tree/main/sdk/cloud/catalog/skills/memory into .opencode/skills/memory/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "memory", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
memoryPersist and retrieve agent memory across sessions — recall via the three-stage protocol (structure route → semantic search → navigation fallback), read via memoryload, see the wiki structure via…
Memory is an agent skill from Prismer-AI/PrismerCloud. Persist and retrieve agent memory across sessions — recall via the three-stage protocol (structure route → semantic search → navigation fallback), read via memoryload, see the wiki structure via memorybrowse, write well-placed pages via memorywrite (including section-level append/rewrite), maintain via memorycurate. Use whenever the user asks to remember/forget something, when you need to look up past decisions or context, or when episodic state matters beyond the current turn. Primary surface is the NATIVE…
Its SKILL.md is about 7.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 12 other files, including reference files (for example `references/llm-wiki/GUIDE.md`, `references/llm-wiki/NOTICE.md` and `references/llm-wiki/scripts/lint_wiki.py`).
It sits in Agent Workflows, covering Agent memory. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit e5d9444. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (Python), which the agent can run.
Shell commands in SKILL.md call:
gitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Memory loads about 7.9k tokens when it runs, and up to ~15k if it reads all its reference files. Until then it costs about 154 tokens; SKILL.md has 4,017 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from Prismer-AI/PrismerCloud at commit e5d9444, republished under its MIT licence (© Prismer-AI). 4,017 words, ~7,898 tokens.
.claude/skills/memory/SKILL.md (or your agent's skills folder). This skill also uses 8 other files; get the full folder from GitHub.For an explicitly requested Markdown wiki artifact, read
references/llm-wiki/GUIDE.md relative to this skill. Its schema, provenance,
contradiction and lint workflow operates only in the user-selected project/vault;
it does not replace the platform memory tools or create a default home wiki.
Use this skill for durable episodic memory — facts, decisions, feedback, and project
context that need to survive across sessions. Memory has four canonical types: user,
feedback, project, reference. Pages live at semantic paths and are organized as a
wiki: an INDEX.pkf at the top, hub pages per topic, and leaf pages under hubs.
Richness is the goal. A memory page should be complete enough that a future session works FROM the page instead of re-reading the raw file or the internet. There is no length budget on ordinary pages — the only waste is repetition (re-extracting what is already distilled, re-querying pages already in your context).
Seam — memory content is PKF; the write invariants are embedded below. The full body syntax (sections, data views, media, math, harness), validation and projection belong to the
pkf-writingskill, but this skill carries the MANDATORY write invariants inline (see PKF body standard below) so a write is safe even whenpkf-writingis not loaded. This skill decides WHAT to remember, WHERE it goes, and HOW the graph is maintained.
Answer a workspace-knowledge question by walking these stages. Stop at the first stage that answers it; never skip straight to guessing.
STAGE 1 — STRUCTURE ROUTE (first round is hybrid). The first round of any recall is hybrid — two calls in the same round, never one instead of the other:
memory_browse — the root structure surface: {index, hubs[{path,title,pageType,snippet,updatedAt}], hubsByRecent[], nearest[]}. Hub order
has two views: hubs[] is the structural order (the order the workspace
publishes; today hub rows are ordered by the hub's own updatedAt DESC — that IS the
structural-order baseline); within a hub, its children come updatedAt DESC. Each hub
row carries subtree freshness — updatedAt = the most recent write under that hub
(the hub row's own updatedAt spread with its direct children's). hubsByRecent[]
repeats the same hub set in recency order (subtree updatedAt DESC) — the "what
changed" signal; the two orders differ exactly when a child page was written more
recently than its hub row. There is no memory_recent tool — recency is a signal
ON browse results, not a query surface. Hubs are routing pages: their job is to tell
you which leaf to open.memory_search — extract ≥2 phrasings of the turn's terms into queries[]
(≤8, returned grouped in resultsByQuery): one round trip, several recall intents.
When the turn has no lexical terms ("what changed recently?", "what's the team up
to?"), the batch degrades but still runs — the signal query executes anyway.Both question types are covered in one round. Term-bearing questions are covered by the batch search; termless questions have exactly the structure surface as their search space — term extraction necessarily spins empty on them, so the root browse is what catches them.
Exemption — one, and tight: the digest names the answer. The stable memory map
(INDEX-TOC + one line per hub) injected at turn start under "Memory Map (auto — stable
digest)" lets you skip the hybrid round ONLY when it names the answer outright — the
exact hub or page the answer lives in, loadable directly. A passing one-line mention
is NOT coverage: if the digest only mentions the hub or topic, the hybrid first round
still runs. Structural facts the digest itself states (which topics exist, what a hub
covers, where a topic's children live) are answered from the map, and memory_browse
with the topic as query serves follow-up structure questions on demand.
STAGE 2 — SEMANTIC SEARCH (the hybrid round's hits). The batch queries[] leg
answered the term-bearing side; its hits are your decision payload — hop-decision
fields tell direct-read vs multi-hop, and the browse-root live structure (including its
recency signals) tells where to wander next. Read each hit's hop-decision fields before
deciding what to do:
| Field | What it tells you |
|---|---|
tier | wiki = distilled/curated page (highest trust); asset = a raw span a distilled page already cites via derived-from (middle); raw = the upload's own text, no synthesis (lowest — verify before relying on it) |
hubPath | the hub this page hangs under — a wiki hit is context for its whole hub, so a near-miss here often means the ANSWER is a sibling leaf |
childrenCount | how many pages fan out under this hit (>0 ⇒ it is a hub you can walk down) |
outboundPreview / inboundLinkCount | where the page points / how linked it is — the cheap next hop |
sectionAnchor + sectionPreview | the exact section that matched — read THAT, not the whole page |
memory_search returns ranked hits with lexical evidence (the query matched the
page). A high-rank wiki hit is usually the answer; memory_load the page (or just the
#section) when the snippet is not enough.
STAGE 3 — NAVIGATION FALLBACK (miss). When your wording matched nothing — or only
grazed unrelated pages — the response carries navigation instead of a longer hit
list:
navigation: { reason: 'text-miss',
startPoints: [{ path, title, pageType: 'index'|'hub', childrenCount, why: 'structural-entry' }],
guidance: '…' }startPoints are starts, not answers — there is no rank among them, so never read
them as scored hits and never quote one as the answer. They are the workspace's routing
entries (INDEX + hubs, children-rich first). Walk them:
memory_browse
with the hub as query, or memory_load the hub — its TOC lists its children).memory_search with the candidate topics as
queries[], or memory_load each page. Load the section, not the whole page, when
the TOC gives you an anchor.memory_load returns the page's links) until a page actually
carries the answer.If the walk finds nothing, the knowledge does not exist yet — say so, and consider writing it (see Write flow) rather than answering from thin air.
| Tool | What it does |
|---|---|
memory_search {query, queries?, limit?, pageType?} | Semantic/FTS recall + batch; ranked hits with the hop-decision payload, or navigation start points on a miss |
memory_load {uri?, path?} | Read one page (or one section via #anchor in the uri) → {page, content, links} — links are the page's outbound graph edges |
memory_browse {query?} | See the structure BEFORE writing → {index, hubs[{path,title,pageType,snippet,updatedAt}], hubsByRecent[], nearest[]} |
memory_write {path, content, title?, parentHubPath?, relation?, op?, section?} | Create, extend, or section-edit a page; parentHubPath attaches it under a hub; op="append-section" / op="rewrite-section" + section edit ONE section (see Write flow) |
memory_curate {op, ...} | Maintenance verbs — see the memory-dream skill (write ops are orchestrator-gated) |
<!-- GENERATED:tool-params:start -->
<!-- ⚠️ GENERATED BLOCK — do not hand-edit. -->
<!-- Regenerate: npx tsx scripts/memory211/generate-memory-tool-contract.ts -->
Parameter names below are EXACTLY what the tools accept (trailing * = required).
memory_search: query* · queries[] · limit · sourceWorkspaceId · pageType[]memory_load: uri · workspaceId · sourceWorkspaceId · pathmemory_browse: querymemory_write: path* · content* · title · parentHubPath · relation (child-of|related) · op (replace|append-section|rewrite-section) · section · visibilitymemory_curate: op* · pageId · childPaths[] · reason · kind · limit · section · targetSection · sourcePageId · sourceSection · mergedContent · supersededByPageId · supersededBySection · linkId · toPageId · toPath · toSection<!-- END GENERATED BLOCK -->
<!-- GENERATED:tool-params:end -->
web_load (the workspace URL loader) also accepts prismer://asset/… and
prismer://…/file/… URIs — when a memory page points at an asset, load the asset
on demand through it instead of asking the user to re-attach the file.
PKF is the content format, not a fourth carrier. A valid PKF report remains authoritative in its message-inline block or Library Asset. For message-inline delivery, the Runtime passes the validated PKF source and its Markdown projection into the normal post-turn Memory classifier automatically: durable conclusions are distilled through the same browse-first placement flow, while transient report content yields no Page. Do not ask the user for a second format choice and do not exact-copy the report merely because it is PKF. Dream still reads authoritative Memory Pages only.
memory_write flow — typed source
pointer, never the whole report.cloud pkf materialize (message/block
revision, source hash, explicit .pkf path, idempotency key, --confirm-path); no
native memory_* shortcut, no generic Asset→Memory exact-copy. Read back the receipt;
exact-copy is an exceptional authority transition, not the searchability path.Once either route creates/updates a Memory Page, curation operates on that Page's graph, revisions and PKF body—not on its former carrier.
A deliverable YOU produced this turn gets an immediate three-way decision: extend the existing page at section granularity, attach a new leaf under the best hub, or SKIP — skipping is a first-class outcome (a one-off answer is not knowledge). Deliverable-derived pages follow the copy + reference doctrine: they may carry the source's near-full content so a future session works FROM the page instead of re-opening the asset, and they MUST carry the typed references — exactly ONE <a rel="derived-from" href="prismer://asset/<assetId>"> pointer, section-anchored <a rel> edges, and the source's own vocabulary (proper nouns, codes/numbers, thresholds verbatim) so a paraphrase of the source is still findable. There is no length budget: token usage is recorded, never constrained. Pass deliverableSource: {assetId, contentHash, sizeBytes} on memory_write — the gate enforces the pointer (422 deliverable_pointer_missing), short-circuits a same-deliverable replay as a dedupe-hit, and routes an oversized source to sharding (422 sharding_required) instead of one giant page. memory_search an existing topic first and extend/supersede any page whose pointer cites a prior revision, never fork.
A source over 64K characters never becomes one page, and a distilled page stays
under 64K characters. The write gate rejects an oversized page with
422 sharding_required; the ingest pipeline plans the split for you (one structural
index page above a run of shard pages, shards/<stem>/shard-000.pkf …, boundaries
on content edges). The reference chain is mandatory and is what keeps a shard set
navigable:
index page --derived-from--> the source asset
shard page --child-of------> the index pageWrite one page per shard (same copy + reference rules), then the index page with its TOC. Never merge shards back into a single giant page.
memory_search + parameterless memory_browse.
Attached files are raw sources — check memory for existing
distilled knowledge before re-reading them. A memory hit is cheaper and already
synthesized; fall back to the raw asset only when memory misses (tier: 'raw' tells
you that you are reading the source, not the synthesis).Paths are workspace-relative and prefix-free — do NOT add a leading memory/:
decisions/llm-provider.pkf ← a leaf under the decisions topic
projects/desktop-202/decisions.pkf ← nested topic path
reference/platform.pkf ← a hub pageThe platform-owned onboarding seed uses reserved memory/onboarding/... paths; that is
not a pattern for agent-authored pages. Always reuse an existing returned seed path
verbatim if you extend one.
When extending or linking to an existing page, use its path exactly as returned by
memory_browse / memory_search — never re-derive or hand-normalize a path you saw
elsewhere. Path drift (adding/dropping a memory/ prefix, guessing .pkf suffixes) is
the top cause of dead links and dropped edges.
Writing memory is browse → decide placement → write → verify. Never write blind.
STEP 1 — CONSTRUCT. Extract the durable knowledge from the conversation and author
the page body in full (via pkf-writing: frontmatter with its one-sentence
description + sections + any rich content). Don't write a path-shaped stub.
STEP 2 — BROWSE. Call memory_browse with your topic as the query.
STEP 3 — DECIDE placement from what browse returned — exactly one of:
nearest) → you MUST extend it,
never fork a near-duplicate page. Decide at section granularity:op="rewrite-section" with that section's id);op="append-section" with a new section id).hubs) → write a new leaf attached to that
hub: pass the hub's path as parentHubPath.hub, a short #overview "what this topic covers" body), then write the leaf with
parentHubPath pointing at your new hub.NEVER write an orphan leaf — a new page with no hub attachment that extends nothing.
The platform rejects an unanchored new leaf with a placement_required error listing
the available hubs; if you see that error, re-browse and attach — do not retry verbatim.
STEP 4 — WRITE with the placement declared structurally, and validate the body via
pkf_validate BEFORE persisting (authoring loop from pkf-writing).
memory_write is a mutation: a response containing {"ok":true} means that revision
has already been written. For the same fact/path, do not call memory_write again in
this turn to polish, reformat, or “make sure”; that creates another authoritative
revision. Continue to STEP 5 and use the read surface for verification.
STEP 5 — VERIFY (optional but cheap). Use memory_load on the exact returned path
(or memory_search a key phrase) and confirm it comes back. Verification is read-only;
never rewrite a successful revision merely to verify it. Then report path + placement +
one-line description to the user.
Full syntax lives in the single-file pkf-writing SKILL.md; these five invariants a write must never violate:
REQUIRED frontmatter description (one sentence) — in the PKF frontmatter block alongside type (user|feedback|project|reference), title, pkfVersion "1.1"; the description feeds previews/TOC — never omit it (frontmatter 写法见 pkf-writing skill)。
Typed links target what actually exists — copy hrefs VERBATIM from memory_browse/memory_search/memory_load or asset resolver results, never hand-type; child-of points FROM child TO hub.
pkf_validate BEFORE memory_write — every time — repair ALL errors, then persist (the write gate rejects invalid v1.1 bodies anyway).
Browse-first + append governance (your operating directive's rules) — extend an existing page at section granularity (op="append-section"/op="rewrite-section"); new pages attach under a hub (parentHubPath); never orphan leaves or whole-page-rewrite another agent's page.
Evolution artifacts declare their kind (memory211/10 §2.1) — a body written by a
dream / proposal / frontier / ingest leg (not by a human, and not by you writing a page
someone asked for) must carry the metadata as a top-level memory key in the frontmatter script
(the parser files it under extra.memory — write memory, not extra; writing {"extra":{"memory":…}}
lands in extra.extra.memory and is read as no block at all):
<script type="application/prismer+json">{"type":"note","title":"…","description":"…","memory":{"memoryRole":"knowledge|procedure|action_result","source":"<where this came from, in words a human can read>"}}</script>.
memoryRole is a routing fact, not a label — knowledge is the target of self-directed recall,
procedure is what the first-round mixed browse hits, action_result is delivered by event
trigger. source is the provenance a human uses to decide whether the page may be deleted; an
artifact whose origin cannot be stated is one nobody can responsibly retire. Per-section
declarations go in memory.sections[], indexed by anchor — each entry carries its own
memoryRole + source (an entry missing either is rejected, same as the page-level block):
{"anchor":"renewal","memoryRole":"procedure","source":"<…>"}. A hand-written page needs none of
this — the gate only applies to the automatic legs. The write gate rejects an evolution
artifact without the metadata (evolution_metadata_required) and returns a verdict naming the
offending field: fix that field and resubmit — never drop the artifact silently.
If a pkf_validate-clean body is not achievable, do not persist it. Keep the draft in
the current response/working file, report the validation or capability failure, and
leave Memory unchanged; never fake a revision or bypass the write gate.
Relationships between pages are graph edges, not prose. Declare them structurally:
parentHubPath on memory_write — attaches the written page under a hub. Default
relation is child-of; pass relation="related" for a non-hierarchical association.childPaths on memory_curate(op="promote_to_hub") — attaches existing pages under a
newly promoted hub in one call (orchestrator convergence; see memory-dream).pkf-writing) with canonical hrefs
copied from browse/search/load results are also materialized into edges — fine for
supports / contradicts / related / references / cites cross-refs inside
prose. For hub attachment, prefer the structural parameters.Direction matters for child-of: the edge points FROM the child TO the hub.
parentHubPath gets this right automatically (the page you are writing is the child).
If you ever hand-write a child-of content link, it goes in the child page's body,
pointing at the hub — never the reverse. Hubs never declare child-of links.
INDEX.pkf: its authored semantic sections are agent/editor territory. Its
visible Contents is derived live from the child-of graph; Dream does not store
or rewrite an INDEX #toc. Change the graph, not a copied list.#overview: agent-owned prose—what the topic covers and how children relate.#toc: machine-owned strict PKF section, regenerated by
memory_curate(op="rebuild_index") from graph membership. Never hand-edit it.Thus rebuild_index is a legacy verb name: it rewrites hub TOCs and refreshes derived
structure, while INDEX Contents remains a read-time projection.
To add knowledge to an existing page, edit at section granularity — do not rewrite the whole page. Whole-page rewrites of pages another agent authored create version conflicts and clobber their content. The section ops splice ONE section cloud-side:
memory_write(path="decisions/database-choice.pkf", op="append-section",
section="revisit-2026-07", content="<section body per pkf-writing>")Default op is replace (whole page) — reserve it for pages you authored yourself.
memory_curate(op="candidates", kind="oversized") split suggestion.| Type | What it is | When to write |
|---|---|---|
user | Who the user is, role, preferences, expertise | When you learn role/responsibility/preference details that should shape future behavior |
feedback | Approach corrections + validated approaches | After a correction ("don't do X") OR a non-obvious approval ("yes that was right") |
project | Goals, deadlines, decisions, ongoing initiatives | When you learn who/what/why/by-when that isn't derivable from code |
reference | Pointers to external systems (Linear, Slack, dashboards) | When the user names a tool/channel and its purpose |
The type goes in the PKF frontmatter type field (the four canonical types above, or an
OKF subtype like decision) — the exact frontmatter shape is taught by pkf-writing.
pkf-writing, pkf_validate
passes before memory_write (a v1.1 invalid body is rejected at the write gate).feedback and project types, include a Why section and a How to apply
section so future-you can judge edge cases.navigation.startPoints as routing, never as results, and walk
them (children → batch read → links). Do not quote a start point as an answer.tier tells you what kind of lead:
wiki is curated, raw is somebody's upload — verify a raw hit before relying on it.memory_load returns the page's outbound links — follow them to navigate the graph.git log over
recalling activity-log memories.Memory reads/writes are adjudicated per request by the workspace Memory authority. The verdict you receive is final for that request:
orchestratorAgentId) — may curate the
shared graph (promote / supersede / rebuild — see memory-dream). It does
NOT automatically pierce member/deputy private scopes.Outcome discipline:
403 deny — final for this request. Do NOT retry verbatim, do NOT ask
another agent to read the target for you.202 approval deferred — the request waits on the data owner. Do NOT
re-issue it; the approval record already exists and re-submitting spams the
owner.suspended / reconciling / stale / authority
lease expired) — local reads fail closed until the replica reconciles.
Retry after reconcile; a fail-closed read is never "memory is empty".Role templates do not automatically grant a human principal: an agent whose
role mentions curation still needs the appointed orchestrator binding before
memory_curate write verbs succeed.
append-section / rewrite-section).#toc or storing a duplicate INDEX TOC.pkf_validate (the write gate will reject it anyway
— fix the diagnostics instead of retrying verbatim).navigation.startPoints as a ranked answer — they are routing entries;
the answer comes from walking them.sharding_required
is the gate telling you so), never truncate the knowledge to fit.After writing memory, echo the path, type, placement (which hub it attached under, or which page/section it extended), and one-line description back to the user so they can verify what got persisted.
After recalling, list match titles + paths + scores; do not paste full page content
unless the user asks — follow up with memory_load for any specific hit. If you
navigated from navigation.startPoints, say which start point led to the answer.
Code agents (claude-code / codex / opencode) running in a shell can use the prismer memory CLI — workspace + identity default from the agent env, output is JSON:
prismer memory recall "what database did we choose?" # = memory_search
prismer memory search --queries '["q1","q2"]' # batch recall, one call (daemon cuts at 8 + flags `truncated`)
prismer memory read "decisions/database-choice.pkf" # = memory_load (also path#section)
prismer memory load-batch <path1> <path2> ... # up to 10 pages in one call, per-path verdict
prismer memory list --page-type hub # hub listing
prismer memory write --path "<path>" --content '<PKF>' # = memory_write (content also via stdin)
prismer memory delete <pageId>prismer memory curate carries the maintenance verbs (candidates, promote-to-hub --child-paths, supersede, rebuild-index) plus the section-level ones
(section-merge, section-supersede, rewire) — --help lists each command's flags.
The CLI currently lags the native tools on browse (
memory_browsehas no CLI subcommand yet), so on the shell surface decide placement withlist --page-type hub+recall. Every OTHER write parameter exists on the CLI under its kebab-case name.
Replaces these v1.x built-in skills: memory-read, memory-write, memory-recall.
Compatibility alias: memory-curation (old slug/skillId/ACK resolves to this skill —
one canonical delivery).
© Prismer-AI, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 8 other files (references) in sdk/cloud/catalog/skills/memory of Prismer-AI/PrismerCloud.
Open the folder on GitHubat commit e5d9444
Memory next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Memory this skillPrismer-AI/PrismerCloud | 1.6k | — | ~7.9k | Automated safety check: Pass | MIT | |
| Coding Agent Session Findercode-yeongyu/oh-my-openagent | 70k | 1 repos | ~2.8k | Automated safety check: Pass | Custom licence | |
| Claude-Mem Cloud Syncthedotmack/claude-mem | 98k | 1 repos | ~1k | Automated safety check: Notes | Apache-2.0 | |
| Cognee CLI Memory Commandstopoteretes/cognee | 32k | 1 repos | ~2.2k | Automated safety check: Notes | Apache-2.0 | |
| Neat-Freak Knowledge CloseoutKKKKhazix/khazix-skills | 21k | — | ~1.9k | Automated safety check: Pass | MIT | |
| Claude-Mem Searchthedotmack/claude-mem | 98k | 1 repos | ~511 | Automated safety check: Pass | Apache-2.0 |
code-yeongyu/oh-my-openagent
Finds, reads and reconstructs past coding-agent sessions across Codex, Claude, OpenCode, Senpi and many other local agent logs.
thedotmack/claude-mem
Checks claude-mem cloud sync status and guides you through connecting a cmem.ai Pro account without the sync token ever passing through the chat.
topoteretes/cognee
Drives cognee from the terminal with remember, recall, forget and improve memory commands, dataset and config management and database migrations.
KKKKhazix/khazix-skills
Brings project docs, agent rule files, authorized memory and leftover workspace files back in line with what the code and runtime actually do at the end of a work session.
thedotmack/claude-mem
Searches the user's persistent cross-session memory for timestamped observations synthesized from past agent sessions on cmem.ai.
gastownhall/beads
Tracks multi-session work with dependencies in the bd issue tracker so the agent can find ready tasks and recover its context after conversation compaction.
Prismer-AI/PrismerCloud
Operates a mailbox from the terminal with the external Himalaya CLI over IMAP, SMTP, Notmuch or Sendmail, separate from any built-in email gateway adapter.
Prismer-AI/PrismerCloud
Walks an agent through creating, importing, editing, validating, testing and publishing Prismer Skills with a fixed workflow and bundled scripts.
Prismer-AI/PrismerCloud
Produces 3Blue1Brown-style explainer animations with Manim Community Edition for math, algorithms, equations and architecture diagrams, with planning and rendering references.
Prismer-AI/PrismerCloud
Generates one image from a text prompt with a bundled Node.js helper and delivers it once as the attachment to the current Prismer reply.
Prismer-AI/PrismerCloud
Fetches a YouTube transcript with a helper script and reshapes it into chapters, summaries, X threads, blog posts or timestamped quotes.
Prismer-AI/PrismerCloud
Creates or updates Prismer role templates from a persona, SOP or job description, and turns a role into a working agent that runs its first task through a bundled script.
Categories
Persist and retrieve agent memory across sessions — recall via the three-stage protocol (structure route → semantic search → navigation fallback), read via memoryload, see the wiki structure via…. Memory is an agent skill from Prismer-AI/PrismerCloud. Persist and retrieve agent memory across sessions — recall via the three-stage protocol (structure route → semantic search → navigation fallback), read via memoryload, see the wiki structure via memorybrowse, write well-placed pages via memorywrite (including section-level append/rewrite), maintain via memorycurate.
Memory fits situations like: the user asks to remember/forget something; you need to look up past decisions; episodic state matters beyond the current turn.
Run `npx skills add Prismer-AI/PrismerCloud --skill memory -a claude-code`. Or copy the skill folder (sdk/cloud/catalog/skills/memory in Prismer-AI/PrismerCloud) into .claude/skills/memory in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Prismer-AI/PrismerCloud --skill memory -a codex`. Or copy the skill folder (sdk/cloud/catalog/skills/memory in Prismer-AI/PrismerCloud) into .agents/skills/memory in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Prismer-AI/PrismerCloud --skill memory -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/memory, .gemini/skills/memory, .github/skills/memory and .opencode/skills/memory in your project.
Going by SKILL.md and its folder, Memory needs Python for the scripts in its folder and the command-line tools its instructions call (git). Our summary lists: Python 3; Node.js.
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Memory is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 7.9k tokens (SKILL.md is roughly 32k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 6.7k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Memory: Coding Agent Session Finder (code-yeongyu/oh-my-openagent, 70k stars), Claude-Mem Cloud Sync (thedotmack/claude-mem, 98k stars), Cognee CLI Memory Commands (topoteretes/cognee, 32k stars) and Neat-Freak Knowledge Closeout (KKKKhazix/khazix-skills, 21k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Prismer-AI (a GitHub organization) maintains it in Prismer-AI/PrismerCloud, which has 1,554 GitHub stars. The repository holds 88 skills in this directory. The repository was last updated on September 30, 2026.
Source: Prismer-AI/PrismerCloud on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.