Build AI agents as simple as writing a function.

Memory, database, LLM, compute, observability, and context engineering — all built in. No infrastructure to learn.

agent.ts
import { Agent } from "oncell";
const agent = new Agent("support");

agent.chat(async ({ message, user }) => {
  const docs  = await agent.files.search(message);
  const reply = await agent.llm(message, { context: docs });
  await agent.memory.forUser(user.id).append("history", { message, reply });
  return reply;
});

USE FROM YOUR APP

import { OnCell } from "@oncell/sdk";
const oncell = new OnCell({ apiKey: "oncell_sk_..." });

// one-shot — wait for the final reply
const reply = await oncell.run("support", "chat", { message });

// real-time — stream each step as it happens
for await (const event of oncell.stream("support", "chat", { message })) {
  console.log(event.type, event.data);
}
AGENT RESPONSE STREAM
search docsfound 3 articles matching "login issues"
call LLMgenerating response with context from 3 docs
save memoryuser_42 → conversation history updated
replied "Try resetting your password at acme.com/reset..."
3 steps · 1.8s · $0.003

BUILT INTO EVERY AGENT

agent.llm()
Call any model. Built-in, metered. Zero API keys.
agent.memory
Durable KV state. Survives crashes. Per-user with .forUser(id).
agent.files
Persistent filesystem with built-in search. RAG included.
agent.db
SQL database. No connection strings, no ORM.
agent.shell()
Shell commands in a gVisor-isolated sandbox.
agent.askHuman()
Pause for human approval. Resumes when resolved.

+ agent.sleep() · agent.schedule() · agent.onWebhook() · agent.onEmail() · agent.chat() · oncell trace · see all →

AGENTS THAT NEVER LOSE WORK

Every await is a checkpoint. Crashes recover. Deploys are safe. No workflow engine.

agent.task("refund", async ({ orderId, amount }) => {
  const order = await agent.db.query(`SELECT * FROM orders WHERE id = ${orderId}`);

  // Agent parks here — can wait days for approval
  const ok = await agent.askHuman({ question: `Refund $${amount}?`, channel: "slack" });

  if (ok) await agent.llm("Process the refund");

  // Sleep 30 days, then follow up
  await agent.sleep({ days: 30 });
  await agent.llm("Check if customer is satisfied");
});

WHAT PEOPLE BUILD

Customer support
Per-user memory, RAG over docs, approval gates, scheduled follow-ups.
Coding agent
Reads code, writes files, runs tests, iterates until it works.
Data pipeline
Processes rows durably — crashes at 347, resumes at 348.
Ops monitor
Receives alerts by email, triages with LLM, escalates to Slack.

Build your first agent.

Get started