Bundle sprout CLI in DMG release + agent PATH discoverability#614
Merged
Conversation
Agents on end-user machines can't find the sprout binary because it's not included in the release pipeline. Add sprout-cli to cargo build, bundle-sidecars, externalBin, and justfile sidecar stubs so it ships alongside the other sidecars in the DMG.
… collision Tauri rejects a sidecar with the same name as the Cargo package (both are "sprout"). The cargo binary stays named "sprout" for CLI ergonomics; bundle-sidecars.sh maps it to "sprout-cli" via a RENAMES array so Tauri sees a distinct name.
…lity Tauri rejects a sidecar with the same name as the Cargo package name. The desktop crate was `sprout`, colliding with the CLI's `sprout` binary. Renaming the package to `sprout-desktop` (1-line change) eliminates the collision so the CLI sidecar can be registered as `binaries/sprout` — removing the RENAMES workaround from the bundle script. Also makes the CLI discoverable by managed agents: - Prepend ~/.local/bin and exe-parent (Contents/MacOS/) to agent PATH - Create ~/.local/bin/sprout symlink on app launch (won't clobber existing non-Sprout binaries)
Agents need the `sprout` binary available. The `staging`, `goose`, and `goose-bg` recipes explicitly list sidecar packages to build but were missing `-p sprout-cli`.
tauri dev copies sidecars from desktop/src-tauri/binaries/ which contains 0-byte stubs. The staging recipe builds the real CLI binary but never copies it there, so agents get an empty file. Copy the built binary after cargo build so tauri dev picks up the real thing.
cp overwrites the 0-byte stub's contents but preserves its 644 permissions (from touch). Add chmod +x so agents don't get "permission denied" when running the CLI.
tlongwell-block
approved these changes
May 20, 2026
wpfleger96
added a commit
that referenced
this pull request
May 20, 2026
Reformat code after rebasing onto main (which includes PR #614's nest.rs additions). No logic changes.
wpfleger96
added a commit
that referenced
this pull request
May 20, 2026
Reformat code after rebasing onto main (which includes PR #614's nest.rs additions). No logic changes.
wpfleger96
added a commit
that referenced
this pull request
May 20, 2026
Reformat code after rebasing onto main (which includes PR #614's nest.rs additions). No logic changes.
wpfleger96
added a commit
that referenced
this pull request
May 20, 2026
Reformat code after rebasing onto main (which includes PR #614's nest.rs additions). No logic changes.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The
sproutCLI binary is not included in the DMG release — agents on end-user machines can't find it. Two problems blocked this: a Tauri sidecar name collision, and the sidecar directory not being on agents' PATH.Tauri collision fix: Tauri rejects a sidecar with the same name as the Cargo
[package] name. The desktop crate wassprout, colliding with the CLI'ssproutbinary. Renamed the desktop package tosprout-desktop— a 1-line change that eliminates the collision (everything else usesproductName,--manifest-path, or the explicit[lib] name).Sidecar bundling:
-p sprout-clitocargo build --releaseinrelease.ymlbinaries/sproutintauri.conf.jsonexternalBinsproutto theSIDECARSarray inbundle-sidecars.sh(removes the RENAMES workaround from the earlier collision fix attempt)sproutstubs in both justfile sidecar recipes andci.ymlplaceholder step-p sprout-clitostaging,goose, andgoose-bgrecipes so the CLI binary is built alongside other sidecarsstagingrecipe copies the real CLI binary into the sidecar directory (replacing the 0-byte stub) with execute permission, so agents can run it immediately in dev modeAgent PATH discoverability:
~/.local/binand exe-parent (Contents/MacOS/) to spawned agent PATH inruntime.rs, so managed agents can find the CLI and all other sidecars~/.local/bin/sproutsymlink on app launch (idempotent, won't clobber non-Sprout binaries), giving Terminal users access via a standard PATH locationCompanion to #612 (CLI parity fixes) and #613 (agent skill file).