# Data Product Recipe Specification (ODPR) ODPR is a lightweight, vendor-neutral, machine-readable standard for reusable data product workflow recipes and named provider profiles. It defines portable recipes for creating, validating, reviewing, localizing, publishing, and refreshing data product artifacts, plus portable Provider objects that recipes can reference through `providerRef`. Base URL: - https://opendataproducts.org/odpr-v1.0 Human-readable specification: - / (https://opendataproducts.org/odpr-v1.0/) - The "Recipe Toolkit" section lists the ODP Agent SDK, validation schemas, recipe examples, retrieval file, and source helper scripts. Family-level toolkit: - ODP Agent SDK: https://opendataproducts.org/sdk/ - The ODP Agent SDK supports ODPR and is the first reference implementation for validating and executing ODPR recipes. - ODPR recipes are portable workflow contracts and may also be used with other conforming SDKs, CI/CD systems, MCP servers, or platform implementations. - Use ODPR-specific schemas, examples, recipes.jsonl, and helper scripts together with the ODP Agent SDK when the task focuses on recipe documents. - When explaining or running a recipe, inspect command names, step `with` arguments, declared outputs, gates, review policy, environment, and runPolicy. - Do not put concrete LLM model settings, endpoints, credentials, or temperature values in ODPR recipes. Resolve those through ODPR Provider objects and the executing SDK, CI/CD system, MCP server, agent runtime, or platform. Standards-family context: - ODPS is the Open Data Product Specification. Use ODPS when describing one data product and its detailed product metadata. Homepage: https://opendataproducts.org/ - ODPC is the Open Data Product Catalog specification. Use ODPC when describing catalogs, portfolios, product references, use cases, objectives, and signals. - ODPG is the Open Data Product Graph specification. Use ODPG when describing graph structures and relationships between data product artifacts. - ODPV is the Open Data Product Vocabulary. Use ODPV when stable shared term ids, labels, definitions, relationship names, and vocabulary guidance are needed. Documentation: https://opendataproducts.org/odpv-v1.0/ - ODPR does not replace ODPS, ODPC, ODPG, or ODPV. It defines repeatable workflow recipes around those artifacts. Canonical schema files: - /schema/odpr.yaml (https://opendataproducts.org/odpr-v1.0/schema/odpr.yaml) - /schema/odpr.json (https://opendataproducts.org/odpr-v1.0/schema/odpr.json) Agent-friendly retrieval file: - /recipes/recipes.jsonl (https://opendataproducts.org/odpr-v1.0/recipes/recipes.jsonl) Recipe example files: - /recipes/examples/minimal.yaml (https://opendataproducts.org/odpr-v1.0/recipes/examples/minimal.yaml) - /recipes/examples/ci-validate-generated-fragments.yaml (https://opendataproducts.org/odpr-v1.0/recipes/examples/ci-validate-generated-fragments.yaml) - /recipes/examples/release-portfolio-review.yaml (https://opendataproducts.org/odpr-v1.0/recipes/examples/release-portfolio-review.yaml) - /recipes/examples/hybrid-graph-review.yaml (https://opendataproducts.org/odpr-v1.0/recipes/examples/hybrid-graph-review.yaml) Provider example files: - /providers/examples/production-quality.yaml (https://opendataproducts.org/odpr-v1.0/providers/examples/production-quality.yaml) - /providers/examples/local-fast.yaml (https://opendataproducts.org/odpr-v1.0/providers/examples/local-fast.yaml) - /providers/examples/local-graph.yaml (https://opendataproducts.org/odpr-v1.0/providers/examples/local-graph.yaml) - /providers/examples/internal-secure.yaml (https://opendataproducts.org/odpr-v1.0/providers/examples/internal-secure.yaml) Agent-oriented source scripts: - scripts/check_agent_artifacts.py checks schema alignment, example files, recipe JSONL records, and llms.txt references. - scripts/generate_recipe_artifacts.py regenerates derived recipe artifacts such as source/schema/odpr.json from canonical source/schema/odpr.yaml. Use `python scripts/generate_recipe_artifacts.py --check` to detect drift. - scripts/search_recipes.py searches /recipes/recipes.jsonl by keyword or exact recipe id. Use `--json` for machine-readable results. - scripts/validate_recipe.py validates ODPR YAML or JSON Recipe or Provider files against /schema/odpr.yaml and rejects embedded secrets or API keys. Install dependencies with `python -m pip install -r scripts/requirements-agent.txt`. Source repository: - https://github.com/Open-Data-Product-Initiative/odpr-v1.0 Knowledge base: - https://opendataproducts.org/howto/ Core ODPR concepts: - Recipe: root workflow document that declares metadata, recipe version, type, execution policy, context policy, steps, gates, and review expectations. - Provider: root provider profile document that declares the provider family, model, provider class, endpoint reference, credentials reference, and safe runtime defaults for a named `providerRef`. - Step: one operation in a recipe, such as generate, validate, portfolio.build, portfolio.localize, portfolio.explain, or odpg.build. - Execution: runtime policy for local, hosted, hybrid, or model-free execution. - Context: preferred context format policy such as yaml, toon, gcf, or auto. - Gate: validation, review, or quality check that must pass before a workflow is accepted. - Review: human or agent review expectations for the recipe output. Recommended agent workflow: 1. Fetch /llms.txt first to understand the standards-family context and ODPR resources. 2. Use the ODP Agent SDK for implementation work that validates or executes recipes. 3. Load /recipes/recipes.jsonl for recipe selection and lightweight lookup. 4. Load /recipes/examples/*.yaml when generating ODPR content. 5. Load /schema/odpr.yaml or /schema/odpr.json to validate ODPR Recipe and Provider files. 6. Use provider references in recipes as references only; load matching Provider objects by `provider.id` to resolve model and provider defaults. 7. Inspect declared outputs, gates, review policy, environment, and runPolicy before running recipe steps. 8. Keep recipes declarative. Do not turn ODPR into a shell scripting language or Provider objects into raw secret stores. Modeling constraints: - ODPR defines workflow recipes and provider profile documents. It does not define data products, catalogs, graphs, vocabularies, SDK internals, CI/CD engines, or provider-specific APIs. - Recipe documents use `kind: Recipe`. Provider documents use `kind: Provider`. - Recipe metadata requires stable id, name, and description fields. Recipe objects also require `recipe.version`, which is separate from the top-level ODPR specification version. - Provider profiles require stable `provider.id` and a provider family in `provider.provider`. - Recipe steps should describe SDK or platform operations, not arbitrary shell scripts. - Execution mode should be one of local, hosted, hybrid, or none. - Context format should be one of yaml, toon, gcf, or auto. - Provider profiles should use `credentialsRef` instead of raw credentials. - Validation should reject embedded secrets or API keys in Recipe and Provider documents. - Use extension fields beginning with `x-` for local implementation details.