Get the FREE Ultimate OpenClaw Setup Guide →

cooklang-formatting

Scanned
npx machina-cli add skill keiththompson/video-to-cooklang/cooklang-formatting --openclaw
Files (1)
SKILL.md
5.2 KB

Cooklang Recipe Formatting

Style Guidelines (IMPORTANT)

1. Capitalize ingredients and equipment

@Leek{1}           -- correct
@leek{1}           -- wrong

#Pan{}             -- correct
#pan{}             -- wrong

2. No adjectives inside keywords

Adjectives go BEFORE the keyword, not as part of it:

large #Pan{}       -- correct
#large pan{}       -- wrong

hot #Skillet{}     -- correct
#hot skillet{}     -- wrong

medium @Onion{1}   -- correct
@medium onion{1}   -- wrong

3. Prefer metric measurements

Use grams, ml, litres instead of cups. Teaspoons and tablespoons are OK:

@Flour{250%g}      -- correct
@Flour{2%cups}     -- wrong

@Milk{500%ml}      -- correct
@Milk{2%cups}      -- wrong

@Stock{1%litre}    -- correct
@Stock{4%cups}     -- wrong

@Butter{2%tbsp}    -- OK (tbsp allowed)
@Vanilla{1%tsp}    -- OK (tsp allowed)

4. Include a recipe image

Save the most appealing frame from the video as an image with the same name:

Dinner/Garlic Butter Shrimp.cook
Dinner/Garlic Butter Shrimp.jpg    -- same name, .jpg extension

Quick Reference

SymbolPurposeExample
@Ingredient@Butter{30%g}
#Equipment#Frying Pan{}
~Timer~{5%minutes}
---Metadata blockYAML frontmatter
==Section header== Sauce ==

Ingredient Syntax

@ingredient                      -- name only (to taste)
@ingredient{quantity}            -- with amount, no unit
@ingredient{quantity%unit}       -- full specification
@multi word ingredient{}         -- braces required for multi-word
@ingredient{qty%unit}(prep)      -- with preparation instructions

Examples

@Salt{}
@Eggs{3}
@Butter{30%g}
@Chicken Breast{500%g}
@Garlic{3%cloves}(minced)
@Onion{1}(diced)

Notes on Ingredients

  • For pantry staples (salt, pepper, oil), just use @Salt{} with no quantity
  • For optional ingredients, write "optional" in the text: Add optional @Chilli Flakes{1%tsp} if desired.
  • Don't use -, ?, or & prefixes - they're not supported by most Cooklang apps
  • Don't mark cooking water as an ingredient - water for boiling/blanching is not a shopping list item:
    Bring a large #Pot{} of water to a boil.     -- correct (plain text)
    Bring a large #Pot{} of @Water{} to a boil.  -- wrong (creates ingredient)
    

Equipment Syntax

#Pot{}
#Frying Pan{}
#Mixing Bowl{}
#Baking Sheet{}

Adjectives go before, not inside:

large #Pot{}           -- correct
#large pot{}           -- wrong

Timer Syntax

~{5%minutes}
~{30%seconds}
~{1%hour}
~resting{10%minutes}     -- named timer

Important: Use single values only, NOT ranges. Write ~{15%minutes} not ~{10-15%minutes}. For variable times, pick the middle value or write it in text: "about 10-15 minutes".

Recipe Structure

Metadata (YAML Frontmatter)

---
source: https://example.com/recipe
servings: 4
prep_time: 15 minutes
cook_time: 30 minutes
---

Note: servings must be a number, not text.

Steps

Each paragraph becomes a numbered step. Separate steps with blank lines:

Preheat #Oven{} to 190°C.

Season @Chicken Breast{500%g} with @Salt{} and @Pepper{}.

Bake for ~{25%minutes} until internal temperature reaches 75°C.

Sections

Use == for complex recipes with multiple parts:

== Marinade ==

Combine @Soy Sauce{45%ml} and @Honey{30%g} in a #Bowl{}.

== Main Dish ==

Cook @Chicken{500%g} in the marinade.

Notes

Use > prefix for tips:

> For extra flavor, marinate overnight.

File Organization

Save recipes to category folders using Title Case:

Breakfast/Fluffy Pancakes.cook
Lunch/Greek Salad.cook
Dinner/Garlic Butter Shrimp.cook

Categories

  • Breakfast: Morning meals, eggs, pancakes, smoothies
  • Lunch: Salads, sandwiches, soups, light meals
  • Dinner: Main courses, proteins, pasta, substantial meals
  • Sides: Accompaniments, vegetables
  • Sauces: Dressings, marinades, condiments
  • Desserts: Sweets, baked goods
  • Drinks: Beverages, cocktails

CLI Commands

If the cook CLI is installed:

cook recipe "path/to/recipe.cook"      # Parse and display
cook recipe "path/to/recipe.cook:2"    # Scale by 2x
cook shopping-list *.cook              # Generate shopping list
cook doctor validate                   # Check for syntax errors

Common Patterns

Simple Recipe

---
source: https://tiktok.com/@creator/video/123
servings: 2
---

Heat @Olive Oil{2%tbsp} in a large #Skillet{} over medium heat.

Add @Garlic{3%cloves}(minced) and cook for ~{30%seconds}.

Add @Prawns{450%g} and cook for ~{2%minutes} per side until pink.

Season with @Salt{} and @Pepper{} to taste.

Recipe with Sections

---
servings: 4
---

== Sauce ==

Whisk @Soy Sauce{3%tbsp}, @Honey{2%tbsp}, and @Sesame Oil{1%tsp}.

== Stir Fry ==

Heat #Wok{} over high heat. Cook @Chicken{500%g}(sliced) for ~{5%minutes}.

Add sauce and toss to coat.

Source

git clone https://github.com/keiththompson/video-to-cooklang/blob/main/skills/cooklang-formatting/SKILL.mdView on GitHub

Overview

Formats recipes using Cooklang markup to capture ingredients, equipment, timers, and metadata. It enforces capitalization, adjective placement, and metric-first measurements, guiding how to organize steps, sections, and images.

How This Skill Works

Defines exact Cooklang syntax for ingredients (@...), equipment (#...), timers (~...), metadata blocks (--- YAML), and section headers (==). It also describes how to structure steps as paragraphs, use notes with >, and save recipe files in Title Case folders with matching images.

When to Use It

  • Creating a new Cooklang recipe from scratch
  • Converting an existing recipe to Cooklang format
  • Editing ingredients, equipment, or timers to meet style guidelines
  • Adding metadata, sections, and notes for clarity
  • Organizing recipes into category folders and pairing images with file names

Quick Start

  1. Step 1: Create a YAML frontmatter header with source, servings, prep_time, and cook_time.
  2. Step 2: Add ingredients with @, equipment with #, timers with ~, and a matching image note if available.
  3. Step 3: Write steps as separate paragraphs and save the file as Title.cook in a Title Case folder.

Best Practices

  • Capitalize all ingredient and equipment keywords (@Leek{}, #Pan{}).
  • Place adjectives before keywords and avoid adjectives inside the keyword syntax.
  • Prefer metric units (grams, ml, litres); spell out tsp and tbsp as needed.
  • Include a matching image file with the same base name as the recipe.
  • Use YAML frontmatter for metadata and keep steps as separate paragraphs with clear headings.

Example Use Cases

  • Simple Omelette: @Eggs{2}, @Milk{30%ml}, #Frying Pan{}, ~{5%minutes}.
  • Tomato Sauce: @Tomatoes{400%g}, @Olive Oil{20%ml}, #Saucepan{}, ~{15%minutes}.
  • Roasted Veggies: @Carrots{300%g}, @Oil{15%ml}, #Baking Sheet{}, ~{25%minutes}.
  • Beef Stew: @Beef{600%g}, @Onion{1}, #Dutch Oven{}, ~{120%minutes}.
  • Pancakes: @Flour{250%g}, @Milk{300%ml}, @Eggs{2}, ~{10%minutes}.

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers