* origin/main: feat: adversarial agent for preventing leaking of info and more (#7948) Update contributing.md (#7927) docs: add credit balance monitoring section (#7952) docs: add Cerebras provider to supported providers list (#7953) docs: add TUI client documentation to ACP clients guide (#7950) fix: removed double dash in pnpm command (#7951) docs: polish ACP docs (#7946) claude adaptive thinking (#7944) feat: new onboarding flow (#7266) Add DCO git commit command to AGENTS.md (#7945) fix(claude-code): remove incorrect agent_visible filter on user message (#7931) No Check do Check (#7942) Log 500 errors and also show error for direct download (#7936) fix: retry on authentication failure with credential refresh (#7812) Remove java/.ai-usage-marker directory (#7925) test(acp): add terminal delegation fixtures and fix shell singleton (#7923) fix: bump pctx_code_mode to 0.3.0 for iterator type checking fix (#7892) feat: persist GooseMode per-session via session DB (#7854)
goose Desktop App
Native desktop app for goose built with Electron and ReactJS.
Building and running
goose uses Hermit to manage dependencies, so you will need to have it installed and activated.
git clone git@github.com:block/goose.git
cd goose
source ./bin/activate-hermit
cd ui/desktop
pnpm install
pnpm run start
Platform-specific build requirements
Linux
For building on Linux distributions, you'll need additional system dependencies:
Debian/Ubuntu:
sudo apt install dpkg fakeroot
Arch/Manjaro:
sudo pacman -S dpkg fakeroot
Fedora/RHEL:
sudo dnf install dpkg-dev fakeroot
Building notes
This is an electron forge app, using vite and react.js. goosed runs as multi process binaries on each window/tab similar to chrome.
Building for different platforms
macOS
pnpm run bundle:default will give you a goose.app/zip which is signed/notarized but only if you set up the env vars as per forge.config.ts (you can empty out the section on osxSign if you don't want to sign it) - this will have all defaults.
pnpm run bundle:preconfigured will make a goose.app/zip signed and notarized, but use the following:
f" process.env.GOOSE_PROVIDER__TYPE = '{os.getenv("GOOSE_BUNDLE_TYPE")}';",
f" process.env.GOOSE_PROVIDER__HOST = '{os.getenv("GOOSE_BUNDLE_HOST")}';",
f" process.env.GOOSE_PROVIDER__MODEL = '{os.getenv("GOOSE_BUNDLE_MODEL")}';"
This allows you to set for example GOOSE_PROVIDER__TYPE to be "databricks" by default if you want (so when people start goose.app - they will get that out of the box). There is no way to set an api key in that bundling as that would be a terrible idea, so only use providers that can do oauth (like databricks can), otherwise stick to default goose.
Linux
For Linux builds, first ensure you have the required system dependencies installed (see above), then:
- Build the Rust backend:
cd ../.. # Go to project root
cargo build --release -p goose-server
- Copy the server binary to the expected location:
mkdir -p src/bin
cp ../../target/release/goosed src/bin/
- Build the application:
# For ZIP distribution (works on all Linux distributions)
pnpm run make --targets=@electron-forge/maker-zip
# For DEB package (Debian/Ubuntu)
pnpm run make --targets=@electron-forge/maker-deb
# For Flatpak (requires flatpak and flatpak-builder)
pnpm run make --targets=@electron-forge/maker-flatpak
The built application will be available in:
- ZIP:
out/make/zip/linux/x64/goose-linux-x64-{version}.zip - DEB:
out/make/deb/x64/goose_{version}_amd64.deb - Flatpak:
out/make/flatpak/x86_64/*.flatpak - Executable:
out/goose-linux-x64/goose
Windows
Use the existing Windows build process as documented.
Running with goosed server from source
Set VITE_START_EMBEDDED_SERVER=yes to no in .env.
Run cargo run -p goose-server from parent dir.
pnpm run start will then run against this.
You can try server directly with ./test.sh