-
Notifications
You must be signed in to change notification settings - Fork 0
Troubleshooting
Most problems here are one of four things: the binary is not on
PATH, the store is not where you think, the backend cannot do what was asked, or a tool was called in a way its arguments do not allow. This page is organised by symptom.
sakur4d doctorThis reports the schema version, the store path and its size, the journal mode, the backend and what capabilities it actually detected, the tokenizer, and the embedder. If you are reporting a bug, this output is the single most useful thing to attach.
sakur4d doctor # the resolved configuration, and what it detected
sakur4d config claude # the configuration it would print for a harnessThere is no sakur4d status subcommand — this page said there was. Counts and coherence come from
doctor, or from the MCP tool sakur4.status, or from /sakur4 status in the OMP extension.
Symptom: Sakur4: no sakur4d binary found, or the plugin installs and its tools never appear.
which sakur4d # or: where.exe sakur4d (Windows)If that prints nothing, it is not on PATH. Either move it there — ~/.cargo/bin is the usual place —
or point at it directly:
export SAKUR4_BIN=/full/path/to/sakur4d # $env:SAKUR4_BIN on WindowsThe extension's warning lists every path it searched, so you can see where your install actually landed rather than guessing.
Symptom: a harness reports the server exited, or a session ends without an answer.
Run it by hand, with the banner, and read stderr:
sakur4d --db ./test.db serve --transport stdio --verboseCommon causes:
| Cause | Fix |
|---|---|
| The store path is unwritable |
--db to a path you own, or check permissions on ~/.sakur4/
|
| Another daemon holds the store | SQLite allows one writer; stop the other process |
| The backend URL is unreachable and the probe blocks |
--backend none to start without inference, or raise --probe-timeout-ms
|
Not a Sakur4 failure. The inference server cannot do what was asked — most often it does not
implement ?action=save for slot checkpoints.
sakur4d doctor
# capabilities slots+tokenize
# coherence no checkpoint source detected — compaction will report full re-prefillThat is the correct answer for such a server. Sakur4 degrades rather than failing: prefix reuse still
works through longest-common-prefix matching, and the receipt is deliberately pessimistic — it
reports full-re-prefill where reuse is real but unverifiable.
If you see this on every turn and want it quiet, SAKUR4_EVICTION_PROFILE=window-first is the profile
chosen for backends with no checkpoint source.
Work through it in this order:
-
Is anything stored?
sakur4d doctor—episodesandproject_id. -
Are you in the same project? Recall is scoped to the project the daemon was started for. A
session in a different directory has its own memory, and
store_holds_other_projectstells you the store holds more than this project's. -
Was the file indexed?
sakur4d index— nothing re-indexes automatically.sakur4d repo-mapdates itself so you can see when it last ran. -
Is the embedder lexical? With no embedding endpoint configured, recall uses a deterministic
hashing embedder — good at words, poor at paraphrase.
sakur4d doctornames the embedder in use.
It is a snapshot from the last index, and nothing watches the filesystem. Run:
sakur4d index # incremental: only files whose content hash changed are re-parsedThe map now prints when it was built, or says it has never been indexed, so you can tell before trusting
it. code.impact_of_change reasons over the same stored facts.
Every tool validates its input and says which field is wrong. The common ones:
| Message | Meaning |
|---|---|
request _meta is missing or has malformed required fields |
The 2026-07-28 revision is stateless: every request carries io.modelcontextprotocol/protocolVersion and io.modelcontextprotocol/clientCapabilities in _meta, with no handshake first
|
symbol X is not in the Symbolic Ledger |
The qualified name is wrong or the project is not indexed. sakur4d repo-map --names lists the real ones — they are paths like src::lib::helper, not bare names |
unknown anchor kind: constraint |
Anchor kinds are a fixed set; check the tool's schema for the accepted values |
If you batched the calls, this is the known ordering defect. MCP permits a server to process a queued batch in any order, and a read can be served before the write it was sent after. Send a call and await its answer; see Limitations.
If you awaited each call, check whether the write actually landed:
sqlite3 ~/.sakur4/sakur4.db "SELECT COUNT(*) FROM episodic_stream"If the store has the row and the tool reports zero, that is a real bug worth reporting — attach
sakur4d doctor.
SAKUR4_PLUGIN_LOG=/tmp/sakur4.log omp
cat /tmp/sakur4.logThe log names the binary paths it searched and why each was rejected. OMP version matters: the plugin
is verified against 18.2.x, and its package.json deliberately declares no version floor — so an older
OMP will load it without complaint and then behave unpredictably.
That is the script working. It fetches SHA256SUMS.txt and will not install an archive that is not
listed or does not match it:
sakur4d-v0.1.0-x86_64-unknown-linux-gnu.tar.gz is not listed in SHA256SUMS.txt; refusing to install
Check that the release you are asking for exists (SAKUR4_VERSION=v0.1.0), and that you are not behind a
proxy that rewrites response bodies. Do not work around it by downloading the archive directly — a
checksum failure means the download is not what was published, and the reason matters more than the
inconvenience.
cargo clean # stale incremental artefacts cause odd link errors
node verify.mjs --list # what would actually run, and what it needsA skipped check is not a passed check. The verifier reports INCOMPLETE for any group that skipped
and names every skip with its reason. If a group you expect to run reports INCOMPLETE, the reason is
printed — it is usually a missing tool rather than a failure.
Open an issue with sakur4d doctor output, the exact command, and what you expected. If you have a
reproduction, that is worth more than a description.
Local memory and context for long agent sessions.
- Home
- Getting Started — install, configure, first session
- Concepts — the vocabulary, if the README was too dense
- Tool Reference — all 17 tools, with arguments and when to call them
- Harnesses — OMP · Hermes · Claude · any MCP client · raw HTTP
- Configuration — every flag and environment variable
- CLI Reference — the terminal surface
- Architecture — how eviction, memory and coherence fit together
- Cache Coherence — why compaction invalidates a prompt cache, and what to do
- Memory Model — the Ledger, the Atlas, and why a model may not write to both
- Benchmarks — what changes with it, and without it
- Verification — the checks, and how to run them
- Limitations — what does not work yet, stated plainly
- Security — threat model, encryption at rest, reporting
- Design Decisions — the trade-offs, including the ones that were wrong first
- Contributing — from checkout to pull request
- Releasing — how a version ships
- Troubleshooting — when something is not working