cooklang-recipes
Tools for authoring, scaling, and validating Cooklang recipe files.
Install
mkdir -p .claude/skills/cooklang-recipes && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/16828" && unzip -o skill.zip -d .claude/skills/cooklang-recipes && rm skill.zipInstalls to .claude/skills/cooklang-recipes
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Write and edit Cooklang recipe files. Use when creating, editing, converting, or validating recipes. Covers ingredient markup, cookware, timers, metadata, modifiers, and recipe organization.Key capabilities
- →Parse and display Cooklang recipes from files
- →Scale recipe quantities by a specified factor
- →Generate shopping lists from single or multiple recipes
- →Validate Cooklang recipe syntax for errors and warnings
- →Organize shopping lists by aisle using `aisle.conf`
- →Convert recipe instructions into Cooklang syntax with specific markers
How it works
The skill uses the `cook` command-line tool to manage Cooklang recipes, including parsing, scaling, generating shopping lists, and validating syntax based on defined markers and structure.
Inputs & outputs
When to use cooklang-recipes
- →Creating cooking recipes
- →Scaling recipes for groups
- →Generating automated shopping lists
- →Validating recipe syntax
About this skill
Cooklang Recipe Writing
Cook CLI
The cook command-line tool manages recipes. Key commands:
| Command | Purpose |
|---|---|
cook recipe "<path>" | Parse and display a recipe |
cook recipe "<path>:2" | Scale recipe by factor |
cook shopping-list <files> | Generate shopping list |
cook doctor validate | Check all recipes for errors |
cook doctor aisle | Find ingredients missing from aisle.conf |
cook server | Browse recipes in web interface |
cook search "<term>" | Search recipes |
Recipe Display
cook recipe "Dinner/Pasta.cook" # display recipe
cook recipe "Dinner/Pasta.cook:2" # double the quantities
cook recipe "Dinner/Pasta.cook" -f json # output as JSON
cook recipe "Dinner/Pasta.cook" -f markdown # output as Markdown
Shopping Lists
cook shopping-list "Dinner/Pasta.cook" # single recipe
cook shopping-list "Dinner/Pasta.cook" "Dinner/Soup.cook" # multiple
cook shopping-list "Dinner/Pasta.cook:2" # scaled
cook shopping-list */*.cook # all recipes
Validation
cook doctor validate # syntax errors and warnings
cook doctor aisle # missing aisle.conf entries
Core Syntax
Markers
| Marker | Purpose | Examples |
|---|---|---|
@ | Ingredient | @salt, @butter{2%tbsp}, @eggs{3} |
# | Cookware | #pot, #frying pan{}, #bowl{large} |
~ | Timer | ~{15%minutes}, ~resting{30%minutes} |
Ingredient Format
@ingredient -- name only
@ingredient{quantity} -- with quantity (no unit)
@ingredient{quantity%unit} -- with quantity and unit
@multi-word ingredient{} -- multi-word names need braces
Examples:
@butter- name only@eggs{3}- quantity without unit@flour{250%g}- quantity with unit@ground black pepper{}- multi-word ingredient@olive oil{2%tbsp}- multi-word with quantity
Preparations
Add prep instructions in parentheses:
@onion{1}(diced)
@garlic{3%cloves}(minced)
@chicken{500%g}(cut into cubes)
Modifiers
| Modifier | Purpose | Example |
|---|---|---|
- | Hidden from shopping list | -@salt{to taste} |
? | Optional ingredient | ?@nuts{1%cup} |
& | Reference earlier ingredient | &flour |
Timer Formats
~{15%minutes} -- exact time
~{2%minutes} to ~{3%minutes} -- time range (preferred)
~{30%seconds} -- short durations
~resting{10%minutes} -- named timer
Recipe Structure
Metadata (YAML Frontmatter)
---
servings: 4
source: https://example.com/recipe
prep time: 15 minutes
cook time: 30 minutes
tags: dinner, quick, vegetarian
cuisine: Italian
difficulty: easy
---
Required: servings (must be a number, not "4 servings")
Optional: source, author, prep time, cook time, tags, cuisine, difficulty
Steps
Blank lines separate steps. Each paragraph becomes a numbered step:
Preheat #oven{} to 375°F.
Mix @flour{2%cups} and @sugar{1%cup} in a #bowl{large}.
Bake for ~{25%minutes} until golden.
Sections
For complex recipes with multiple parts, use =:
= Sauce
Mix @soy sauce{3%tbsp} with @honey{1%tbsp}.
= Stir Fry
Cook @chicken{1%lb} in -@oil{2%tbsp}.
Notes
Personal tips with >:
> Don't overmix the batter
> Works best with room temperature butter
Comments
-- Single line comment (not shown in output)
[- Multi-line
comment block -]
Conversion Guidelines
| Original | Cooklang |
|---|---|
| 1 cup flour | @flour{1%cup} |
| 2 large eggs | @eggs{2%large} |
| salt to taste | -@salt{to taste} |
| 1/2 cup butter, softened | @butter{1/2%cup}(softened) |
| medium saucepan | #saucepan{medium} |
| cook for 20 minutes | cook for ~{20%minutes} |
| cook 2-3 minutes | cook ~{2%minutes} to ~{3%minutes} |
Quality Checklist
- All ingredients marked with
@ - Multi-word ingredients have
{} - Quantities include units where applicable
- Cookware marked with
# - Timers added for cooking steps
- Servings is a number (not "4 servings")
- Steps separated by blank lines
- Section headers use
=not>> - Pantry staples use
-@ - Source credited if adapted
File Organization
- Filename becomes recipe title in apps
- Use Title Case:
Chocolate Chip Cookies.cook - Place in category folder:
Desserts/Chocolate Chip Cookies.cook - Categories: Breakfast, Lunch, Dinner, Sides, Sauces, Desserts, Drinks, Basics
Aisle Configuration
config/aisle.conf organizes shopping lists by store section:
[produce]
garlic|garlic clove|garlic cloves
onion|onions|yellow onion|red onion
bell pepper|peppers|green bell pepper|red bell pepper
[dairy]
butter|unsalted butter|salted butter
eggs|egg|large eggs|egg whites
[pantry]
flour|all-purpose flour|bread flour
Use | for synonyms that map to the same item.
Run cook doctor aisle after adding recipes to find missing entries.
Resources
When not to use it
- →When working with recipes not in Cooklang format
- →When the task involves complex recipe analysis beyond syntax and scaling
- →When the user wants to browse recipes in a web interface without using `cook server`
Limitations
- →Requires recipes to be in Cooklang format
- →Shopping list organization depends on `config/aisle.conf`
- →Metadata requires `servings` to be a number
How it compares
This skill provides a structured, command-line interface for managing Cooklang recipes, offering specific tools for validation and shopping list generation, unlike manual recipe management.
Compared to similar skills
cooklang-recipes side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| cooklang-recipes (this skill) | 0 | 8mo | Review | Beginner |
| youtube-transcript | 68 | 9mo | Review | Intermediate |
| openai-whisper | 38 | 3mo | No flags | Beginner |
| filler-word-processing | 1 | 2mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
youtube-transcript
michalparkola
Download YouTube video transcripts when user provides a YouTube URL or asks to download/get/fetch a transcript from YouTube. Also use when user wants to transcribe or get captions/subtitles from a YouTube video.
openai-whisper
openclaw
Local speech-to-text with the Whisper CLI (no API key).
filler-word-processing
benchflow-ai
Process filler word annotations to generate video edit lists. Use when working with timestamp annotations for removing speech disfluencies (um, uh, like, you know) from audio/video content.
whisper-transcription
benchflow-ai
Transcribe audio/video to text with word-level timestamps using OpenAI Whisper. Use when you need speech-to-text with accurate timing information for each word.
narrator-ai-cli
NarratorAI-Studio
>-
openai-skills--speech
vigneshsinna
Use when the user asks for text-to-speech narration or voiceover, accessibility reads, audio prompts, or batch speech generation via the OpenAI Audio API; run the bundled CLI (`scripts/text_to_speech.py`) with built-in voices and require `OPENAI_API_KEY` for live calls. Custom voice creation is out