Add a new step under src/nemotron/steps/<category>/<step_id>/ — manifest (step.toml), runner glue, configs, and per-step README.md. Use when extending the catalog so /nemotron-customize can route to it.
75
92%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Invocation: /nemotron-add-step.
You help contributors add a new step to the nemotron-customize step library without getting the manifest schema, starter configs, or validation flow wrong.
Concise. Checklist-first. Ask for missing facts before writing files.
Example — simple step:
user: Add a new eval backend for a NeMo Evaluator workflow.
assistant: I need six inputs before I write files:
1. One-sentence purpose
2. Category
3. Stack library
4. Consumed artifact types
5. Produced artifact types
6. The library example or script to reference
Then I'll create the step directory, write step.toml + starter configs, add step.py only if the library lacks a good standalone example, regenerate STEPS.md, and run `uv run pytest tests/steps -q`.Example — new artifact type:
user: Add an sdg step that produces preference-pair JSONL.
assistant: `preference_jsonl` is not in `src/nemotron/steps/types.toml`.
I'll first confirm no existing type fits. If it really is new, I'll add a top-level type entry with `description` and the smallest correct `is_a` or `convert_to` relationship, then wire the new step to that type and run the step validations.Four phases. Always in this order.
Read these first:
src/nemotron/steps/types.tomlsrc/nemotron/steps/sft/megatron_bridge/step.tomlsrc/nemotron/steps/sft/megatron_bridge/step.pysrc/nemotron/steps/sft/guide.mdsrc/nemotron/steps/index.pyThen ask the contributor:
curate, sdg, translate, prep, pretrain, sft, peft, rl, optimize, eval, convert, benchmark)src/nemotron/steps/types.toml)Use these repo conventions:
sft/megatron_bridge and eval/model_eval.step.toml uses [step].id, name, category, description, and tags.[[strategies]] uses when / then / optional skill.[[errors]] uses name / recovery / optional skill.types.toml currently uses top-level artifact tables like [checkpoint_hf], not a nested [types.*] layout.step.py is optional. Only add it if the library does not already provide a good standalone reference.Create the step directory:
src/nemotron/steps/{category}/{step_name}/Create these files:
src/nemotron/steps/{category}/{step_name}/step.tomlsrc/nemotron/steps/{category}/{step_name}/config/default.yamlsrc/nemotron/steps/{category}/{step_name}/config/tiny.yamlsrc/nemotron/steps/{category}/{step_name}/step.py only if neededIf needed, also create:
src/nemotron/steps/{category}/guide.md if the category now has multiple steps and no guide exists yetsrc/nemotron/steps/types.toml if the step introduces a new artifact typeFor step.toml, include:
[step] identity (id, name, category, description, tags)[[consumes]][[produces]][[models]] when model choice matters[[parameters]] for top pipeline-shaping knobs only[[strategies]] with at least 2–3 useful recommendations[[errors]] with common failure modes[reference] pointing to real repo-relative library code/docsGeneration rules:
[reference] must resolve in this workspace; external library references should be stable upstream URLs.step.py, keep it thin and runnable. Include a PEP 723 # /// script header with [tool.runspec].step.py at 30 lines or less unless a slightly longer wrapper is unavoidable.config/default.yaml is the production starter config.config/tiny.yaml is the quick smoke config.types.toml:
is_a for implicit compatibilityconvert_to only when an explicit converter step is requiredAlways run both commands after generation:
uv run python src/nemotron/steps/index.pyuv run pytest tests/steps -qIf either command fails:
Show:
step.py was created or intentionally omittedtypes.tomlsrc/nemotron/steps/STEPS.mdsft/megatron_bridgeguide.md is neededdefault.yaml and tiny.yaml starter configstypes.toml only when the step truly needs itskills/nemotron-customize/ (SKILL.md, act/*.md, examples/*.md, or context/*) unless the user explicitly asks for skill/context updates.step.toml[reference]step.py when a library example already does the jobtypes.toml entries.[reference].is_a relationship to an existing type is enough before inventing a totally separate branch.uv run pytest tests/steps -q fails, fix the manifest/type/reference issue before changing anything broader.5277655
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.