Individual skill

orchardcore-recipes

Skill for authoring Orchard Core recipes and custom recipe steps. Covers recipe discovery, recipe manifests, setup recipes with issetuprecipe and step ordering, variables and the js and file expressions (uuid, variables, parameters, configuration, file text), execution and cancellation, built-in step contracts and their registered names, the command, media, ReloadTenant and DataPipelines steps, nested recipes, migration recipes, the OpenApiPkce, OpenApiGeneration and MediaApiPkce recipes, and end-to-end IRecipeStepHandler development. Use this skill when requests mention Orchard Core Recipes, Create a Recipe, Setup Recipe, Recipe Steps, Recipe Variables, Recipe Discovery, IRecipeHarvester, IRecipeExecutor, IRecipeMigrator, AddRecipeExecutionStep, RecipeExecutionException, or Custom Recipe Step Handlers. Strong matches include OrchardCore.Recipes, IRecipeStepHandler, NamedRecipeStepHandler, RecipeExecutionContext, RecipeDescriptor, RecipePermissions, ContentDefinition, WorkflowType, and recipe.schema.json.

src/CrestApps.AgentSkills/orchardcore/orchardcore-recipes/SKILL.md

Read pinned source

Source commit d86d04f234b1b2bd8145368a2544490f9d557596

What was checked

Matches the observed repository HEAD
Yes
Scanner rules are current
Yes
Repository scan complete
No
Skill scan complete
No
Observed behavior
Instructions only
Last checked
Nov 6, 2026

These are observations at the recorded commit, not a guarantee of safety. Review the source before running it.

Install this skill

Choose an agent in your Stack or copy a command below. Commands fetch the pinned commit and copy only this skill directory. Existing destinations are refused. Copying a command does not install anything.

An install command is unavailable: current rules, complete repository and skill scans, an eligible behavior level and a permitted license are required.

Repository context

Repository stars (not skill ratings)
13
Repository last updated
Oct 21, 2026
License
MIT

Observed agent integration: No specific integration evidence. Standard SKILL.md installation does not imply verified compatibility.

Files and excerpt

File metadata and permitted, redacted excerpts come from the recorded scan. Source links are pinned to that commit.

Browse files
Read excerpt

# Orchard Core Recipes

Recipes are JSON documents that configure a tenant through ordered steps. Use a recipe for repeatable setup, environment provisioning, deployment imports, or migration updates. Steps are processed in order and their names are case-insensitive at handler dispatch, but use the registered casing below and in the schemas.

## Recipe location, discovery, and execution

- Place an extension recipe at `Recipes/<name>.recipe.json` in a module or theme. The extension's manifest makes that extension discoverable; there is no separate recipe manifest file.
- `RecipeHarvester` iterates enabled extensions and reads each extension's `Recipes` folder. The application recipe harvester also contributes application-level recipes.
- Set `issetuprecipe` to `true` only for recipes intended to appear during tenant setup.
- Run a discovered recipe from **Configuration → Recipes**, during setup, or from another recipe using the `Recipes` step. A data migration may execute a recipe in its module/theme `Migrations` folder through `IRecipeMigrator`.
- Programmatic execution uses `IRecipeExecutor.ExecuteAsync(executionId, recipeDescriptor, environment, cancellationToken)`. A `RecipeDescriptor` carries the recipe metadata, base path, file provider, and recipe file.
- The cancellation token also bounds the `[js: ...]` expressions of each step: cancelling while a step's script runs stops the script and fails that step with a `RecipeExecutionException` wrapping the `OperationCanceledException`. Only setup passes a cancellable token (the application stopping token). The recipe `variables()` are not bounded by cancellation.
- Running recipes from the admin requires `RecipePermissions.ManageRecipes`.
- Uploaded and imported recipe archives are extracted under the tenant-scoped temporary directory (`ITempDirectoryProvider`, `OrchardCore:TempDirectory:Path`), not `Path.GetTempPath()`.