Skip to content

Releases: Groundskeeper-robot/groundskeeper

Groundskeeper 0.19.1

Choose a tag to compare

@github-actions github-actions released this 27 Oct 02:34

Added

  • An Unraid Docker template (deploy/unraid/groundskeeper.xml): a container made from it shows in Unraid's
    Docker tab like any other app, with the update check, autostart and Edit, instead of "3rd Party".
  • A heading arrow on the robot dot (Live map): an arrowhead inside the dot points where the robot is heading,
    and stays true when the map is rotated.

Changed

  • The 3D robot and Follow use every position the robot sends (about one a second while the phone app is open)
    instead of only the status every 1.5 s, and take them in the robot's own time order: after a network dropout,
    the late positions in the robot's backlog are skipped instead of sending the 3D robot back on a detour. The 2D
    robot dot still moves with the status.

Groundskeeper 0.19.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 18:45

Changed

  • Local first, the cloud as a fallback. Commands (start, pause, resume, stop, return to dock) now go to the
    robot's own broker on your network, so they work with no Yarbo account and take effect in about 2 seconds. Reads
    and commands fall back to the Yarbo cloud when the robot can't be reached on your network (a 4G spell where HaLow
    is weak), or after two quick reads or two commands in a row go unanswered there, if you are signed in. A pause,
    stop or return to dock not seen within 10 s is sent once more by the other route (unless a newer command was sent
    meanwhile or control was switched off); a start or resume never is. Settings → Robot shows which route reads
    and commands use and lets you pin one; every change of route is logged in Events.
  • The Yarbo cloud sign-in is optional for commands and reads. Map, settings and plan writes still go only through
    the cloud until a local write has been proved.
  • The phone app is also seen on your network: the robot streams its status about once a second while the app
    is open, which the panel now reads as "app open" without the cloud. Without the cloud a missing stream is not yet
    taken as "closed": scheduled, assistant and guard starts wait while the panel cannot tell; a start from the panel
    shows the unknown.
  • Confirming a command is a pop-up over the page, instead of a panel under the buttons that could open out of
    sight (on a phone, or in the camera layout). It says up front whether the command would go and why not; Send is
    offered only when it would.
  • The two-tap buttons (camera layout) turn fully amber when armed, say "Tap again to …", and show a bar running
    down the 4 seconds; a line under them says which button is armed.

Fixed

  • The Control and camera-layout buttons were greyed out whenever the Yarbo cloud was not connected, even with the
    robot reachable on your network; they now follow the route to the robot.

Groundskeeper 0.18.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 03:27

Added

  • After-dark guard: a plan that stopped to charge heads back out by itself when the battery is full, at any
    hour. If that happens between sunset and sunrise at your yard, the panel now sends it home (Return to dock, the
    default; or notify only, or ignore, in Settings → Run rules), not when you sent it out yourself. On a real mow,
    Return to dock ended the plan; the next schedule window starts it again. Like every guard it only sends a command
    while control is on.

Changed

  • The AI assistant server runs on MCP's 2.x library (mcp 2.3). Nothing changes in what an assistant can do or
    see; the server now reports the panel's version and speaks the newer protocol revisions. Existing tokens and
    connect snippets keep working.

Groundskeeper 0.17.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 02:44

Added

  • Find the robot on your network: Settings → Robot (and the setup guide) has Find it on my network, which
    looks on the panel's own network for a Yarbo announcing itself and offers Use this. It only listens; nothing
    is sent to anything it finds. In Docker it needs host networking, like the Tempest.
  • Align next to the imagery credit on Live's map lines the aerial photo up with the robot's map. Aligning from Settings or the
    setup guide now returns there when you save or cancel.

Changed

  • The setup guide updates by itself while something is on its way (the robot connecting, its serial, the cloud
    signing in, the yard imagery, the first Tempest reading), without overwriting anything you have typed.
  • Robot step: type the address and press Connect (checked, then saved) instead of Test and Save; the serial
    is read from the robot and shown, and the port and a typed serial moved under Advanced.
  • Imagery step in two parts, Pick the photo and Line it up, and says the yard's location comes from the robot's
    map.
  • Safety step has the switches themselves (control, map writing, yard must be clear, resume after a guard
    pause) instead of only showing them.
  • AI assistant moved to the last step of the guide and after Notifications in Settings.
  • Lawn conditions explains what to check when no Tempest is heard.

