Skip to content

feat: Support POSIX/GNU argument syntax for CLI #1032

Description

@cwing-nvidia

Use cases, pain points, and background
NeMo Gym's CLI uses Hydra's +key=value override syntax for all arguments:

ng_collect_rollouts +agent_name=my_agent +input_jsonl_fpath=data.jsonl +output_jsonl_fpath=out.jsonl +num_repeats=5

Most CLI tools in the ecosystem (kubectl, docker, git, pip, etc.) follow the POSIX/GNU convention: long flags (--input data.jsonl) and short flags (-i data.jsonl) with --help discoverability. Users coming from these tools find the +key=value syntax unfamiliar and need to consult documentation, adding to developer friction.

Hydra is powerful for config composition, but its override syntax is designed for config management, not for user-facing CLI ergonomics.

Description:
Provide a POSIX/GNU --flag interface for the primary user-facing commands:

# Before
ng_collect_rollouts +agent_name=my_agent +input_jsonl_fpath=data.jsonl +output_jsonl_fpath=out.jsonl +num_repeats=5

# After
gym collect --agent my_agent --input data.jsonl --output out.jsonl --num-repeats 5
# Before
ng_run "+config_paths=[resources_servers/my_server/configs/my_server.yaml,responses_api_models/vllm_model/configs/vllm_model.yaml]"

# After
gym run --config resources_servers/my_server/configs/my_server.yaml --config responses_api_models/vllm_model/configs/vllm_model.yaml

The --flag layer translates to Hydra config overrides internally, so +key=value remains available as an escape hatch for advanced use cases. Every command should support --help.

Design:
What files should be touched? What logic should be written?

Out of scope:
What are some items that this issue could be mistaken to cover that this issue should explicitly NOT cover?

Acceptance Criteria:

  • Individual items that need to be finished in order for this issue to be considered completed

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions