Troubleshooting¶
A saved CLI setting is not taking effect¶
Run memorizz config path to see the save target and memorizz config get KEY
to compare the effective source with the saved value (credentials remain
hidden). Process exports take precedence over project .env, which takes
precedence over the shared Memorizz file. Use memorizz config set KEY --project
to edit an intentional project override, or update/unset its shell export.
An empty assignment in a project .env also masks a shared value.
Restart after config set or memory configure; they do not reconnect a
running agent or migrate its memory. /config shows the active provider.
/provider selects the LLM, /memory selects a memory ID, and
/memory-provider configures memory storage for the next launch.
For Notion, run memorizz notion connect to check the exact shared library and
select the vector backend. /login notion saves NOTION_TOKEN, not NOTION.
A 404 can mean the connection cannot access the page/database: share it with
the connection, even if you can open it in your browser. Setup's read-only
check is not a write-permission or vector-service readiness test.
If a save fails, inspect the shown target's permissions, invalid dotenv syntax or symlinks. Nothing is overwritten on a failed atomic config save. Hidden input requires an interactive terminal; use a secret manager/process export in headless environments. Never pass a credential as a command argument.
Start with the two structured diagnostics:
For Oracle, also run memorizz oracle preflight --json.
Agent has no model¶
Symptom: creation succeeds with --no-llm, but execution reports that no LLM
is configured.
Configure a provider in the process environment or rebuild/update the agent
with an llm_config. A no-LLM agent is useful for configuration and discovery,
but it cannot execute a turn.
Ollama repeats its persona or ignores a new question¶
Check ollama ps for the active context size and the Ollama server log for
truncating input prompt. Earlier Memorizz versions reported a 128,000-token
window without sending num_ctx to Ollama. The daemon could truncate the agent
instructions, tool schemas, or conversation using a much smaller window.
The Ollama provider explicitly requests a window and uses that same value for
history budgeting: the model's own context length when its attention cache fits
in a quarter of this machine's RAM (otherwise the largest standard size that
fits, at least 16,384 tokens), or 8,192 when the daemon does not report one. Set context_window_tokens in the
model configuration, or OLLAMA_CONTEXT_LENGTH before launching the CLI, to
choose another window. Resuming the CLI or switching models refreshes the history
budget. See model configuration.
If a local model answers directly during the private tool phase, the streaming loop now checks completion requirements and proceeds to public generation with tools disabled. It does not repeatedly demand the internal finalization tool. See the streaming contract.
Context budget or incomplete-answer errors¶
context_window_exceeded: the instructions, tools and current question do not fit in 80% of the context window. The log line gives the tokens needed and the budget. Increasellm_config["context_window_tokens"](num_ctxfor Ollama) within your model's capacity, or shorten supplied context. Older conversation turns are removed first; the current question and its tool evidence are preserved. Agents saved by earlier releases could keep an 8,192-token cap after their model setting changed; a window set inllm_confignow takes precedence over that saved value.empty_response: the model returned no answer. Retry or select another model.provider_length: increase the provider's output-token limit (num_predictfor Ollama,max_tokensormax_completion_tokensas supported by the provider), or ask for a shorter answer.
These errors do not count as completed answers and are not cached. Streaming
retains any partial text already displayed. Synchronous run() raises
ProviderStreamError with the same code.
Semantic recall or cache is degraded¶
Filesystem persistence works without an embedder. Semantic retrieval and semantic cache require a compatible embedding provider.
For a local setup:
For OpenAI embeddings, set OPENAI_API_KEY and configure the model/dimensions.
Never change dimensions against existing vector columns without a migration.
A saved agent is not visible¶
The SDK, CLI, UI, and MCP server must use the same memory provider and
MEMORIZZ_HOME. Use build_and_save() or build(persist=True); build() alone
creates only a runtime object.
Memory appears to cross or disappear between users¶
Pass user_id, memory_id, and thread_id explicitly on every shared-service
request. user_id=None selects anonymous/legacy rows; it is not a wildcard.
See multi-tenant applications.
Semantic cache returns stale business data¶
Similarity does not establish freshness. Mark side-effecting tools correctly, set data-version/domain metadata, use domain freshness limits, and invalidate a domain when its source changes. See production governance.
MCP reports authorization_required¶
The endpoint is reachable but the remote grant is incomplete. Finish OAuth or
configure the expected bearer credential. approval_required is different: it
means MemoRizz paused a mutating call for a host decision.
For local services, private-network access must be an explicit operator choice. For remote services, use HTTPS and review host/stdio allowlists. See MCP connectivity.
MCP mutation never executes¶
List, approve, and resume the exact durable proposal:
memorizz mcp approvals --status pending
memorizz mcp approve PROPOSAL_ID --approver operator@example.com
memorizz mcp resume PROPOSAL_ID
Expired, rejected, consumed, owner-mismatched, or argument-mismatched proposals fail closed.
UI returns 401 or blocks writes¶
When MEMORIZZ_UI_AUTH_TOKEN is set, sign in with that token or supply it as a
Bearer credential. MEMORIZZ_UI_READ_ONLY=true intentionally blocks agent
creation, approvals, and provider mutations. See
observability and trace inspection.
Oracle connection, vector, or index errors¶
Use preflight to check the DSN/service, PDB state, schema privileges, ONNX
model, vector dimensions, index state, and VECTOR_MEMORY_SIZE.
ORA-51803: configured embedding dimensions do not match the vector column.ORA-51962: vector memory is insufficient; usenone/lazyindexing or ask a DBA to resize it.
Follow the Oracle troubleshooting guide.
E2B or browser control is unavailable¶
- E2B validates
E2B_API_KEYat construction. Confirm the sandbox extra and key are present. - Browser Use should be installed in an isolated tool environment. Run
browser-use doctorand inspectagent.capability_report().
Browser Use has its own model configuration. An Ollama chat session does not
supply credentials for its default OpenAI browser model. If enabling it reports
OPENAI_API_KEY is required, configure that key or select another supported
browser model provider with MEMORIZZ_BROWSER_USE_LLM_PROVIDER and its matching
credentials. This configuration error does not disable ordinary chat.
See E2B and browser control.
Desktop control cannot read or operate an app¶
Run memorizz desktop doctor. It names the app macOS asks about (the one
MemoRizz runs in) and whether it has Accessibility and Screen Recording
permission; --ask shows macOS's prompts. Turn on that app under System
Settings → Privacy & Security, then restart it. Some Electron apps, Notion's
desktop app among them, expose no content to Accessibility at all; use their
MCP server instead. See desktop control.
An agent harness reports authentication_required¶
Run memorizz harness doctor HARNESS --json and follow its remediation field.
Claude Code requires ANTHROPIC_API_KEY or an enabled Bedrock, Vertex, or
Foundry mode because MemoRizz uses --bare. Codex can use an authenticated
CODEX_HOME session, and OpenHands can use provider/CLI configuration, so a
missing environment key alone does not incorrectly mark those adapters failed.
SDK, CLI, UI, and MCP return the same typed, secret-free error. Rotate or revoke credentials in the provider, never paste them into a task, notebook, trace, or support report.
Provider errors during streaming¶
The event stream ends with a single run.done event. On a provider failure
its status is error and error_code says why, after any text already
delivered:
with agent.run_stream_events(query) as events:
for event in events:
if event["type"] == "answer.delta":
print(event["delta"], end="")
elif event["type"] == "run.done" and event["status"] == "error":
raise RuntimeError(event["error_code"])
Preparing a useful bug report¶
Include:
- MemoRizz version and
capabilities --jsonwith identifiers reviewed; - Python and operating-system versions;
- selected provider and secret-free preflight output;
- the smallest reproducing code sample;
- the typed error code and traceback; and
- whether the problem reproduces with filesystem memory.
Never attach .env, OAuth tokens, database passwords, raw production traces,
or benchmark datasets containing restricted data.