Skip to main content
Goose’s architecture is designed for extensibility, allowing organizations to create custom distributions (sometimes called “white labeling”) tailored to specific needs—whether that’s preconfigured models, custom tools, branded interfaces, or entirely new user experiences.

Overview

Custom distributions enable you to:
  • Preconfigure AI providers: Ship with a specific model (local or cloud) and API credentials
  • Bundle custom tools: Include proprietary MCP extensions for internal data sources
  • Customize the experience: Modify branding, UI, and default behaviors
  • Target specific audiences: Create specialized versions for developers, legal teams, designers, etc.

Architecture

Goose separates concerns into distinct layers:
  • User Interfaces: CLI (goose-cli), Desktop (Electron), or your custom UI
  • Server Layer: goose-server (binary: goosed) provides REST API
  • Core Logic: goose crate handles agents, providers, and extensions
  • Customization Points: Providers, extensions, recipes, and configuration

Key Customization Points

Getting Started

1. Fork and Clone

2. Choose Your Strategy

Configuration-only: Modify config files and environment variables (no code changes)
Extension-based: Add custom MCP servers for your tools (minimal core changes)
Deep customization: Modify core behavior, UI, or add new providers (requires Rust knowledge)

3. Build and Distribute

See the main repository documentation:
  • Linux: BUILDING_LINUX.md
  • Docker: BUILDING_DOCKER.md
  • Desktop: ui/desktop/README.md

Common Distribution Scenarios

Local Model Distribution

Ship Goose preconfigured to use a local Ollama model:

Corporate Distribution with Managed Keys

Distribute internally with pre-provisioned API keys:
Secrets are stored in system keyring by default, with file-based fallback available via GOOSE_DISABLE_KEYRING=1.

Custom Branding

Rebrand the desktop application: 1. Replace visual assets in ui/desktop/src/images/:
  • icon.png, icon.ico, icon.icns
2. Modify application metadata in ui/desktop/forge.config.ts:
3. Update system prompt in crates/goose/src/prompts/system.md:
4. Set environment variables consistently:

Adding Custom Tools

Create MCP extensions for internal systems:
Bundle as a built-in extension in ui/desktop/src/built-in-extensions.json:

Audience-Specific Distributions

Create specialized versions using recipes:

Important Considerations

Licensing

Goose is licensed under Apache License 2.0 (ASL v2). Custom distributions must:
  • Include the original license and copyright notices
  • Clearly indicate any modifications made
  • Not use “Goose” trademarks in ways that imply official endorsement
See the Apache License FAQ for compliance guidance.

Contributing Back

While you’re free to maintain private forks, contributing improvements upstream benefits everyone—including your distribution. Private forks that diverge significantly:
  • Become expensive to maintain
  • Miss out on security updates and new features
  • Require manual merging of upstream changes
Consider upstreaming generic improvements while keeping only organization-specific customizations private.

Telemetry

Goose includes optional telemetry. For custom distributions:
Or modify crates/goose/src/posthog.rs to point to your own PostHog instance.

Staying Current

To benefit from upstream improvements:
  1. Regularly sync your fork with the main repository
  2. Keep customizations isolated in config files or separate extension repos
  3. Use recipes for workflow customization rather than code changes
  4. Subscribe to release announcements for breaking changes

Configuration Precedence

Goose loads configuration in this order (later sources override earlier ones):
  1. Built-in defaults
  2. init-config.yaml (first run only)
  3. ~/.config/goose/config.yaml
  4. Environment variables (highest priority)

File Locations

Resources

  • Full guide: CUSTOM_DISTROS.md in source repository
  • Build instructions: BUILDING_LINUX.md, BUILDING_DOCKER.md
  • Desktop UI: ui/desktop/README.md
  • Provider implementation: crates/goose/src/providers/base.rs
  • Extension config: crates/goose/src/agents/extension.rs