Reported issues for Titen Memory
Pod holds 19 of 25 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.
Back to Titen Memory.
Most discussed
bug: configured semantic retrieval can silently fall back to FTS while readiness stays healthy
Severity
P0 operational and replacement-safety blocker.
Version and environment
titen-memory@0.3.0- npm SHA-1
568d56175257f515ee3c79c7672d62bc39c07dda - peeled tag commit
9f10bfd625ba947897056f1dbc0ab7bfc4ce6304 - Node 24/Bun 1.3.13 clean consumer install and VPS canary
Reproduction
- Install only
titen-memory@0.3.0as a production consumer. - Set the complete
TITEN_EMBED_BASE_URL,TITEN_EMBED_MODEL, andTITEN_EMBED_DIMStuple. - Do not separately install the op
Read the thread · 2026-07-31 · closed · 5 comments
bug: resolveHandoff and saveCheckpoint use SELECT-then-write with no fence — 8 parallel calls all succeed under D1-like latency
Runtime: Shared core (affects Cloudflare/D1 and the in-process MCP path)
Version: titen-memory@0.2.1
What happened
Two mutations guard races with SELECT-then-write and nothing else. Every sibling that uses a primary key or unique index stays correct under the same conditions.
Reproduced by running the unmodified Titen core in-process behind a Db wrapper that adds latency to all()/batch() — i.e. what D1 actually costs, versus the synchronous bun:sqlite driver.
1.
Read the thread · 2026-07-31 · closed · 5 comments
Maturity roadmap: production interoperability and canonical-memory readiness
Context
We compared the current live Mem0 deployment (shared semantic recall through the Wulan memory service) with the published titen-memory@0.2.0 SDK/service. Titen has the stronger evidence/governance model, but it is not yet a drop-in replacement for an existing multi-agent semantic-memory pipeline.
This issue tracks the maturity work needed before Titen can be used as a canonical memory backend alongside or instead of Mem0.
Gaps to address
1. Production deployment and opera
Read the thread · 2026-07-31 · closed · 5 comments
[P1] integration: extraction cannot use providers that ignore strict JSON schema
Severity
P1 integration blocker for model-assisted enrichment on the current local/VPS provider route. Titen receives successful JSON responses, but none can enter the release validator because the provider does not enforce the requested strict schema.
Release identity
titen-memory@0.4.0- annotated tag commit:
729ec078d4bdc4490904c5c243a6dfa3c0647def - npm SHA-1:
df0ecc5d22c1261cde53ec6785b2f8c51de0897d - adapter:
src/core/extraction.ts - production bound: one claim per enric
Read the thread · 2026-07-31 · closed · 4 comments
S6 — List in the official MCP registry
S6 of the substitution and write-hygiene plan. Effort: hours.
Problem
registry.modelcontextprotocol.io/v0/servers?search=titen returns count 0, and the modelcontextprotocol/servers README routes every discovery query there. S2 hands people a reason to switch and no way to find us.
Spec
Publish to the official MCP registry. An afternoon. Do not treat it as strategy —
Read the thread · 2026-08-06 · closed · 2 comments
[P1] Add memory browse, correction, redaction, and history surfaces
Evidence
On healthy authorized 0.3.0: GET /v1/memories 404, GET /v1/claims 404, GET /v1/history 404, and GET /v1/observations 405. SDK/MCP lack a simple general browse/get/correct/forget/history workflow.
Acceptance criteria
- Paginated browse/search/detail for observations and claims with scope/status/category/time filters.
- Public lifecycle history with actor/reason/evidence.
- Correction as append plus atomic supersession.
- Privacy redaction/purge distinct from revoke/expire,
Read the thread · 2026-07-31 · closed · 2 comments
bug: every claim has a ~0.42 relevance-independent score floor, so compile returns and bills for items scored relevance 0
Runtime: Shared core
Version: titen-memory@0.2.1
What happened
RANK_WEIGHTS (src/core/rank.ts:3-10) gives relevance a weight of only 0.4. The other 0.6 is trust, recency, feedback utility and confidence — none of which depend on the query.
For a typical corpus (trust=verified, fresh, no feedback yet, confidence=0.9) every claim scores:
0.2 x 0.667 (trust) + 0.15 x 1.0 (recency)
+ 0.1 x 0.5 (utility, the no-feedback default) + 0.1 x 0.9 (confidence)
= 0.4233
[Read the thread](https://github.com/RamaAditya49/titen/issues/86) · 2026-07-31 · closed · 2 comments
### [P1] Ship a native OpenClaw memory provider with safe scope and lifecycle parity
## Summary
Titen 0.2.1 provides REST, SDK, and Titen-specific MCP tools, but it cannot replace the active OpenClaw memory slot. The documented host-native package is deferred, and the current surfaces do not provide standard memory tool or lifecycle parity.
## Current production baseline
The existing OpenClaw memory backend provides:
- `memory_search`, `memory_add`, `memory_get`, `memory_list`, `memory_update`, `memory_delete`, event status tools;
- bounded auto-recall, policy-controlled captur
[Read the thread](https://github.com/RamaAditya49/titen/issues/81) · 2026-07-31 · closed · 2 comments
## Most recent
### bug: [major] no audited administrator path to inspect same-organization private memory
## Severity
**Major** — this blocks the documented operator/recovery workflow in personal and self-hosted deployments. It is not a cross-organization leak or canonical data-loss bug.
## Runtime
Shared core and the Bun/VPS dashboard, reproduced on Titen `0.8.1` / commit `47172bff87b5118142204a1ccb7ea87d081304e8`.
## What happened?
A bootstrap/dashboard owner with wildcard scopes cannot inspect a private observation or claim written by another agent principal in the same organization. `POST /
[Read the thread](https://github.com/RamaAditya49/titen/issues/300) · 2026-08-15 · closed · 1 comment
### bug: an observation never reaches a compile — items is always empty until something writes a consolidation
**Runtime:** Bun/VPS
## What happened?
An observation stored through `POST /v1/observations` is never selected by `POST /v1/context/compile` for the same `subject_id`. `compile` answers `200` with `items: []` and `selected_items: 0`, so a client that writes observations and reads context back gets nothing it wrote.
Reading the API surface, this looks intended rather than broken: `compile` selects **claims**, and the only route that creates a claim is `POST /v1/consolidations`, which requires
[Read the thread](https://github.com/RamaAditya49/titen/issues/297) · 2026-08-13 · closed · 1 comment
### The nine compatibility tool names ship undocumented on titen.dev, so the substitution play has no discovery path
S2 (#279) shipped the nine `@modelcontextprotocol/server-memory` tool names, so a user can swap the reference server for Titen by editing one line of MCP config. **Nothing on titen.dev says so**, which means the substitution play currently has no discovery path.
## What is missing
`titen-web/scripts/check-docs.mjs:338` extracts documented tools with `/"(titen_[a-z_]+)"/g`. That pattern matches only the nine native tools, so the nine compatibility names pass the gate by being invisible to it ra
[Read the thread](https://github.com/RamaAditya49/titen/issues/285) · 2026-08-07 · closed · 1 comment
### S2 — Be a drop-in for `@modelcontextprotocol/server-memory`: same nine tools, same `memory.json`
**S2 of the [substitution and write-hygiene plan](https://github.com/RamaAditya49/titen/blob/main/docs/plans/active/2026-08-06-substitution-and-write-hygiene.md).** Effort: days.
## Problem
441,501 downloads/month go to a server Anthropic's own README calls "an educational reference implementation, not production-ready software", which we measured at recall@1 0.050 — the only non-noise gap in our entire table, against nulls everywhere else. Those users cannot switch, because switching means le
[Read the thread](https://github.com/RamaAditya49/titen/issues/279) · 2026-08-06 · closed · 1 comment
### S1 — Zero-config local mode: `npx titen-memory mcp` with no server, no org, no key
**S1 of the [substitution and write-hygiene plan](https://github.com/RamaAditya49/titen/blob/main/docs/plans/active/2026-08-06-substitution-and-write-hygiene.md).** Effort: days.
## Problem
To try Titen at all you must run a server, bootstrap an org, and hold an API key. The incumbent it beats 18x on recall@1 is one `npx` line with zero configuration. Titen currently asks for strictly more setup than the thing it outperforms, so no measured advantage can ever reach a user.
## Spec
`npx titen
[Read the thread](https://github.com/RamaAditya49/titen/issues/278) · 2026-08-06 · closed · 1 comment
### Add a hard result-count parameter (top_k) to POST /v1/context/compile
**Label this a titen-memory capability gap, not a defect.**
### Environment
- titen-memory 0.5.7, `POST /v1/context/compile`, `max_tokens=32000`, `max_candidates=200`
### Reproduction
Any compile call. There is no `top_k` (or `limit`) parameter on the request. The only levers are `max_tokens` and `max_candidates`.
### Observed
The only retrieval surface is a token-budgeted context pack. To evaluate or compare it at a fixed k, or to bound what a caller receives, the client must truncate `items
[Read the thread](https://github.com/RamaAditya49/titen/issues/229) · 2026-08-04 · closed · 1 comment
### version.json advertises plugin 0.1.0 while the published plugin is 0.2.0, and links release notes for the wrong version
`titen version --check` is documented as the single networked version check, and it reads `https://titen.dev/version.json`. Its `plugin` block is stale and its notes link points at an unrelated release.
**Reproduction**
```bash
curl -s https://titen.dev/version.json
# {
# "cli": { "version": "0.5.7", "released_at": "2026-08-01", "notes": "https://titen.dev/releases/0.5.7" },
# "plugin": { "version": "0.1.0", "released_at": "2026-07-31", "notes": "https://titen.dev/releases/0.4.0" }
# }
`
[Read the thread](https://github.com/RamaAditya49/titen/issues/221) · 2026-08-04 · closed · 1 comment
### [P2] docs: align enrichment state and external scheduler instructions
## Summary
Exact clean candidate `2854b7e176e6fe676ec9a21d9ec84db78d8d4628` implements opt-in automatic enrichment, but several repository and deployment documents still describe it as unimplemented or omit the drain required by an externally owned scheduler.
## Evidence
Current-state contradictions on that commit:
- `AGENTS.md:28-32` still describes the repository as the earlier direct-memory stage.
- `deploy/README.md:121-123` says extraction and consolidation are not implemented.
- `docs/
[Read the thread](https://github.com/RamaAditya49/titen/issues/175) · 2026-07-31 · closed · 0 comments
### [P0] bug: enrichment pre-leases a serial batch until later jobs lose their leases
## Severity
P0 reliability and replacement blocker for automatic memory management.
## Context
The current local implementation for #136 leases an entire enrichment batch at
one timestamp, then performs provider calls and commits serially. This is not
yet shipped in `titen-memory@0.3.0`; it must be fixed before the feature is
activated on Cloudflare, VPS, or a local computer.
## Deterministic reproduction
On the current #136 worktree, using a fresh temporary Bun/SQLite database and a
valid
[Read the thread](https://github.com/RamaAditya49/titen/issues/151) · 2026-07-31 · closed · 0 comments
### bug: MCP tool schemas omit enforced enums, invert readOnly/idempotent hints, and return two different result envelopes
**Runtime:** Shared core (`/mcp`)
**Version:** `titen-memory@0.2.1`
The HTTP MCP transport itself is spec-correct — it echoes the client's `protocolVersion`, returns 202-with-empty-body for notifications, supports batches and `ping`, surfaces tool failures as `isError: true` readable results, and blocks cross-origin by default (`Origin: http://evil.example` → `403 Cross-origin MCP requests are not allowed.`). The tool *schemas* are the weak part.
## 1. Published schemas omit enums the API enfo
[Read the thread](https://github.com/RamaAditya49/titen/issues/98) · 2026-07-31 · closed · 0 comments
### bug: project_id requires an opaque id with no MCP way to resolve one, and rejects owner/repo with a bare 404
**Runtime:** Shared core
**Version:** `titen-memory@0.2.1`
## What happened
`project_id` accepts only an opaque `project_…` id. A human reference such as `owner/repo` fails with a bare 404 that names neither the field nor the reason:
observe({project_id:"ramaaditya49/titen"}) -> 404 NOT_FOUND "Resource was not found." resolveProject("ramaaditya49/titen") -> 404 NOT_FOUND "Resource was not found." resolveProject("ramaaditya49/titen", true) ->
Read the thread · 2026-07-31 · closed · 0 comments
The remaining reports are on the project's issue tracker.