Fixed

  • The version under the nav no longer overflows: a full commit id is shortened to 7 characters, and long text is
    cut off with "…".

Groundskeeper 0.16.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 18:18

Added

  • Container images for every release on GitHub's registry (ghcr.io/jpittelkow/groundskeeper), for amd64
    and arm64 (Raspberry Pi), with a ready docker-compose.yml and .env.example.
  • Demo mode (DEMO=1): a made-up robot mows a made-up yard (on a public park's lawn, with real aerial imagery
    under it) with a week of history, so the panel can be tried without a Yarbo; it never contacts a robot, the Yarbo
    cloud or any integration. DEMO_SEED=1 now means the same. scripts/screenshots.py makes the README screenshots
    from it.
  • Sign-in. The panel now asks for a password before it shows anything; only /health and the sign-in page are
    open. On the first visit you set the password with a one-time setup code from the panel's log
    (docker logs ...), so nobody else on the network can claim it first. Settings → Access changes the
    password, signs out this or every browser, and makes named API tokens for programs (Authorization: Bearer).
    Forgot it: python -m app.auth reset in the container. PANEL_AUTH=off turns sign-in off for a panel behind a
    reverse proxy that signs people in itself. AI assistants keep their own token. Upgrading: after this update
    the panel asks for the setup code from its log once.
  • /health says whether the robot is mid-run (busy), so the deploy script's "not while mowing" check works
    without signing in.
  • Dead ends in Map Studio: draw one (+ Dead end, starting inside an area), reshape, rename or delete it and send
    it to the robot like a pathway; select one for its settings (speed, blades, trimmer), read back and checked. A
    replaced dead end keeps its settings. From the app's own commands, recorded 2026-10-11.

Changed

  • The container no longer runs as root. It runs as PUID:PGID (1000:1000 by default; the Unraid example uses
    99:100) and hands an existing data folder to that user on its first start. The libraries it downloads at build
    time are checked against their hashes, and the image has its own health check.
  • A pathway's transit offset range goes to ±39.4 in (1.0 m), the Yarbo app's own limit (it was held at 27.6 in
    until the limit was known).

Removed

  • The Terrain map tool. The 3D map shows the ground instead, with the robot's own heights (the flat height and
    slope image no longer lined up with the photo).

Fixed

  • Planned vs driven compares the whole plan. The robot reports each area's plan as separate passes (the edge
    around the outline and the fill stripes), and the panel kept only the first of them, so a run could be compared
    with a fifth of its plan and look mostly off plan. Every pass is kept now, each from where the run took it up
    (a resumed plan leaves out what the robot had already driven, and passes it lists as finished), and the passes kept
    with earlier runs of the same plan fill in what a run is missing. Runs recorded before this are worked out from the robot's whole plan report kept with them.
  • A plan resumed after a long pause stays one run. A run paused for more than 3 hours closes, and its resume
    was only joined back within 3 hours of the run's last movement, which such a run can never meet, so a plan
    paused in the evening and resumed the next morning became two runs. A resume of the same plan session now joins
    up to 36 hours later (never on a report that the plan is done: a new run's first report can be the last plan's). Runs split before this stay apart; Join with previous joins them.
  • Coverage of a resumed run counts the earlier runs of its plan. What they mowed is neither a gap nor part of
    this run's share (it used to show as gaps "next to RTK loss"); the run page says how much
    that was.
  • No stuck alert while the robot waits for an RTK fix. Standing still on a float fix with the blades stopped
    is the robot waiting for its fix: the alert now says "Yarbo is waiting for an RTK fix" (and Live shows it), and the
    stuck alert comes only if it still does not move 3 minutes after the fix is back.
  • One odd firmware reading is not a firmware change. A new version counts once the robot has reported it for a
    minute; a chassis version that flickered for a few seconds was logged as two firmware changes.
  • Planned vs driven uses the robot's own plan when it was kept during the run: the robot reports each area's
    path once it starts the area, and the panel now keeps it (only the run's first report was kept before, which has
    no path yet). Runs without it are compared with a fresh preview, as before, and the result says which.
  • A Wi-Fi survey cut short by a restart that never rejoined its run still gets its report in Events.
  • Run distances are right, and survive panel restarts. A run's distance, points, RTK share and battery are now
    worked out from its stored track when it ends, is joined or is closed after a restart. Before, the running totals
    started again at every restart, and they counted positions that arrived out of place after a weak-signal gap as
    driving. Every stored run is worked out again on upgrade; on a test mow the result came within about 4 % of the
    wheel odometers.
  • Positions in the robot's own order. The panel now stores the robot's own time for each position. Distance and
    coverage use that order, a position that is out of place and back is not counted as driving, and "hard going"
    times wheel travel by it, so a burst of messages after a weak-signal gap no longer looks like jumps.
  • Wi-Fi survey across restarts: its counters are kept with the run, so the verdict covers the whole mow.
  • The dock is no longer a weak-positioning spot in Problem areas (time on the charger is left out).
  • A plan is not marked finished too early when the robot briefly lists an area as done while still mowing it.
  • Leaving a charging break no longer ends the run for the few seconds the robot shows no plan.
  • Late confirmations: a command marked unconfirmed is still watched for 3 minutes; if the robot carries it out
    late, the log says "confirmed late". Nothing is sent again.
  • Guard notices are not repeated after a restart for the same detection (the protective pause is unchanged).
  • Changes to run rules and guards are logged in Events (old → new, and whether the panel or an assistant).
  • Home Assistant: a value that is not known yet is sent as "unknown", and one refused sensor no longer stops the
    others from updating.
  • Secrets in the robot's replies are masked when kept, and stored copies are masked when the panel starts.
  • Claude Desktop setup fixed. Settings → AI assistant (and the setup guide) now give a Claude Desktop entry that
    runs the mcp-remote bridge on your computer (needs Node.js). The old entry put an http server straight into
    Claude Desktop's config, which only starts local programs. The page also says not to use Add custom connector: it
    needs https and connects from Anthropic's cloud, which cannot reach a home network.
  • Secrets from other apps' commands are no longer kept. The panel logs and captures commands other clients send
    the robot (to learn their formats); the Yarbo app's "join this Wi-Fi" command carried the Wi-Fi password, which ended
    up in Events and Captured writes. Passwords, tokens and email addresses are now masked before anything is stored,
    and copies already stored are masked when the panel starts.

