Oh
Install Oh
Theme
Appearance

Agent memory framework

Agent memory with an ontology, not a pile of notes.

Oh is an ontology-driven memory framework for agents. It organizes what an agent learns into typed entities and relations, keeps every record and revision, and lets you trace, correct, and measure what the agent remembers.

macOS

Terminal
bun add --global @hraness/oh@0.14.1
Apple silicon and Intel · Requires Bun 1.3.14+

Free and MIT licensed · Bun 1.3.14 or newer · No account needed · v0.14.1

Oh is a memory framework with a unique ontology-driven approach. An agent's memory becomes typed entities, relations, and facts, each carrying its history and the records it came from. Recall returns the right level of detail for the task, every memory traces back to its source, and anything wrong is corrected in place.

Ask your agent to set it up: oh.computer

Keep the source with the claim.

Each memory is one of six record kinds and names the records it depends on.

Question inquiry
What you are trying to find out.
Source entity
The paper, dataset, person, or system itself.
Capture edition
The edition or extract that was read.
Claim statement
The claim, apart from who accepts it.
Citation evidence
A passage or table and how it bears on a claim.
Artifact view
A brief or answer that links to its records.

Open the evidence behind an answer.

Each write joins a history you can replay.

$ oh put --kind evidence --key evidence:table-2 \
    --depends-on edition:trial-report-v1 \
    --depends-on assertion:endpoint-12-weeks \
    --value '{"source":"entity:trial-report","locator":"table 2","relationship":"supports"}'
✓ Saved evidence:table-2 (generation 5).
Next: oh get evidence:table-2

$ oh get evidence:table-2
evidence:table-2 (evidence)
{
  "locator": "table 2",
  "relationship": "supports",
  "source": "entity:trial-report"
}
Depends on: assertion:endpoint-12-weeks, edition:trial-report-v1

$ oh verify
✓ Store checked: 5 records and 5 changes replay to the same state (generation 5).

Your agent proposes. Your app decides.

Agents propose what to keep; only your application’s code adds it to reviewed knowledge.

CLI, SDK, skill

Work with the same records from a terminal, TypeScript, or an agent.

All three read and write the same SQLite file.

CLI

Read a record from your file.

oh get evidence:table-2 \
  --db research.db \
  --space default

Run the first task

TypeScript SDK

Open the same file from your code.

import { Oh } from "@hraness/oh/sdk";

const oh = Oh.open({
  databasePath: "research.db",
});
oh.get("evidence:table-2");
await oh.close();

Read the SDK guide

Agent Skill

An agent checks the log before reading.

oh contract
oh verify --db research.db --space default
oh get evidence:table-2 \
  --db research.db --space default

Read the Agent Skill

Oh’s semantic search scored 88.87% on LongMemEval-S.

Each system answers the same questions with the same model and the same grader.

Oh semantic retrieval
88.87%
BM25 keyword retrieval
86.13%
Lab pipeline on Oh and BM25
93.07%

LongMemEval-S, cleaned revision 98d7416 · 500 questions · three runs · Completed 2026-09-26

GPT-5 mini answered every question three times and GPT-4o graded. Oh’s lead over BM25 is 2.8 points with a 95% interval from 0.0 to 5.6; the pipeline is not part of the Oh package and is in-sample.

Install

Install and start with a local database.

Latest release: v0.14.1

  • macOS
  • Linux
  • Windows
oh init
oh put --kind entity --key entity:ada-lovelace \
  --value '{"name":"Ada Lovelace","role":"mathematician"}'
oh get entity:ada-lovelace
oh search "mathematician"
oh verify

The first run on GitHub

Control

Keep your memory on your machine.

No account; nothing remote until you configure it.

Local by default
Records, the change log, and the keyword index live in a SQLite file you choose.
Remote services are opt-in
Hosted embeddings, sync, and remote libSQL run only when you configure them.

Questions

What to know before you install.

What is stored, and where?

One SQLite file holds your records, the log of every change, and a keyword index. The default is .oh/oh.sqlite.

Is semantic search required?

No. The CLI uses keyword search. The SDK can add local semantic search through QMD or hosted Cloudflare Workers AI embeddings.

Does a passing verification mean a claim is true?

No. It means replaying the log reproduced every record. Whether a claim holds lives in assertions linked to evidence.

Where can I run it?

The CLI and local SDK need Bun 1.3.14 or newer. The libSQL adapter also runs on Node 24, including serverless functions.

How does Wordcell relate to Oh?

Wordcell is a Markdown knowledge base built on Oh. Use Oh to build memory into your own application. Visit Wordcell.