Synthesist
Specification graph manager for AI-augmented collaborative development. Claim-based storage over per-asserter, append-only JSON-LD logs.
v3.0.0. The first v3-native GA release. v3 drops the v2 .amc substrate entirely and runs on per-asserter JSON-LD logs plus a disposable redb gamma index. Both the CLI surface and the on-disk format are now frozen for the v3 line. If you are on v2, read MIGRATION-v2-to-v3.md before upgrading.
What it is
AI coding agents produce technically correct contributions that get rejected. Studies of agent-authored pull requests find that a third of rejections are driven by workflow constraints -- scope violations, architectural misalignment, process expectations -- not code quality. The agent wrote correct code for the wrong context.
The missing context is not about code. It is about the process that governs the code: what has been planned, what has been agreed, what has already been tried. Synthesist records this process as a graph of specifications and tasks, annotated by phase, session, and discovery.
Every piece of workflow state is a claim: a typed, timestamped, content-addressed assertion of what someone holds true. Claims are appended to per-asserter logs and never overwritten -- a field update is a new claim that supersedes the prior one, so the full history is preserved per field. Multi-user collaboration merges by taking the union of every asserter's log; there is no merge step. Observation-layer data (stakeholders, dispositions, signals, topics) has moved to the companion tool lattice.
Named for the role aboard the Theseus in Peter Watts' Blindsight -- the crew member whose job is not expertise, but coherence.
Monorepo layout
This repository is a Cargo workspace. The synthesist binary lives at the repo root; the claim substrate is a workspace member under claim/.
synthesist/ # repo root: the synthesist crate + binaries
Cargo.toml # workspace manifest + [package] for synthesist
src/ # synthesist: CLI, schema, overlays, migrations
claim/ # nomograph-claim: the v3 storage substrate ([lib])nomograph-claim is vocabulary-agnostic: it stores any well-formed claim and serves typed reads through the gamma index. The synthesist vocabulary (ClaimType, per-type validators) lives in synthesist, not in the substrate.
Install
mise
[tools."http:synthesist"]
version = "3.0.0"
[tools."http:synthesist".platforms]
macos-arm64 = { url = "https://gitlab.com/api/v4/projects/80084971/packages/generic/synthesist/v{{version}}/synthesist-darwin-arm64", bin = "synthesist" }
linux-x64 = { url = "https://gitlab.com/api/v4/projects/80084971/packages/generic/synthesist/v{{version}}/synthesist-linux-amd64", bin = "synthesist" }
linux-arm64 = { url = "https://gitlab.com/api/v4/projects/80084971/packages/generic/synthesist/v{{version}}/synthesist-linux-arm64", bin = "synthesist" }Each tagged release ships macOS ARM64, Linux amd64, and Linux ARM64 binaries.
Source
git clone https://gitlab.com/nomograph/synthesist.git
cd synthesist && make build