Notes

Notes from the separator, the dryer and the control room.

Short essays on dairy processing and autonomy, written from the thinking behind the product. No author bylines yet: the team publishes names when people join publicly.

Six notesDairy processing and autonomyNo sales register

run_scn_01 · agent graph · scenario 10 nodes · 1 approval gate
01 · orchestrator intake.receive ✓ SUCCEEDED 02 · orchestrator twin.simulate ✓ SUCCEEDED 03 · intake_separate separate.standardize ✓ SUCCEEDED 04 · pasteurize_homog pasteurize.verify ✓ SUCCEEDED 05 · ferment_culture culture.vat ✓ SUCCEEDED 06 · evaporate_dry dry.spray ✓ SUCCEEDED 07 · defect_inspect inspect.pack ✓ SUCCEEDED 08 · hygiene_cip cip.schedule ✓ SUCCEEDED 09 · orchestrator approve.human ◆ APPROVAL 10 · quality_conf release.genealogy ✓ SUCCEEDED

Illustrative scenario: Plant run · skim-milk-powder line + set-yogurt line · shared intake. Not a measured run.

Notes

In the order we wrote them

Origin

Where dairy plants lose money and sleep

Talk to a plant director and the picture is consistent. They run largely blind on real-time composition, safety margin, contamination, yield, energy, water and batch genealogy. They over-standardize to avoid off-spec batches, giving away fat and protein on millions of liters. They run dryers conservatively to avoid fouling and moisture misses, burning energy to stay safe. They lean on a workforce that cannot reliably meet rate under HACCP.

The tools they have measure and log. None of them act. That gap, between a plant that is thoroughly instrumented and a plant that is actually controlled, is the opening Milkeon was designed for.

The wedge came from watching where the money and the sleep actually go: give-away on separation and standardization, energy on evaporation and spray-drying, downgrades on fermentation, and recall risk on contamination and seals. Each of those is measurable, tolerance-bound and rate-constrained, which is exactly the shape of a problem autonomy can own.

Workforce

The craft is walking out the door

The best dairy technologists hold the recipe in their heads. Fat and protein get checked by lab sample, not in real time, so plants over-standardize and quietly give away yield every shift. Dryers run conservatively to avoid fouling, burning energy to stay safe. And when a pasteurization or seal problem slips through, it becomes a recall.

That craft is retiring faster than it is being replaced, and the plants that depend on it are being asked to do more, safer, with fewer people.

Our answer is not to replace the technologist. It is to make their corrections the thing the plant learns from: every approval, every override and every note in assist mode becomes a labeled event in a per-plant memory that is versioned, tenant-scoped and never shared across customers.

Simulation

Why a twin has to be as-processed, not as-designed

Plants commit to a run and only discover composition misses, safety-margin problems, fouling or takt bottlenecks after the milk and energy are spent. An as-designed model of the equipment does not help, because the plant never runs as designed: the milk supply changed, the separator fouled a little, the dryer wall is not clean.

Lactwin starts from the live plant state and the coupled physics and biology of separation, heat exchange, fermentation, evaporation and spray-drying, and simulates the batch as it will actually be processed. The result is a recipe and a control envelope the agents can execute, and a record of why the discarded candidates were discarded.

The same machinery generates rare contamination, fouling and drying-upset scenarios that are too rare and costly to collect, always validated against real plant events before a model is allowed to learn from them.

Separation

Give-away is the biggest yield lever nobody measures continuously

Separation and standardization set the economic floor of a dairy plant, and they run on fixed setpoints and periodic lab checks. Between samples, composition drifts. The defensive response is to over-standardize, so fat and protein above spec leave the plant on millions of liters.

Sepion's premise is that give-away is only eliminated if composition is estimated and acted on continuously, not per lab sample. That means fusing inline NIR and mid-IR with the lab calibration and closing the loop on the blend at the minimum safe margin, with every setpoint change and composition outcome in the audit trail.

It is also why the Line tier starts here for most fluid, cheese and powder processors: the baseline is easy to measure and the result is in liters and dollars.

Energy

Drying at the quality-safe frontier

Spray-drying is the plant's largest energy and water consumer, and it is run with margin because the cost of a moisture miss or a fouling event is high. Running conservatively wastes energy and throughput; running hot risks quality and safety.

Aridyn couples a GPU-accelerated CFD and process twin with edge control so the dryer can run closer to the true quality-safe frontier. Spray-drying and evaporation CFD is a classic GPU workload; on CPUs it cannot run fast enough to inform live control or to generate synthetic upset scenarios.

The commercial case follows the physics: energy per kilogram of powder is a number every powder plant already tracks, which makes outcome pricing on verified reduction the strongest value-based case in the portfolio.

