todo: understand claude and opencode memory, then centralize into a vector db

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-25 09:27:33 +00:00
co-authored by Claude Fable 5
parent ffb4c3eedd
commit 7d2b8b644d
3 changed files with 77 additions and 35 deletions
+36 -35
View File
@@ -21,41 +21,42 @@ the owner's OS user and can never be granted. Indirection there really is accide
## Themes ## Themes
**92 open, 30 closed**, across 31 themes. **93 open, 30 closed**, across 32 themes.
| Theme | Open | Closed | | Theme | Open | Closed |
| --- | --- | --- | | ------------------------------------------------------------------------------------------ | ---- | ------ |
| [Affordances](todo/affordances/) | 2 | 0 | | [Affordances](todo/affordances/) | 2 | 0 |
| [Agents coordinating agents](todo/agent-coordination/) | 2 | 0 | | [Agents coordinating agents](todo/agent-coordination/) | 2 | 0 |
| [Speaking into a session from the backend](todo/agent-delivery/) | 1 | 1 | | [Speaking into a session from the backend](todo/agent-delivery/) | 1 | 1 |
| [Backburner](todo/backburner/) | 3 | 0 | | [Backburner](todo/backburner/) | 3 | 0 |
| [Background jobs](todo/background-jobs/) | 2 | 1 | | [Background jobs](todo/background-jobs/) | 2 | 1 |
| [Chat interface](todo/chat/) | 1 | 0 | | [Chat interface](todo/chat/) | 1 | 0 |
| [Code editor](todo/code-editor/) | 1 | 0 | | [Code editor](todo/code-editor/) | 1 | 0 |
| [Components — the shared UI layer](todo/components/) | 1 | 0 | | [Components — the shared UI layer](todo/components/) | 1 | 0 |
| [File watchers](todo/file-watchers/) | 1 | 0 | | [File watchers](todo/file-watchers/) | 1 | 0 |
| [Fleet — one command across every server](todo/fleet/) | 5 | 2 | | [Fleet — one command across every server](todo/fleet/) | 5 | 2 |
| [Headscale](todo/headscale/) | 0 | 5 | | [Headscale](todo/headscale/) | 0 | 5 |
| [Infra (alpha)](todo/infra/) | 7 | 0 | | [Infra (alpha)](todo/infra/) | 7 | 0 |
| [Known bugs](todo/known-bugs/) | 4 | 3 | | [Known bugs](todo/known-bugs/) | 4 | 3 |
| [Mobile apps](todo/mobile-apps/) | 3 | 0 | | [Memory — one store instead of per-harness files](todo/memory/) | 1 | 0 |
| [Multi-user](todo/multi-user/) | 16 | 5 | | [Mobile apps](todo/mobile-apps/) | 3 | 0 |
| [Notifications](todo/notifications/) | 1 | 0 | | [Multi-user](todo/multi-user/) | 16 | 5 |
| [Plugin ecosystem — before it opens to third parties (2026-08-18)](todo/plugin-ecosystem/) | 3 | 0 | | [Notifications](todo/notifications/) | 1 | 0 |
| [Plugin infrastructure](todo/plugin-infrastructure/) | 2 | 0 | | [Plugin ecosystem — before it opens to third parties (2026-08-18)](todo/plugin-ecosystem/) | 3 | 0 |
| [Plugin repos — what writing their READMEs turned up](todo/plugin-repos/) | 10 | 9 | | [Plugin infrastructure](todo/plugin-infrastructure/) | 2 | 0 |
| [Plugin system — gaps the email extraction found (2026-08-18)](todo/plugin-system/) | 3 | 0 | | [Plugin repos — what writing their READMEs turned up](todo/plugin-repos/) | 10 | 9 |
| [Prompt library](todo/prompt-library/) | 1 | 0 | | [Plugin system — gaps the email extraction found (2026-08-18)](todo/plugin-system/) | 3 | 0 |
| [SendOff](todo/sendoff/) | 1 | 0 | | [Prompt library](todo/prompt-library/) | 1 | 0 |
| [Settings — portable, and readable by an agent](todo/settings/) | 2 | 0 | | [SendOff](todo/sendoff/) | 1 | 0 |
| [Shell — spotlight and the dock](todo/shell/) | 4 | 1 | | [Settings — portable, and readable by an agent](todo/settings/) | 2 | 0 |
| [Sub-agents — agents spawning agents](todo/sub-agents/) | 0 | 2 | | [Shell — spotlight and the dock](todo/shell/) | 4 | 1 |
| [Sudo terminal modal](todo/sudo-terminal-modal/) | 1 | 0 | | [Sub-agents — agents spawning agents](todo/sub-agents/) | 0 | 2 |
| [Tooling — the list about the list](todo/tooling/) | 0 | 1 | | [Sudo terminal modal](todo/sudo-terminal-modal/) | 1 | 0 |
| [Transmission](todo/transmission/) | 6 | 0 | | [Tooling — the list about the list](todo/tooling/) | 0 | 1 |
| [URL state — routing, query strings and selection](todo/url-state/) | 4 | 0 | | [Transmission](todo/transmission/) | 6 | 0 |
| [Waiting on the owner to run it](todo/waiting-on-owner/) | 3 | 0 | | [URL state — routing, query strings and selection](todo/url-state/) | 4 | 0 |
| [Workspaces & Panels](todo/workspaces-panels/) | 2 | 0 | | [Waiting on the owner to run it](todo/waiting-on-owner/) | 3 | 0 |
| [Workspaces & Panels](todo/workspaces-panels/) | 2 | 0 |
## Records — no items, kept for the reasoning ## Records — no items, kept for the reasoning
@@ -69,10 +70,10 @@ the owner's OS user and can never be granted. Indirection there really is accide
- `2026-08-25` **An affordance: a scoped agent warns when a request lands outside its scope** — [affordances/an-affordance-a-scoped-agent-warns-on-the](todo/affordances/an-affordance-a-scoped-agent-warns-on-the.md) - `2026-08-25` **An affordance: a scoped agent warns when a request lands outside its scope** — [affordances/an-affordance-a-scoped-agent-warns-on-the](todo/affordances/an-affordance-a-scoped-agent-warns-on-the.md)
- `2026-08-25` **Resurrect Projects/Apps** — [backburner/resurrect-projects-apps](todo/backburner/resurrect-projects-apps.md) - `2026-08-25` **Resurrect Projects/Apps** — [backburner/resurrect-projects-apps](todo/backburner/resurrect-projects-apps.md)
- `2026-08-25` **The model picker shows `claude-code` instead of the model that is running** — [known-bugs/the-model-picker-shows-the-bare-harness](todo/known-bugs/the-model-picker-shows-the-bare-harness.md) - `2026-08-25` **The model picker shows `claude-code` instead of the model that is running** — [known-bugs/the-model-picker-shows-the-bare-harness](todo/known-bugs/the-model-picker-shows-the-bare-harness.md)
- `2026-08-25` **Understand how Claude and opencode do memory, then centralize both into one vector database** — [memory/understand-and-centralize-agent-memory-into-a](todo/memory/understand-and-centralize-agent-memory-into-a.md)
- `2026-08-23` **A worker cannot verify that the owner delegated to a manager, so it has to ask every time** — [agent-coordination/a-peer-cannot-verify-a-delegation](todo/agent-coordination/a-peer-cannot-verify-a-delegation.md) - `2026-08-23` **A worker cannot verify that the owner delegated to a manager, so it has to ask every time** — [agent-coordination/a-peer-cannot-verify-a-delegation](todo/agent-coordination/a-peer-cannot-verify-a-delegation.md)
- `2026-08-23` **An agent cannot learn its own transcript id, so it cannot sign its own work** — [agent-coordination/an-agent-cannot-learn-its-own-session-id](todo/agent-coordination/an-agent-cannot-learn-its-own-session-id.md) - `2026-08-23` **An agent cannot learn its own transcript id, so it cannot sign its own work** — [agent-coordination/an-agent-cannot-learn-its-own-session-id](todo/agent-coordination/an-agent-cannot-learn-its-own-session-id.md)
- `2026-08-23` **The SendOff file size limit is one constant for everybody** — [sendoff/per-user-size-limit](todo/sendoff/per-user-size-limit.md) - `2026-08-23` **The SendOff file size limit is one constant for everybody** — [sendoff/per-user-size-limit](todo/sendoff/per-user-size-limit.md)
- `2026-08-22` **A commander picks the cheapest model that will do the job — for itself and for what it spawns** — [background-jobs/a-commander-picks-the-cheapest-model-that-will](todo/background-jobs/a-commander-picks-the-cheapest-model-that-will.md) - `2026-08-22` **A commander picks the cheapest model that will do the job — for itself and for what it spawns** — [background-jobs/a-commander-picks-the-cheapest-model-that-will](todo/background-jobs/a-commander-picks-the-cheapest-model-that-will.md)
- `2026-08-22` **Revisit the bun 1.3 pin once 1.4 has been watched for a while** — [infra/revisit-the-bun-1-3-pin-once-1-4-has-been](todo/infra/revisit-the-bun-1-3-pin-once-1-4-has-been.md) - `2026-08-22` **Revisit the bun 1.3 pin once 1.4 has been watched for a while** — [infra/revisit-the-bun-1-3-pin-once-1-4-has-been](todo/infra/revisit-the-bun-1-3-pin-once-1-4-has-been.md)
- `2026-08-22` **A plugin's permission should be on for every role by default, off only on request** — [multi-user/a-plugin-s-permission-should-be-on-for-every](todo/multi-user/a-plugin-s-permission-should-be-on-for-every.md) - `2026-08-22` **A plugin's permission should be on for every role by default, off only on request** — [multi-user/a-plugin-s-permission-should-be-on-for-every](todo/multi-user/a-plugin-s-permission-should-be-on-for-every.md)
- `2026-08-22` **A user's settings should export and import as a plain file** — [settings/a-user-s-settings-should-export-and-import-as](todo/settings/a-user-s-settings-should-export-and-import-as.md)
+9
View File
@@ -0,0 +1,9 @@
---
theme: memory
heading: 'Memory — one store instead of per-harness files'
kind: theme
---
How each coding harness remembers things today (Claude's `CLAUDE.md`/memory files, opencode's own
mechanism, whatever else joins later), and whether that should be one shared store instead of N private
ones. Related: `todo/affordances/` is the delivery mechanism this theme will need.
@@ -0,0 +1,32 @@
---
id: memory/understand-and-centralize-agent-memory-into-a
title: 'Understand how Claude and opencode do memory, then centralize both into one vector database'
theme: memory
status: open
created: 2026-08-25
date_source: stated
order: 1
---
**Understand how Claude and opencode do memory, then centralize both into one vector database.** Wanted
2026-08-25. Two steps in order, and the second should not be started before the first is actually
answered rather than assumed:
1. **Understand what "memory" means for each harness, as it exists today.** For Claude that is this
platform's own memory system (`~/.claude/projects/*/memory/`, `MEMORY.md` plus per-topic files — the
mechanism this very session uses) and whatever `CLAUDE.md` files and file-based conventions the SDK
itself reads. For opencode — wired into this platform (`sidecar/opencode/`) but not deeply understood
by this session — the equivalent needs the same audit: where does it read and write anything durable
about a session or a user, and does it call that memory at all or something else entirely.
2. **Centralize into one vector database**, so both harnesses (and whatever joins later) read and write
the same store instead of each keeping its own files. **Needs an affordance per harness**, teaching it
NOT to use its native memory mechanism and to use the shared store instead — the same delivery
mechanism already used to teach Claude sessions about image rendering and gitea
(`capabilities/affordances/`, loaded per turn, no restart).
Open, deliberately not decided here: which vector database; what gets embedded (raw notes, summaries,
both); whether centralization REPLACES each harness's native memory outright or sits ahead of it as a
retrieval layer the harness is told to consult first; and how a memory tied to one user account maps
onto a store meant to serve every harness the same account uses. Step 1 should surface most of these —
this is exploratory before it is a build.