CLI
Read one record from the local database and space you select.
$ oh get evidence:table-2 \
--db research.db \
--space defaultOpen-source tools for agentic research
Oh
Oh gives your agents a local path from a question to a cited artifact: sources, claims, citations, and a verifiable history of every change, in one SQLite file on your machine.
Ask your agent to file the trial report as a source, record its 12-week endpoint as a claim, cite table 2, and verify the graph before it drafts the brief.
Free and MIT licensed. Bun 1.3.14 or newer, no account, no hosted model. Current release v0.4.2.
$ oh init --db research.db
{"head":{"generation":0,"graphRevisionSha256":null,"operationSha256":null,"recordsSha256":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","sequence":0,"v":1},"spaceId":"default","v":1}
$ oh verify --db research.db
{"head":{"generation":0,"graphRevisionSha256":null,"operationSha256":null,"recordsSha256":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","sequence":0,"v":1},"operations":0,"records":0,"sqliteIntegrity":"ok","v":1}Counted from the oh.ontology.v1 contract manifest and source CLI 0.4.0 on September 5, 2026.
The research model
Oh supplies a versioned graph envelope and a small ontology kernel, so a research application can map the work people already recognize onto explicit records. An attributable assertion sits between a claim and the evidence that bears on it, and product vocabularies refine the profile through versioned schemas without changing the v1 envelope.
Keep the question and its investigation trail as a durable object instead of leaving it in a prompt transcript.
Record kind inquiry
Give a paper, dataset, person, or system a stable identity that survives changing titles, files, and URLs.
Record kind entity
Pin one edition or extract of a source to the profile your application registers, with its dependencies intact.
Record kind edition
Store the proposition separately from who accepts it, where it applies, and what evidence bears on it.
Record kind statement
Record how a located passage, table, or observation supports, contradicts, or otherwise bears on an assertion.
Record kind evidence
Produce a review brief, answer, or other derived view whose input records stay addressable.
Record kind view
One review, traced
The keys below trace one possible review profile. At the citation step, the record names its claim stance and captured source edition as dependencies, and the digest binds the complete record. The append-only log behind it gives you a verifiable operation history.
inquiry:primary-endpointentity:trial-reportedition:trial-report-v1statement:endpoint-12-weeksassertion:endpoint-12-weeksevidence:table-2view:review-brief$ oh get evidence:table-2 --db research.db
{
"dependencies": [
"assertion:endpoint-12-weeks",
"edition:trial-report-v1"
],
"key": "evidence:table-2",
"kind": "evidence",
"recordSha256": "e19a2a8e0d951c8332c95bd11d07213bf2d99ccd6a46e1c7d2eb30487c86d9e4",
"v": 1,
"value": {
"locator": "table 2",
"relationship": "supports",
"source": "entity:trial-report"
}
}Interfaces
The CLI, TypeScript SDK, and packaged Agent Skill operate the same records and contract. There is no separate agent-only path behind the convenient one.
Read one record from the local database and space you select.
$ oh get evidence:table-2 \
--db research.db \
--space defaultRead the same record through the local Oh facade.
import { Oh } from "@hraness/oh/sdk";
const oh = Oh.open({ databasePath: "research.db" });
try {
const citation = oh.get("evidence:table-2");
console.log(citation?.recordSha256);
} finally {
await oh.close();
}Teach a coding agent to check the contract and replay before it reads.
oh contract
oh verify --db research.db --space default
oh get evidence:table-2 \
--db research.db --space defaultThe kernel
Oh makes integrity and provenance mechanics inspectable. It does not turn a retrieval score, a valid digest, or an agent's output into an accepted research claim.
Current release · v0.4.2
bun add --global @hraness/oh@0.4.2
oh --helpoh init
oh put --kind entity --key entity:ada-lovelace \
--json '{"name":"Ada Lovelace","role":"mathematician"}'
oh get entity:ada-lovelace
oh search "mathematician" --mode keyword
oh verifyPublic release verification. Needs Bun 1.3.14 or newer. The first task creates one entity, reads it back, finds it through the keyword index, and verifies the operation chain. Oh writes to .oh/oh.sqlite and the default space unless you choose another. Read the full first run on GitHub.
Questions
No. The CLI, local SDK, records, operation log, and keyword index use the SQLite file you choose. Nothing asks you to sign in, and the local path involves no hosted model and no remote database.
One SQLite file holds the contract manifest, content-addressed records, the append-only operation log, and the derived keyword index. Oh writes to .oh/oh.sqlite and the default space unless you choose another path or space. Semantic caches and remote copies exist only where you configure them.
No. Keyword search works without a model. Local semantic search uses the optional QMD peer dependency with a pinned EmbeddingGemma profile, and a hosted embedding cache through Cloudflare Workers AI and libSQL is a separate, explicit profile. Both are rebuildable views joined back to the current record digest.
No. Verification checks canonical records and operation-chain integrity. Keyword and semantic scores are retrieval evidence. Truth, review, and acceptance remain explicit research decisions represented by the graph around a claim.
Generation compare-and-swap rejects a stale local write. Sync settles fast-forward histories only; divergent histories fail closed so an application can preserve both logs and ask for a deliberate reconciliation.
Nothing. Oh is MIT licensed and published on npm as @hraness/oh. The base package has no required runtime dependencies; the optional peers for local semantic search, libSQL, and Datalog projection install only when you use them.
The CLI, local SDK, and SQLite store require Bun 1.3.14 or newer. The runtime-neutral store contracts and the direct libSQL adapter also support Node 24 serverless runtimes.
Ben Guo, a musician and builder, formerly a founder and engineering leader at companies including Venmo and Stripe, now building from Puerto Rico. Oh is published by Hraness under the MIT license.
The maker
Oh is built by Ben Guo, a musician and builder, formerly a founder and engineering leader at companies including Venmo and Stripe, now building from Puerto Rico. Oh is his open-source kernel for research done with agents, published by Hraness under the MIT license.
Install the CLI, create one local database, and let your agent write records you can open later.
Free and MIT licensed. Bun 1.3.14 or newer, no account, no hosted model. Current release v0.4.2.