Notes

Notes from the brewhouse, the cellar, the filler and the control room.

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

Six notesBeverage manufacturing and autonomyNo sales register

run_scn_01 · agent graph · scenario 10 nodes · 1 approval gate
01 · orchestrator order.receive ✓ SUCCEEDED 02 · orchestrator twin.simulate ✓ SUCCEEDED 03 · brew_blend brew.blend ✓ SUCCEEDED 04 · ferment_yeast ferment.control ✓ SUCCEEDED 05 · filter_carbonate carbonate.dose ✓ SUCCEEDED 06 · fill_seal fill.seal ✓ SUCCEEDED 07 · defect_inspect inspect.line ✓ SUCCEEDED 08 · pasteurize_cip pasteurize.verify ✓ SUCCEEDED 09 · orchestrator approve.human ◆ APPROVAL 10 · quality_conf release.genealogy ✓ SUCCEEDED

Illustrative scenario: Plant run · one lager batch from brewhouse to can · brewhouse, cellar, filler, tunnel pasteurizer. Not a measured run.

Notes

In the order we wrote them

Origin

Giveaway, poured out by the container

A beverage line fills tens of thousands of containers an hour, and still over-fills every one of them to avoid a low fill. That giveaway is pure margin, poured out by the bottle and the can. Inspection catches a bad seal but never tells the filler why it happened. A ferment drifts, and the fix lives in one brewmaster's head.

The tools the plant has measure and log. Analyzers read gravity, CO2 and clarity. Vision systems catch bad seals and labels. The MES tracks what happened. None of them close the loop back to brew, ferment, carbonate and fill. The gap was never sensors. It was action.

That is the opening Brewira was designed for: connect perception to action, start on one line with one number, and earn each step of autonomy against the plant's own records.

Workforce

The craft is walking out the door

The best brewers and line operators hold the recipe in their heads. Gravity gets checked by spot sample, attenuation by experience, fill level by over-filling to be safe. When a seal or pasteurization problem slips through, it becomes a recall. Meanwhile the lines never stop, and skilled operators are harder to find every year.

Our answer is not to replace the brewmaster. 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.

Fermix is the clearest case. Strain- and tank-specific memory encodes what the brewmaster knows about this yeast in this tank, so the next batch starts from what the last one taught.

Simulation

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

Plants commit to a recipe, a yeast lot, a package and a schedule, and only discover a gravity miss, a slow ferment, a carbonation drift or a takt bottleneck after materials, tank time and line hours are spent. An as-designed model of the equipment does not help, because the plant never runs as designed: the yeast generation changed, the filter is half loaded, the next brand starts at noon.

Cuvera starts from the live plant state and the coupled physics of fermentation, carbonation, mixing and pasteurization heat, and simulates the batch as it will actually be produced. The result is a plan Fermix, Carbyn and Sealix can execute, and a record of why the discarded candidates were discarded.

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

Inspection

Vision that feeds the filler

Standalone inspection is a reject gate. It catches the low fill or the bad seam and pushes the container off the line, and the filler keeps doing what caused it. So plants over-fill, because a low fill is a reject and an over-fill is only money.

Sealix is built on the opposite premise: a defect is a signal about the filler, the seamer or the upstream state, and the signal is worth more than the reject. Fill-level estimation, seam and cap integrity, label OCR and foreign-body detection run at the line edge, and the drift goes back to Fill-and-Seal to trim the valve inside the approved window.

It is also why Sealix is usually the first wedge: giveaway and leaker cost is immediate, measurable on the plant's own checkweigher and QA records, and visible within weeks of shadow mode.

Carbonation

CO2 is a cost, not a utility

Carbonation is spent blindly in most plants: a fixed dosing setpoint, a spot lab check, a correction after the fact. Over-gassing wastes CO2 and product, under-gassing is a downgrade, and CO2 has at times been a supply risk as well as a line item.

Carbyn fuses the skid's inline CO2, dissolved oxygen, turbidity, temperature and pressure into a prediction of in-line carbonation and clarity, and holds the package target with the minimum gas. Filter loading is predicted, so backwashes happen when they are needed rather than on a schedule.

The commercial case follows the physics: CO2 per batch and clarity rejects are numbers every carbonated-beverage plant already tracks, which makes outcome pricing on verified reduction straightforward.

Principles

Trust before autonomy

Autonomy in a beverage plant is earned in stages. Shadow mode predicts and writes nothing. Assist mode recommends and a person decides. Bounded control writes low-risk filling, carbonation and inspection setpoints inside documented limits. Pasteurization units, CIP release and batch release 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, assurance-grade 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 Brewira run is an ordered, inspectable sequence. This is run_scn_01, an illustrative scenario: Plant run · one lager batch from brewhouse to can · brewhouse, cellar, filler, tunnel pasteurizer. Scenario complete · batch inside spec · one human approval at the pasteurizer.

