v1.1.0 · Rust + SurrealDB · Apache-2.0

The agentic OS.

Your coding agents already run all day. SuperX captures every one of them — every message, every tool call, live and historical. Then it puts them to work: model the work as a graph, schedule it, and agents execute it in dependency order while the OS records them doing it. Every change is an insert; nothing is ever overwritten.

$ superx --initialize
OS: running in background (pid 1094)
UI: http://127.0.0.1:5150
kernel modules:
  kernel    active    entities  active
  capture   active    runner    active
  ui        active    hello     active
adapters:
  claude_code · gemini_cli · claude_desktop
OS running in background — capture is live.

The loop

Capture everything. Then direct it.

SuperX boots, finds the agents already installed on your machine — Claude Code, Gemini CLI, Claude Desktop — and reads their transcripts directly: full conversations, tool calls, token usage, backfilled history plus a live tail. No agent-side configuration, no hooks to install, nothing to remember to turn on. Sessions are identified agent/uuid7 and the raw transcript line is kept beside every message.

Then the loop closes. You model work as a graph of typed entities — products contain components, tasks carry instructions, tasks consult RAG sources, repos link credentials, documents attach anywhere. The runner schedules the graph: independent tasks dispatch in parallel, dependencies wait their turn, each executed by a spawned agent — whose session SuperX captures on its own dashboard. The OS directs the work and watches itself do it.

capture everything model work as a graph schedule the graph agents execute results land in the graph

See it

The dashboard, from a running instance

Every screenshot on this page is captured from a live SuperX instance — not a mockup. This is the core dashboard: what your agents did, what it cost, and what is happening right now.

SuperX core dashboard: agents, sessions, events captured, token and cache counters, an events-per-minute chart, a tool-usage donut, busiest sessions, message roles, boot durations and a work calendar
Status — live counters (agents, sessions, events, messages, tokens, cache hit rate, capture lag), events per minute, what the agents actually run, the busiest sessions, and a calendar built from the agent's own clock rather than capture time.

Total capture

Full transcripts from Claude Code, Gemini CLI and Claude Desktop — history backfilled on first contact, then a live tail with cursor checkpoints, so nothing is lost across restarts.

One live feed

Messages and actions merged in one stream over SSE, grouped by session, searchable back through all of history, each session in its own colour.

Cost and context

Prompt, output and cache tokens per session and per model, cache hit rate, context pressure, and the capture lag — read from the transcripts, not estimated.

CLI everywhere

Everything the dashboard shows is a command: agents, sessions, read, actions --live, status, logs — and the Console page runs them from the browser.

The product graph

The thing your agents work on

Entities are typed nodes joined by native graph edges: 18 types seeded and extensible at runtime — product, task, rag, model, document, text, repo, credential — with contains, depends_on, consults, describes, produced and more between them. Expanding a node costs its degree, never the size of the history.

A force-directed graph of a SuperX product: 23 nodes and 32 edges, a product at the centre with task nodes around it, contains edges in grey and depends_on edges in purple
A real product graph — 23 nodes, 32 edges. Grey is contains, purple is depends_on: every build task paired with the QA task that gates it. Click a node to re-root, drag to pan, scroll to zoom.
A SuperX entity detail page: breadcrumb ancestor path in the header, a task with its description rendered as markdown, its edges, attachments and attributes
One entity. The header breadcrumb is its real ancestor path through the graph. Long-form text — descriptions, instructions, comments — are themselves nodes linked by role edges, so every edit is a new version with its own history, and files attach as document nodes.

Types as data

Node and edge kinds are rows, not enums. Add review or dataset at runtime with one command — no schema change, no rebuild.

Text is a node

Descriptions, instructions and comments are text entities linked by role edges. Editing one appends a version; comments thread; one text can serve many entities.

Nothing is lost

Append-only throughout: updates insert versions, unlinks insert retractions, cancels append rows. Time-ordered uuid7 ids make the substrate its own historical log.

Its own dashboard

The entities module ships its own UI on its own port, discovered from the substrate and linked from the core dashboard — the module contract taken to its conclusion.

The runner

Schedule the graph; agents execute it

A schedule row says one thing: at this time, kick this entity. Everything else already lives in the graph. The runner resolves the target's subgraph, layers the task nodes over their depends_on edges, and dispatches each wave — independent tasks in parallel, dependants only after their dependencies have a successful run in this firing. Cycles are refused with the path named.

Each task spawns the agent command you configured, with a prompt assembled from the task's instructions, the product's description and the attributes of everything it links to. Output writes back into the graph as a produced text node. Every run pins the exact version of the instructions it dispatched with, and the subgraph is re-read at every wave — so editing the graph mid-run steers everything not yet dispatched.

dry run — the waves the graph implies
$ superx runner plan <product>
wave 1:
  01a01b4b-e2c6  Kernel changes
wave 2:  (parallel)
  01a01b4b-e33b  Build module A
  01a01b4b-e3b7  Build module B
wave 3:
  01a01b4b-e431  QA module A
4 tasks in 3 waves
then let it run
$ superx runner config agent_cmd claude -p
$ superx runner schedule <product> --in 10s --every 1d
$ superx runner runs
  firing 01a01b4b  task 01a01b4b-e2c6  done  → 01a01b4b-f469
  firing 01a01b4b  task 01a01b4b-e33b  done  → 01a01b4b-f54c

The executor command is a substrate parameter with no default: until you set it, dispatch refuses loudly and nothing spawns.

Modules

A kernel, and everything else is a module

L1
Kernel — boot, discovery, the capture engine, the telemetry firehose, the append-only substrate verbs, the module registry. The hub every module talks through; modules never depend on each other.
L2
Adapters — per-agent capture with tolerant parsers, per-file cursor checkpoints and history backfill.
L3
Modules — each self-contained: its own database and service account, its own directory, log, CLI namespace, parameters, uuid7 identity, and optionally its own UI. Enable or disable them live; several of a kind can coexist.
L4
Agents — spawned by the runner, observed by the adapters: the loop that makes this an OS rather than a logger.
modulewhat it ownscli
kernelthe substrate, boot, the module registrysuperx status · logs
capturethe capture loop over every discovered agentsuperx agents · sessions · read
uithe core dashboard — status, live feed, sessions, consolesuperx ui url
entitiesthe product graph — nodes, native edges, texts, documents, its own UIsuperx entities …
runnerschedules, dependency waves, agent dispatch, write-backsuperx runner …
websitethis site
hellothe contribution template — copy it, ship a modulesuperx hello greet

Install

One command to a running OS

clone + build
git clone https://github.com/k8nstantin/superx
cd superx && cargo build
initialize — prompts for a password, provisions, boots, returns your terminal
target/debug/superx --initialize
confirm capture, open the dashboard, build a graph
superx sessions
superx ui url            # → http://127.0.0.1:5150
superx modules provision entities && superx restart
superx entities create --type product --describe "what it is" Widget X

Upgrades are the same three steps: git pull, cargo build, superx restart — the substrate schema self-upgrades on version mismatch.

Your agents are already talking.
Start listening — then start directing.