2025-09-26 23:44:38 -05:00
# goose Desktop App
2025-01-24 13:04:43 -08:00
2025-09-26 23:44:38 -05:00
Native desktop app for goose built with [Electron ](https://www.electronjs.org/ ) and [ReactJS ](https://react.dev/ ).
2025-04-10 13:59:02 -07:00
2025-06-09 11:17:39 -07:00
# Building and running
2025-09-26 23:44:38 -05:00
goose uses [Hermit ](https://github.com/cashapp/hermit ) to manage dependencies, so you will need to have it installed and activated.
2025-01-24 13:04:43 -08:00
```
2026-04-07 01:34:48 -04:00
git clone git@github.com:aaif-goose/goose.git
2025-06-27 19:50:25 +02:00
cd goose
2025-06-09 11:17:39 -07:00
source ./bin/activate-hermit
2025-06-27 19:50:25 +02:00
cd ui/desktop
2026-03-11 08:46:05 -04:00
pnpm install
pnpm run start
2025-01-24 13:04:43 -08:00
```
2025-08-02 17:40:42 -05:00
## Platform-specific build requirements
### Linux
For building on Linux distributions, you'll need additional system dependencies:
**Debian/Ubuntu: **
``` bash
sudo apt install dpkg fakeroot
```
**Arch/Manjaro: **
``` bash
sudo pacman -S dpkg fakeroot
```
**Fedora/RHEL: **
``` bash
sudo dnf install dpkg-dev fakeroot
```
2025-01-24 13:04:43 -08:00
# Building notes
2026-07-07 16:45:18 -07:00
This is an Electron Forge app using Vite and React. The desktop app launches the bundled `goose` CLI binary and talks to its ACP server.
2025-01-24 13:04:43 -08:00
2025-08-02 17:40:42 -05:00
## Building for different platforms
2025-01-24 13:04:43 -08:00
2025-08-02 17:40:42 -05:00
### macOS
2026-03-11 08:46:05 -04:00
`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.
2025-01-24 13:04:43 -08:00
2026-03-11 08:46:05 -04:00
`pnpm run bundle:preconfigured` will make a goose.app/zip signed and notarized, but use the following:
2025-01-24 13:04:43 -08:00
``` python
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 " ) } ' ; "
```
2025-09-26 23:44:38 -05:00
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.
2025-01-24 13:04:43 -08:00
2025-08-02 17:40:42 -05:00
### Linux
For Linux builds, first ensure you have the required system dependencies installed (see above), then:
2026-07-07 16:45:18 -07:00
1. Build the Rust binary:
2025-08-02 17:40:42 -05:00
``` bash
cd ../.. # Go to project root
2026-07-07 16:45:18 -07:00
cargo build --release -p goose-cli --bin goose
2025-08-02 17:40:42 -05:00
```
2026-07-07 16:45:18 -07:00
2. Copy the binary to the expected location:
2025-08-02 17:40:42 -05:00
``` bash
mkdir -p src/bin
2026-07-07 16:45:18 -07:00
cp ../../target/release/goose src/bin/
2025-08-02 17:40:42 -05:00
```
3. Build the application:
``` bash
# For ZIP distribution (works on all Linux distributions)
2026-03-17 17:09:40 +11:00
pnpm run make --targets= @electron-forge/maker-zip
2025-08-02 17:40:42 -05:00
# For DEB package (Debian/Ubuntu)
2026-03-17 17:09:40 +11:00
pnpm run make --targets= @electron-forge/maker-deb
2026-01-14 12:21:54 -06:00
# For Flatpak (requires flatpak and flatpak-builder)
2026-03-17 17:09:40 +11:00
pnpm run make --targets= @electron-forge/maker-flatpak
2025-08-02 17:40:42 -05:00
```
The built application will be available in:
2025-09-26 23:44:38 -05:00
- ZIP: `out/make/zip/linux/x64/goose-linux-x64-{version}.zip`
2025-08-02 17:40:42 -05:00
- DEB: `out/make/deb/x64/goose_{version}_amd64.deb`
2026-01-14 12:21:54 -06:00
- Flatpak: `out/make/flatpak/x86_64/*.flatpak`
2025-09-26 23:44:38 -05:00
- Executable: `out/goose-linux-x64/goose`
2025-08-02 17:40:42 -05:00
### Windows
Use the existing Windows build process as documented.
2025-01-24 13:04:43 -08:00
2026-07-07 16:45:18 -07:00
# Running with an external ACP backend
2025-01-24 13:04:43 -08:00
2026-07-07 16:45:18 -07:00
From the project root, start the ACP backend:
``` bash
2026-07-29 19:54:49 +10:00
GOOSE_SERVER__SECRET_KEY = test cargo run -p goose-cli --bin goose -- serve --platform desktop --enable-scheduler --host 127.0.0.1 --port 3000
2026-07-07 16:45:18 -07:00
```
Then start the desktop app from `ui/desktop` :
``` bash
GOOSE_EXTERNAL_BACKEND = true GOOSE_EXTERNAL_BACKEND_URL = http://127.0.0.1:3000 GOOSE_SERVER__SECRET_KEY = test pnpm run start-gui
```