Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

sms-baseline

A headless baseline for self-modifying software driven by agentic AI. Users prompt a model; the software’s behaviour changes live — no rebuild, no restart — and stays reliable because every change is a plugin that is judged before it mounts, undone mechanically when it fails or is disabled, and persisted so it survives restarts.

It is a set of packages, not an app. A downstream project installs the baseline, brings its own plugins (domain modules) and its own UI (any frontend against the JSON admin API), picks the drivers for its stack, and gets self-modification for free.

ring 0  @sms/kernel                      loader · registry · fibers · derived undo · event log · trust tiers
ring 1  @sms/plugin-sdk | @sms/contracts what agent code sees | the driver contracts
ring 2  drivers | plugins                store · host · executor · model · objects | http · collections · judge · agent-loop · admin-api · …
ring 3  @sms/baseline                    createBaseline() · createTenantPool()
ring 4  examples/* — and your app

Quick start

pnpm add "github:<owner>/sms-baseline#vX.Y.Z&path:/packages/baseline"   # + the drivers you use (see docs/getting-started.md)
import { createBaseline } from "@sms/baseline";
import { QuickJSExecutor } from "@sms/executor-quickjs";
import { createNodeHost } from "@sms/host-node";
import { createClaudeModel } from "@sms/model-claude";
import { openSqliteStore } from "@sms/store-sqlite";

const app = await createBaseline({
  store: await openSqliteStore("app.db"),
  executor: new QuickJSExecutor(),
  model: createClaudeModel(),
  plugins: [/* your plugins */],
  adminToken: process.env.SMS_ADMIN_TOKEN,
});
await createNodeHost({ port: 8787 }).listen(app.handle);

Documentation

Everything lives in docs/ (also published as an mdBook site — see docs/documentation-site.md):

Developing the baseline

pnpm install
pnpm check                 # typecheck · lint · quality gate · knip · tests with coverage — run before every push (no CI on main)
pnpm --filter @sms/example-reference-node-sqlite demo
git tag vX.Y.Z && git push origin vX.Y.Z   # cut a release; CD does the rest (docs/releasing.md)

Agent notes for this repo are in CLAUDE.md at the repo root.