Skip to content

SystemsLab 155.0.0 ​

Added ​

  • A systemslab optimize <spec> <config.toml> command searches an experiment's parameter space with Bayesian optimization: it seeds a Latin hypercube of parameter combinations, submits each as an experiment into a shared context, scores it with the PromQL query named in the config file, and fits a Gaussian process to pick the next combination. Continuous, integer, and categorical parameters are supported, along with constraints and rules restricting valid combinations of dependent parameters. A run's state is stored as a context artifact, so --resume <context_id> picks up where an interrupted (or Ctrl-C'd) run left off.
  • The MCP submit_experiment tool now returns a watch_url per experiment (plus a context_watch_url for matrix submissions), and get_experiment returns a watchUrl. Connecting to one of these loopback WebSockets sends the current state, then one frame per state change, then closes once the experiment or context is terminal, so an agent can block on completion instead of polling get_experiment.

Changed ​

  • TOML experiment steps are now action-agnostic: a step names any action with uses (type remains an alias) and passes its arguments either inline or under a with table, which are forwarded verbatim and validated against the action's own schema. Previously only shell, barrier, write_file, and upload_artifact were understood, so no other action could be used from a TOML spec. write_file and upload_artifact still work as deprecated aliases for systemslab/write-file and systemslab/upload-artifact, and emit a warning.
  • The MCP submit_experiment tool now requires a name for matrix submissions, which names the shared context the variants are grouped under. It can be supplied via the name argument or the spec's [matrix].context_name; if neither is given the submission is rejected rather than falling back to a generated TOML matrix (N variants) default. For single-variant specs name remains an optional override of the spec's own name.
  • The MCP get_logs tool now caps output at 200 events by default instead of returning the entire log, so a long run's full set -x trace no longer blows past the MCP token cap. It also gains filters to narrow the result before paging: grep (case-insensitive substring), tail (last N events, ideal for "why did it fail"), source (stdout/stderr/agent), and step (per-step index). Each returned event now also reports its source and step.

Fixed ​

  • Fixed every submitted experiment failing immediately with error, no runs, and no job logs. The workflow WASM modules were JIT-compiled with wasmtime debug info enabled, which hit a codegen assertion in the current wasmtime and turned into a compilation error. Debug info is now off by default and opt-in via a new durable.debug_info server config field.
  • Fixed jobs running under cgroup isolation losing their logs and being retried up to max_experiment_runs: the recursive cgroup kill used for cleanup also killed the runner itself before it could upload logs or report the run's terminal state. Cancellation cleanup is also more thorough — the graceful SIGTERM now goes to the background step's whole process group, so a shell's children stop with it instead of surviving until the later SIGKILL.
  • Fixed jobs running under cgroup isolation uploading no metrics.parquet; the cgroup cleanup killed the rezolus recorders along with the workload before they could finalize their output.
  • systemslab login --device now works against Google-backed servers. It uses a client registered for limited-input devices (Google rejects the device grant for the browser flow's client), and when the configured oauth_client_id is not eligible the error now says the device flow isn't supported for that client instead of surfacing a raw invalid_client.
  • Fixed the Debian and RPM package builds, which had been failing since 2026-06-23 — including for the v154.0.0 release — so no packages were published. The RPM build additionally failed to compile aws-lc-sys under hardened build flags.
  • Removing or upgrading the systemslab-agent and systemslab-server-standalone packages no longer deletes their service users; the accounts are now removed only on purge. The systemslab-server package also no longer depends on systemslab-greptime.