Problem
When using an API key scoped to a specific container (e.g., "ramiro"), the plugin's getContainerTag() function auto-derives a hash-based tag (claudecode_project_<sha256>) that doesn't match the API key's scope, causing 400 Invalid container tag errors on every operation.
The only workaround is creating .claude/.supermemory-claude/config.json with personalContainerTag in every single project. This is tedious and easy to forget — the first memory save in any new project always fails until you remember to create the config.
Current resolution order
project config (.claude/.supermemory-claude/config.json) → git-path hash fallback
Proposed resolution order
project config → environment variable → global settings file → git-path hash fallback
Specifically:
- Project config —
.claude/.supermemory-claude/config.json → personalContainerTag (existing, unchanged)
- Environment variable — e.g.,
SUPERMEMORY_CONTAINER_TAG or SUPERMEMORY_PERSONAL_CONTAINER_TAG (new)
- Global settings file —
~/.supermemory-claude/settings.json → personalContainerTag (new)
- Git-path hash —
claudecode_project_${sha256(basePath)} (existing fallback)
The code change in container-tag.js would be minimal:
function getContainerTag(cwd) {
const projectConfig = loadProjectConfig(cwd);
if (projectConfig?.personalContainerTag) return projectConfig.personalContainerTag;
// NEW: check env var
if (process.env.SUPERMEMORY_CONTAINER_TAG) return process.env.SUPERMEMORY_CONTAINER_TAG;
// NEW: check global settings
const globalSettings = loadGlobalSettings();
if (globalSettings?.personalContainerTag) return globalSettings.personalContainerTag;
// Existing fallback
const basePath = getGitRoot(cwd) || cwd;
return `claudecode_project_${sha256(basePath)}`;
}
Cross-integration concern: unified container tag support
This isn't just a Claude Code plugin issue — Supermemory has integrations across multiple platforms:
- claude-supermemory (Claude Code plugin)
- supermemory-mcp (MCP server — used by Claude Desktop, Cursor, etc.)
- opencode-supermemory (OpenCode plugin)
- openclaw-supermemory (OpenClaw / Clawdbot)
- Notion integration
- Any future integrations
All of these would benefit from a consistent, cross-integration container tag configuration mechanism. When an API key is scoped to a container (e.g., for multi-tenancy or personal branding), every integration should respect the same tag without requiring per-integration, per-project configuration.
Recommendation
Consider standardizing across all integrations:
SUPERMEMORY_CONTAINER_TAG environment variable — works everywhere, set once in shell profile, respected by all integrations
- Global config file (e.g.,
~/.config/supermemory/config.json or ~/.supermemory/config.json) — a single file that all integrations read for shared settings like container tag, API URL, debug mode
- Per-integration overrides remain available for cases where you genuinely want different containers per tool
This enables multi-tenancy use cases like:
- Personal vs. work memory separation via scoped API keys
- Team-shared memory pools where all team members' tools use the same container
- Custom container naming instead of opaque hashes
Environment
- claude-supermemory plugin v0.0.2
- API key scoped to container
"ramiro"
- macOS, multiple projects
🤖 This content was generated with AI assistance using Claude Opus 4.6.
Problem
When using an API key scoped to a specific container (e.g.,
"ramiro"), the plugin'sgetContainerTag()function auto-derives a hash-based tag (claudecode_project_<sha256>) that doesn't match the API key's scope, causing400 Invalid container tagerrors on every operation.The only workaround is creating
.claude/.supermemory-claude/config.jsonwithpersonalContainerTagin every single project. This is tedious and easy to forget — the first memory save in any new project always fails until you remember to create the config.Current resolution order
Proposed resolution order
Specifically:
.claude/.supermemory-claude/config.json→personalContainerTag(existing, unchanged)SUPERMEMORY_CONTAINER_TAGorSUPERMEMORY_PERSONAL_CONTAINER_TAG(new)~/.supermemory-claude/settings.json→personalContainerTag(new)claudecode_project_${sha256(basePath)}(existing fallback)The code change in
container-tag.jswould be minimal:Cross-integration concern: unified container tag support
This isn't just a Claude Code plugin issue — Supermemory has integrations across multiple platforms:
All of these would benefit from a consistent, cross-integration container tag configuration mechanism. When an API key is scoped to a container (e.g., for multi-tenancy or personal branding), every integration should respect the same tag without requiring per-integration, per-project configuration.
Recommendation
Consider standardizing across all integrations:
SUPERMEMORY_CONTAINER_TAGenvironment variable — works everywhere, set once in shell profile, respected by all integrations~/.config/supermemory/config.jsonor~/.supermemory/config.json) — a single file that all integrations read for shared settings like container tag, API URL, debug modeThis enables multi-tenancy use cases like:
Environment
"ramiro"🤖 This content was generated with AI assistance using Claude Opus 4.6.