synthesist
Synthesist is a work graph shared between people and agents: a Rust CLI that records what was planned, what was agreed and what phase the work is in, as specs and tasks kept apart from the code. An agent reads it to orient and writes to it as it works, so the process governing the code is queryable rather than inferred from a diff. Get Lamp has the idea the claim substrate grew from.
- Every piece of workflow state is a claim: a typed, timestamped assertion appended to a JSON-LD log under
claims/, one per asserter. - An asserter is
class:scope:id, classuser,agentoringest, optionally with a session: a person, a model session and a forge import each write their own log. - Nothing is overwritten; an update is a new claim superseding the old, so history survives per field.
- Merging is the union of the logs; concurrent sessions converge with no merge step.
- gamma, a redb index, serves reads and rebuilds from the logs.
Two Cargo crates. claim is the vocabulary-agnostic substrate: asserters, logs, provenance, the gamma index. synthesist defines the vocabulary (spec, task, phase, session, campaign, discovery, outcome) and the CLI; synthesist skill prints the contract an agent follows.
- orient, plan, agree, execute, reflect; reflect returns to execute, goes to replan and back through agree, or closes with report.
phase setrejects any other transition. - A per-session gate checks every command against the phase: no writes in orient or agree; no claiming or completing tasks in plan; no adding or cancelling tasks in execute.
- The plan snapshot is pinned in plan, since agree forbids writes; the human approves that pinned plan.
--forcebypasses the gate.
Synthesist carries the workflow graph only; stakeholders, dispositions and topics are outside its scope. The claim substrate stores any well-formed claim, so another vocabulary can sit on it without touching synthesist.