# GooseFactory Rebrand Plan

> **Created:** 2026-02-06
> **Status:** Phase 1 — Foundation Rebrand
> **Source:** Forked from `block/goose` (shallow clone, HEAD)

---

## Overview

This document catalogs every file that needs modification to rebrand Goose → GooseFactory.
The rebrand has three tiers:

- **🔴 CRITICAL** — Must change for the app to function as "GooseFactory"
- **🟡 IMPORTANT** — Should change for consistent branding
- **🟢 NICE-TO-HAVE** — Can defer, cosmetic/internal references

---

## 1. Protocol Handler: `goose://` → `factory://`

### Files to modify:

| File | What to Change | Priority |
|------|---------------|----------|
| `ui/desktop/src/main.ts` | `app.setAsDefaultProtocolClient('goose')` → `'factory'` (3 occurrences) | 🔴 |
| `ui/desktop/src/main.ts` | All `goose://` string checks → `factory://` (~15 occurrences) | 🔴 |
| `ui/desktop/forge.config.ts` | `schemes: ['goose']` → `schemes: ['factory']` | 🔴 |
| `ui/desktop/src/App.tsx` | `goose://sessions/` → `factory://sessions/` | 🔴 |
| `ui/desktop/src/recipe/index.ts` | `goose://recipe?config=` → `factory://recipe?config=` | 🔴 |
| `ui/desktop/src/components/settings/extensions/deeplink.ts` | Protocol validation, allowed commands include `goosed` | 🟡 |
| `ui/desktop/src/components/settings/extensions/utils.test.ts` | Test URLs `goose://extension/add?...` | 🟡 |
| `ui/desktop/src/components/ExtensionInstallModal.test.tsx` | Test URLs | 🟡 |
| `ui/desktop/src/components/schedule/ScheduleModal.tsx` | Placeholder text `goose://recipe` | 🟡 |
| `ui/desktop/src/components/sessions/SessionHistoryView.tsx` | `goose://sessions/` share link | 🟡 |
| `ui/desktop/src/components/recipes/ImportRecipeForm.tsx` | Validation regex `goose://recipe?config=` | 🟡 |
| `ui/desktop/src/components/MCPUIResourceRenderer.tsx` | `host: 'goose'` → `host: 'goosefactory'` | 🟡 |

---

## 2. App Name & Branding

### Desktop App (Electron)

| File | What to Change | Priority |
|------|---------------|----------|
| `ui/desktop/package.json` | `"name": "goose-app"` → `"goosefactory-app"` | 🔴 |
| `ui/desktop/package.json` | `"productName": "Goose"` → `"GooseFactory"` | 🔴 |
| `ui/desktop/package.json` | `"description": "Goose App"` → `"GooseFactory — Your AI Factory"` | 🔴 |
| `ui/desktop/src/main.ts` | `applicationName: 'Goose'` → `'GooseFactory'` (about panel) | 🔴 |
| `ui/desktop/src/main.ts` | `title: 'Goose'` (notifications) → `'GooseFactory'` | 🔴 |
| `ui/desktop/src/main.ts` | `dialog.showErrorBox('Goose Error'...)` → `'GooseFactory Error'` | 🔴 |
| `ui/desktop/src/main.ts` | `partition: 'persist:goose'` → `'persist:goosefactory'` | 🔴 |
| `ui/desktop/src/main.ts` | Menu items: `label === 'Goose'`, `'Focus Goose Window'`, `'About Goose'` | 🔴 |
| `ui/desktop/forge.config.ts` | `name: 'Goose'`, `bin: 'Goose'` in maker configs | 🔴 |
| `ui/desktop/forge.config.ts` | `name: process.env.GITHUB_REPO || 'goose'` → `'goosefactory'` | 🔴 |
| `ui/desktop/forge.config.ts` | `homepage` URL → GooseFactory URL | 🟡 |
| `ui/desktop/src/utils/winShims.ts` | `'Goose'` string reference | 🟡 |
| `ui/desktop/src/utils/autoUpdater.ts` | `repo: 'goose'` → `'goosefactory'` | 🟡 |
| `ui/desktop/src/utils/autoUpdater.ts` | `trayRef.setToolTip('Goose')` → `'GooseFactory'` | 🟡 |
| `ui/desktop/src/utils/githubUpdater.ts` | `this.repo = process.env.GITHUB_REPO || 'goose'` | 🟡 |
| `ui/desktop/src/components/GooseSidebar/AppSidebar.tsx` | `titleBits = ['Goose']` → `['GooseFactory']` | 🟡 |
| `ui/desktop/src/components/sessions/SessionViewComponents.tsx` | `'Goose'` label for assistant messages | 🟡 |
| `ui/desktop/src/components/GooseLogo.tsx` | Logo component | 🟡 |
| `ui/desktop/src/components/WelcomeGooseLogo.tsx` | Welcome logo | 🟡 |
| `ui/desktop/src/components/FlyingBird.tsx` | Animation | 🟢 |
| `ui/desktop/src/components/LoadingGoose.tsx` | Loading state | 🟢 |

### Bundle Scripts

| File | What to Change | Priority |
|------|---------------|----------|
| `ui/desktop/package.json` scripts | `out/Goose-darwin-arm64` → `out/GooseFactory-darwin-arm64` | 🟡 |
| `ui/desktop/forge.deb.desktop` | App name | 🟡 |
| `ui/desktop/forge.rpm.desktop` | App name | 🟡 |

---

## 3. Config Directory: `~/.config/goose/` → `~/.config/goosefactory/`

### Rust Files

| File | What to Change | Priority |
|------|---------------|----------|
| `crates/goose/src/config/paths.rs` | `app_name: "goose".to_string()` → `"goosefactory"` | 🔴 |
| `crates/goose/src/config/base.rs` | `KEYRING_SERVICE: &str = "goose"` → `"goosefactory"` | 🔴 |
| `crates/goose/src/config/base.rs` | Doc comments referencing `~/.config/goose/` | 🟢 |
| `crates/goose-cli/src/commands/configure.rs` | `~/.config/goose/secrets.yaml` in user messages | 🟡 |
| `crates/goose-mcp/src/memory/mod.rs` | `~/.config/goose/memory` path reference | 🟡 |

### TypeScript Files

| File | What to Change | Priority |
|------|---------------|----------|
| `ui/desktop/src/recipe/recipe_management.ts` | `~/.config/goose/recipes` → `~/.config/goosefactory/recipes` | 🟡 |
| `ui/desktop/src/components/ConfigContext.tsx` | `~/.config/goose/config.yaml` error message | 🟡 |

---

## 4. Rust Crate Names

| File | What to Change | Priority |
|------|---------------|----------|
| `Cargo.toml` (workspace) | `repository`, `description` fields | 🟢 |
| `crates/goose/Cargo.toml` | `name = "goose"` — **⚠️ DO NOT CHANGE YET** (breaks all internal deps) | 🟢 |
| `crates/goose-server/Cargo.toml` | Binary name `goosed` — keep for now | 🟢 |
| All `Cargo.toml` files | Can rename later; internal consistency matters more | 🟢 |

> **Decision:** Keep Rust crate names as-is for Phase 1. Renaming `goose` → `goosefactory` across 7 crates + all `use` statements is high-risk/low-reward. The binary `goosed` is internal-only.

---

## 5. System Prompt (Agent Identity)

| File | What to Change | Priority |
|------|---------------|----------|
| `crates/goose/src/prompts/system.md` | "AI agent called goose, created by Block" → "AI agent called GooseFactory, your AI Factory operator" | 🔴 |
| `crates/goose/src/agents/prompt_manager.rs` | Fallback prompt: "general-purpose AI agent called goose, created by Block" | 🟡 |
| `crates/goose/src/prompts/subagent_system.md` | Check for goose references | 🟡 |
| `crates/goose/src/prompts/desktop_prompt.md` | Check for goose references | 🟡 |
| `crates/goose/src/prompts/recipe.md` | Check for goose references | 🟡 |
| `crates/goose/src/prompts/compaction.md` | Check for goose references | 🟡 |
| `crates/goose/src/agents/builtin_skills/skills/goose_doc_guide.md` | Full file | 🟢 |
| `crates/goose/src/prompt_template.rs` | `"Main system prompt that defines goose's personality"` (comment) | 🟢 |

---

## 6. Built-in Extensions

| File | What to Change | Priority |
|------|---------------|----------|
| `ui/desktop/src/built-in-extensions.json` | Add Factory MCP Server as a new built-in extension | 🔴 |
| `ui/desktop/src/built-in-extensions.json` | Change `"Teach goose your preferences"` description | 🟡 |
| `crates/goose-mcp/src/` | Add Factory extension implementation (Phase 2) | 🟡 |

---

## 7. Telemetry & Analytics

| File | What to Change | Priority |
|------|---------------|----------|
| `crates/goose/src/posthog.rs` | `POSTHOG_API_KEY` — Replace with our own or disable | 🔴 |
| `crates/goose/src/posthog.rs` | `GOOSE_TELEMETRY_ENABLED` key name | 🟢 |
| `ui/desktop/src/updates.ts` | `UPDATES_ENABLED = true` → `false` (disable Block's updater) | 🔴 |
| `ui/desktop/src/utils/autoUpdater.ts` | Points to `block/goose` GitHub releases | 🔴 |
| `ui/desktop/src/utils/githubUpdater.ts` | Same — points to Block's repo | 🔴 |

---

## 8. Icons & Assets

| File | What to Change | Priority |
|------|---------------|----------|
| `ui/desktop/src/images/icon.icns` | Replace with GooseFactory icon | 🟡 |
| `ui/desktop/src/images/icon.ico` | Replace with GooseFactory icon | 🟡 |
| `ui/desktop/src/images/icon.png` | Replace with GooseFactory icon | 🟡 |
| `ui/desktop/src/images/icon.svg` | Replace with GooseFactory icon | 🟡 |
| `ui/desktop/src/images/icon@2x.png` | Replace with GooseFactory icon | 🟡 |
| `ui/desktop/src/images/icon-light.icns` | Replace with GooseFactory icon | 🟡 |
| `ui/desktop/src/images/icon-light.png` | Replace with GooseFactory icon | 🟡 |
| `ui/desktop/src/images/glyph.svg` | Replace with GooseFactory glyph | 🟡 |
| `ui/desktop/src/images/iconTemplate.png` | Tray icon (macOS) | 🟡 |
| `ui/desktop/src/images/iconTemplate@2x.png` | Tray icon @2x | 🟡 |
| `ui/desktop/src/images/iconTemplateUpdate.png` | Tray update icon | 🟡 |
| `ui/desktop/src/images/iconTemplateUpdate@2x.png` | Tray update icon @2x | 🟡 |
| `ui/desktop/src/images/Union@2x.svg` | UI element | 🟢 |
| `ui/desktop/src/images/loading-goose/` | Loading animation frames | 🟢 |
| `ui/desktop/src/assets/` | Clock icons, battle-game assets | 🟢 |

---

## 9. Environment Variables

These are the key env vars referenced in the code:

| Variable | Current | GooseFactory | Priority |
|----------|---------|-------------|----------|
| `GOOSE_PROVIDER` | LLM provider | Keep (backward compat) | 🟢 |
| `GOOSE_MODEL` | LLM model | Keep | 🟢 |
| `GOOSE_MODE` | Permission mode | Keep | 🟢 |
| `GOOSE_PATH_ROOT` | Config root override | Keep | 🟢 |
| `GOOSE_TELEMETRY_ENABLED` | Telemetry flag | Keep but disable by default | 🟡 |
| `GOOSE_TELEMETRY_OFF` | Telemetry opt-out | Keep | 🟢 |
| `GOOSE_ALLOWLIST` | Extension allowlist URL | Keep | 🟢 |
| `GOOSE_DEFAULT_PROVIDER` | Bundled default | Keep | 🟢 |
| `GOOSE_DEFAULT_MODEL` | Bundled default | Keep | 🟢 |

> **Decision:** Keep `GOOSE_*` env vars for backward compatibility. Add `FACTORY_*` aliases later.

---

## 10. Miscellaneous Files

| File | What to Change | Priority |
|------|---------------|----------|
| `README.md` | Entire file — rewrite for GooseFactory | 🟢 |
| `AGENTS.md` | Update for GooseFactory development | 🟢 |
| `HOWTOAI.md` | Update references | 🟢 |
| `CONTRIBUTING.md` | Update for our fork | 🟢 |
| `GOVERNANCE.md` | Replace with our governance | 🟢 |
| `LICENSE` | Keep Apache 2.0, add copyright notice | 🔴 |
| `.goosehints` (root) | Update for GooseFactory | 🟢 |
| `ui/desktop/.goosehints` | Update for GooseFactory | 🟢 |
| `ui/desktop/index.html` | `<title>` tag | 🟡 |

---

## Phase 1 Execution Order

1. ✅ Clone the repo
2. 🔴 `ui/desktop/package.json` — name, productName, description
3. 🔴 `ui/desktop/src/main.ts` — protocol handler, app name, window titles
4. 🔴 `ui/desktop/forge.config.ts` — protocol scheme, maker names
5. 🔴 `ui/desktop/src/built-in-extensions.json` — add Factory extension
6. 🔴 `crates/goose/src/config/paths.rs` — config directory
7. 🔴 `crates/goose/src/prompts/system.md` — agent identity
8. 🔴 `ui/desktop/src/updates.ts` — disable Block's auto-updater
9. 🔴 `crates/goose/src/posthog.rs` — disable/replace telemetry
10. 🔴 Protocol handler changes across all UI files

---

## Estimated Effort

| Category | Files | Effort |
|----------|-------|--------|
| Protocol handler (`goose://` → `factory://`) | ~12 files | 2-3 hours |
| App branding (name, titles, menus) | ~15 files | 2-3 hours |
| Config directory path | ~5 files | 1 hour |
| System prompt | ~6 files | 1 hour |
| Telemetry/Updates | ~4 files | 30 min |
| Icons & Assets | ~12 files | Deferred (need design) |
| Rust crate renames | ~7 crates | Deferred (Phase 2+) |
| **Total Phase 1** | **~42 files** | **~1-2 days** |
