rohitg00/agentmemory · warning
${d.id} ✗ ${status.detail ?? ""}
Error message
${d.id} ✗ ${status.detail ?? ""} What it means
Not a thrown exception but a diagnostic warning emitted by `agentmemory doctor`. When a diagnostic's `check(ctx)` returns `{ ok: false }`, the CLI prints `<diagnostic-id> ✗ <detail>` to explain which environment/config check failed, followed by the suggested fix preview. The detail text comes from the individual diagnostic's check implementation.
Source
Thrown at src/cli.ts:2673
}
let failed = 0;
let fixed = 0;
let skipped = 0;
let quit = false;
for (const d of diagnostics) {
if (quit) {
skipped++;
continue;
}
const status = await d.check(ctx);
if (status.ok) {
p.log.success(`${d.id} ✓${status.detail ? ` (${status.detail})` : ""}`);
continue;
}
failed++;
p.log.warn(`${d.id} ✗ ${status.detail ?? ""}`.trim());
p.log.info(`why: ${d.fixPreview}`);
if (d.manualOnly) {
p.log.info(`(manual fix only — see "${d.id}" docs)`);
}
if (applyAll) {
const r = await applyFixWithReport(d, ctx, false);
if (r.ok) fixed++;
// Re-check only this diagnostic.
const after = await d.check(ctx);
if (!after.ok) p.log.warn(`${d.id} still failing after fix.`);
continue;
}
// Interactive prompt loop — allow [?] More info without leaving the check.
while (true) {
const action = await askFixAction(d);View on GitHub (pinned to e04ba88819)
Solutions
- Read the detail text after the ✗ — it names the specific failed check
- Run `agentmemory doctor` interactively and choose Fix (or `--all`) for the failing diagnostic
- Choose '? More info' at the prompt to see the diagnostic's fuller guidance
- If the diagnostic is manualOnly, consult the docs for that diagnostic id
- Fix the underlying env/config (e.g. start the daemon, set the missing env var) and re-run doctor
Example fix
// before (failing check output) state-dir-writable ✗ ./data not writable: EACCES // after (fix applied / permissions corrected) state-dir-writable ✓ (./data writable)
Defensive patterns
Strategy: validation
Validate before calling
// run doctor's checks up front before relying on the daemon
const ctx = buildDoctorContext();
const diagnostics = buildDiagnostics(buildDoctorEffects());
for (const d of diagnostics) {
const status = await d.check(ctx);
if (!status.ok) console.error(`${d.id}: ${status.detail ?? "failed"}`);
} Type guard
function isCheckOk(status: { ok: boolean; detail?: string } | null | undefined): status is { ok: true; detail?: string } {
return status?.ok === true;
} Try / catch
null
Prevention
- Run `agentmemory doctor` after installing or upgrading
- Run doctor with --dry-run in CI/setup scripts to catch env issues early
- Keep AGENTMEMORY_URL and embedding credentials in a checked .env
- Start the daemon before running doctor so passive server checks pass
When it happens
Trigger: Running `agentmemory doctor` (interactive or `--dry-run`) when any diagnostic's check fails — e.g. daemon not reachable, data directory not writable, embedding provider misconfigured, stale index state.
Common situations: First-time setup before the daemon is started; corrupted or missing state under ./data; environment variables (AGENTMEMORY_URL, embedding keys) unset or wrong; upgrading between versions leaves old config.
Related errors
- ${d.id} still failing after fix.
- ${d.id} still failing after fix: ${after.detail ?? ""}
- POST ${url} failed: ${res.status} ${res.statusText}${suffix}
- agentmemory: could not locate bundled plugin/ directory (sea
- observe failed for ${obs.toolName}: ${res.status} ${res.stat
AI-assisted analysis of rohitg00/agentmemory@e04ba88819 (2026-08-30).
Data as JSON: /api/errors/6ae75edc4658c3aa.
Report an issue: GitHub.