Skip to content

Error codes

1. Why they are append-only

Append-only. Once shipped, a code’s meaning never changes and a code is never removed; new conditions get new codes. Agents branch on code, never on the human error string, which changes freely as wording improves.

2. The codes

The sources ship the codes as a bare list, and no sentence in them states what any one code means. So the columns below are the ones the sources do state: the typed domain failures the CLI translates into each code, the suggestions it offers for those failures, and every file that names the code. A row with an empty second and fourth column is a code the sources name only in the vocabulary list.

Code From these failures Suggestions Named in
ERR_UNKNOWN_COMMAND - none apps/cli/src/help.ts, apps/cli/src/run.ts
ERR_MISSING_ARGUMENT - none apps/cli/src/apply.ts, apps/cli/src/help.ts, apps/cli/src/run.ts
ERR_INVALID_FLAG - none apps/cli/src/apply.ts, apps/cli/src/help.ts, apps/cli/src/integrations.ts, apps/cli/src/run.ts
ERR_UNEXPECTED_ARGUMENT - none apps/cli/src/help.ts, apps/cli/src/run.ts
ERR_REPO_REQUIRED - none apps/cli/src/help.ts, apps/cli/src/run.ts
ERR_PATH_NOT_FOUND PathNotFound memhtml resolve <the path you cited> — a correction or an eviction may have moved it, memhtml search <what you were looking for>, memhtml list apps/cli/src/apply.ts, apps/cli/src/errors.ts, apps/cli/src/exec.ts, apps/mcp/src/failure.ts, apps/mcp/src/resources.ts
ERR_INVALID_MEMORY InvalidMemory memhtml manifest apps/cli/src/errors.ts, apps/mcp/src/handlers.ts
ERR_DUPLICATE_CONTENT DuplicateContent memhtml read <path> apps/cli/src/errors.ts
ERR_WRITE_CONFLICT WriteConflict memhtml read <path>, memhtml correct <path> --title <title> --claim <sentence>, re-apply the change to current content apps/cli/src/errors.ts
ERR_DIRTY_TREE DirtyTree git -C $MEMHTML_ROOT status, commit or stash the changes, then retry apps/cli/src/errors.ts
ERR_INDEX_STALE IndexStale memhtml index rebuild apps/cli/src/errors.ts
ERR_EMBED_MODEL_MISMATCH EmbedModelMismatch memhtml index rebuild --embed apps/cli/src/errors.ts
ERR_MODEL_UNAVAILABLE ModelUnavailable retry: search still works on the lexical floor, memhtml status apps/cli/src/errors.ts
ERR_STORAGE StorageFailure none apps/cli/src/errors.ts, apps/cli/src/integrations.ts
ERR_GIT GitFailure none apps/cli/src/errors.ts
ERR_DISCRIMINATION_FAILED DiscriminationFailed memhtml eval discriminate, memhtml sleep review, git branch -D <run-id> apps/cli/src/errors.ts
ERR_UNKNOWN - none apps/cli/src/errors.ts, apps/cli/src/run.ts, apps/mcp/src/resources.ts
ERR_REBUILD_NO_EMBED_REFUSED RebuildNoEmbedRefused memhtml index rebuild --embed, memhtml index rebuild --no-embed --force, memhtml index embed apps/cli/src/errors.ts
ERR_UNKNOWN_HOST - none apps/cli/src/integrations.ts, apps/cli/src/run.ts
ERR_UNKNOWN_HOOK_EVENT - none apps/cli/src/run.ts
ERR_INTEGRATION_MODIFIED IntegrationModified memhtml integrations doctor <host>, memhtml integrations install <host> --force apps/cli/src/errors.ts

Every code is named somewhere in apps/cli/src or apps/mcp/src.

3. How a failure reaches a caller

The CLI translates every typed domain failure in one place, apps/cli/src/errors.ts. That translation covers every case: a failure it does not recognize becomes ERR_UNKNOWN, so a caller always gets a code to branch on. The JSON envelope gives the shape the code arrives in.

4. Provenance

A loader generates this page from apps/cli/src/envelope.ts while the site builds, so no file in the repository holds it: the mapping column is read from the translation’s own switch, and the last column is a census over apps/cli/src and apps/mcp/src. Change the registry and this page changes with it.