An agent that touches a factory must prove everything.

Two specialist agents — process optimization and production scheduling — where every claim cites replayable evidence, every schedule is a reproducible solver output, and every risky action waits for a human signature. Nothing unverified leaves the pipeline. Nothing unverified enters memory.

audit trace · request drift-alarm-0142LIVE REPLAY
  1. creator > report: EX-02 barrel temp +10.3 °C over nominal
  2. creator > cites stat::EX-02::barrel_temperature::…-0800
  3. schema > setpoint 205.0 inside [180, 230] VALID
  4. verify > replaying citation vs historian… REPRODUCED
  5. verify > spec envelope vs source of truth… MATCH
  6. verify > skeptical review, confidence 9/10 APPROVED
  7. gate > risk HIGH → AWAITING HUMAN SIGNATURE
  8. memory > episode ep_00027 recorded (verified outcomes only)
  9. recall > next incident on EX-02 will see this one first
  10. disposition: PENDING_HUMAN_APPROVAL · revisions: 0
Verification pipeline

Five gates between a model and your machines

Each gate blocks a specific failure mode. Code gates outrank the model: a generous reviewer cannot approve what deterministic checks refuted.

Typed contracts

Every output parses against fail-closed Pydantic schemas. Out-of-spec setpoints and understated risk never leave the agent.

BLOCKS: structural hallucination

Citation replay

Each evidence reference encodes its exact query. The verifier re-runs it against the historian and compares.

BLOCKS: invented evidence

Solver reproduction

Schedules carry a solution_id. The verifier re-runs the deterministic solver — match or reject.

BLOCKS: invented schedules

Human signature

High risk, irreversible actions and late schedules force approval. The flag is computed — a model cannot unset it.

HOLDS: consequential actions

Memory write gate

Only verified outcomes are remembered. Rejected and errored runs never poison future recalls.

ADMITS: verified history only
Safety properties

Enforced, not promised

PropertyEnforced by
Setpoints stay inside spec envelopesschema validator + verifier re-check against the real spec sheet
No invented citationsdeterministic replay against the plant historian
No invented schedulessolver re-run + solution_id comparison
Risky actions gated by humanscomputed approval flag, not model-settable
No memory poisoningwrites only in orchestrator code, verified outcomes only
Fail closedrejected or errored runs emit no results and no memories
System

Two specialists, one skeptic, one memory

Specialist 01

Process optimization

Analyzes telemetry and quality data, diagnoses drift, proposes setpoint changes within spec. Abstains cleanly when data is insufficient — a guessed diagnosis counts as a failure.

Evidence comes only from the historian.

Specialist 02

Production scheduling

Plans the horizon by invoking a deterministic EDD solver, then interprets: late orders, unschedulable orders, line utilization risks. The model interprets; the solver decides.

Schedules come only from the solver.

Memory · Taxanomy

Episodic memory

A durable journal of verified incidents — including the verifier objections earned along the way. Agents recall similar past cases as priors, never as evidence. The plant in month six knows what month one didn't.

Only the orchestrator writes memory.

Quickstart

Connect a plant with one YAML and two CSVs

Every industrial system — SCADA, historian, MES, ERP, even a supervisor's spreadsheet — can export tabular files. That makes onboarding a data export, not an IT integration project. Native connectors (SQL, OPC UA) plug in behind the same interface when a deployment needs them.

The offline eval suite needs no API key: solver physics, citation replay, tampered-schedule detection, memory gating and the full orchestration loop are all verified deterministically.

# install
python -m venv .venv && .venv/bin/pip install -e .

# offline eval suite — no API key required
python eval_verifier.py      EVAL PASSED
python eval_orchestrator.py  EVAL PASSED
python eval_memory.py        EVAL PASSED
python eval_scheduling.py    EVAL PASSED

# live pipeline against the demo plant
export ANTHROPIC_API_KEY=sk-ant-…
python orchestrator.py