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.
- Request summary and the mode used, so the file carries its own brief months later.
- 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.
- Nitrogen: glycine, phenylalanine, collagen (and why, if any); sugar:amine ratio and whether the 10:1 rule applies.
- 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.
- Ingredients list for shopping and inventory, with weights, sourcing traps, rehydration water itemised, and what not to buy.
- 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.
- Predicted compound inventory by axis and stage, with sensory descriptors.
- Survives vs destroyed at 18 months.
- Fusel, methionol, 2-phenylethanol, FAN and THP budget against thresholds, with warns.
- Kernel calculation where used: A2 completeness assumed, effective retention, benzaldehyde in beer, HCN per bottle, % ARfD for one and two bottles.
- Colour and body, with an SRM direction.
- Fermentable load planned and worst case, ΔABV, the gravity gate and what sits outside it, tincture ABV.
- Beer-side acid, potassium and FAN: meq/L, expected pH rise as a magnitude, K⁺, FAN, MLF note.
- Safety, warm hold: every warm hold, duration, pH class; nothing warm-held enters the beer uncooked.
- 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¶
- 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.
- 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. - 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.
- 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.
- Record. Fill
Actual, at cookand add the pH calibration row todata/ph-calibration.md: predicted versus measured. Three batches of consistent delta becomes a standing offset the skill applies. - 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.
- Gate. Bottle only on a stable gravity read twice, 4–6 weeks apart.
- 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.mdis 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.mdis the shopping list's justification: what each input does, what it costs on the beer side, and what is excluded and why.research-protocol.mdis what mode 5 follows to characterise a new ingredient.CHANGELOG-v4.mdtraces 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¶
- Check
data/setup.mdagainst your kit: jam refractometer, pH meter with a flat or spear probe, jars, papain, ice bath. Record the cooker rating when you find it. - Source glycine, L-phenylalanine, potassium bicarbonate, 85 % phosphoric acid, papain powder and Lallzyme Beta; a wholefoods grocer sells none of them.
- Run critique mode on batch 001 as originally made and compare with the retrospective in the log.
- Run target-first for a simple accent prep, then mode 6 to log it with a prediction.
- 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.
- 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 |