Summary
On self-hosted supermemory-server (release server-v0.0.8, binary reports 1.3.4), profile buckets are never populated. POST /v4/profile with include: ["buckets"] returns the configured bucket keys but every array is always empty, regardless of bucket descriptions or extraction model. static and dynamic populate correctly.
Reproduction
# server: OPENAI_BASE_URL=https://api.cerebras.ai/v1 OPENAI_MODEL=gpt-oss-120b supermemory-server
# (also reproduced with qwen-3.8-27b)
# 1. configure buckets (org and/or space level - both verified persisted via POST /v4/profile/buckets)
curl -X PATCH localhost:6767/v3/settings -H 'Content-Type: application/json' -d '{"profileBuckets":[
{"key":"autonomy","description":"Any instruction about when the assistant must ask permission vs act alone (e.g. always ask before sending emails)."},
{"key":"communication_style","description":"Any instruction about reply length, tone, format (e.g. keep replies to 3 sentences)."},
{"key":"tasks","description":"Any deadline, deliverable, migration, or to-do with a time frame."},
{"key":"people","description":"Any memory naming a specific person other than the user and their role."}]}'
# 2. ingest
curl localhost:6767/v3/documents -H 'Content-Type: application/json' -d '{"containerTag":"bk","content":"user: This week I am migrating our billing service to Stripe and it is due Friday. Please always ask before sending emails on my behalf, and keep replies to 3 sentences max. My cofounder Dana handles sales.\nassistant: Noted."}'
# 3. wait for status=done, then
curl localhost:6767/v4/profile -H 'Content-Type: application/json' -d '{"containerTag":"bk","include":["static","dynamic","buckets"]}'
Result: 6-8 memories extracted, static/dynamic correct, but
"buckets": {"autonomy": [], "communication_style": [], "tasks": [], "people": []}
Root cause (from inspecting LLM traffic and the bundled JS)
I ran the server behind a logging proxy to the LLM provider and captured every request across ~127 extraction calls: none contained the string bucket.
- The self-hosted ingest path runs the tool-loop memory agent (
generateSelfHostedMemoriesStep). Its CreateMemory tool schema has memory, parentRelations, addToStaticProfile, isInferred, forgetAfter, forgetReason, temporalContext - no buckets field - and its prompt has no <buckets> block. The model has no way to express a bucket assignment.
- The bucket-aware extraction (
<buckets> prompt section + buckets: z.array(z.string()) on memoriesToAddOrUpdate, and the EB8-style lookup that merges org+space profileBuckets) exists in the binary but is only reached on the non-self-hosted batch path; the self-hosted branch returns early before it. dreaming: "instant" on the document does not change this.
- There is no manual fallback:
POST /v4/memories and PATCH /v4/memories silently ignore a buckets field in the request.
Expected
Either the self-hosted memory agent's CreateMemory tool accepts buckets (with the configured bucket list injected into its prompt), or /v4/memories accepts buckets so clients can assign them, or the docs state that buckets are platform-only.
Environment
macOS 15 (arm64), supermemory-server from server-v0.0.8 installer, local embeddings (Xenova/bge-base-en-v1.5), LLM via OpenAI-compatible endpoint (Cerebras, gpt-oss-120b and qwen-3.8-27b).
Side note from the same proxy capture: the server sends serviceTier: "flex" and echoes reasoning_content back in assistant history; Cerebras rejects both with 400 (property 'serviceTier' is unsupported, messages.N.assistant.reasoning_content: property 'reasoning_content' is unsupported). Stripping them at the proxy made extraction succeed. Happy to open a separate issue for that if useful.
Summary
On self-hosted
supermemory-server(releaseserver-v0.0.8, binary reports1.3.4), profile buckets are never populated.POST /v4/profilewithinclude: ["buckets"]returns the configured bucket keys but every array is always empty, regardless of bucket descriptions or extraction model.staticanddynamicpopulate correctly.Reproduction
Result: 6-8 memories extracted,
static/dynamiccorrect, butRoot cause (from inspecting LLM traffic and the bundled JS)
I ran the server behind a logging proxy to the LLM provider and captured every request across ~127 extraction calls: none contained the string
bucket.generateSelfHostedMemoriesStep). ItsCreateMemorytool schema hasmemory, parentRelations, addToStaticProfile, isInferred, forgetAfter, forgetReason, temporalContext- nobucketsfield - and its prompt has no<buckets>block. The model has no way to express a bucket assignment.<buckets>prompt section +buckets: z.array(z.string())onmemoriesToAddOrUpdate, and theEB8-style lookup that merges org+spaceprofileBuckets) exists in the binary but is only reached on the non-self-hosted batch path; the self-hosted branch returns early before it.dreaming: "instant"on the document does not change this.POST /v4/memoriesandPATCH /v4/memoriessilently ignore abucketsfield in the request.Expected
Either the self-hosted memory agent's
CreateMemorytool acceptsbuckets(with the configured bucket list injected into its prompt), or/v4/memoriesacceptsbucketsso clients can assign them, or the docs state that buckets are platform-only.Environment
macOS 15 (arm64),
supermemory-serverfromserver-v0.0.8installer, local embeddings (Xenova/bge-base-en-v1.5), LLM via OpenAI-compatible endpoint (Cerebras,gpt-oss-120bandqwen-3.8-27b).Side note from the same proxy capture: the server sends
serviceTier: "flex"and echoesreasoning_contentback in assistant history; Cerebras rejects both with 400 (property 'serviceTier' is unsupported,messages.N.assistant.reasoning_content: property 'reasoning_content' is unsupported). Stripping them at the proxy made extraction succeed. Happy to open a separate issue for that if useful.