-
Notifications
You must be signed in to change notification settings - Fork 123
Description
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_TAGorSUPERMEMORY_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_TAGenvironment variable — works everywhere, set once in shell profile, respected by all integrations- Global config file (e.g.,
~/.config/supermemory/config.jsonor~/.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.