Skip to content

Maillard Skill

Version 7 · Disclaimer

Related: Cooked Fruit Fundamentals · Maillard preparations (outputs)

Download the skill · v7 · CC0

A Claude skill for designing, critiquing and debriefing fruit, botanical and kernel preparations for mixed-fermentation beer. Run from a folder, not installed: download the zip above, then either upload the folder in Claude (Settings → Capabilities → Skills) or point Cowork/Claude Code at it directly. It expects its own layout alongside SKILL.md — §3 below says what's in it and what's yours to edit; the published zip's data/ files start as blank templates.

v7 prepares the skill to work alongside other ingredient skills without changing any chemistry, dose rule or safety rule. ingredients.md gains an ID column; designs name every ingredient by that ID and give the skill's own verdict on each known hazard of its ingredients; the batch log becomes a whole-beer envelope with one block per preparation; the pH calibration table moves to its own file; and the catalogue gains rows for plum, peach and cherry stone, separate apple and crab apple rows, and a verdict on cooking dried shiitake. Where an optional ingredient registry is installed next to it (../ingredient-studio/, the router, published 2026-09-23), the skill reads identities, hazards and house preferences from there; without it, the skill works as before from its own data/ files. CHANGELOG-v7.md in the zip has the detail.

v6 changed how a Stage T tincture (floral or spice, dosed at bottling) is sized: from the jar loading to the dose that actually reaches the beer, delivered_g = botanical_g × dose_mL / spirit_mL. See Cooked Fruit Fundamentals for the mechanism.


1. What the skill can do

You describe fruit you have, a flavour you want, or a beer that needs something, and the skill returns a complete, arithmetically checked preparation: what goes in which jar, at what pH and Brix, cooked how long, what it will taste of at cook and at 18 months, what it does to the beer's sugar, acid, potassium and nutrient balance, and what could go wrong. It works in named compounds, not adjectives, and it tags its confidence.

Four techniques, and it decides which a given target actually needs:

  • Pressure-cooker Maillard work at 121 °C in closed jars (Stage B): cocoa, nut, roast, caramel, honey and bread-crust character the raw fruit did not contain, built from reducing sugar and glycine.
  • A short, unbased phenolic jar (Stage C): tannin softening, colour and structure from aronia, sloe, hibiscus, oak and the like, at the fruit's own pH.
  • Raw fruit additions (Stage D) and spirit tinctures (Stage T) for everything a hot cook destroys: terpenes, thiol precursors, esters, fresh fruit.
  • Kernel handling (Stage A2): benzaldehyde from stones and bitter kernels, hydrolysed and vented so the cyanide is dealt with before the beer, with the exposure per bottle stated.

It also: assesses unfamiliar ingredients and writes their catalogue row; writes a batch-log entry with a scoreable prediction; and, when you report the tasting, scores that prediction line by line and tells you which reference figure was wrong. That last step is what makes it improve.

2. What it does not do

  • Not a beer recipe designer. Grist, mash, hops, pitching and fermentation management are out of scope.
  • No measured numbers. Every concentration it quotes is a stoichiometric or literature estimate.
  • Ingredient data are typicals (±30 % on titratable acidity; native pH is Med-low). It tells you to measure the native pH of any jar you care about.
  • It computes no CO₂ volumes or bottle pressure. Your standing control is bottling only on a stable gravity read twice, 4–6 weeks apart, and the skill leans on that; it names what falls outside it.
  • Never edits a file. It emits text in a code fence and tells you where to paste it.
  • Does not track stock or ordering. It assumes anything can be sourced and prefers your list.
  • Not a food safety authority. The kernel, warm-hold, low-acid, acrylamide and furan arithmetic is conservative guidance with stated confidence, not clearance.
  • No bench-test protocol and no concentrate storage guidance beyond the fridge rule for Stage C.
  • Home scale: one 4.5 L carboy by default, ×4.4 for 20 L.
  • The brewery's funk-programme files are deliberately outside the skill; it reasons from what is in the folder and asks if it needs a figure.

3. Folder layout

fruit-maillard-prep/
├── SKILL.md                        entry modes, workflow, 15-point output contract, constraints
├── CHANGELOG-v6.md, CHANGELOG-v7.md  what changed and why, with the findings each change traces to
├── references/                     stable
│   ├── chemistry.md                invariant chemistry, 22 sections
│   ├── ingredients.md              ~55-row table keyed by ID: RS, Suc, TA, acid, native pH, FAN, Prot, ... + index
│   ├── process-inputs.md           nitrogen policy, glycine, L-Phe, why collagen is off, bases, acids, enzymes, spirit
│   └── research-protocol.md        how to characterise an ingredient not in the table
├── scripts/
│   └── prep_calc.py                the arithmetic
└── data/                           yours
    ├── preferred-ingredients.md    first picks, sourcing shortlist, declined list
    ├── setup.md                    equipment, measurement, standing inputs, dose anchors, exclusions
    ├── batch-log.md                batch envelopes and prep blocks: predictions, outcomes, corrections
    └── ph-calibration.md           predicted vs measured pH, per based jar (v7)

