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

  1. Run a session in the project with memories enabled so memory artifacts are generated.
  2. Pass a ResolveContext with the correct cwd when invoking resolve outside a live session.
  3. 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

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


AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31). Data as JSON: /api/errors/40adf5ce078db4d4. Report an issue: GitHub.