Skip to main content
This guide walks you through setting up a local development environment for Goose.

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:
Or add shell hook auto-activation so Hermit activates automatically when you cd into the project (recommended).

WSL Users (Windows)

For WSL users, install additional dependencies:

Building the Rust CLI

First Build

Debug builds are available in ./target/debug/:

First-Time Configuration

Configure a provider connection:
Start a session:

Development Commands

Building the Desktop UI

Running the UI

This command:
  1. Builds a release build of Rust (cargo build -r)
  2. Starts the Electron process
  3. Opens a window for first-time setup
Make GUI changes in 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:
The server listens on port 3000 by default. Change with GOOSE_PORT environment variable. Connect the UI to your running server:
This allows breakpoints and stepping through server code while interacting with the UI.

Regenerating OpenAPI Schema

The file ui/desktop/openapi.json is automatically generated. After making server API changes:
This regenerates 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:
Supported provider env vars:
  • ANTHROPIC_API_KEY
  • OPENAI_API_KEY
  • DATABRICKS_HOST
  • GOOGLE_API_KEY
  • etc.

Isolating Test Environments

Use GOOSE_PATH_ROOT to isolate test data:
This creates isolated 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:
Commonly used commands:

Enabling Traces with Langfuse

For local tracing:
  1. Start local Langfuse
  2. Create organization, project, and API credentials
  3. Set environment variables:
  1. View traces at http://localhost:3000

Next Steps