Dynamo Recipe Runner
NVIDIAOfficialCreated by Dan GilDistributed by NVIDIA
- Skill
- Workflow
- Cloud and DevOps
- Apache-2.0
- Medium risk
- Has scripts
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
Dynamo Recipe Runner streamlines the bring-up of model deployments on Kubernetes by leveraging existing recipe manifests. It provides a structured workflow to discover, validate, and patch configuration files before deploying them to a cluster. The skill ensures that model-cache jobs and deployment manifests are correctly configured, handles common blockers like storage classes and secret management, and performs a basic smoke test to verify the endpoint is operational.
What it does
- Lists and filters available Dynamo recipes based on model, framework, and deployment mode.
- Validates recipe manifests for common configuration errors before deployment.
- Patches essential values such as storage classes, image tags, and resource requests.
- Automates the deployment sequence including model-cache jobs and graph deployments.
- Performs smoke tests to verify model availability and endpoint health.
- Provides troubleshooting guidance for common Kubernetes deployment failures.
When to use it
- When you need to deploy a specific model recipe onto a Kubernetes cluster.
- When you need to validate that a recipe's configuration is compatible with your cluster environment.
- When you need to quickly bring up a backend or GPU-accelerated deployment.
- When you need to troubleshoot why a specific Dynamo deployment is failing to reach a healthy state.
Advantages
- Reduces manual effort by automating the multi-step deployment process.
- Ensures consistency by using standardized, existing recipe manifests.
- Provides clear validation steps to catch configuration issues early.
- Simplifies the integration of model-cache and deployment manifests.
- Offers a reliable path from user intent to a functional model endpoint.
Usage examples
- “List all available sglang recipes for the Dynamo framework.”
- The agent will execute the recipe tool to display a table of sglang-compatible recipes.
- “Validate the nemotron-3-super-fp8 recipe for aggregation mode.”
- The agent will run the validation script on the specified recipe path and report any missing requirements or blockers.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/nvidia/dynamo-recipe-runner/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip dynamo-recipe-runner.zip -d .agents/skills
Documentation by Dan Gil
Dynamo Recipe Runner
<!-- SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. SPDX-License-Identifier: CC-BY-4.0 -->
Purpose
Get from user intent to a working Dynamo recipe endpoint with minimal back and
forth. Do not create new guide content. Operate on the existing recipes/
tree, patch the smallest necessary set of manifests, deploy when the user has
cluster access, and prove success with an OpenAI-compatible smoke request.
Prerequisites
Python 3.10+ on the operator machine.
kubectlconfigured with a working cluster context.Cluster has a default storage class for model-cache PVCs.
Hugging Face token stored in a Kubernetes secret named
hf-token-secret(or equivalent) in the target namespace.Read access to the
recipes/tree in the ai-dynamo/dynamo repository.
Required Inputs
Collect or infer these before changing manifests:
recipe target: model, framework (
vllm,sglang,trtllm,tokenspeed), deployment mode, and GPU type/countKubernetes context and namespace
Hugging Face secret name, usually
hf-token-secretstorage class for model cache PVCs
runtime image tag if the recipe uses a placeholder or stale test image
whether to run commands or only produce exact commands
If a required value is missing and cannot be inferred from the selected recipe, ask for only that value.
Instructions
1. Preflight
Run read-only checks first:
git status --short
python3 scripts/recipe_tool.py list --format table
kubectl config current-context
kubectl get storageclass
kubectl get nodes -o wide
kubectl get namespace "${NAMESPACE}"
kubectl get secret hf-token-secret -n "${NAMESPACE}"If kubectl is unavailable or the cluster is unreachable, continue by
selecting and validating the recipe, then return exact commands instead of
pretending the deployment ran.
2. Select The Recipe
Use the recipe matrix from recipes/README.md and the scanner:
python3 scripts/recipe_tool.py list \
--query qwen --framework vllm --mode disagg --format tablePrefer an exact existing recipe. Do not invent new manifests unless the user explicitly asks to author a new recipe.
3. Inspect And Validate
Read the selected recipe README, model-cache manifests, deploy.yaml, and
perf.yaml if present. Then run:
python3 scripts/recipe_tool.py validate \
recipes/<model>/<framework>/<mode>Resolve reported blockers before applying manifests: storage class, model cache PVC, image tag, HF token secret, GPU count, frontend service name, and router mode.
4. Patch Minimal Values
Patch only recipe-specific values needed for this run. Do not reformat whole YAML files. Common patches:
storageClassNameimage repository/tag
model path or model cache mount path
GPU resource requests/limits
frontend
DYN_ROUTER_MODEnamespace only when a manifest hardcodes it
Never write Hugging Face tokens into files or logs. Use Kubernetes secrets.
5. Deploy
Follow the selected recipe README when it differs from the default sequence. The default sequence is:
kubectl apply -f recipes/<model>/model-cache/ -n "${NAMESPACE}"
kubectl wait --for=condition=Complete job/model-download -n "${NAMESPACE}" --timeout=6000s
kubectl apply -f recipes/<model>/<framework>/<mode>/deploy.yaml -n "${NAMESPACE}"
kubectl get dynamographdeployment -n "${NAMESPACE}"
kubectl get pods -n "${NAMESPACE}" -o wideWait for the frontend and workers to be ready before testing.
6. Smoke Test
Port-forward the frontend service, then verify /v1/models and one chat
completion:
kubectl port-forward svc/<deployment-name>-frontend 8000:8000 -n "${NAMESPACE}"
curl http://127.0.0.1:8000/v1/modelsIf dynamo-router-starter is also installed, prefer its scripts/check_router_health.py
for the full OpenAI-compatible smoke test. If this fails, switch to
dynamo-troubleshoot.
Available Scripts
| Script | Purpose | Arguments |
|---|---|---|
scripts/recipe_tool.py list | Enumerate available recipes, optionally filtered | --query, --framework, --mode, --format |
scripts/recipe_tool.py validate | Validate a recipe directory before apply | positional recipe path |
Invoke via the agentskills.io run_script() protocol:
run_script("scripts/recipe_tool.py", args=["list", "--framework", "sglang", "--format", "table"])
run_script("scripts/recipe_tool.py", args=["validate", "recipes/nemotron-3-super-fp8/sglang/agg"])Examples
List sglang recipes that fit a single 8xB200 node:
python3 scripts/recipe_tool.py list --framework sglang --format tableValidate a specific recipe and resolve blockers before applying:
python3 scripts/recipe_tool.py validate recipes/nemotron-3-super-fp8/sglang/aggEquivalent through the agent protocol:
run_script("scripts/recipe_tool.py", args=["validate", "recipes/nemotron-3-super-fp8/sglang/agg"])Output Contract
Return:
selected recipe path and why it was selected
exact values patched
commands run or commands to run
endpoint and smoke-test result
unresolved blockers, if any
next troubleshooting step when deployment does not become healthy
Limitations
Operates on the existing
recipes/tree only. Does not author new manifests.Cluster-mutating apply steps require
kubectlpermission to the target namespace.Smoke-test depth is intentionally minimal; for full router/endpoint coverage use
dynamo-router-starter.Multi-node disagg transport correctness is out of scope; use
dynamo-interconnect-checkafter deploy.
Troubleshooting
| Symptom | Likely cause | Next step |
|---|---|---|
kubectl cluster unreachable | Context not set or VPN down | Return exact commands instead of running them; resume when cluster is reachable |
validate reports missing storage class | Cluster has no default StorageClass | Patch storageClassName on the model-cache manifest before applying |
Model-cache job stuck Pending | PVC unbound or HF secret missing | Inspect PVC events; create or rename the HF secret to match the recipe |
Worker pods ImagePullBackOff | Stale image tag or missing pull secret | Patch the image tag; verify image pull secret in the namespace |
/v1/models 4xx/5xx after deploy | Frontend not ready or wrong service port | Wait for pods Ready; re-run port-forward; switch to dynamo-troubleshoot if it persists |
Benchmark
See BENCHMARK.md for the NVCARPS-EVAL performance report (auto-generated by the NVSkills CI pipeline). To refresh, re-run /nvskills-ci on an upstream PR touching this skill.
References
Read
references/k8s-recipe-workflow.mdfor command templates and readiness checks.Use
scripts/recipe_tool.pyfor recipe discovery and lightweight validation.
Files
- ATTRIBUTION.mdAdded by AutoGineer919 B
- BENCHMARK.md2.6 KiB
- LICENSELicence file added by AutoGineer11.2 KiB
- SKILL.md7.2 KiB
- evals/evals.json3.3 KiB
- references/k8s-recipe-workflow.md2.8 KiB
- scripts/recipe_tool.pyScript11.1 KiB
- skill-card.md2.6 KiB
- skill.oms.sig5.0 KiB
references/k8s-recipe-workflow.md
Kubernetes Recipe Workflow
<!-- SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. SPDX-License-Identifier: CC-BY-4.0 -->
Selection Rules
Use this order when multiple recipes match:
exact model, framework, deployment mode, and GPU type/count
exact model and framework, nearest deployment mode
same framework and topology with a similar model size
stop and ask before adapting an unrelated recipe
Treat recipes marked functional or experimental in recipes/README.md as usable
for bring-up but do not claim production performance unless the recipe includes
benchmark results.
Common Commands
Set the namespace:
export NAMESPACE=dynamo-demo
kubectl create namespace "${NAMESPACE}" --dry-run=client -o yaml | kubectl apply -f -Create the Hugging Face secret without printing the token:
kubectl create secret generic hf-token-secret \
--from-literal=HF_TOKEN="${HF_TOKEN}" \
-n "${NAMESPACE}" \
--dry-run=client -o yaml | kubectl apply -f -Find storage classes:
kubectl get storageclassApply model cache:
kubectl apply -f recipes/<model>/model-cache/ -n "${NAMESPACE}"
kubectl logs -f job/model-download -n "${NAMESPACE}"
kubectl wait --for=condition=Complete job/model-download -n "${NAMESPACE}" --timeout=6000sApply deployment:
kubectl apply -f recipes/<model>/<framework>/<mode>/deploy.yaml -n "${NAMESPACE}"
kubectl get dynamographdeployment -n "${NAMESPACE}"
kubectl get pods -n "${NAMESPACE}" -o wideFind frontend service:
kubectl get svc -n "${NAMESPACE}" | grep frontendSmoke test:
kubectl port-forward svc/<frontend-service> 8000:8000 -n "${NAMESPACE}"
curl http://127.0.0.1:8000/v1/modelsReadiness Signals
Healthy path:
model-download job completed
model cache PVC is bound
DynamoGraphDeploymentexists and is not reporting reconciliation errorsfrontend and worker pods are
Runningcontainers are ready
frontend service exists
/v1/modelsreturns at least one model/v1/chat/completionsreturns a completion
Do not move to benchmarking until the smoke test passes.
Common Blockers
Storage:
storageClassNamedoes not existPVC is pending
model cache path is not mounted in worker
Auth:
HF secret missing
secret key name does not match manifest env var
model license/access not accepted upstream
Images:
image tag still uses a placeholder
private registry pull secret missing
backend image does not include required backend/runtime version
Scheduling:
requested GPU count exceeds available nodes
wrong GPU SKU for recipe
node taints/tolerations missing
Routing:
frontend has
DYN_ROUTER_MODE=kvbut workers are not readyKV events are expected but backend is not publishing them
service forwards to frontend but no workers are registered
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs network access, Needs a command-line tool, Needs Python, Needs Node.js
Security
What our scanner noticed· Medium risk
- Large base64-encoded blobs
- Instructions that use the network
- Scripts that your agent may run
This skill includes scripts that your agent may run. Read them before you use it.
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Dan Gil
- Publisher
- NVIDIA (Official)
- Distributed by
- NVIDIA
- Source
- NVIDIA/skills · skills/dynamo-recipe-runner · commit fce3cca
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE-APACHE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Dan Gil or NVIDIA.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download dynamo-recipe-runner.zip