can1357/oh-my-pi · error
Memory artifacts are not available for this project yet. Run
Error message
Memory artifacts are not available for this project yet. Run a session with memories enabled first.
What it means
For the file-backed 'root' namespace, resolve gathers candidate memory roots (from the ResolveContext cwd or the live session registry). If none exist — no session context and no registered sessions, or no root directory on disk (anyExists stays false) — there are no memory artifacts to read, so it throws with this onboarding hint.
Source
Thrown at packages/coding-agent/src/internal-urls/memory-protocol.ts:340
throw new Error(
"Hindsight memories are not addressable via memory://. Recall results are final — use `recall` to search or `reflect` to synthesize. `read memory://<id>` is only available with memory.backend=mnemopi.",
);
}
if (mnemopiStates.length === 0) {
throw new Error(
`Unknown memory namespace: ${namespace}. Supported: ${MEMORY_NAMESPACE} (file-backed memory summary), or a mnemopi memory id when memory.backend=mnemopi is active.`,
);
}
const hit = tryResolveMnemopiMemory(namespace);
if (hit) return renderMnemopiMemory(url, hit);
throw new Error(
`Mnemopi memory ${namespace} not found in any scoped bank. Use \`recall\` to list available ids.`,
);
}
const roots = memoryRootsForContext(context);
if (roots.length === 0) {
throw new Error(
"Memory artifacts are not available for this project yet. Run a session with memories enabled first.",
);
}
let anyExists = false;
for (const root of roots) {
try {
await fs.stat(root);
anyExists = true;
} catch (error) {
if (isEnoent(error)) continue;
throw error;
}
const result = await tryResolveInRoot(url, root);
if (result) return result;
}
if (!anyExists) {View on GitHub (pinned to 9690622007)
Solutions
- Run a session in the project with memories enabled so memory artifacts are generated.
- Pass a ResolveContext with the correct cwd when invoking resolve outside a live session.
- Verify the memory root directory exists on disk for the project (restore it if deleted or re-run a session to recreate it).
Example fix
// before
await handler.resolve(parseInternalUrl("memory://root")); // no context
// after
await handler.resolve(parseInternalUrl("memory://root"), { cwd: projectDir, settings }); Defensive patterns
Strategy: validation
Validate before calling
const roots = context?.cwd
? [getMemoryRoot(getAgentDir(), context.cwd)]
: memoryRootsFromRegistry();
if (roots.length === 0 || !(await Bun.file(roots[0]).exists())) {
throw new Error("Run a session with memories enabled first");
} Try / catch
try {
return await handler.resolve(url, ctx);
} catch (err) {
if (err instanceof Error && err.message.includes("Memory artifacts are not available")) {
// bootstrap: run a memory-enabled session, then retry
} else throw err;
} Prevention
- Run at least one memory-enabled session in the project before reading memory://root.
- Pass a ResolveContext with cwd when invoking the handler outside a live session.
- Confirm the memory root directory exists and was not deleted or relocated.
When it happens
Trigger: Resolving memory://root/... when memoryRootsForContext(context) returns an empty list (no context.cwd and no registered sessions), or every candidate root path fails fs.stat with ENOENT.
Common situations: Querying memory:// in a brand-new project before any session with memories enabled has run; calling the protocol handler outside a session (SDK/embedding) without passing a ResolveContext; deleted or relocated .omp memory directory.
Related errors
- memory:// URL must resolve to a file or directory: ${url.hre
- unknown filetype: {ft_debug}
- Is a directory
- Too many levels of symbolic links
- {}: {error}
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/40adf5ce078db4d4.
Report an issue: GitHub.