Added

  • Follow the robot in 3D. With the 3D map on, Follow flies the camera behind the robot and 45° to one side and
    keeps it there, turning with the robot (at most 40° a second, so the turn at the end of a stripe is a swing, not
    a spin). Right-drag (two fingers on a phone) moves the camera round the robot and it keeps that angle; zoom and
    tilt stay as you set them; a drag or Fit yard lets go. Works on Live and in a run's replay.
  • The robot in 3D. With the 3D map on, the robot is a small 3D model that faces its heading, leans with its own
    pitch and roll, and glides between the panel's updates (it keeps going at its speed for a moment, then catches
    up) instead of jumping. In Runs it drives the replay. The status now carries the robot's compass heading.
  • Replay draws the track as it goes. Press Play and the run's track grows behind the replay point (the slider
    shows it up to where you drag); before Play the whole run shows. Play is now a green button with a play icon.
  • GET /api/runs/{id}/plan-feedback: the robot's plan reply kept for a run, by shape (or ?raw=true), for
    comparing a run with the robot's own plan.
  • 3D map. The new 3D button among the map tools tilts the map and raises the ground under it: the robot's
    own RTK heights over the lawns, the 2015 lidar around them, eased together so there is no step where they meet.
    The photo, zones, track, run replay and the robot all lie on it, on Live and in Runs. The menu next to it (1× to 3×)
    draws the ground taller; right-drag (two fingers on a phone) turns and tilts. Map Studio and the camera
    layout's small map stay flat.
  • Notifications: pick the Home Assistant notify service from a list of the ones your Home Assistant has, the
    companion app's phones first, instead of typing its name. "Type a name…" is still there for anything missing.
  • Map Studio: move a group of corners in small steps. Shift-drag a box over a selected shape's corners (or
    Shift-click them), then move them north, south, east or west with the arrows or the arrow keys by a step you set
    (0.5 to 100 cm). A burst of moves is one draft edit, so one Undo takes it back.
  • Wi-Fi survey (Settings → Robot: Off / Next run only / Every run). While a run is driving, the panel asks the
    robot every 30 s which Wi-Fi networks it hears and stores each one's signal where the robot was. Each ask is a ~4 s
    scan on the robot, so Next run only surveys one run (at least 10 minutes of driving), reports in Events
    (answers, reply time, pauses in the rob...
Read more