Skip to content

docs: White label guide#6857

Merged
angiejones merged 4 commits intomainfrom
manik/whitelabel
Feb 12, 2026
Merged

docs: White label guide#6857
angiejones merged 4 commits intomainfrom
manik/whitelabel

Conversation

@maniksurtani
Copy link
Contributor

Summary

Type of Change

  • Feature
  • Bug fix
  • Refactor / Code quality
  • Performance improvement
  • Documentation
  • Tests
  • Security fix
  • Build / Release
  • Other (specify below)

AI Assistance

  • This PR was created or reviewed with AI assistance

Copilot AI review requested due to automatic review settings January 31, 2026 02:01
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a comprehensive white-labeling guide to help organizations create custom distributions of goose (preconfigured providers, extensions, branding, and custom UIs).

Changes:

  • Introduces a new WHITE_LABEL.md guide covering architecture, customization points, and multiple distribution scenarios.
  • Documents configuration, extension bundling, ACP/REST integration options, and recipe-based workflows.

WHITE_LABEL.md Outdated
Comment on lines 1 to 7
# White-Labeling Goose

This guide explains how to create custom distributions of goose tailored to your organization's needs—whether that's preconfigured models, custom tools, branded interfaces, or entirely new user experiences.

## Overview

Goose's architecture is designed for extensibility. Organizations can create "remixed" versions that:
Copy link

Copilot AI Jan 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doc mixes "Goose"/"Goose's" with "goose", but the repo consistently uses the lowercase product name in top-level docs (e.g., README.md:3, BUILDING_LINUX.md:1); please standardize references to the project name to avoid inconsistent branding/searchability.

Copilot uses AI. Check for mistakes.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

goose (lowercase) please

WHITE_LABEL.md Outdated
### Technical Details

- Electron config: `ui/desktop/forge.config.ts`
- UI components: `ui/desktop/src/renderer/` (if using standard structure)
Copy link

Copilot AI Jan 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ui/desktop/src/renderer/ is referenced here, but that directory doesn't exist in this repo (the entry point is ui/desktop/src/renderer.tsx); please update the path(s) so readers can actually find the UI code.

Suggested change
- UI components: `ui/desktop/src/renderer/` (if using standard structure)
- UI entry point: `ui/desktop/src/renderer.tsx`

Copilot uses AI. Check for mistakes.
@katzdave katzdave requested a review from a team February 6, 2026 16:27
@katzdave
Copy link
Collaborator

katzdave commented Feb 6, 2026

@block/goose-devrel do you think worth having here in the main repo? Or do we have similar info in the goose docs?

WHITE_LABEL.md Outdated
@@ -0,0 +1,804 @@
# White-Labeling Goose
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

white labeling doesn't seem like the right term for open source projects. how about using "Custom Distributions"?

WHITE_LABEL.md Outdated
@@ -0,0 +1,804 @@
# White-Labeling Goose
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do you think this would be best as a top level file in the repo (as you have it now) or a guide on the doc site (with the readme pointing to this link)?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

