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

  1. Read the detail text after the ✗ — it names the specific failed check
  2. Run `agentmemory doctor` interactively and choose Fix (or `--all`) for the failing diagnostic
  3. Choose '? More info' at the prompt to see the diagnostic's fuller guidance
  4. If the diagnostic is manualOnly, consult the docs for that diagnostic id
  5. 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

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


AI-assisted analysis of rohitg00/agentmemory@e04ba88819 (2026-08-30). Data as JSON: /api/errors/6ae75edc4658c3aa. Report an issue: GitHub.