Conversation
There was a problem hiding this comment.
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.mdguide covering architecture, customization points, and multiple distribution scenarios. - Documents configuration, extension bundling, ACP/REST integration options, and recipe-based workflows.
WHITE_LABEL.md
Outdated
| # 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: |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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) |
There was a problem hiding this comment.
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.
| - UI components: `ui/desktop/src/renderer/` (if using standard structure) | |
| - UI entry point: `ui/desktop/src/renderer.tsx` |
|
@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 | |||
There was a problem hiding this comment.
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 | |||
There was a problem hiding this comment.
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)?
There was a problem hiding this comment.
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)
ha, i had the same thought. i think a doc is better, and the README can point to it |
michaelneale
left a comment
There was a problem hiding this comment.
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!)
|
How about this:
WDYT @angiejones @michaelneale? |
* 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) ...
|
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 |
|
| | `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): |
There was a problem hiding this comment.
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.
| **Example: Python ACP client** (see `test_acp_client.py` for a complete example): | |
| **Example: Python ACP client** (simplified, self-contained example): |
|
|
||
| # Initialize and create session | ||
| client = AcpClient() | ||
| client.send_request("initialize", {"protocolVersion": "2025-01-01"}) |
There was a problem hiding this comment.
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.
| client.send_request("initialize", {"protocolVersion": "2025-01-01"}) | |
| client.send_request("initialize") |
| 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` |
There was a problem hiding this comment.
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.
| 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`) |
| - 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` |
There was a problem hiding this comment.
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.
| - Test client example: `test_acp_client.py` | |
| - Test client example: see ACP documentation linked above |
| 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 | ||
|
|
There was a problem hiding this comment.
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.
| 2. **Bundle as a built-in extension** by adding to `ui/desktop/src/built-in-extensions.json`: | ||
|
|
||
| ```json | ||
| { | ||
| "id": "internal-data", |
There was a problem hiding this comment.
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.
* 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)
* 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) ...
…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
Summary
Type of Change
AI Assistance