← All tools

memento-engineering/genesis

Popularity 75 Updated AI & Agents

A framework-agnostic, bare-VM Seed → Branch keyed-reconcile engine — Flutter's element model extracted to pure Dart — plus the A2UI v0.9 wire, a terminal render backend, and a schema-first node catalog.

githubauto-collected

Installation

A directly usable install command is not verified yet. Check the project documentation or releases.

genesis

A framework-agnostic, bare-VM Component → Element keyed-reconcile engine — Flutter's element/reconciliation model extracted to pure Dart — and the layers built on it: a measurement domain, schema-first codegen, the A2UI v0.9 wire format, a terminal render backend, and an enforce/reject action substrate.

genesis is positioned as the substrate and framework-agnostic renderer for the A2UI ecosystem: it speaks the same v0.9 wire as Google's flutter/genui, but runs with no Flutter / dart:ui dependency, so an agent can author, drive, render, and act on a UI tree on a plain Dart VM.

The engine deliberately stops at Component → Element: it reconciles desired state into live identity, and what that identity spawns and owns — the artifact layer — is each consumer's to define (a character grid, a serialized observation, live processes). See "The artifact layer — deliberately not shipped" in the tree README, and docs/design/artifact-layer-extension-pattern.md for the four pieces a consumer defines, with typesetting, perception, and thegrid's Allocation Tree walked end to end.

Status: pre-1.0. The engine and domains are well-tested and ADR-grounded, but the composition layer is still experimental (see Stability) and some wire/render surface is deliberately deferred — see docs/release-scope.md.

Packages

| Package (dir · pub name) | What it is | |---|---| | tree · genesistree | the engine — Component (immutable config) → Element (mounted node), BuildContext (a separate capability handle, never the element), BuildOwner (scheduler), keyed reconcile, and an experimental composition layer (Stateless/Stateful/State, InheritedComponent, Watch, HookComponent — hooks, MultiChildComponent, and the SingleChildComponent/Nest chain) | | perception · genesisperception | the measurement domain, rebuilt on the tree spine by subclassing | | taxonomy · genesistaxonomy | schema-first node catalog → a Dart factory registry and an LLM tool schema (codegen, one source of truth) | | dialogue · genesisdialogue | the A2UI v0.9 wire: the updateComponents codec, a receive-side surface that reconciles re-emissions by key, and action-message parsing | | typesetting · genesistypesetting | a bare-VM cell/ANSI render backend — render-bearing tree vocabulary (a terminal A2UI renderer Flutter structurally can't offer) | | consent · genesisconsent | the enforce/reject action substrate: validates an action by hit-testing the live tree against catalog-declared affordances, enforcing or refusing with a structured, side-effect-free outcome | | tmux · genesistmux | a zero-dependency, injection-safe tmux client for supervising long-lived agent panes — off-spine, depends only on meta |

Plus apps/console (genesisconsole, publishto: none) — the terminal driver app that renders an A2UI surface to a character grid and drives it from natural language.

The dependency arc: tree ← perception; taxonomy (codegen); dialogue (consumes taxonomy + tree); typesetting (render backend on tree); consent (consumes dialogue + taxonomy + the live tree); tmux sits off-spine (no genesis dependencies).

Build & test

A Dart pub workspace driven by Melos.

dart pub global activate melos   # once
dart pub get                     # resolve the workspace
melos run test                   # all package tests
melos run analyze                # dart analyze
melos run format                 # formatting check

Pure Dart, no Flutter — everything runs on the bare VM.

Design model

Consumers of genesistree follow the D–H tree-consumption doctrine: five rules for dependency tracking, reactive reads, service boundaries, pure descriptions, and I/O.

genesis is built decision-first, tracked in the decision register at docs/decisions/:

  • the register itself — every AI-made API/naming/semantic decision lands

here directly, status: accepted on write, per the format specified by engineering.memento/decisions's SPEC.md (which now carries the rule the retired ADR-0000 register-rule document used to state): "Entries are born accepted. This profile never uses proposed." A later challenge to a filed entry runs through SPEC.md's docket, not a hand-edit.