decided to keep top level, but have a doc refer to it (maximum discovery for developers - who it is for. Documentation is just for discovery when people don't browse via the repo, but the real word is in the repo md)

@angiejones
Copy link
Collaborator

@block/goose-devrel do you think worth having here in the main repo? Or do we have similar info in the goose docs?

ha, i had the same thought. i think a doc is better, and the README can point to it

Copy link
Collaborator

@michaelneale michaelneale left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think worthwhile having - @angiejones yeah in 2 minds on white labelling - can be called "making a goose distro" - either distro... or white label seems to be a term of art but don't have strong opinion.

would be good to have this at top level but also linked from README IMO - as it is an important thing to encourage and I didn't realise how doable all this was already!)

@maniksurtani
Copy link
Contributor Author

How about this:

  1. We move this content to the docs site
  2. We point to it from README.md
  3. We still keep this file (WHITE_LABEL.md -- or better, call it CUSTOM_DISTROS.md) which also links to the docs site, just so we have that added top-level visibility.

WDYT @angiejones @michaelneale?

@angiejones angiejones self-assigned this Feb 9, 2026
* main: (125 commits)
  chore: add a new scenario (#7107)
  fix: Goose Desktop missing Calendar and Reminders entitlements (#7100)
  Fix 'Edit In Place' and 'Fork Session' features (#6970)
  Fix: Only send command content to command injection classifier (excluding part of tool call dict) (#7082)
  Docs: require auth optional for custom providers (#7098)
  fix: improve text-muted contrast for better readability (#7095)
  Always sync bundled extensions (#7057)
  feat: Add tom (Top Of Mind) platform extension (#7073)
  chore(docs): update GOOSE_SESSION_ID -> AGENT_SESSION_ID (#6669)
  fix(ci): switch from cargo-audit to cargo-deny for advisory scanning (#7032)
  chore(deps): bump @isaacs/brace-expansion from 5.0.0 to 5.0.1 in /evals/open-model-gym/suite (#7085)
  chore(deps): bump @modelcontextprotocol/sdk from 1.25.3 to 1.26.0 in /evals/open-model-gym/mcp-harness (#7086)
  fix: switch to windows msvc (#7080)
  fix: allow unlisted models for CLI providers (#7090)
  Use goose port (#7089)
  chore: strip posthog for sessions/models/daily only (#7079)
  tidy: clean up old benchmark and add gym (#7081)
  fix: use command.process_group(0) for CLI providers, not just MCP (#7083)
  added build notify (#6891)
  test(mcp): add image tool test and consolidate MCP test fixtures (#7019)
  ...
@michaelneale
Copy link
Collaborator

ok, made some docs, and tidied up, moved it to distros md (I think .md makes sense - as it is a dev time activity - and want people to discover it even as they browse - added a link from readme too) doc is just to help highlight it.

cc @angiejones for your consideration

@github-actions
Copy link
Contributor

github-actions bot commented Feb 10, 2026

PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-02-12 02:52 UTC

Copilot AI review requested due to automatic review settings February 12, 2026 02:38
@angiejones angiejones enabled auto-merge February 12, 2026 02:42
@angiejones angiejones added this pull request to the merge queue Feb 12, 2026
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 6 comments.

| `session/prompt` | Send a prompt and receive streaming responses |
| `session/cancel` | Cancel an in-progress prompt |

**Example: Python ACP client** (see `test_acp_client.py` for a complete example):
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This references test_acp_client.py, but there is no such file in the repo; please link to an existing example or remove the reference to avoid sending readers on a dead end.

Suggested change
**Example: Python ACP client** (see `test_acp_client.py` for a complete example):
**Example: Python ACP client** (simplified, self-contained example):

Copilot uses AI. Check for mistakes.

# Initialize and create session
client = AcpClient()
client.send_request("initialize", {"protocolVersion": "2025-01-01"})
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hardcoding protocolVersion: "2025-01-01" is likely incorrect (the Rust implementation/tests use sacp::schema::ProtocolVersion::LATEST); consider removing the literal date or documenting the currently supported ACP protocol version(s) so the example stays valid.

Suggested change
client.send_request("initialize", {"protocolVersion": "2025-01-01"})
client.send_request("initialize")

Copilot uses AI. Check for mistakes.
Comment on lines +491 to +497
3. Register in `crates/goose/src/providers/factory.rs`

### Technical Details

- Declarative providers: `crates/goose/src/config/declarative_providers.rs`
- Provider trait: `crates/goose/src/providers/base.rs`
- Provider registration: `crates/goose/src/providers/factory.rs`
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

crates/goose/src/providers/factory.rs is referenced here but does not exist; provider registration currently lives in crates/goose/src/providers/init.rs / the ProviderRegistry, so the path in this step should be corrected.

Suggested change
3. Register in `crates/goose/src/providers/factory.rs`
### Technical Details
- Declarative providers: `crates/goose/src/config/declarative_providers.rs`
- Provider trait: `crates/goose/src/providers/base.rs`
- Provider registration: `crates/goose/src/providers/factory.rs`
3. Register it in the `ProviderRegistry` in `crates/goose/src/providers/init.rs`
### Technical Details
- Declarative providers: `crates/goose/src/config/declarative_providers.rs`
- Provider trait: `crates/goose/src/providers/base.rs`
- Provider registration: `crates/goose/src/providers/init.rs` (via the `ProviderRegistry`)

Copilot uses AI. Check for mistakes.
- ACP server implementation: `crates/goose-acp/src/server.rs`
- CLI integration: `crates/goose-cli/src/cli.rs` (Command::Acp)
- Protocol library: `sacp` crate (Rust implementation of ACP)
- Test client example: `test_acp_client.py`
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is another reference to test_acp_client.py, which doesn’t exist in the repo; please remove or replace with a valid link/path.

Suggested change
- Test client example: `test_acp_client.py`
- Test client example: see ACP documentation linked above

Copilot uses AI. Check for mistakes.
Comment on lines +79 to +83
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

Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This line uses "Goose" capitalized, but the repo’s documentation style guide requires the product name to be written as "goose" in docs/README/user-facing text; please change it to lowercase for consistent branding/searchability.

Copilot uses AI. Check for mistakes.
Comment on lines +194 to +198
2. **Bundle as a built-in extension** by adding to `ui/desktop/src/built-in-extensions.json`:

```json
{
"id": "internal-data",
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The guide suggests adding a stdio extension entry (with cmd/args) to ui/desktop/src/built-in-extensions.json, but that file only contains metadata for builtin extensions (no cmd/args); update the instructions/example to match the actual schema and document the correct way to bundle a custom stdio MCP server.

Copilot uses AI. Check for mistakes.
Merged via the queue into main with commit ffc2471 Feb 12, 2026
27 checks passed
@angiejones angiejones deleted the manik/whitelabel branch February 12, 2026 02:48
lifeizhou-ap added a commit that referenced this pull request Feb 12, 2026
* main:
  fix text editor view broken (#7167)
  docs: White label guide (#6857)
  Add PATH detection back to developer extension (#7161)
  docs: pin version in ci/cd (#7168)
  Desktop: - No Custom Headers field for custom OpenAI-compatible providers  (#6681)
  feat: edit model and extensions of a recipe from GUI (#6804)
  feat: MCP support for agentic CLI providers (#6972)
jh-block added a commit that referenced this pull request Feb 12, 2026
* origin/main: (33 commits)
  fix: replace panic with proper error handling in get_tokenizer (#7175)
  Lifei/smoke test for developer (#7174)
  fix text editor view broken (#7167)
  docs: White label guide (#6857)
  Add PATH detection back to developer extension (#7161)
  docs: pin version in ci/cd (#7168)
  Desktop: - No Custom Headers field for custom OpenAI-compatible providers  (#6681)
  feat: edit model and extensions of a recipe from GUI (#6804)
  feat: MCP support for agentic CLI providers (#6972)
  docs: keyring fallback to secrets.yaml (#7165)
  feat: load provider/model specified inside the recipe config (#6884)
  fix ask-ai bot hitting tool call limits (#7162)
  fix flatpak icon (#7154)
  [docs] Skills Marketplace UI Improvements (#7158)
  More no-window flags (#7122)
  feat: Allow overriding default bat themes using environment variables (#7140)
  Make the system prompt smaller (#6991)
  Pre release script (#7145)
  Spelling (#7137)
  feat(mcp): upgrade rmcp to 0.15.0 and advertise MCP Apps UI extension capability (#6927)
  ...
tlongwell-block added a commit that referenced this pull request Feb 12, 2026
…provenance

* origin/main: (68 commits)
  Upgraded npm packages for latest security updates (#7183)
  docs: reasoning effort levels for Codex provider (#6798)
  Fix speech local (#7181)
  chore: add .gooseignore to .gitignore (#6826)
  Improve error message logging from electron (#7130)
  chore(deps): bump jsonwebtoken from 9.3.1 to 10.3.0 (#6924)
  docs: standalone mcp apps and apps extension (#6791)
  workflow: auto-update cli-commands on release (#6755)
  feat(apps): Integrate AppRenderer from @mcp-ui/client SDK (#7013)
  fix(MCP): decode resource content (#7155)
  feat: reasoning_content in API for reasoning models (#6322)
  Fix/configure add provider custom headers (#7157)
  fix: handle keyring fallback as success (#7177)
  Update process-wrap to 9.0.3 (9.0.2 is yanked) (#7176)
  feat: support extra field in chatcompletion tool_calls for gemini openai compat (#6184)
  fix: replace panic with proper error handling in get_tokenizer (#7175)
  Lifei/smoke test for developer (#7174)
  fix text editor view broken (#7167)
  docs: White label guide (#6857)
  Add PATH detection back to developer extension (#7161)
  ...

# Conflicts:
#	.github/workflows/nightly.yml
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants