ovcli.conf cannot be parsed / no usable config | Trailing comma/comment; the plugin treats the file as absent and uses the localhost default | Fix the JSON. Fresh machine: create ~/.openviking/ovcli.conf with url + api_key, chmod 600. |
codex plugin list does not show … | Plugin never installed, or installed under an old id | Re-run the one-line installer (curl -fsSL https://openviking.ai/install | bash -s -- --harness codex). |
hooks disabled in [features] / hooks feature is disabled in Codex | The applicable hooks feature is disabled | Set hooks = true under [features] in ~/.codex/config.toml (or plugin_hooks = true for older Codex), restart Codex. |
[features] hooks enabled by default | The live CLI reports hooks enabled; legacy plugin_hooks has no effect | Continue with the remaining checks. |
[features] hooks is not set (info) | The CLI probe could not determine the modern feature state and no legacy flag decides it | Verify with codex features list; an unset key alone does not prove hooks are disabled. |
[plugins."…"] enabled = false / installed but disabled | Plugin switched off in config.toml | Set enabled = true, restart Codex. |
hooks disabled in [hooks.state] | A hook was declined at the trust prompt | Remove enabled = false from that [hooks.state."openviking-memory@openviking:hooks/hooks.json:<event>:0:0"] section; approve the hook again. |
hooks without a trust record yet | Codex has not yet approved those hooks (fresh install or hooks.json changed on update) | Start a Codex session and accept the hook prompt; nothing is wrong. |
marketplace 'openviking' is not registered / root missing | Marketplace removed or its clone deleted | Re-run the installer. |
plugin.json does not declare skills | Old plugin copy; $ov-memory-doctor and the other bundled skills are not loaded | Update the plugin. |
cached plugin X differs from this copy | The doctor was run from a checkout while Codex runs another version | Rerun from the cache path (Step 1). |
node is not on PATH / node < 18 | Hooks and .mcp.json run the bare command node | Put node on PATH for the environment that launches Codex. |
credential source: env unexpectedly | A stray OPENVIKING_* var forces env mode; ov config switch and ovcli.conf edits do nothing | Unset the var (check shell rc files and ~/.openviking/codex-plugin.rc.sh residue). |
OPENVIKING_MEMORY_ENABLED has no effect | That switch is Claude Code only | OPENVIKING_AUTO_RECALL=0 / OPENVIKING_AUTO_CAPTURE=0, or codex plugin remove. |
server unreachable (refused / dns / timeout / tls) | Wrong url/port, server down, DNS/VPN, private CA | Compare with curl -sS <url>/health; curl OK + doctor fails ⇒ proxy or CA issue (Step 3). |
base URL ends with /api/v1 or /mcp, no scheme, GET /health → 404 | url shape wrong; Cloud needs the /openviking prefix | Fix url to the API root. |
/health is authenticated at this deployment (info) / api key rejected on /health → 401 | OpenViking Cloud gates /health and /ready at the gateway, so the probe without a key 401s and says nothing about the url | The info line needs no fix — the report reads /health with the key instead. The ✗ means the gateway rejected this key: use one issued for that deployment (Cloud keys come from the Volcengine console). |
api key rejected then system/status → 401 Invalid API Key | Key invalid/revoked/for another deployment | Get the key re-issued; check nothing overrides ovcli.conf ("← env"). |
using the ROOT api key / 403 ROOT API keys cannot access tenant-scoped data APIs | api_key fell through to ov.conf server.root_api_key, or the root key was pasted | Use a user/admin key. |
plugin auth mode 'trusted' differs from the server's 'api_key' | account/user set in ovcli.conf ⇒ the plugin sends identity headers, which an api_key server ignores; data lands under the key's identity | Remove account/user (or set OPENVIKING_AUTH_MODE=api_key), or use a key for that identity. |
server is in trusted mode and needs account + user | Server identity comes from headers | Set account and user in ovcli.conf. |
recall/capture timeout exceeds the hook budget | Codex kills the hook before the request finishes | Lower OPENVIKING_RECALL_TIMEOUT_MS / OPENVIKING_CAPTURE_TIMEOUT_MS. |
POST /mcp tools/list → 404/406/502/504 while /health is fine | Reverse proxy not forwarding /mcp, rewriting Accept, or buffering SSE | Fix the proxy (proxy_buffering off, forward /mcp, pass Authorization). |
proxy variables set + curl works but hooks fail | Node's fetch ignores HTTP(S)_PROXY; no CA handling | NODE_USE_ENV_PROXY=1 or NODE_EXTRA_CA_CERTS=<ca.pem> in the environment that launches Codex. |
no session has ever captured a turn / idle sessions piling up | Stop hook runs but writes fail, or commits fail | Fix the Connection findings; state files are kept and replay when the server is back. |
MCP proxy last started against <other url> | The proxy is a long-lived process; a changed url only takes effect after restart | Restart Codex. |
ov.conf has a top-level '<harness>' block / server.url is rejected | Plugin-only keys in the server's own config — a top-level block named after any harness (claude_code, codex, cursor, trae, trae_cn, zcode, opencode, dsh, pi) plus server.url; the server refuses to start at its next restart (Unknown config field / Extra inputs are not permitted) | Move them to ovcli.conf (plugin.<harness>, url) and delete them from ov.conf. Ignore only if this ov.conf never starts a server. |
nothing listens on port … — the server is not running | Server down or never started; the presence of .openviking.lock does not indicate whether the server is running | Start it (openviking-server; first time openviking-server init) in a terminal and read the startup output. Ask before restarting a server the user runs. |
/ready: embedding → error … | The running server cannot call its embedding provider: recall searches nothing, commits extract nothing | Fix embedding.* (api_key/api_base/model) in ov.conf and restart; openviking-server doctor prints the provider's reply. |
/ready: vectordb → … / /ready: agfs → … | Storage broken: disk full, two servers on one workspace, corrupted index | Server log; stop the duplicate; free disk. |
server is still initializing (503 /ready) | First start downloads a local embedding model, or init is slow | Wait and rerun; if it never finishes, the server log. |
docker container is up but has no ov.conf | Official image started without a config mount (every request 503s) | Mount ~/.openviking at /app/.openviking, or docker exec -it openviking openviking-server init. |