Design outputs are written as design-NNN-description.md in the folder above fruit-maillard-prep/, with the matching design-NNN.json the calculator was run on.

4. How to run it

In a Claude project (claude.ai). Upload the whole folder as project files and open with:

Use the fruit-maillard-prep skill. [your question]

Claude cannot execute prep_calc.py there, so the skill reproduces the script's formulae step by step and shows every intermediate. That is slower and more error-prone than the script; check the base dose and the fermentable load yourself.

In Cowork or Claude Code with the folder connected. The skill runs the script on a design JSON, reports the output including every warnings line, and writes the design file into the folder. This is the intended way to use it.

Paste on demand. SKILL.md at the top of a conversation, then references/chemistry.md, references/ingredients.md and data/setup.md when a design is needed.

If Claude answers without appearing to consult the files, say so and ask it to read them. If it quotes a base dose without a target pH and a first-pass figure, or a design without the fermentable load, it has skipped the contract; ask for the missing item by number.

5. The seven modes

You do not need to name the mode; the skill works out which applies and records it in item 1 of the output.

# Mode You say something like You get
1 Ingredients-first "I have 3 kg of blackcurrants and some gooseberries. What can I make?" 2–4 genuinely different directions, each with a flavour thesis, mechanism, sacrifice and rough formula; a recommendation; a do-not-cook verdict where it applies
2 Target-first "Honey and floral with a nutty undertone, for a pale base." target → compounds → mechanism → stage → ingredients, built from your preferred list where it can be
3 Base beer first "I have a Sacch/Brett beer with grapes and aronia; I want more depth and winey complexity." an intake (strains, age, gravity, colour, pH if known, what is in it, what must not change, what is wanted), a pushback where warranted, then mode 2 with the beer's constraints
4 Critique "Here's my planned formula. What will actually happen?" the binding constraint, what is suppressing what, what will not survive, the beer-side numbers you forgot, any safety-rule breach, the top two or three tweaks
5 Ingredient analysis "I've come across medlars. Any use?" verdict, roles, axes served and suppressed, stage, handling traps, comparison with the nearest catalogued and preferred ingredients, the append-ready table row, a preferences recommendation
6 Batch-log entry "Write that up for the log." one complete log block in a code fence, prediction filled, [later] fields blank
7 Debrief "Tasted it at 8 months, here's what I got." the completed [later] fields, a line-by-line verdict on the prediction, the reference corrections to paste, the pH calibration entry, and "change next time"

6. What a design returns: the 15-point output contract

Every design carries all fifteen. If one is missing, ask for it by number.

  1. Request summary and the mode used, so the file carries its own brief months later.
  2. Formula in grams by stage and jar, rehydration water included, archetype stated, with a one-line recap of what each stage is for and the flavours it creates.
  3. Nitrogen: glycine, phenylalanine, collagen (and why, if any); sugar:amine ratio and whether the 10:1 rule applies.
  4. Base dose per jar: the mixture's native pH and where it came from, target pH, full dose, the 80 % first-pass dose, and the instruction to measure and titrate. Stage C stated as unbased.
  5. Ingredients list for shopping and inventory, with weights, sourcing traps, rehydration water itemised, and what not to buy.
  6. Cook: holds and their durations and pH class, pre-reduction pH and phosphoric mL if inverting, Brix at seal and water to remove, headspace, temperature, duration from full pressure, vessel, cooling per stage, the hot vent, fridge days for Stage C.
  7. Predicted compound inventory by axis and stage, with sensory descriptors.
  8. Survives vs destroyed at 18 months.
  9. Fusel, methionol, 2-phenylethanol, FAN and THP budget against thresholds, with warns.
  10. Kernel calculation where used: A2 completeness assumed, effective retention, benzaldehyde in beer, HCN per bottle, % ARfD for one and two bottles.
  11. Colour and body, with an SRM direction.
  12. Fermentable load planned and worst case, ΔABV, the gravity gate and what sits outside it, tincture ABV.
  13. Beer-side acid, potassium and FAN: meq/L, expected pH rise as a magnitude, K⁺, FAN, MLF note.
  14. Safety, warm hold: every warm hold, duration, pH class; nothing warm-held enters the beer uncooked.
  15. Safety, compounds: the acrylamide levers pulled and the hot vent confirmed.

Then confidence tags on anything load-bearing and three or four named tweak points you can pull for a revised build without starting over.

7. The calculator

scripts/prep_calc.py is the arithmetic. The skill runs it; you can too.

python prep_calc.py design.json                  # run a design
python prep_calc.py design.json --show-working   # plus every intermediate term
python prep_calc.py --example > d.json           # dump a template design (an accent aronia/sloe/date build)
python prep_calc.py --example --run              # run the template
python prep_calc.py --factors                    # regenerate the base-factor table as a function of acid and native pH

The design JSON names the beer volume, bottle size and archetype; then per stage the target pH (omit it and the stage runs unbased, which is the Stage C default), measured native pH and measured pH if you have them, the ingredients with their RS, Suc, TA, acid, native pH, protein and water fraction, whether the stage is inverted, the nitrogen inputs, and the jar fraction; then the tincture and the kernel with its route and assumed hydrolysis completeness. The docstring at the top of the script documents every field.

What it reports: the native-pH-anchored base dose with the 80 % first-pass figure and the pH the old flat method would have given; the phosphoric mL to reach pH 2.9 for inversion; a lower-bound Brix at seal and an upper-bound water-removal target; the sugar:amine ratio with the rule scoped correctly; fusel, methionol, 2-PE and FAN across every protein-bearing input; kernel benzaldehyde and HCN at the effective retention, for one and two bottles; fermentable load planned and worst case with ΔABV; base meq/L, expected beer-pH rise, free fruit acid from unbased stages, potassium; dose-anchor checks; and a warnings list. Anything in warnings must appear in the design.

The constants at the top of the script mirror references/chemistry.md. If a debrief changes one, change both.

