Prerequisites
Goose includes Rust binaries alongside an Electron app for the GUI.Hermit
We use Hermit to manage development dependencies (Rust, Node, npm, just, etc.). Activate Hermit when entering the project:cd into the project (recommended).
WSL Users (Windows)
For WSL users, install additional dependencies:Building the Rust CLI
First Build
./target/debug/:
First-Time Configuration
Configure a provider connection:Development Commands
Building the Desktop UI
Running the UI
- Builds a release build of Rust (
cargo build -r) - Starts the Electron process
- Opens a window for first-time setup
ui/desktop.
UI-Only Development
If you’re only working on the UI and don’t need to rebuild Rust:Debug Build UI
Run the UI with debug Rust binaries (faster compilation):UI Testing
Working with the Server
Debugging the Server
To debug the Goose server, run it from an IDE with:3000 by default. Change with GOOSE_PORT environment variable.
Connect the UI to your running server:
Regenerating OpenAPI Schema
The fileui/desktop/openapi.json is automatically generated. After making server API changes:
openapi.json and rebuilds the TypeScript client.
Never edit ui/desktop/openapi.json manually. Make changes in crates/goose-server/src/.
Environment Variables
Provider Configuration
Change provider without reconfiguring:ANTHROPIC_API_KEYOPENAI_API_KEYDATABRICKS_HOSTGOOGLE_API_KEY- etc.
Isolating Test Environments
UseGOOSE_PATH_ROOT to isolate test data:
config/, data/, and state/ directories, preventing test sessions from affecting your main installation.
Development Loop
Typical workflow when making changes:Useful Just Commands
We use just as a command runner. See all available commands:Enabling Traces with Langfuse
For local tracing:- Start local Langfuse
- Create organization, project, and API credentials
- Set environment variables:
- View traces at http://localhost:3000
Next Steps
- Learn about Architecture
- Understand Testing
- Build Extensions
- Create Providers