Repository navigation
v0.16.0
loadmaster is made for AI agents as its users. Every line says what happened and, where there is something to do, exactly what to run next; the binary tells an agent how to use it here (loadmaster guide), checks that its tool lets loadmaster work (loadmaster doctor), and replays the machine's history with other weights before it changes them (loadmaster tune). Nothing it could do before was taken away.
Added
loadmaster guide: how an agent runs checks here, from the binary itself, so it matches the version installed: the rules (only through loadmaster, one command per call, waiting is normal, what each way a run ends means and what to do, how to stop one's own checks), the machine's capacity and mode, and this repository's tasks, one line each, with their weight, the cores they may start with, resources, the exit codes that pass, their usual run time and theirdescription. It says the rules where there is no config, or a broken one. An instruction file needs one line:Run checks only through loadmaster: before running any, runloadmaster guideand follow it.loadmaster doctor: whether loadmaster works for agents here, and what to change where it does not: this binary against the one onPATH, the configs,LOADMASTER_MAX_WAIT, whether this process may write to the state directory (run by an agent's tool, the sure test of its sandbox), the queue file, Claude Code's sandbox and timeout settings, Codex's sandbox, and whetherAGENTS.mdorCLAUDE.mdtells agents of loadmaster. A finding isproblem(exit code 1),note,unknownorok, as sure as what it rests on, with the file and the snippet to change. It changes no settings itself.--json.loadmaster tune: what other weights or min_weights of this repository's tasks would have done to this machine's checks, replayed through the admission rule itself: the current settings, measured weights (the 90th percentile of the cores each task's passed runs kept busy) and your own--set TASK.weight=N/TASK.min_weight=N. It compares waits, times from getting in line to the end, and the share of the time over capacity, prints the change to try, and states every assumption of its model.--json.- A task's
description, one line, for the agent choosing a task (the guide, and the error for an unknown task). report --json: the report as data, from the same rows as its table.status --json:same_checkoutandusual_runfor each job, andrecent: the checks of this checkout that ended in the last 30 minutes.
Changed
- A run names its job and says how it ended:
loadmaster: #42teststarted, and last,loadmaster: #42testfailed in 2m03s (exit 1; waited 12s): a task's own exit code of 75 or 125 is no longer taken for loadmaster's. One that gives up says what to run, word for word:loadmaster: next: runloadmaster run test -- a.tsagain from /repo within 120s: it resumes its place in line. Errors with one remedy end with aloadmaster: next:line (an unknown task gets the closest name). - A waiting run says less, but never nothing for long: when it starts waiting, when what it waits for or who holds it changes (at most every 15 s), and at least every 60 s (some tools end a command silent for 5 minutes), each time naming the running jobs it waits behind, how long they have run and how long they usually run. Before, a line every 10 s.
statusspeaks to agents: one line per job with what it needs (cores or weight, for how long and how long it usually runs, where from,(same checkout), and why it waits or how long a parked place is kept), no table padding, PIDs or long paths; then what ended lately from this checkout, for a run whose output was lost.- Usual run times and
tunecount a task by its repository, which all its worktrees share, and by its setting and arguments. The history records each check's checkout, workload and resource limits. LOADMASTER_QUIET=1leaves out the lines that only inform, so a task's stderr passes through as it is (for scripts: a tool that ends silent commands would end a quiet wait).
Breaking changes
- The words of
run,status(text) and errors changed.status --jsonkeeps format 2 and only gained fields. run's stderr now has two lines of its own around the task's output; setLOADMASTER_QUIET=1for none.
Install
mise use -g github:ktanaka101/loadmaster@0.16.0Or download the archive for your platform below: macOS (Apple Silicon and Intel) and Linux (x86_64 and arm64, statically linked).