nexu-io/open-design · error · Error

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

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.

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)

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.