Principles

Trust before autonomy

Autonomy in a food plant is earned in stages. Shadow mode predicts and writes nothing. Assist mode recommends and a person decides. Bounded control writes low-risk setpoints inside explicit limits. Critical control points, interlocks and release decisions never move to the agent.

Every output is grounded and cited to the recipe, the HACCP plan or the CIP procedure it relied on. Every action is written to an immutable audit log. Model and prompt changes are gated by golden datasets and model-as-judge evaluations in CI before they reach a plant.

These are the guiding principles in our roadmap, and they are the reason the first release is one wedge workflow with a review console and an audit log, not a plant-wide program.

Run timeline

The scenario most notes refer to

Every Milkeon run is an ordered, inspectable sequence. This is run_scn_01, an illustrative scenario: Plant run · skim-milk-powder line + set-yogurt line · shared intake. Scenario complete · both streams inside spec · one human approval at the dryer.

run_scn_01 scenario · not measured SUCCEEDED
  1. 01 intake.receive SUCCEEDED 0.9 s

    Plant Orchestrator · Pulled both product specs, the HACCP plan with its pasteurization critical control point, the antibiotic screen for the tanker lot and the standing CIP window from MES and the lab system; locked the target envelope for the run.

  2. 02 twin.simulate SUCCEEDED 41 s

    Plant Orchestrator · Simulated 24 candidate recipes across separation, pasteurization, evaporation and spray-drying on the Lactwin as-processed twin; ranked them on composition margin, pasteurization margin, energy per kilogram of powder and takt, and discarded every candidate that thinned the pasteurization margin.

  3. 03 separate.standardize SUCCEEDED 3 m 05 s

    Intake-and-Separate · Fused inline NIR and mid-IR with the latest lab calibration, then trimmed the cream-skim split and the standardization blend valve so skim solids and the yogurt-stream fat sat at target with the minimum safe margin rather than the usual over-standardization.

  4. 04 pasteurize.verify SUCCEEDED continuous

    Pasteurize-and-Homogenize · Held HTST at or above 72 °C for 15 s through the holding tube with the flow-diversion valve armed; every critical control point reading was written to the audit log against the HACCP plan.

  5. 05 culture.vat SUCCEEDED 4 h 20 m

    Ferment-and-Culture · Predicted the acidification curve for the culture lot from inline pH and the upstream composition, held the vat temperature profile and timed the hold so pH landed on the set-yogurt target curve; no abnormal acidification was flagged.

  6. 06 dry.spray SUCCEEDED 2 h 10 m

    Evaporate-and-Dry · Ran the dryer against the twin's moisture and stickiness prediction; stepped inlet temperature and feed solids toward the minimum-energy setpoint while predicted outlet moisture stayed inside spec and fouling risk stayed low.

  7. 07 inspect.pack SUCCEEDED continuous

    Defect-and-Inspect · 16 camera streams across the two packing lines at the plant edge: fill, seal, cap and label checks on every unit, foreign-body and contamination models on the powder stream; two rejects were attributed back to a seal-jaw temperature drift and the packing line was notified.

  8. 08 cip.schedule SUCCEEDED 6 s

    Hygiene-and-CIP · Placed the pasteurizer and dryer CIP into the cheapest energy window, sequenced wash phases against tank availability and set the release checks that must pass before the next product.

  9. 09 approve.human APPROVAL 1 m 48 s

    Plant Orchestrator · The twin's lowest-energy candidate wanted a dryer inlet temperature above the site's bounded envelope. Held for the shift dairy technologist, who approved the step with a tighter outlet-moisture alarm.

  10. 10 release.genealogy SUCCEEDED 1 m 12 s

    Quality-and-Conformance · Both batches released: composition, CCP records, culture lot and pH curve, drying setpoints, inspection rejects and every human decision written to the batch genealogy and checked against spec.

Tool calls

The agent shows its work

Every tool invocation, argument and result is written to an immutable, human-readable log, and every reasoning step is expandable. Nothing about a run is hidden from the plant. The log below is the scenario run, not a measured one.

