Early alpha · Apache-2.0 · local-first

The open
Company State Runtime.

Models have context. Agents have runtimes. Companies need state. Superself keeps what your company intends, has decided, is doing, and can prove — readable by any agent, any session, any tool.

$ npm install -g superself
~/payments — self

~/payments $ self context

# payments

Card payments for merchants

- [goal] Payments a merchant can trust with real money

- [objective] Card payments go live for the first ten merchants (target 2026-09-30)

## Work in progress

- w-gzzab The payment flow passes its end-to-end proof [held by this session]

- 2 more open work items; run `self work --project 'payments'`

## Deadlines

- 2026-09-30: [objective] Card payments go live for the first ten merchants

## Index

- [decision] Store card data with the PSP, never in our database — PCI scope is the largest cost driver

- [decision] Retries are idempotent by request key — A double charge is worse than a failed charge

One command. A session that has never seen this project now knows what it is for, what is open, and what was already decided.

The problem

Two ceilings every agent team hits

One limits what a session can carry. The other limits how much you can hand off.

01

The continuity ceiling

Long-running projects outlive every chat, context window, model, and human memory. Each new agent spends time reconstructing the project, misses a constraint, or repeats a decision that was already made.

02

The supervision ceiling

Execution stops scaling when one person must decompose every request, watch every process, approve every step, and verify every completion. The human becomes the scheduler, message bus, and retry loop.

The two reinforce each other. Execution cannot be delegated safely without durable context, and durable context has limited value if a person still has to drive every action.

The work graph

Every unit knows its own state

Work is not a list of tickets to read. Each unit carries a required outcome, who holds it right now, and — when it is stuck — what it is stuck on and why.

A second session picks up the same graph without asking anyone what to do next.

~/payments — self

~/payments $ self work

w-gzzab active The payment flow passes its end-to-end proof [held by this session]

w-qmyk4 next Refunds reconcile against the PSP ledger daily

w-wrn22 blocked (on dependency) Webhook replay cannot double-credit an account

The evidence gate

"Done" is refused without proof

An agent reporting success is not the same as work being finished. Superself refuses the claim until it carries a commit, an artifact, or a statement of what verifiably happened.

This is the rule the engine enforces on the write path, and it is why a closed unit still means something months later.

~/payments — self

~/payments $ self work done w-gzzab

error: w-gzzab has no evidence for done — attach a report first (`self report

w-gzzab "<summary>" --evidence <commit>` or `--artifact <path>`), or state what

verifiably happened with `self work done w-gzzab --report "<what happened>"`

~/payments $ self report w-gzzab "End-to-end proof green on CI" --evidence e59c52a

report.added recorded [01kzbh2zb286ndckqkapnph26y]

~/payments $ self work done w-gzzab

entity.done recorded [01kzbh30m9jc30p9qw4rczr5yb]

Not an issue tracker

A decision is a person's call

Records are immutable once confirmed. Correcting one does not edit it — a new record supersedes it and carries the lineage, so the reason a direction changed survives.

And an agent cannot quietly retire a confirmed decision. The verb refuses, prints the record it would have replaced, and hands the command back to a person.

~/payments — agent session

~/payments $ self decide "… by merchant order id" --supersedes 01kzbh2p2a…

error: this retires a confirmed decision, and nothing was recorded — retiring a

record is a person's call, and this process has no terminal to make it at

01kzbh2p2ahe7jyk6qjrvhzqnp decision confirmed 2026-08-06T12:34:25.994Z (just now)

Retries are idempotent by request key

why: A double charge is worse than a failed charge

referenced by: nothing

a person runs this in their own terminal:

self decide "Retries are idempotent by merchant order id"

--supersedes 01kzbh2p2ahe7jyk6qjrvhzqnp

Not a memory service

No vector database, no index server

State is plain text: typed events in an append-only JSONL log inside a git repository your machine owns. Grep-able, diff-able, blame-able, portable.

Search answers from the live records themselves, and every registered project answers at once — the current one's rows first.

~/payments — self

~/payments $ self search "reconcil" --all

payments work w-qmyk4 (open) [work] Refunds reconcile against the

PSP ledger daily

merchant-app decision 01kzbh2xxp… [decision] The dashboard reads payments state,

never writes it — One writer keeps reconciliation ho…

Not a replacement for CLAUDE.md

It writes into the file you already have

Instruction files are the right place for stable operating rules. self connect renders a managed block into them that teaches any terminal agent the protocol and this project's current conventions.

What an instruction file cannot hold is the state that changes every session. That part stays in the log, and self context derives it on demand.

~/payments — self

~/payments $ self connect

managed block rendered into AGENTS.md, CLAUDE.md — commit them so every agent tool

loads it

CLAUDE.md

<!-- superself:begin v0.5.1 -->

## Project state (superself)

- Session start: run `self context` and treat its output as current truth.

- Done is a judgment, and the claim must carry evidence: `self work done <id>`

closes the unit only when a report carries a commit or an artifact, or the

done itself states one …

Start

One workspace, every project in it

The workspace is a git repository your machine owns, kept outside the code it describes. Register each project from its own directory; state never lands in the product repo.

Requires Node.js 22.12 or newer.

~ — self

$ npm install -g superself

~/self-workspace $ self init

workspace initialized at ~/self-workspace/.superself (views in "en")

~/payments $ self project init

project "payments" registered

managed block rendered into AGENTS.md, CLAUDE.md — commit them so every agent tool

loads it

Honest status

What works today

Every terminal above is real output from the shipped CLI. The complete runtime loop is the direction of the project, not a capability this release claims to have finished.

Shipped

  • A local-first CLI — no account, and the workspace stays on your machine
  • Typed events in an append-only log, folded into markdown any tool reads
  • self context compiled for the next action instead of browsed
  • Done refused until the claim carries a commit, an artifact, or a report
  • Irreversible record verbs handed back to a person, never minted by an agent
  • A managed agent block in CLAUDE.md, and git-backed workspace sync

Stated targets

  • Supervised execution through WorkSpec contracts
  • Cap-gated preset verbs
  • Anything hosted — the cloud is not being sold yet

Superself is an early alpha. Expect breaking changes while the event schema and verbs settle. The roadmap draws the boundary between what the engine enforces today and what is still a target.

Your agents forget. Your projects shouldn't.