@@ -57,6 +57,7 @@ class Roster:
5757 allow_models : tuple [str , ...] = ()
5858 timeout_seconds : float = 600.0
5959 sandbox : str | None = None
60+ scheduler : str | None = None
6061 codex_transport : str = "exec"
6162 resolution : RosterResolution | None = None
6263
@@ -321,6 +322,10 @@ def load_roster(path: Path, *, resolution: RosterResolution | None = None) -> Ro
321322 timeout_seconds = _as_positive_number (limits .get ("timeout_seconds" , 600.0 ), "limits.timeout_seconds" )
322323 sandbox = _as_sandbox (limits .get ("sandbox" ))
323324
325+ scheduler = limits .get ("scheduler" )
326+ if scheduler is not None and scheduler not in ("waves" , "dag" ):
327+ raise ValueError ("limits.scheduler must be one of: waves, dag" )
328+
324329 codex_transport = data .get ("codex_transport" , "exec" )
325330 if codex_transport not in CODEX_TRANSPORT_CHOICES :
326331 choices = ", " .join (CODEX_TRANSPORT_CHOICES )
@@ -505,6 +510,7 @@ def load_roster(path: Path, *, resolution: RosterResolution | None = None) -> Ro
505510 allow_models = allow_models ,
506511 timeout_seconds = timeout_seconds ,
507512 sandbox = sandbox ,
513+ scheduler = scheduler ,
508514 codex_transport = codex_transport ,
509515 resolution = resolution ,
510516 )
0 commit comments