run_scn_01 scenario · not measured SUCCEEDED
  1. 01 order.receive SUCCEEDED 0.8 s

    Plant Orchestrator · Pulled the recipe, the package spec, the HACCP plan with its pasteurization critical control point, the yeast lot record and the standing CIP window from the beverage MES and the lab system; locked the target envelope for the run.

  2. 02 twin.simulate SUCCEEDED 38 s

    Plant Orchestrator · Simulated 24 candidate brew, fermentation and carbonation plans on the Cuvera as-produced twin; ranked them on gravity margin, predicted finish time, CO2 target, PU margin, takt and CO2 and energy use, and discarded every candidate that thinned the pasteurization margin.

  3. 03 brew.blend SUCCEEDED 2 m 40 s

    Brew-and-Blend · Held wort gravity to recipe from the inline gravity analyzer and the brewhouse PLC, trimming the blend and utilization setpoints inside the recipe window rather than correcting after a spot lab check.

  4. 04 ferment.control SUCCEEDED 5 d 06 h

    Ferment-and-Yeast · Predicted the attenuation curve and finish time for the tank from inline gravity, dissolved oxygen and CO2, pH and temperature; held the temperature ramp and timed the crash inside the brewmaster-approved window; no stuck or runaway fermentation was flagged.

  5. 05 carbonate.dose SUCCEEDED 3 m 15 s

    Filter-and-Carbonate · Fused inline CO2, dissolved oxygen, turbidity, temperature and pressure; held carbonation to the package target with the minimum CO2 and timed the filter backwash from the predicted loading instead of a fixed schedule.

  6. 06 fill.seal SUCCEEDED continuous

    Fill-and-Seal · Adjusted fill valves toward the target level inside the approved window using drift feedback from inspection, and ran seam checks on the seamer; the filler corrected upstream instead of rejecting downstream.

  7. 07 inspect.line SUCCEEDED continuous

    Defect-and-Inspect · 16 camera streams at the line edge: fill level, seam and cap, label and date code, foreign body and container checks on every can; three low-fill rejects were attributed to one filler valve and Fill-and-Seal corrected it.

  8. 08 pasteurize.verify SUCCEEDED continuous

    Pasteurize-and-CIP · Held the tunnel pasteurizer on the validated PU profile at the lowest zone energy inside the envelope; every critical control point reading was written to the audit log against the HACCP plan and the CIP release checks were armed.

  9. 09 approve.human APPROVAL 1 m 52 s

    Plant Orchestrator · The lowest-energy candidate wanted to move the pasteurizer CIP into a window that overlapped the next brand's start. Held for the shift quality manager, who kept the validated PU profile untouched and approved the CIP move with a tighter release check.

  10. 10 release.genealogy SUCCEEDED 1 m 05 s

    Quality-and-Conformance · Batch released: gravity and attenuation curves, yeast lot, CO2 and clarity, fill and seal outcomes, inspection rejects, PU readings, CIP release 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. 04:50:02mes.read_order({ batch: "L-0931", brand: "LAGER-33", package: "CAN-330" })
  2. 04:50:02ok recipe locked · HACCP plan v6 · CCP: tunnel PU 15–20
  3. 04:50:03lab.read_results({ yeast_lot: "Y-2207", test: "viability" })
  4. 04:50:03ok viability inside window · lot accepted for pitching
  5. 04:50:04twin.simulate({ candidates: 24, horizon: "batch" })
  6. 04:50:42ok best plan #7 · PU margin held · lowest CO2 and energy per hl
  7. 04:50:43policy.evaluate({ plan: 7, stage: "bounded" })
  8. 04:50:43ok 7 writes permitted · 1 write requires human approval
  9. 04:50:44plc.write_setpoint({ tag: "BH1.BLEND_RATIO", basis: "gravity+recipe" })
  10. 04:53:24ok wort gravity on recipe · utilization held
  11. 05:10:00ferment.predict_curve({ tank: "FV-12", lot: "Y-2207" })
  12. 05:10:00ok attenuation curve predicted · finish day 5 · crash timed
  13. 05:10:01plc.write_setpoint({ tag: "FV12.TEMP_RAMP", window: "brewmaster_approved" })
  14. 05:10:01ok ramp applied · no stuck or runaway ferment flagged
  15. 06:02:10plc.write_setpoint({ tag: "CARB1.CO2_DOSE", basis: "co2+do+turbidity" })
  16. 06:05:25ok CO2 on package target · clarity inside spec · backwash timed
  17. 06:05:26vision.stream({ cameras: 16, models: ["fill_level", "seam_cap", "label_ocr", "foreign_body"] })
  18. 06:31:48reject: low fill · can 20417 · attributed to filler valve 14 drift
  19. 06:31:49defect.attribute({ event: "low_fill", cause: "filler.valve_14" })
  20. 06:31:49ok fill_seal notified · valve 14 trimmed inside window · two more rejects, then clean
  21. 06:31:50plc.verify_pu({ tag: "TUN1.ZONES", profile: "validated" })
  22. 06:31:50ok PU inside profile · readings → audit log
  23. 06:31:52approval.request({ action: "cip.window", reason: "overlaps next brand start" })
  24. 06:33:44ok approved by the shift quality manager · PU profile untouched · tighter release check
  25. 09:12:30mes.release_batch({ batch: "L-0931", genealogy: "full" })
  26. 09:13:35ok batch released · scenario complete