8. The life of a batch

  1. Design. Ask in whatever mode fits. Read the binding constraint first; that sentence is the design. Pull a tweak point if the trade-off is wrong for you.
  2. Log. "Write that up for the log." Paste the block into data/batch-log.md (or into the ingredient registry's batch log, where that is installed). The prediction is the point; a batch without one cannot be scored.
  3. Buy. Item 5 is the shopping list. Watch the traps it names: sulphite and sorbate on dried fruit, green papaya not ripe, pineapple stem not flesh, calendula not Tagetes, no windfall pome fruit.
  4. Cook. Item 6 is the method. Three meter readings matter: the crushed mixture's native pH before anything is added, the inversion pH (~2.9) if inverting, and the cold pH after the 80 % base dose. Read the refractometer before sealing Stage B; that reading is its safety hurdle. Time from full pressure. Slow-cool B, ice-bath C, hot-vent everything.
  5. Record. Fill Actual, at cook and add the pH calibration row to data/ph-calibration.md: predicted versus measured. Three batches of consistent delta becomes a standing offset the skill applies.
  6. Add. Stage B and C early in secondary if the worst-case fermentable load is over 10 g/L. Stage D early enough to ferment out. Tincture at bottling, to taste, from a 1 mL per 100 mL bench trial.
  7. Gate. Bottle only on a stable gravity read twice, 4–6 weeks apart.
  8. Debrief. At 6 and 18 months, give the skill your tasting notes. Paste the corrections it returns into references/. That is how the next design starts from what the last one proved.

9. Defaults, and how to change them

Default Override by saying
One 4.5 L carboy, accent archetype "this is for 20 L" / "fruit-forward"
Jars in water in the stovetop cooker, 121 °C "I want to do this in the oven" (it adapts with a caveat)
pH meter available; predict, dose 80 %, measure, titrate "no meter today" (it will lean on the solve and say so)
Stage B target pH 6.15 "furanone jar" / "pH 4.4" for honey and jam targets
Stage C unbased at native pH "lift Stage C to 4.3" with a reason; above 4.6 it will argue back
Glycine-led nitrogen, no collagen "run a collagen pair" (it will size ≤4 g with papain and show the methionol cost)
Potassium bicarbonate it will not offer calcium hydroxide
Phosphoric acid dosed to pH 2.9 before reduction "no inversion" (sucrose then counts only as beer-side sugar)
Any ingredient obtainable, preferred list first "stick to the list" / "I can't get X"
Brett and LAB secondary, bottle-conditioned, 375 mL describe a different beer
Florals as a tincture at bottling "no spirit" (it will steep below 80 °C instead)

Persistent changes belong in data/setup.md, not in every conversation.

10. What it will refuse

The skill enforces data/setup.md exclusions regardless of what a design would otherwise want. If it does any of these, point it at SKILL.md standing constraints and chemistry.md §21–§22.

Refuses Because
Any uncooked material held above 30 °C for more than 3 h; low-acid material above 30 °C for more than 2 h even if going to 121 °C growth window; cereulide is heat-stable
Enzyme on a raw fraction that then enters the beer after a hold same window; β-glucosidase does not work on raw fruit anyway
Basing Stage C above pH 4.6 without the full low-acid process low-acid, high-moisture preserve with an unverified F₀, for almost no chemical gain
Sealing a based, unreduced, high-moisture Stage B jar Stage B's hurdle is water activity, not the cook
Slow-cooling a Stage C jar no hurdle during the 55 → 20 °C transit
Opening a jar mid-cook to add base scald; vents the jar
Raw kernel into the beer or Stage D; kernel hydrolysis in fruit slurry; quoting HCN at the 0.2 best case amygdalin arrives intact; effective retention is ~0.58
Collagen as a default nitrogen input; counting protein inputs as zero in the fusel budget ~3 % of amine for 100 % of the methionol and THP risk; 50 g almond carries more Met than the whole collagen cap
A flat base factor; a flat phosphoric volume the answer depends on native pH; 1 mL lands a date jar near pH 1.5
Calcium hydroxide, BCAA powder, β-alanine, yeast extract, maltodextrin wrong base; wrong nitrogen; not an α-amino acid; methionine; inflates Brix without lowering a_w
Sulphited dried fruit in Stage B; counting sucrose as Maillard-reactive Maillard inhibitor; inert at pH 6
Skipping the hot vent furan and residual HCN leave for free
Rhubarb leaves; windfall or bruised pome fruit oxalate; patulin
Editing any data file itself it emits text; you paste

11. Maintaining data/

preferred-ingredients.md. Your first picks, a sourcing shortlist, and a declined list (from v7 the process inputs you hold are listed in setup.md; where the ingredient registry is installed, the preferences live there instead). When the skill proposes something off-list it gives you the row to paste on acceptance or the "Considered and declined" row on rejection; the declined list is what stops the same suggestion reappearing and is the table that most improves the skill over time. Update it when the larder changes (the September 2026 order list found that bitter apricot kernels are no longer retailed in the UK; the skill's answer is the stones inside fruit you buy anyway).

setup.md. Equipment, measurement, standing inputs, beer-side context, dose anchors, exclusions. Two entries still want your input: the cooker's actual psi or kPa rating from its manual, and confirmation that the fridge runs at ≤3 °C. Anything you find yourself telling the skill every conversation belongs in the exclusions table.

batch-log.md. Written by mode 6, closed by mode 7. From v7 each batch is an envelope for the whole beer with one block per preparation in it. It holds the reference corrections, which are the audit trail for every number the skill has changed its mind about.

ph-calibration.md (v7). The pH calibration history, which turns the meter readings into a standing correction after three consistent batches. Batch 001 still needs its batch size and destination volume recorded so its kernel cyanide exposure can be closed before that beer is bottled.

references/ingredients.md. A cache, not a claim to completeness. Run mode 5 on anything unfamiliar and paste the row it returns, in the column order

ID | Ingredient | RS | Suc | Type | TA | Acid | pH | FAN | Prot | N-prof | Pen | Pol | Car | Gly | Anth | Amy | Signature / role

together with any quick-selection-index lines it says to change. Native pH and TA are load-bearing: the base solve is anchored on them.

12. Reading the reference files

You do not need to read them to use the skill, but they are the argument behind every number.

  • chemistry.md is the theory. §1 (the open temperature question), §12 (the anchored base solve and the measure-and-titrate procedure), §14 (why collagen fell out), §17 (kernels), §18 (beer-side), §21 (warm-hold and low-acid rules) and §22 (acrylamide and furan) are the sections that changed practice most between v3 and v5.
  • process-inputs.md is the shopping list's justification: what each input does, what it costs on the beer side, and what is excluded and why.
  • research-protocol.md is what mode 5 follows to characterise a new ingredient.
  • CHANGELOG-v4.md traces every current rule to the review finding that produced it, and lists what is still open.
  • The companion primer, maillard-flavour-primer-v5.md, is the same chemistry written to be read cold as a course rather than consulted as a rulebook.

13. Getting started

  1. Check data/setup.md against your kit: jam refractometer, pH meter with a flat or spear probe, jars, papain, ice bath. Record the cooker rating when you find it.
  2. Source glycine, L-phenylalanine, potassium bicarbonate, 85 % phosphoric acid, papain powder and Lallzyme Beta; a wholefoods grocer sells none of them.
  3. Run critique mode on batch 001 as originally made and compare with the retrospective in the log.
  4. Run target-first for a simple accent prep, then mode 6 to log it with a prediction.
  5. Cook it as a paired jar with and without the 135–140 °C roast finish. That one batch settles the method's central open question, and its two meter readings are your first calibration entries.
  6. Come back at 6 months with tasting notes for mode 7.

Versions

Version Date Download Change
7 2026-09-22 fruit-maillard-prep-7.zip Ingredient IDs, per-hazard verdicts, whole-beer batch log, pH calibration file, stone/apple/shiitake catalogue changes; no chemistry changed
6 2026-09-18 fruit-maillard-prep-6.zip Stage T sized by delivered dose