Skip to content

Self-hosted v0.0.8: profile buckets never populated — self-hosted memory agent has no buckets field (path with <buckets> prompt unreachable) #1695

Description

@ArielSaldana

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.

Activity

  1. linear-code commented on Sep 21, 2026

    @linear-code
  2. 84dnnvbdvp-debug commented on Sep 23, 2026

    @84dnnvbdvp-debug

    One regression boundary worth pinning beyond the configured-bucket repro: the zero-configuration default bucket path.

    The current bucket docs say that when neither the org nor the space configures buckets, ingestion falls back to the built-in preferences bucket. Given the reported self-hosted path has no bucket output at all, that default should be unreachable too—not just custom profileBuckets.

    A useful acceptance pair would be:

    1. self-hosted + explicit custom bucket(s) → an obviously matching memory is assigned; and
    2. self-hosted + no bucket configuration → an explicit first-person preference appears in the built-in preferences bucket.

    That second control would catch a repair that only threads an explicit profileBuckets list into the self-hosted agent while leaving the documented default/fallback path inert. If buckets are intentionally platform-only instead, the self-hosting-facing docs need to say so explicitly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions