Context
In #49 (the PR that closes #30), we disabled clawloop run and clawloop eval for the AI Tinkerers launch because they only wired 2 of 5+ env adapters and had drifted from the unified TrainConfig runner in examples/train_runner.py. The disabled commands now print a truthful redirect.
This issue tracks the post-launch reintroduction as a thin wrapper over the existing TrainConfig / train() path.
Proposal
clawloop run config.json becomes roughly:
def cmd_run(args):
raw = json.loads(Path(args.config).read_text())
config = TrainConfig(**raw) # Pydantic validation, fail-fast
train(config) # dispatches via ENV_BUILDERS
Same TrainConfig schema as examples/train_runner.py. Dispatch via ENV_BUILDERS (math, harbor, entropic, openclaw, openspiel, taubench once registered). No separate --bench flag; env type comes from the config.
Outcome: examples/train_runner.py collapses to a 3-line shim that forwards to clawloop.cli.cmd_run, and the CLI becomes the canonical entry point for pip / uv installs.
Acceptance
Non-goals
- No new config fields. Matches
TrainConfig exactly.
- No CLI-only flag overrides unless they already exist on
TrainConfig. Keep the CLI surface minimal and config-file-driven.
Related
Context
In #49 (the PR that closes #30), we disabled
clawloop runandclawloop evalfor the AI Tinkerers launch because they only wired 2 of 5+ env adapters and had drifted from the unifiedTrainConfigrunner inexamples/train_runner.py. The disabled commands now print a truthful redirect.This issue tracks the post-launch reintroduction as a thin wrapper over the existing
TrainConfig/train()path.Proposal
clawloop run config.jsonbecomes roughly:Same
TrainConfigschema asexamples/train_runner.py. Dispatch viaENV_BUILDERS(math, harbor, entropic, openclaw, openspiel, taubench once registered). No separate--benchflag; env type comes from the config.Outcome:
examples/train_runner.pycollapses to a 3-line shim that forwards toclawloop.cli.cmd_run, and the CLI becomes the canonical entry point for pip / uv installs.Acceptance
clawloop run examples/configs/math_harness.json --dry-runruns successfullyclawloop runon each config family underexamples/configs/either runs or surfaces a Pydantic validation error (noUnknown benchmark)tests/test_cli.pycovers one happy path perenv_typeinENV_BUILDERSexamples/train_runner.pyis a thin shim (or removed, with docs pointing toclawloop run)clawloop run <config.json>as the benchmark commandNon-goals
TrainConfigexactly.TrainConfig. Keep the CLI surface minimal and config-file-driven.Related