Skip to content

D1_ERROR: out of memory (SQLITE_NOMEM) on notebooks list/create — blocks session-archive ingest #11

Description

@stackbilt-admin

Summary

The agent-memory.mjs archive-raw-session Claude Code Stop-hook client (from the aegis-daemon project) fails when calling MindSpring's notebooks endpoint, with a D1 out-of-memory error returned as HTTP 501:

HTTP 501 from https://mindspring.blue-pine-edf6.workers.dev/api/v2/workspaces/aegis-daemon/notebooks:
{"error":"Error: D1_ERROR: out of memory: SQLITE_NOMEM"}

Observed in .agent-memory/logs/2026-07-03.jsonl in a client repo, timestamp 2026-07-03T11:00:59.281Z.

Impact

  • The Stop hook (mindspring-session-push.shagent-memory.mjs archive-raw-session) that archives session transcripts into the session_history notebook fails on this call.
  • Because the failure is a D1 out-of-memory condition rather than a fast validation error, the request appears to take a long time to fail (consistent with a query scanning/spilling before erroring out) — this made every Claude Code session's Stop hook take several minutes to complete on the client side before giving up.
  • On failure the client enqueues a local retry file (.agent-memory/retry/*.json) but does not otherwise recover.

Suspected cause

GET/POST /api/v2/workspaces/{workspace}/notebooks (list-or-create-by-title flow) is likely running an unbounded or inefficient D1 query — possibly scanning a large/unindexed table (e.g. all notebooks across workspaces, or a large session_history table growing unbounded from repeated archive pushes) that exhausts available memory in the Workers/D1 execution context.

Suggested next steps

  • Reproduce against the aegis-daemon workspace (workspace=aegis-daemon, notebookTitle=session_history).
  • Check the query behind the notebooks list endpoint for missing indexes / unbounded scans.
  • Consider paginating or scoping the notebooks list query, and/or capping session_history growth (archive/prune old entries).
  • Return a fast, clear error instead of letting the query run to an OOM condition, so callers don't hang.

Workaround applied client-side

Disabled the global Stop hook in ~/.claude/settings.json for now, since it was blocking session shutdown for minutes on every session. Will need to be re-enabled once this is fixed.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions