Scheduler Contract

link-scheduler-contract turns an agent's spec ([tool.scheduler]) and its teams into the flags Link Scheduler takes, so its numbers are always the spec's, never the program's nor the machine's. The harness plugin starts the agent's scheduler with them, and any machine running the scheduler for an agent passes them too.

Its flags

What lnk-link-scheduler serve and run are given, each read from the spec's [tool.scheduler] (spec.tool("scheduler")).

caps

--per-day, --subagents, --hops, --late (run or skip) and --zone, from the spec's per_day, subagents, hops, late and zone. A spec that sets none of a key is refused, naming it; Link's own spec sets each: 100, 5, 8, run and local.

teams

--agent-id <id>, then for each team the agent is on --team-id <name>=<id> and each other member as --teammate <team>/<name>=<agent id>, whom send may reach. An agent on no team gets none of them.

timeout

--timeout, the spec's [tool.scheduler] firing, how long the runner waits on a firing (30 minutes in Link's spec). It's the runner's alone, never serve's, and none when the spec sets none.

serve_flags and run_flags

serve_flags is the caps, then the teams. run_flags is those, then --timeout, which run requires: a spec with no [tool.scheduler] firing is refused for it, while serve needs none.

What never asks you

allowed names the calls of its tool that never ask you: list, which only reads, and, unless the spec says [tool.scheduler] ask = true, task, schedule, send and cancel.

tool_of

The tool an agent's scheduler is served as on its proxy (lnk sandbox tool add) is scheduler-<agent id>.