Skip to content

v0.31.0

Serve every robot from one MCP endpoint, start named copies with a launch, and publish lossless 16-bit depth frames.

Released on September 24, 2026

Breaking changes

  • peppy stack join now takes one OPTION:NAME argument in place of OPTION -i NAME; update commands and scripts that add a copy to a running stack.
  • peppy stack resolve previews joined copies with repeatable --join OPTION:NAME (addressed by --with NAME.option), replacing the removed --join, --join-name, --join-with, and --join-set-arguments flags.
  • A bound member's copy is now a CopyTag carrying the copy name and its fragment's instance id, not a plain name string; update readers of member.copy and of stack list --json.
  • The with_bound_producer_in_copy builder now takes the copy name and the fragment's instance id (running the producer as NAME_<id>) instead of the full instance id and copy name.

Copies at launch

  • peppy stack launch and peppy stack build accept repeatable, comma-separated --join OPTION:NAME to start named copies with the launch, addressed by NAME.option words and --place NAME@CORE_NODE.
  • A launcher deployments entry on a zero_or_more axis may list no copies, instead describing how every copy of that option is set up for later --join or stack join.

MCP exposures

  • An MCP exposure that declares robots becomes a per-robot surface: one endpoint serving every robot of the stack, where each tool names its robot and resources are published per robot.
  • Image representations add a lossless png16 codec for 16-bit single-channel depth frames, usable with on_oversize: "downscale", and now read frames labeled z16, mono16, or 16UC1.
  • An exposure target may select the same topic member several times, each entry with its own resource name, representation, and policies.

View all releases