Skip to content

feat: bundle a slim goose agent (goose-acp) as a desktop sidecar#1526

Closed
michaelneale wants to merge 1 commit into
mainfrom
micn/bundled-goose-acp
Closed

feat: bundle a slim goose agent (goose-acp) as a desktop sidecar#1526
michaelneale wants to merge 1 commit into
mainfrom
micn/bundled-goose-acp

Conversation

@michaelneale

Copy link
Copy Markdown

Bundles a slim goose acp binary as a desktop sidecar so Buzz ships a working goose agent out of the box — no goose install required.

How it's made small

  • New goose-acp/ crate (workspace-excluded, own lockfile): a 14-line main calling goose::acp::server::run() on the goose library crate with default-features = false, features = ["rustls-tls"] — drops code-mode (V8 JS runtime), local-inference (llama.cpp), keyring, AWS providers, telemetry, and the goose CLI/TUI entirely
  • Size-optimized profile (opt-level=z, fat LTO, panic=abort, strip)
  • rmcp pinned at 1.7.0 in the crate's own lockfile (goose doesn't compile against 1.8); workspace Cargo.lock is untouched by goose's dependency graph

Net impact

Binary (macOS arm64) 32 MB (vs ~240 MB stock goose install)
Download delta +9 MB compressed (+12% on the 72 MB DMG)
Future drops to ~14 MB raw / ~+5 MB download when goose's upstream analyze/tiktoken feature gates land (rev bump only)

Wiring (~60 LOC outside the new crate)

  • buzz-acp: goose-acp identity takes no acp subcommand (it is the ACP server), + tests
  • Desktop: goose runtime discovery accepts goose-acp as fallback — user-installed goose still wins
  • Packaging: externalBin entry, sidecar stubs (justfile + CI), bundle-sidecars.sh stages it when built (with chmod +x — cp onto a stub keeps the stub's mode), release workflow builds it for all targets

Verified

  • ACP initialize handshake against the built binary
  • Full E2E: local relay → buzz-acp → bundled goose-acp → Anthropic → reply posted in channel
  • Desktop Tauri crate builds against the staged sidecar; just dev runs

@michaelneale michaelneale force-pushed the micn/bundled-goose-acp branch from ecfded9 to 1dc7998 Compare July 6, 2026 05:04
@michaelneale

Copy link
Copy Markdown
Author

CI note: the one red check, Desktop Smoke E2E (2) (human-edit-agent-content.spec.ts), is pre-existing on main — the same 6 tests fail identically on a clean origin/main checkout locally, and the two CI runs on main before 8174f2b0 show the same Desktop Smoke E2E (2) failure. Unrelated to this change (which touches no desktop UI code paths). Everything else is green, including Desktop Build (macOS), which stages the new goose-acp sidecar stub.

@tlongwell-block

Copy link
Copy Markdown
Collaborator

@michaelneale can you look at the way we do auto-installs for the ACP adapters for claude code and codex at boostrap time as part of user onboarding and refactor this to where this slim goose is a one click install on that screen?

Adds goose-acp/, a workspace-excluded crate that builds goose's ACP
stdio server from the goose library crate with default-features off
(rustls-tls only): no code-mode/V8, no local-inference/llama.cpp, no
keyring/AWS/telemetry, no goose CLI. Full agent loop, providers,
sessions, and MCP extensions intact. ~32 MB on macOS arm64 (~9 MB
added to the compressed download) vs ~240 MB for a stock goose
install; drops to ~14 MB once goose's analyze/tiktoken feature gates
land upstream and the rev pin is bumped.

Workspace exclusion is deliberate: goose's ~700-crate graph stays out
of the workspace lockfile, and rmcp stays pinned at 1.7.0 (goose does
not compile against 1.8) in goose-acp's own Cargo.lock.

Wiring:
- buzz-acp: goose-acp identity takes no 'acp' subcommand (it is
  already the ACP server), with tests
- desktop: goose runtime discovery also accepts goose-acp, so the
  bundled sidecar is found when no user-installed goose exists;
  orphan sweep already matches it via the goose- prefix rule
- packaging: tauri externalBin entry, sidecar stubs (justfile + CI),
  bundle-sidecars.sh stages it when built, release workflow builds it
  for all targets
@michaelneale michaelneale force-pushed the micn/bundled-goose-acp branch from 1dc7998 to 0f92884 Compare July 6, 2026 17:22
@michaelneale

michaelneale commented Jul 6, 2026

Copy link
Copy Markdown
Author

@tlongwell-block I could - but partly defeats the purpose, this bundles the small binary in (a few MB extra) so no download opt-in needed (which means less potential security hassles) - but could do that too (ie pull down a lean agent). the idea here is to show how small a combination batteries included could be (ie only a small addition to the net size of buzz) - but it isn't clear from the description I guess. More if they choose to use it would be nothing extra.

@tlongwell-block

Copy link
Copy Markdown
Collaborator

We already bundle a full agent, @michaelneale

I think at some point we might want to cut over to goose, but right now for 5-10MB total the buzz-agent is working really well for us

@michaelneale

Copy link
Copy Markdown
Author

@tlongwell-block tnx, no worries

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants