Inspiration
LLMs are brilliant at answering static questions and amnesiac at everything else. Every session starts from zero. RAG helps, but it only retrieves, it never learns: it doesn't accumulate experience, notice it contradicted itself last week, or forget what's no longer true. We wanted to build the missing piece: a memory substrate that makes any agent measurably smarter the more you use it. And rather than ship one app, we built it as infrastructure one engine, many domains.
What it does
MemroTax is a domain-agnostic long-term memory substrate for AI agents. One memory engine powers many purpose-built agents ("verticals") that each get smarter over sessions.
It implements four explicit memory layers:
- Episodic — raw, timestamped, immutable interaction logs (source of truth).
- Semantic — extracted facts/preferences with Ebbinghaus decay(
confidence = confidence·e^(−Δt/τ)), τ configured per category. - Procedural — learned "how to help this user" patterns, reinforced on success.
- Reflective — meta-memory tracking which retrievals actually helped, boosting their salience.
On top of those: A contradiction reconciler (cosine similarity + an LLM judge — newer beliefs win by default but never silently; conflicts surface to a user inbox), a forgetting daemon (archives decayed memories — archived ≠ deleted, which powers a Time Machine), a token-budget-aware hybrid retrieval pipeline, and provenance on every answer (a "Why?" trace of the exact memories used).
We demo the same engine across three live verticals, career, codebase, medical plus19 more scaffolded as config files, and a cross-vertical insight that correlates patterns between domains (e.g. career-stress memories against medical symptom memories). The whole substrate ships as an importable @praxis/memory SDK.
How we built it
- Reasoning & extraction: Qwen Cloud, Qwen3-Max for agent reasoning and memory extraction, Qwen3-VL for multimodal capture (job-post / lab-result / code screenshots → structured fields), and text-embedding-v3 (1024-dim) for vector memory.
- Full stack: Next.js 16 (App Router) + TypeScript + Tailwind, with the substrate as a standalone library under
/lib/memoryand API routes as a thin layer over it. - Memory store: Neon Postgres + pgvector with HNSW indexes; every memory row is tagged with its
verticalso retrieval is domain-scoped by default and cross-cutting on demand. Hybrid search (vector + structured filters) → rerank by similarity × decayed-confidence × salience → token-budget packing. -Platform design: A singleVerticalinterface (categories, decay profiles, prompts, optional multimodal/seed adapters). Adding a domain is a config file zero changes to the memory engine which we prove by shipping 3 flagship + 19 scaffolded verticals.
Challenges we ran into
- Making forgetting useful not lossy.We tuned per-category τ so resolved acute facts decay while chronic ones persist, and made the forgetting daemon archive (never delete) so the Time Machine can reconstruct past states.
- Contradictions without silent overwrites. Paraphrased contradictions embed lower than exact ones, so a naive similarity gate missed real conflicts. We lowered the recall gate and used an LLM as the precision judge, then surfaced everything to a contradiction inbox.
- Proving the platform claim We forced ourselves to add new verticals via config only — if we ever needed to touch the engine, the abstraction was leaking.
- Genuinely climbing accuracy. The per-session accuracy curves are computed from real provenance (memories actually used), not hardcoded — they climb because the substrate accumulates knowledge across sessions.
Accomplishments we're proud of
- A truly vertical-agnosticsubstrate: all four memory layers + decay + reconciliation + provenance, extensible by config alone.
- Three flagship agents demoable end-to-end, with real climbing accuracy curves vs a flat memory-less baseline.
- A live forgetting demo (a stale lab result decays to ~3% while allergies stay at 100%) and a cross-vertical insight that only a platform can produce.
- Shipped as reusable infrastructure: the
@praxis/memorySDK skeleton.
What we learned
Memory is an architecture problem, not a prompt. The leverage is in the lifecycle decay, reinforcement, reconciliation, salience, provenance not in stuffing more into context. Qwen3-Max's structured-extraction quality made the semantic/procedural layers reliable enough to trust.
What's next
Confidence calibration (Brier scoring), adversarial self-check (the agent tries to disprove its own beliefs), goal and anti-pattern memory, and promoting scaffolded verticals (relationships, founder, caregiver, diaspora…) to live each one a config file away.
Built With
- neon
- next.js
- node.js
- pgvector
- prisma
- qwen-cloud
- qwen3-max
- qwen3-vl
- recharts
- tailwind-css
- typescript
- wen-cloud
Log in or sign up for Devpost to join the conversation.