nexu-io/open-design · error · Error

Local CLI memory extraction is not supported for

Error message

Local CLI memory extraction is not supported for ${provider.agentId}

What it means

The callLocalCli function only supports memory extraction for three agents: 'claude', 'codex', and 'opencode'. Each has a specific argument-building branch. Any other agentId that passes the registry check (512) and binary discovery (513) but isn't one of these three hits this final guard.

Solutions

  1. Set the memory extraction provider's agentId to 'claude', 'codex', or 'opencode'
  2. Alternatively, use an HTTP-based LLM provider (anthropic/openai/azure/google) for memory extraction instead of a local CLI agent

Example fix

// before — gemini is registered but not supported for memory extraction
provider = { agentId: 'gemini', model: '...' };

// after — use a supported agent
provider = { agentId: 'claude', model: '...' };
Defensive patterns

Strategy: validation

Validate before calling

const MEMORY_EXTRACTION_AGENTS = new Set(['claude', 'codex', 'opencode']);

function assertAgentSupportsMemoryExtraction(agentId) {
  if (!MEMORY_EXTRACTION_AGENTS.has(agentId)) {
    throw new Error(`Memory extraction via local CLI is only supported for: claude, codex, opencode. Received: ${agentId}`);
  }
}

Type guard

function supportsMemoryExtraction(agentId: string): agentId is 'claude' | 'codex' | 'opencode' {
  return agentId === 'claude' || agentId === 'codex' || agentId === 'opencode';
}

Prevention

When it happens

Trigger: Provider configuration sets agentId to a registered agent that isn't supported for memory extraction — e.g. 'gemini', 'qwen', 'cursor-agent', 'deepseek', 'grok'.

Common situations: User selects a non-supported agent as the memory extraction provider; agent registry expanded with new agents but the memory extractor wasn't updated to handle them.

Related errors


AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12). Data as JSON: /api/errors/d248d2598709f7e8. Report an issue: GitHub.

Appendix: source

Thrown at apps/daemon/src/memory-llm.ts:1031

    );
    parseStdout = (raw) => extractJsonEventText(def.eventParser || def.id, raw, def.name);
  } else if (provider.agentId === 'opencode') {
    // Deliver the prompt on stdin, matching the chat-run path
    // (def.promptViaStdin). `opencode run`'s `-f, --file` is a yargs array
    // option that greedily consumes every trailing non-flag token, so
    // `--file <prompt-file> "<message>"` made OpenCode treat the message
    // text as a second attachment and exit with "File not found". Bare
    // `opencode run --format json` reads the message from stdin instead.
    args = def.buildArgs(
      '',
      [],
      [],
      { model: provider.model },
      { cwd },
    );
    parseStdout = (raw) => extractJsonEventText(def.eventParser || def.id, raw, def.name);
  } else {
    throw new Error(`Local CLI memory extraction is not supported for ${provider.agentId}`);
  }

  const env = applyAgentLaunchEnv(
    spawnEnvForAgent(
      def.id,
      { ...process.env, ...(def.env || {}) },
      configuredAgentEnv,
      undefined,
      { resolvedBin: launch.selectedPath },
    ),
    launch,
  );
  const invocation = createCommandInvocation({
    command: launch.launchPath,
    args,
    env,
  });

View on GitHub (pinned to 5be4028344)