Blog

Grove 0.8.0: checkouts that remember, and a privacy switch

Grove 0.8.0 adds Privacy settings, with usage analytics off unless you turn it on and crash reports you can turn off, plus a roundup of 0.7.1: Agent and Shell tabs and pending review comments that survive a relaunch, a coding agent per checkout, safer catalog commands, and prompts that arrive once. Grove is also now $9.99.

Grove 0.7.1 came out on October 22 without a post of its own, and 0.8.0 followed two weeks later. 0.8.0 is small, so this post covers both. 0.7.1 is where most of the changes are, and most of them fix the same problem: quitting Grove threw away things you’d set up. 0.8.0 adds a switch that should have been there from the start, and comes with a new price.

Quitting Grove keeps your setup

Before 0.7.1, a relaunch reset more than it should have. Every Agent and Shell tab past the first one was gone. Review comments you hadn’t sent yet were gone. And the agent you’d picked in one checkout had quietly become the agent for every checkout. All three are fixed.

Tabs come back

The Agent and Shell tabs now survive a relaunch, separately for each checkout. Grove remembers which tabs you had, their order, the names you gave them, which agent each Agent tab runs, and which tab was selected.

The programs inside the tabs don’t come back. A restored tab is a fresh one: an Agent tab starts its agent when you first open it, and a Shell tab opens at the prompt. That’s on purpose. Reopening a worktree with five tabs doesn’t start five agents at once, and a Shell tab doesn’t claim to be running vim when it’s actually sitting at a prompt. The Commands tab that saved commands run in comes back too, and the next command reuses it instead of opening a second one.

Review comments are saved

Comments you’ve collected in the Review panel used to live only in memory, so a relaunch or a crash lost them all. Now the pending review is saved per checkout and comes back with the Review panel open. When it does, Grove checks each comment against the current code, the same way it does while you work, so a comment whose code changed in the meantime shows as Outdated instead of pointing at the wrong line. Grove also checks again when you press Send. If it can’t, it tells you and keeps the review instead of sending something stale.

Removing a worktree now tells you how many unsent comments go with it. Removing a workspace asks first only if it has unsent comments, and otherwise works as before.

Each checkout picks its own agent

Switching agents on the Agent tab used to change the setting for every workspace, so trying Codex in one worktree switched every other checkout to Codex too, and it stayed that way after a relaunch. Now the choice belongs to that checkout. Two worktrees of the same repository can run different agents, and each one keeps its agent across relaunches.

Settings → Tools → Default Agent still exists. It now applies only to checkouts where you haven’t picked an agent. Use Default Agent in the Agent toolbar clears a checkout’s choice. If you uninstall the agent a checkout uses, Grove falls back to the default instead of failing, and goes back to that agent if you reinstall it. If you never switched agents, nothing changes for you.

Prompts and commands arrive the way you wrote them

Two fixes for saved prompts, commands and reviews that Grove types into a terminal for you.

  • Typed once, when the program is ready. Running a prompt into an Agent tab that had just started could type it twice. A multi-line prompt could also arrive before the agent was ready, and then each line break worked like pressing Return, sending your prompt one line at a time. Now Grove holds the text until the agent or shell is ready for it and types it exactly once. If a program never signals that it’s ready, Grove gives up waiting after five seconds and types it anyway, so the text is never lost.
  • Commands are quoted for your shell. When a saved command fills in a value, like {{branch}} or {{clipboard}}, Grove quotes that value so the shell treats it as one argument. It used to quote everything the way bash and zsh expect, even in fish, where a value ending in a backslash could break the quoting and change how the rest of the line was read. Grove now quotes values for the shell the Shell tab actually runs: sh, bash, zsh, dash, ksh and similar, or fish. For any other shell, a command that fills in values is refused with an explanation instead of guessed at. Commands without values, and all prompts, work in every shell, same as before.

If you want the details on why typing text into a terminal safely is harder than it looks, I wrote them up in Typing Untrusted Text into a Terminal from Swift.

New in 0.8.0: you decide what Grove sends

Until now, Grove sent crash reports and usage analytics, and there was no way to turn either off. Nothing in the app or on the website said so either. That should have been fixed a long time ago.

Settings → General now has a Privacy section with two switches:

  • Share anonymous usage analytics is off unless you turn it on. It covers license activation and basic app usage, never your code.
  • Send crash reports is on by default, since crash logs are how I find and fix crashes. Turn it off and Grove stops sending them and deletes any reports it hasn’t sent yet. This one takes effect the next time you launch Grove.

Both are set before Grove sends anything, including on the very first launch. If you update and leave the settings alone, analytics goes off and crash reports stay on. The privacy policy now describes both.

A lower price

Grove is now $9.99, one time, instead of $29. It’s still a single purchase that includes all future updates, the 7-day free trial is the same, and license keys you already have keep working.

Get it

Grove 0.8.0 is up at grove.molayab.com, or as a direct download for a fresh install. If you’re already running Grove, accept the update alert.

Most of 0.7.1 fixes things you probably never noticed until you lost something: a tab layout, a half-written review, an agent choice that changed in a checkout you weren’t using. You set those up on purpose, and quitting the app shouldn’t throw them away. The privacy switch is the same idea. Whether Grove sends anything about how you use it should be your choice, made on purpose, and now it is.

Share