Skip to content
ONTO
Industry · Personal AI

Personal AI that actually remembers you.

A personal assistant that forgets you between sessions isn't one. ONTO's UPO + SMO model lets the assistant build a typed picture of you over time — and the async write path keeps it fast.

The pain.

Conversation memory dies with the session.

Standard chat agents forget your timezone, your preferences, your projects every time the buffer rolls over. They re-learn you every conversation, on your dollar.

Vector retrieval gets close, not correct.

"Show me notes similar to..." is fine for search. It is not fine for "what is the user's commute schedule." Personal AI needs facts that are true now, with provenance.

Memory writes block the next turn.

If you write to durable storage synchronously every turn, the user waits. The assistant feels sluggish even on fast models.

The model owns the user's data.

Most hosted assistants train on your data or at least retain it. Personal AI should keep the facts on the user's side of the boundary.

The primitives that map to it.

Each piece of the pain above maps to a specific ONTO primitive — not a workaround layered on top.

Typed UPO memory

User preferences, timezone, contacts, projects — stored as typed assertions with provenance and decay. Answers "what is true now" instead of "what is similar."

Async writes

extract_async=True spawns memory writes to a background task. The next LLM turn starts roughly one RTT sooner — the user perceives a snappier assistant.

Background summarization

Session→profile consolidation runs on a cheaper model in the background. Today's scratch becomes tomorrow's typed memory without blocking the user.

Open-weight + on-device

Defaults to open-weight Ollama Cloud. Or run a fully local Ollama and store everything in Sled — the user's facts never leave their machine.

A runnable example.

A daily digest assistant with three subagents (calendar, email, notes), async memory writes, and a cheaper-model background worker for summarization.

from onto import Onto, Models, BuiltinTools

onto = Onto(
    model=Models.GPT_OSS_20B,
    builtin_tools=BuiltinTools.STANDARD,
    background_memory=True,   # ← summarization on a cheaper model
)

# Three subagents feed the top-level digest.
calendar  = onto.subagent("calendar",  tools=["mcp:gcal:list", "mcp:gcal:create"])
email     = onto.subagent("email",     tools=["mcp:gmail:search", "mcp:gmail:reply"])
notes     = onto.subagent("notes",     tools=["mcp:notion:query"])

result = onto.run_sync(
    "Give me my morning digest. Calendar, important email, follow-ups from yesterday's notes.",
    user_id="dipankar",
    consent_scopes=["memory:write", "calendar:read", "email:read", "notes:read"],
    extract_async=True,       # ← async memory writes; next turn starts ~1 RTT sooner
)

# The background worker consolidates the session into UPO assertions
# (preferences, recurring contacts, project context) without blocking the user.

Considerations at scale.

Cross-device sync

Postgres backend with row-level encryption. The user owns the database; multiple devices read/write through the same ONTO HTTP server.

PII tags

Personal data writes carry [pii] tags. Retention and decay policies attach to the tag, not the call site.

Cost discipline

Foreground vs background cost is split. Background summarization can run on gpt-oss-7b while the foreground stays on a stronger model.

Subagent depth budget

A depth budget prevents runaway delegation. Each subagent's usage rolls up into the parent's cost view.

Personal AI

Build the assistant that learns you the right way.

Read the daily-digest example or the article on durable user memory.