# Map Verl Config

> Map VERL training configuration to AgentJet configuration. Find VERL config in verl_default.yaml, check for existing mappings in config_auto_convertion_verl.jsonc, add new mappings to ajet_default.yaml and the conversion schema, and optionally add parameters to AgentJetJob.

- Skill: `modelscope/map-verl-config` (Agent Skill)
- Install (CLI): `npx skillmds@latest add modelscope/map-verl-config`
- Raw SKILL.md: https://api.skillmd.com/api/skills/modelscope/map-verl-config/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Complete terms in LICENSE.txt
- Author: modelscope (https://skillmd.com/u/modelscope)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/modelscope/map-verl-config

---



1. find user requested verl config in codebase/agentjet/ajet/default_config/verl/verl_default.yaml

2. check `codebase/agentjet/ajet/default_config/verl/config_auto_convertion_verl.jsonc`, whether a mapping to this config already exists.

3. if not, add a config under `ajet` field in `codebase/agentjet/ajet/default_config/ajet_default.yaml`, and add a mapping in `codebase/agentjet/ajet/default_config/verl/config_auto_convertion_verl.jsonc`

4. double check, confirm that default value in `ajet_default.yaml` is the same as verl config in `verl_default.yaml`, and the mapping is correct in `config_auto_convertion_verl.jsonc`

5. ask user whether to add to AgentJetJob (ajet/copilot/job.py), if the user confirms:
  - learn how other config is added in ajet/copilot/job.py
  - add to __init__ signature (with type hint and default None)
  - update docstring with parameter description
  - add instance attribute assignment with cast()
  - add mapping to `overrides` dict

6. **CRITICAL**: update `ajet/default_config/ajet_config_schema.py`
  - the schema must have a dataclass for EVERY nested level in the config path
  - e.g., for `ajet.trainer_common.optim.lr`, need:
    - `AjetOptim` dataclass with `lr: float = 1e-6`
    - `AjetTrainerCommon` must have `optim: AjetOptim = field(default_factory=AjetOptim)`
  - if parent dataclass is missing the nested field, config loading will store it as a raw dict instead of a typed dataclass, causing `getattr()` to fail at runtime

