Your AI forgets you every time
Automatic fact extraction and relevance-ranked injection. Facts come out of the conversation on their own and go back in when they matter. LIVE
The memory engine →UPtrim is an OpenAI-compatible reverse proxy that runs on your machine, between your chat app and every LLM you use. It gives any local LLM permanent per-user memory. Local-first: cloud providers are opt-in, and local_only mode never leaves your machine.
Everything on this page carries a status chip, because not everything ships switched on. That is deliberate — and it is how you should read the rest of this tour.
Every feature in UPtrim exists because one of these six things kept happening. The rest of the page is those six answers in detail.
Automatic fact extraction and relevance-ranked injection. Facts come out of the conversation on their own and go back in when they matter. LIVE
The memory engine →Upload 33+ file types and ask in plain language. “Employee compensation” finds the “salary breakdown” section with zero keyword overlap. LIVE
Files & RAG →Every backend in one dropdown, auto-routing by task complexity, and a real generation scheduler behind it. LIVE SCHEDULER: ONE SWITCH AWAY
Routing & scale →Five-tier identity resolution and complete per-user isolation, plus token budgets, curfews and parental controls. LIVE
How teams work →Ghost researches the live web while your request is still being prepared, so the answer arrives with no added latency. LIVE Standard+
Ghost →Running summaries plus proactive compression at 60% of the context limit — trimmed, not truncated. LIVE
Context handling →UPtrim speaks OpenAI-compatible on both sides. It is invisible to both: your frontend thinks it is talking to the LLM, your backend thinks it is getting normal requests. Point one base URL at it and everything else is additive.
/v1/chat/completions, it works. cloud providers are opt-in, Pro tier.http://<host>:9099/v1 — and go.ENABLE_FORWARD_USER_INFO_HEADERS=true on the Open WebUI container before you start. Without it Open WebUI never tells UPtrim who is talking, so everybody lands in one shared memory pool. It is the single most common setup problem, and it is one line.
A full browser chat UI ships with it — conversations, model picker, memory chips, uploads. Plus a Python CLI client, a native desktop window, and a terminal app. Six ways in, all included.
Start a chat in Open WebUI. Continue it in SillyTavern. Ask about it from n8n over MCP. Same identity, same facts, same files — because UPtrim holds the state, not the frontend.
Model aliases let users ask for coder and get whatever you pointed that at. The virtual Auto model routes by task complexity. Your frontend never learns a new name. Standard+
No credit card, no account, no seat count. Unlimited memories, unlimited files, unlimited users, one backend, 15 MB per file. Everything in these six cards runs offline on your own machine.
320 hand-tuned regex extractors plus spaCy catch facts in microseconds. A rate-capped local-LLM pass covers what they miss. Ten categories — identity, work, health, dietary, family, technical, preferences, people, communication, general — each with its own priority, always-inject flag and expiry.
bge-base-en-v1.5 embeddings run in parallel and merge via Reciprocal Rank Fusion, with weights that shift by intent.33+ file types in, plain language out. UPtrim works out which file you meant — ask about “employee compensation” and it finds the “salary breakdown” section with zero keyword overlap.
filename (chars X–Y), not a vague gesture at the document.Five-tier identity resolution figures out who is talking — forwarded user headers, custom headers, signed tokens, account links, fallback. User A never sees User B’s data. Unlimited users on every tier including free.
Models from all of your LLM servers appear in a single list, each with its own context window. One backend on free, five on Standard, up to unlimited on Enterprise.
reasoning_content so your UI renders them collapsed. Untagged chain-of-thought is detected too — Qwen3, QwQ, DeepSeek-R and GLM-4 all behave.Admin dashboard with an Easy mode and an Expert mode (every setting, grouped, searchable, applied live), a browser chat SPA, the per-user /my-memory page, a Python CLI chat client, a Rust terminal app, and a native desktop window.
npm i -g uptrim-cli — a real out-IDE coding agent, prebuilt for six platform targets./my-memory.Every setting is typed, validated and clamped at save time, and carries a stability badge — stable, experimental, or inert. Nearly all of them apply the moment you save; the rare exception wears a RESTART badge.
Developer is free for life on v1.x — same key for everyone, no account needed: 4XC7N-K2RS3-NXSF6-M5CXA-AL8PU
Paid tiers add backends, file size, Ghost research, cloud providers, the knowledge graph and fleet — but the engine above is yours, offline, today.
The next generation of the memory engine does not get switched on by decree. It ships in shadow — running beside the live path, scored against it on real traffic — and only gets promoted when the numbers earn it. Two engines are in that state right now, and you can watch both.
Where the fast lane stores what you said, Atlas tracks what it believes about you: confidence scores, eras (true-then versus true-now), dialogue witnessing, mood-aware hedging, contradiction-driven clarifying questions, and overnight adjudication run by your own local model.
Fresh installs start on legacy. The lifecycle is legacy → shadow → primary, and it is yours to advance.
New-vocabulary recall went 0.122 → 0.551 at 0.864 precision, legacy-corpus recall held at 1.000, and the fast lane stayed byte-identical — nothing that already worked got worse.
Injection grows a brain. Expired and contradicted memories are guarded out before they can mislead. Surviving candidates are rescored by belief confidence. A working-set model stops facts flickering in and out between turns. Knowledge-graph hops pull in related context, and the whole thing is allowed at most one gentle nudge per conversation.
While your request is being prepared, invisible specialist workers race a 5,000 ms deadline — fetching the URLs you pasted, searching the live web, deep-scanning your memories. Whatever finishes inside the window gets injected. Whatever does not, does not hold up your answer. Zero added latency, by construction.
A learned router scores all 13 specialists from 15 signals per turn, backed by a 2,912-entity gazetteer, with per-route weights that improve from real outcomes. Same lifecycle as the rest of the brain: legacy → shadow → primary.
DDGS engines, SearXNG, Brave, Google CSE, Tavily and friends, fused with a mini-RRF and per-engine circuit breakers. Keyless out of the box. Honest caveat: some networks strangle some scrapers — that is exactly why the backends are pluggable and the breakers exist.
Fetched pages are condensed by a local model into 4–6 attributed claim lines above the raw sources, so the model reads a brief instead of drowning in HTML. On timeout it falls back to raw text rather than failing.
“I need more detail” re-searches the topic you were already on. Strictly gated: a new question never inherits the old one’s research.
Good research that did not fit this turn’s budget is not thrown away — it is carried into the next relevant turn. A fact-checker cross-checks claims against your stored memories for contradictions.
If the model starts to say “I don’t have access to current information…”, Ghost catches it mid-stream before a single byte reaches you, fires a search, and regenerates. Ships off; roll it out when you want it.
Two extra background workers, off by default. An analyst pulls entities and relationships out of the knowledge graph to spot the gaps in what you have; a predictor guesses the likely follow-up and pre-warms the search cache for it. Local heuristics only — no LLM call is made to do either. Pro tier and up.
Every researched reply carries a source status line — 🔍 9 sources checked · 2 carried over · distilled · 3 memories — so a background system never gets to be a mystery. And every outbound fetch is DNS-pinned and SSRF-filtered: the connection goes to a vetted IP, redirect and DNS-rebinding tricks fail closed, and private addresses are never fetched at all.
Click a scenario to see what happens.
You mentioned weeks ago that you write Python and prefer dark mode. UPtrim extracted those facts and stored them. Next session they are back in context automatically — and the reply tells you which ones it used.
Regex plus spaCy extract facts in microseconds. FTS5 and embeddings retrieve them in parallel and merge with Reciprocal Rank Fusion. Intent decides how the weights tilt.
Upload a PDF, a spreadsheet, a codebase export. Ask a normal question. UPtrim works out which file you meant and pulls only the relevant chunks into context — with citations down to the character range.
33+ formats. The Inspector runs 13 format-specific analyzers while the GPU is idle, so an upload never slows down a chat.
Ask about something that happened after your model was trained. Ghost researches it while the request is still being assembled, and the answer arrives with sources attached.
Specialists race a 5,000 ms window. Pages are distilled into attributed claim lines. Everything fetched is DNS-pinned and SSRF-filtered. Standard tier and up.
Sarah asks about her meeting notes. Mike asks about his Python script. Their memories, files and conversations never touch.
Five-tier identity resolution reads who is talking from your chat app. Unknown users are handled by an identity mode you choose: strict, required, quarantine or legacy.
One GPU and five people is a queueing problem, not a prompt problem. UPtrim treats it like one — with real queues, real fairness, and honest messages when you have to wait.
A real queue per backend, with priority classes and per-user fairness. Users see where they stand: ⏳ queued #2 · ~40 s · preparing context… Research keeps running during the slot wait, so the wait is not wasted.
Pick home, team or business and ten interacting caps move together — 40, 150 or 400 concurrent; 30, 60 or 120 requests per user per minute; queue depth 20, 60 or 200. Chosen automatically from your license.
Auto-detected and promoted to the primary tier with zero configuration, because they are the ones that actually hold up under concurrency.
Under load, everyone gets a slightly smaller budget so that everyone stays served instead of the last three people timing out. Floors are protected. Currently measuring itself against the live policy.
Extra backends that wake up when queues get deep and go back to sleep afterwards, with spend caps attached. Ships empty — you decide what it is allowed to wake.
One persistent writer, group commits measured at 133–171 operations per commit under a 25-node hammer, write coalescing that turns 20 bumps into one write, a separate relaxed-durability audit database, and crash-tested turn atomicity.
A roughly two-second probe at boot measures your real fsync latency, detects hostile locations — cloud-synced folders, network shares, WSL mounts — verifies WAL mode, tunes commit pacing to the disk it actually found, and warns you loudly if you put your database somewhere that will hurt. Most “my AI is slow” reports are a Dropbox folder.
The memory brain always runs on your hardware — extraction, retrieval, Atlas, Muse, REM, the knowledge graph, all of it. Cloud models are something you add on purpose, and can switch off completely.
Anthropic over OAuth — no API key to paste or leak — plus OpenAI, Google Gemini, and OpenRouter for 100+ more models. Claude Opus 5, Claude Sonnet 5, GPT-5 and Gemini all sit next to your local models in the same dropdown. Local stays the default.
Decomposes a turn into typed subtasks, routes each to the best available backend under cost, latency and quality constraints, runs what it can in parallel, and assembles one answer. Ships off, and labelled experimental for a reason.
Every cloud call is logged with its estimated cost, per model and per user. Local calls log as zero, which is the point.
local_only LIVEOne mode setting that keeps everything on-machine. Nothing about the memory engine depends on a cloud provider being configured — the free tier proves that, because it has none. When people say “local-first” they usually mean “local until we need a server”. Here it means there is a setting whose entire job is making sure that never happens.
Agent mode plans, acts and iterates — web search, file editing, code execution — across 17 classic tools with hard caps and per-tool enable/disable. It does not run until you say so, and even then it is confined by default.
File and shell tools are confined to a workspace unless you configure a project root. No configuration means confined, not unrestricted — the safe state is the default state.
Sub-agents run subtasks in parallel with their own scoped slice of memory. Hyper Mode dispatches them to idle boxes on your network. EXPERIMENTAL Pro+
Workers pull from a shared frontier and every claim faces skeptic judges that refute by default. Only majority-confirmed findings come back. Pro+
An 11-signal weighted scorer decides when a message actually wants an agent, replacing a six-phrase regex list. Measuring itself against the old list before it takes the wheel.
Successful runs are distilled into reusable playbooks with outcome-weighted trust, so the second time you ask for something the agent already knows the shape of it.
Per-run token and wall-clock budget ledger, where children can never outspend their parent’s slice ONE SWITCH AWAY. Standing directives — “watch X, tell me when Y” — deliver findings to the mailbox ONE SWITCH AWAY. A nightly self-evaluation grades its own week and recommends config changes, but never applies them LIVE.
mind model and 2–3 of your models reason together, with convergence detection and an echo-chamber guard; code answers can be grounded by running in a sandbox so the panel argues about real output. Never fires unless you ask for it by name. EXPERIMENTALMemory is only half of it. The other half is what you can wire into — an MCP server, a visual programming board, a plugin language, and a terminal coding agent.
A full Model Context Protocol server at /mcp/, auto-started with the proxy: memory tools, files and shell, LLM helpers, 10 LSP code-intelligence tools, a scratchpad, cloud delegation and blueprint tools — 40 in the current registry. Point n8n, Claude Desktop or any MCP client at it.
Approvals default to the safer side: reads are auto-allowed, writes pause for approval on the dashboard. Standard+
A node-board IDE at /visualcoding: wire blocks pin-to-pin and get a real, readable Python file back. The blueprint and the code are the same artifact, round-tripped losslessly through the AST — edit either side. Export-only by design: nothing executes inside the board. Login-gated.
A plugin language plus a native Python loader for extraction rules, injections, filters, middleware and agents. Fail-closed permissions, per-plugin state, versioned migrations and SSRF-guarded HTTP. Ships off, and stays off until you decide otherwise.
npm i -g uptrim-cli installs a real out-IDE coding agent: inline diff approval, /agentic autonomous loops, /fix-tests that runs and repairs until green, a workspace tree, a syntax-highlighted viewer, ripgrep /find, a /dual split-screen review, memory-aware coding and cross-session TODO carry-over. Prebuilt for six platform targets.
Honest caveat: the step cap is the reliable brake. The dollar cap is best-effort.
Nothing about this system is supposed to be a black box. Every memory, every setting, every decision is inspectable from a browser.
Easy mode and Expert mode, a guided tour, and a Brain panel that shows what is genuinely switched on.
Click to learn moreUsers manage their own memories without an admin in the loop — including deleting things.
Click to learn more500+ settings, each one typed, validated, clamped and documented by a generator that cannot lie.
Click to learn moreA memory proxy is the single most sensitive process on your machine, because it is the one that knows all of it. That shaped the defaults.
Salted PBKDF2, required even when you are connecting from localhost. There is no “it’s just my laptop” escape hatch, because laptops end up on hotel Wi-Fi.
Every outbound fetch connects to a vetted IP address. Redirect chains and DNS-rebinding tricks fail closed. Private and link-local addresses are never fetched, so a pasted URL cannot become a port scan of your LAN.
Agent file and shell tools are workspace-confined until you configure otherwise. Plugins run under fail-closed permissions. The unconfigured state is the safe state everywhere it matters.
Paste a key by accident and it never reaches the database: 36 built-in patterns catch credentials before storage — always on, no setting to forget. AWS, Anthropic, OpenAI, GCP, Azure, GitHub, GitLab, Slack, Discord, Stripe, npm, PyPI, Docker, Sentry, Datadog, New Relic, PEM private keys and JWTs are all in the list.
In shared or team memory the fact is rejected outright. An auto-extracted fact becomes a redacted placeholder that is never injected into a prompt, and a manual save is redacted in place. Every catch shows up as a brain event in the dashboard, so you find out.
API keys and tokens are masked in every API response. Tunnel tokens, search-provider keys and your license key are encrypted at rest with AES-256-GCM under a machine-derived key, so a config file copied off the box is useless elsewhere. Forwarded headers are checked for spoofing before identity is trusted. TLS is verified. PIN comparison is constant-time.
A 25-agent adversarial review was run against this build specifically to break it. All 20 confirmed findings were fixed before shipping. Responsible disclosure goes through the contact form.
Memories, files, users and history live in one relocatable data folder on your machine. There is no telemetry and no analytics — not in the product, and not on this website either.
Every tier gets the full memory engine and unlimited users. What changes is how many backends you can wire up, how big a file you can throw at it, and which of the heavier subsystems unlock. Monthly, cancel whenever.
UPtrim itself is light — the heavy lift is whatever LLM you point it at. It handles memory; your GPU handles inference.
RTX 3060 12 GB on a budget, RTX 4090 or 5090 if you have one. Via llama.cpp, Ollama, vLLM or SGLang.
ROCm through compatible backends. Ubuntu 24.04 is the smoothest road.
Metal and MLX through the backend of your choice. macOS build included.