tool-call stream · run_scn_01
  1. 05:10:02mes.read_order({ lot: "T-0417", products: ["SMP", "SET-YOG"] })
  2. 05:10:02ok specs locked · HACCP plan v7 · CCP: pasteurization 72 °C / 15 s
  3. 05:10:03lab.read_results({ lot: "T-0417", test: "antibiotic_screen" })
  4. 05:10:03ok negative · lot accepted for intake
  5. 05:10:04twin.simulate({ candidates: 24, horizon: "shift" })
  6. 05:10:45ok best recipe #9 · pasteurization margin held · lowest energy per kg
  7. 05:10:46policy.evaluate({ recipe: 9, stage: "bounded" })
  8. 05:10:46ok 7 writes permitted · 1 write requires human approval
  9. 05:10:47plc.write_setpoint({ tag: "SEP1.BLEND_VALVE", basis: "nir+midir+lab" })
  10. 05:13:52ok skim solids on target · yogurt-stream fat at minimum safe margin
  11. 05:13:53plc.verify_ccp({ tag: "PAST1.HOLD_TUBE", min: "72 °C / 15 s" })
  12. 05:13:53ok CCP verified · divert valve armed · readings → audit log
  13. 05:14:10dose.culture({ vat: "Y2", lot: "C-2291", profile: "set-yogurt" })
  14. 05:14:10ok acidification curve predicted · hold timed to target pH
  15. 05:14:12approval.request({ action: "dryer.inlet", reason: "above bounded envelope" })
  16. 05:16:00ok approved by the shift dairy technologist · tighter moisture alarm set
  17. 05:16:01plc.write_setpoint({ tag: "DRY1.INLET_T", mode: "min_energy" })
  18. 05:16:01ok predicted outlet moisture inside spec · fouling risk low
  19. 05:16:02vision.stream({ cameras: 16, models: ["fill_seal", "foreign_body"] })
  20. 05:41:18reject: seal fault · unit 1184 · attributed to seal-jaw temperature drift
  21. 05:41:19defect.attribute({ event: "seal_fault", cause: "pack_line.jaw_temp" })
  22. 05:41:19ok packing line notified · second reject at 05:43:02 · drift corrected
  23. 05:41:20cuopt.schedule({ assets: ["PAST1", "DRY1"], window: "energy_low" })
  24. 05:41:20ok CIP sequenced · release checks armed
  25. 09:36:40mes.release_batch({ batches: ["SMP-0417", "YOG-0417"], genealogy: "full" })
  26. 09:37:52ok both batches released · scenario complete

Reasoning trace

Goal, plan, thought, action, observation, exactly as the orchestrator would record it.

GoalReceive tanker lot T-0417, standardize it once, pasteurize onc…

Receive tanker lot T-0417, standardize it once, pasteurize once, and run a skim-milk-powder stream and a set-yogurt stream to spec with full genealogy.

PlanSimulate the whole recipe on the twin first. Lead with composi…

Simulate the whole recipe on the twin first. Lead with composition so the dryer gets the right solids and the vat gets the right fat. Verify the pasteurization critical control point continuously. Let the dryer chase minimum energy only inside the bounded envelope; hold anything beyond it for a human.

ThoughtThe standing recipe over-standardizes both streams to protect …

The standing recipe over-standardizes both streams to protect against lab-sample lag. With continuous NIR and mid-IR estimates the blend can sit at the minimum safe margin. The saving is composition give-away, not safety margin: the pasteurization CCP is never a candidate for optimization.

Actiontwin.simulate(candidates=24) → recipe #9: minimum safe composi…

twin.simulate(candidates=24) → recipe #9: minimum safe composition margin, pasteurization margin unchanged, lowest predicted energy per kilogram of powder.

ObservationRecipe #9's dryer inlet temperature sits above the site's boun…

Recipe #9's dryer inlet temperature sits above the site's bounded envelope. The policy engine routes that single write to the shift dairy technologist and permits the other seven.

ActionExecute recipe #9 at the bounded stage: separation and standar…

Execute recipe #9 at the bounded stage: separation and standardization writes, CCP verification, culture dosing and the vat profile proceed; the dryer inlet write waits.

ObservationApproval granted at 05:16:00 with a tighter outlet-moisture al…

Approval granted at 05:16:00 with a tighter outlet-moisture alarm. Two seal rejects on the yogurt packing line were attributed to seal-jaw temperature drift and corrected by the packing line.

OutcomeScenario complete. Both batches released with composition, CCP…

Scenario complete. Both batches released with composition, CCP records, culture lot, drying setpoints, inspection events and the human decision in the genealogy. No measured plant result is claimed; this is the run the platform is designed to execute.

Topics

What we write about

Composition

Separation, standardization, give-away and continuous estimation.

Drying

Evaporation, spray-drying, moisture, fouling and energy per kilogram.

Biology

Fermentation, culture activity, pH trajectories and craft capture.

Trust

Food safety, audit logs, autonomy stages and what never leaves a person.

Autonomy

Four stages, set per loop

A plant does not go from manual to bounded control in one step. Milkeon makes the stage explicit per loop, auditable and reversible at any time, and some decisions never leave the person.

Autonomy stages and the human role at each
StageWhat the agent doesWhat the person doesWhen
ShadowPredicts composition, contamination, moisture and takt; writes nothingRuns the plant as today; compares predictions to lab resultsFirst phase with every design partner
AssistRecommends separation, pasteurization, culture and drying moves with the evidenceA dairy technologist or process engineer approves or corrects each oneAfter accuracy is proven against the baseline
BoundedWrites low-risk separation, drying and inspection setpoints inside explicit limitsApproves anything above the limits; reviews the shift recordAfter the food-safety and ROI gates agreed up front
ExceptionsEscalates anything outside its envelope, CCP-adjacent moves and release decisionsAlways decides these; the agent never doesPermanent
Design targets

Figures we cite most

The numbers Milkeon is engineered against, from the GPU utilization plan.

50–150 ms p95 latency for reject and alert decisions at the plant edge
250–1,000 ms p95 latency for inline composition estimates
8–24 camera and inline-analyzer streams per line
10–40 concurrent models served per plant, routed by product, line and sensors
2k–10k GPU-hours of training across the first design-partner cohort
50k–250k synthetic rare-fault scenarios, each validated against real plant data

Design targets from the GPU utilization plan. Nothing on this page is a measured plant result; measurements start when the first design-partner line runs in shadow mode.

Guardrails

An agent that can move a setpoint needs a leash

Milkeon writes to production equipment in a food plant. Every capability is scoped, every write is policy-checked, every output is cited, and every action is written to an append-only audit log the plant owns.

  • Bounded action space. Each agent can only write to an explicit tag allow-list, inside per-tag rate and magnitude limits, at the autonomy stage the plant has set.
  • Critical control points are read, never written. Pasteurization time-temperature, flow diversion and release decisions stay with the HACCP plan and the people who own it.
  • Policy engine before every write. Autonomy stage, interlock state, product, shift and operator presence are evaluated before a setpoint moves.
  • Grounded and cited. Every recommendation carries a citation to the recipe, spec or procedure it relied on. Retrieval is tenant-isolated and permission-aware.
  • Immutable audit log. Append-only, exportable and retained on the plant's own storage, aligned to HACCP, FSMA, ISO 22000 and FSSC record-keeping.
  • Hard fallback. If the edge node, the network or a model stops, the plant keeps running on its existing PLC and SCADA control and interlocks.
  • Tenant and IP isolation. Recipes, supplier data and tolerance models never cross a customer boundary. On-prem deployment available.

Assurance posture

Assurance and certification status
ItemScopeStatus
SOC 2 Type ICloud control plane QUEUED Roadmap, first 6 months
SOC 2 Type IICloud control plane QUEUED Roadmap, 6 to 12 months
HACCP · FSMA · ISO 22000 · FSSC · CodexGrounding and record-keeping RUNNING Design basis for retrieval and the audit log
Per-tenant isolationData, memory, models RUNNING Design rule
On-prem deploymentRecipe-sensitive producers RUNNING Design option

Milkeon supports your food-safety records. It is not a certification and it does not replace your HACCP plan.

Read the security overview

Integrations

It speaks plant, not cloud

Milkeon reads and writes through the systems already on the floor. No parallel historian, no new HMI, no rip-and-replace. Connectors are built against each design partner's stack first; long-tail integrations are out of scope for the first release.

Plant automation

PLC and SCADA of separators, pasteurizers, homogenizers, culture vats, evaporators, spray dryers and CIP skids

Setpoint reads, guarded writes, interlocks untouched

Inline analyzers

NIR and mid-IR composition, inline pH, moisture, temperature and humidity

Continuous composition and process state

Lab systems

LIMS results, calibrations, antibiotic and micro screens

Calibration and release evidence

Dairy MES

Orders, recipes, product specs, batch genealogy

Targets in, release records out

Vision

Multi-camera stations on filling, sealing, capping, labeling and powder lines

Frames, defect events, reject commands

Energy and water

Plant and asset-level meters

Hard constraints for the dryer and CIP schedule

Robotics

Isaac-driven packaging, palletizing and handling cells

Perception and motion for packs and pallets

Identity (planned)

SSO and role-based access; SOC 2 on the roadmap

Named approvers, scoped roles

See all integrations

FAQ

Straight answers

The questions plant directors, technologists and quality managers ask in the first meeting.

Only at the autonomy stage your plant has set, and only to an explicit allow-list of low-risk loops inside explicit limits. Every design partner starts in shadow mode, where Milkeon predicts and writes nothing. Assist mode follows, where a technologist approves each recommendation. Bounded autonomy on separation, drying and inspection loops comes after the food-safety and ROI gates agreed up front.

Get started

Get new notes

Ask to be added to the list. Notes only, no drip campaign.