Reasoning trace

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

GoalBrew batch L-0931 to recipe gravity, ferment it to target atte…

Brew batch L-0931 to recipe gravity, ferment it to target attenuation, carbonate and fill it to spec at line speed, pasteurize it on the validated PU profile and release it with full genealogy.

PlanSimulate the whole batch on the twin first. Lead with gravity …

Simulate the whole batch on the twin first. Lead with gravity so the cellar gets the right wort and the filler gets the right CO2. Verify the pasteurization critical control point continuously. Let the filler chase target level only inside the approved window; hold anything beyond the envelope for a human.

ThoughtThe standing practice over-fills to avoid low fills and over-g…

The standing practice over-fills to avoid low fills and over-gasses to avoid flat product. With continuous fill-level estimation and inline CO2 the filler and the carbonator can sit at target. The saving is giveaway, not safety margin: the pasteurization CCP is never a candidate for optimization.

Actiontwin.simulate(candidates=24) → plan #7: gravity on recipe, fin…

twin.simulate(candidates=24) → plan #7: gravity on recipe, finish day 5, CO2 at package target, PU margin unchanged, lowest predicted CO2 and energy per hectoliter.

ObservationPlan #7 wants the pasteurizer CIP in a window that overlaps th…

Plan #7 wants the pasteurizer CIP in a window that overlaps the next brand's start. The policy engine routes that single move to the shift quality manager and permits the other seven writes.

ActionExecute plan #7 at the bounded stage: brewhouse blend, tank ra…

Execute plan #7 at the bounded stage: brewhouse blend, tank ramp, CO2 dosing and fill-valve writes proceed; PU is verified continuously; the CIP move waits.

ObservationApproval granted at 06:33:44 with the PU profile untouched and…

Approval granted at 06:33:44 with the PU profile untouched and a tighter CIP release check. Three low-fill rejects were attributed to filler valve 14 and corrected by Fill-and-Seal inside the approved window.

OutcomeScenario complete. The batch is released with gravity and atte…

Scenario complete. The batch is released with gravity and attenuation curves, yeast lot, CO2 and clarity, fill and seal outcomes, PU readings, CIP release 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

Filling

Fill level, giveaway, seams, caps, labels and vision that feeds the filler.

Fermentation

Attenuation, yeast, flavor profiles, tank time and craft capture.

Carbonation and pasteurization

CO2, clarity, pasteurization units, CIP, water and energy.

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. Brewira 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 gravity, attenuation, carbonation, fill and seal faults, contamination and takt; writes nothingRuns the plant as today; compares predictions to lab, QA and PLC outcomesFirst phase with every design partner
AssistRecommends bounded brew, fermentation, carbonation, fill and seal, pasteurization and CIP moves with the evidenceA brewmaster, process engineer or quality manager approves or rejects each oneAfter accuracy is proven against the baseline
BoundedWrites low-risk filling, carbonation and inspection setpoints inside documented recipe, quality, food-safety, equipment and rollback 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 Brewira is engineered against, from the GPU utilization plan.

<100 ms edge inference for a reject decision at line speed
<250 ms drift alert to the fill-and-seal agent
8–24 camera feeds per high-speed filling or packaging line
60–240 FPS aggregate frames processed per line, depending on container speed
20–60 deployed model versions per enterprise tenant, with canary rollout and rollback
100k–1M labeled synthetic rare-defect variants per design-partner phase

Design targets from the GPU utilization plan, all marked aspirational in the architecture. 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

Brewira 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 units, CIP release checks and batch 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, FSSC 22000 and BRCGS 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 · FSSC 22000 · BRCGSGrounding 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

Brewira 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

Brewira 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.

Brewhouse and fermentation

PLC and SCADA of brewhouse, blending and syrup systems, fermentation tanks and yeast handling

Setpoint reads, guarded writes, interlocks untouched

Filtration and carbonation

Filtration and carbonation skids and their inline CO2, dissolved-oxygen and turbidity analyzers

Continuous carbonation and clarity state

Filler, seamer, capper

High-speed filler, seamer and capper controls

Telemetry in; fill-valve and seam settings inside approved windows

Pasteurizer and CIP

Tunnel and flash pasteurizers, CIP skids and hygiene sensors

PU readings verified and logged; CIP release checks

Inspection

Multi-camera stations for fill level, seal and cap, label, foreign body and container defects

Frames, defect events, reject commands

Beverage MES and lab

Orders, recipes, product specs, batch genealogy, LIMS results

Targets in, release records out

Energy, water, robots

Plant and asset meters; Isaac-driven pack, case and palletizing cells

Hard constraints for scheduling; bounded handling

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, brewmasters 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 documented limits. Every design partner starts in shadow mode, where Brewira predicts and writes nothing. Assist mode follows, where a brewmaster or process engineer approves each recommendation. Bounded autonomy on filling, carbonation 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.