thedotmack/claude-mem · warning
Provider=${options.provider} requested non-interactively. AP
Error message
Provider=${options.provider} requested non-interactively. API key prompt skipped — set CLAUDE_MEM_${options.provider.toUpperCase()}_API_KEY and CLAUDE_MEM_PROVIDER in settings.json or env manually if not already set. What it means
When `npx claude-mem install` runs non-interactively (no TTY) with --provider other than 'claude', there is no way to prompt for that provider's API key. The installer persists CLAUDE_MEM_PROVIDER and warns that you must set CLAUDE_MEM_<PROVIDER>_API_KEY yourself (settings.json env block or real env), or generation calls with that provider will fail auth later.
Source
Thrown at src/npx-cli/commands/install.ts:1128
}
saveClaudeMemEnv(env);
persistClaudeProvider('gateway');
if (tokenCancelled || tokenInput.length === 0) {
log.info('Gateway URL saved; existing gateway token preserved.');
} else {
log.info('Configured Claude Agent SDK gateway in ~/.claude-mem/.env.');
}
};
if (!isInteractive) {
if (options.provider) {
if (options.provider === 'claude') {
persistClaudeProvider();
return 'claude';
}
const wrote = mergeSettings({ CLAUDE_MEM_PROVIDER: options.provider });
if (wrote) log.info(`Saved provider=${options.provider} to ~/.claude-mem/settings.json`);
log.warn(`Provider=${options.provider} requested non-interactively. API key prompt skipped — set CLAUDE_MEM_${options.provider.toUpperCase()}_API_KEY and CLAUDE_MEM_PROVIDER in settings.json or env manually if not already set.`);
return options.provider;
}
return initialProvider;
}
const runClaudeAuthFlow = async (): Promise<void> => {
const resolvedAuthMethod = resolveClaudeAuthMethod();
const initialAccessMode: ClaudeAccessMode =
resolvedAuthMethod === 'subscription' ? 'subscription' : 'api-key';
const result = await p.select<ClaudeAccessMode>({
message: 'Do you use a subscription plan or an API key/gateway for the memory agent?',
options: [
{ value: 'subscription', label: 'Subscription plan (recommended — uses your logged-in Claude SDK account)' },
{ value: 'api-key', label: 'API key or gateway (Anthropic, LiteLLM, or compatible proxy)' },
],
initialValue: initialAccessMode,
});View on GitHub (pinned to e2d1df569a)
Solutions
- Set the key in the environment the worker/hooks run in: `CLAUDE_MEM_GEMINI_API_KEY=...` / `CLAUDE_MEM_OPENROUTER_API_KEY=...` (any CLAUDE_MEM_<PROVIDER>_API_KEY naming).
- Or write it into ~/.claude-mem/settings.json under env alongside CLAUDE_MEM_PROVIDER.
- If you actually wanted interactive key entry, run install in a real TTY without --provider.
- Verify afterwards: `npx claude-mem doctor` or a test generation run to confirm the provider key resolves.
Example fix
# before (Dockerfile, non-interactive): RUN npx claude-mem install --provider openrouter # after RUN npx claude-mem install --provider openrouter ENV CLAUDE_MEM_OPENROUTER_API_KEY=sk-or-...
Defensive patterns
Strategy: validation
Validate before calling
// Pre-flight everything non-interactive install needs, BEFORE running it:
const provider = 'openrouter'; // or gemini
const keyName = `CLAUDE_MEM_${provider.toUpperCase()}_API_KEY`;
if (!process.env[keyName]) {
throw new Error(`${keyName} must be set for non-interactive --provider ${provider}`);
} Prevention
- Always inject CLAUDE_MEM_<PROVIDER>_API_KEY via env/settings when scripting installs.
- Smoke-test after automated install (one generation call) — a missing key only fails at first use.
- Remember provider='claude' needs no key at install time; others do.
When it happens
Trigger: CI, Dockerfiles, or scripts running `claude-mem install --provider gemini|openrouter` with stdin/stdout detached. For provider 'claude' it persists the Claude provider and returns silently; every other provider hits this warning.
Common situations: Automated container builds; provisioning scripts that forget secrets must be injected at runtime, not install time.
Understand the failure class
Background: "environment variable is not set" and "Missing keys in environment" errors: what missing required env var messages mean and how to fix them — this error's family across 28 libraries.
Related errors
- Skipping local hook API key bootstrap: CLAUDE_MEM_SERVER_DAT
- missing_api_key
- API key prompt cancelled — leaving existing configuration un
- API key prompt cancelled — falling back to Claude provider.
- auth_invalid
AI-assisted analysis of thedotmack/claude-mem@e2d1df569a (2026-08-20).
Data as JSON: /api/errors/7ca788b733777c88.
Report an issue: GitHub.