You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The gated LUCID terminal (lucid / lucid tui) wears the LUCID pink skin (P-THEME.1, ADR-0160) but still shows omp's own welcome box: the block-Π logo and the omp v16.3.6 title. So a LUCID terminal still reads as omp.
Change the splash so it shows the LUCID logo and contains no "omp" text, while keeping the existing pink skin.
Current splash (unchanged from base omp except the pink palette):
┌ omp v16.3.6 ────────────────────────────────────────────────
│ Welcome back! Tips
│ ▀████████▀ # for prompt actions
│ ██ ██ / for commands
│ ██ ██ ! to run bash
│ ▄██▄ ▄██▄ $ to run python
│ Claude Opus 4.8 ...
Current behavior (grounded in the pinned omp 16.3.6 source)
The splash is omp's WelcomeComponent (@oh-my-pi/pi-coding-agent/src/modes/components/welcome.ts), added unconditionally to the transcript in interactive-mode.ts:850.
Logo = hardcoded module const PI_LOGO (welcome.ts:454) — the Π block art — painted through the gradient (gradientLogo / REST_FRAME).
Title = `${APP_NAME} v${this.version}` (welcome.ts:357). APP_NAME is a hardcoded const "omp" in @oh-my-pi/pi-utils/src/dirs.ts:20, used pervasively (config dir .omp, log file names) — must not be changed.
WelcomeComponent's constructor takes only (version, modelName, providerName, recentSessions, lspServers) — no logo or product-name injection seam.
The extension UI API (ExtensionUIContext, dist/types/extensibility/extensions/types.d.ts) exposes setTheme (what P-THEME.1 uses) but no logo/name/welcome override. It does expose setWidget (above/below the editor), setHeader, custom, and notify.
The entire welcome box is gated by the startup.quiet setting (interactive-mode.ts:840,848; schema config/settings-schema.ts:1543, default false) — "Skip welcome screen and startup status messages".
omp supports per-session --config <overlay> overlays (main.ts:161) — a route to set startup.quiet: true for only the LUCID session without touching the user's global ~/.omp/agent/config.yml.
Net: the logo and the product name are frozen omp module constants with no supported override, so there is no way to swap just the logo/title inside omp's welcome box without forking omp.
Constraints
Invariant feat/mac-build #1 (extend omp, never fork): no patching bundled omp / PI_LOGO / APP_NAME.
Fail-OPEN cosmetics (mirror P-THEME.1 / ADR-0160): any failure degrades to "not branded" and NEVER blocks/kills a session or weakens the fail-closed gate (invariant build(deps): bump github/codeql-action from 3 to 4 #3).
Keep the pink LUCID skin (P-THEME.1) intact.
Bare omp must be visually unaffected (no global config/theme writes).
Recommended approach (mirrors P-THEME.1)
New optional -e extension harness/omp/lucid_welcome_extension.ts (sibling of lucid_theme_extension.ts), threaded in harness/launcher/lucid_acp.tsbuildTuiArgs / runTuiafter the mandatory gate -e and the theme -e. TUI-only (the theme is too; ACP/desktop have their own chrome).
Suppress omp's welcome box per-session by setting startup.quiet: true via a LUCID-owned --config overlay passed to the omp child (NOT the user's global config.yml). Confirm during implementation that a --config overlay is the least-invasive per-session route on 16.3.6; otherwise fall back to another per-session mechanism.
The extension renders a LUCID-branded welcome via a supported extension UI surface (candidate: setWidget above the editor, or a startup message). Content:
the LUCID block mark — reuse/adapt .github/assets/cli-banner.txt (already a LUCID block wordmark), or derive from desktop/build/icon.svg / desktop/renderer/about.tslucidLogo();
a LUCID v<version> line using LUCID's version (desktop/version.tsAPP_VERSION), never omp's;
the model name.
Reuse omp's exported gradientLogo for palette parity with the pink skin. Optionally re-surface tips / recent-sessions / LSP via omp's exported renderWelcomeTip + RecentSession / LspServerInfo if we want feature parity with today's box.
Post-process omp's TUI stdout to rewrite the frame — fragile against ANSI + differential rendering.
Write startup.quiet / branding into the global config.yml — leaks into bare omp; violates the P-THEME.1 "only the gated session is branded" principle.
Acceptance criteria
lucid / lucid tui splash shows the LUCID logo and contains no "omp" substring (title, logo, or version line).
The version line shows LUCID's version, not omp's.
The pink LUCID skin (P-THEME.1) still applies.
Bare omp is visually unchanged (no global config/theme writes).
Fail-open: with the welcome extension forced to fail (and with LUCID_WELCOME=off), the session still starts; a dead scanner still causes exit 1 with zero omp spawns (fail-closed untouched).
-e order: gate first, then theme, then welcome; appended policy + user passthru unchanged.
Prefix-hash test green (invariant build(deps): bump actions/setup-python from 5 to 6 #6); make test green; a new make demo-<increment> green; new unit tests for the extension (provisioning / fail-open / argv order), mirroring lucid_theme_extension.test.ts + launcher/lucid_acp.test.ts.
Open questions
Exact render API for the branded welcome (setWidget vs. a transcript startup message vs. custom) — finalize against the installed omp (16.3.6) during implementation.
Keep a minimal LUCID banner, or re-surface omp's tips / LSP / recent-sessions for full parity? (Users rely on those today.)
Confirm --config overlay is the cleanest per-session startup.quiet route on 16.3.6.
Final LUCID TUI logo art (full block wordmark vs. a compact mark) and the increment id (proposed: P-BRAND.1).
References
P-THEME.1 / ADR-0160 (the pink skin — the pattern to mirror): harness/omp/lucid_theme_extension.ts, harness/launcher/lucid_acp.ts, docs/NEOVIM.md.
Summary
The gated LUCID terminal (
lucid/lucid tui) wears the LUCID pink skin (P-THEME.1, ADR-0160) but still shows omp's own welcome box: the block-Πlogo and theomp v16.3.6title. So a LUCID terminal still reads as omp.Change the splash so it shows the LUCID logo and contains no "omp" text, while keeping the existing pink skin.
Current splash (unchanged from base omp except the pink palette):
Current behavior (grounded in the pinned omp 16.3.6 source)
WelcomeComponent(@oh-my-pi/pi-coding-agent/src/modes/components/welcome.ts), added unconditionally to the transcript ininteractive-mode.ts:850.PI_LOGO(welcome.ts:454) — theΠblock art — painted through the gradient (gradientLogo/REST_FRAME).`${APP_NAME} v${this.version}`(welcome.ts:357).APP_NAMEis a hardcoded const"omp"in@oh-my-pi/pi-utils/src/dirs.ts:20, used pervasively (config dir.omp, log file names) — must not be changed.WelcomeComponent's constructor takes only(version, modelName, providerName, recentSessions, lspServers)— no logo or product-name injection seam.ExtensionUIContext,dist/types/extensibility/extensions/types.d.ts) exposessetTheme(what P-THEME.1 uses) but no logo/name/welcome override. It does exposesetWidget(above/below the editor),setHeader,custom, andnotify.startup.quietsetting (interactive-mode.ts:840,848; schemaconfig/settings-schema.ts:1543, defaultfalse) — "Skip welcome screen and startup status messages".--config <overlay>overlays (main.ts:161) — a route to setstartup.quiet: truefor only the LUCID session without touching the user's global~/.omp/agent/config.yml.Net: the logo and the product name are frozen omp module constants with no supported override, so there is no way to swap just the logo/title inside omp's welcome box without forking omp.
Constraints
PI_LOGO/APP_NAME.ompmust be visually unaffected (no global config/theme writes).Recommended approach (mirrors P-THEME.1)
-eextensionharness/omp/lucid_welcome_extension.ts(sibling oflucid_theme_extension.ts), threaded inharness/launcher/lucid_acp.tsbuildTuiArgs/runTuiafter the mandatory gate-eand the theme-e. TUI-only (the theme is too; ACP/desktop have their own chrome).startup.quiet: truevia a LUCID-owned--configoverlay passed to the omp child (NOT the user's globalconfig.yml). Confirm during implementation that a--configoverlay is the least-invasive per-session route on 16.3.6; otherwise fall back to another per-session mechanism.setWidgetabove the editor, or a startup message). Content:.github/assets/cli-banner.txt(already a LUCID block wordmark), or derive fromdesktop/build/icon.svg/desktop/renderer/about.tslucidLogo();LUCID v<version>line using LUCID's version (desktop/version.tsAPP_VERSION), never omp's;gradientLogofor palette parity with the pink skin. Optionally re-surface tips / recent-sessions / LSP via omp's exportedrenderWelcomeTip+RecentSession/LspServerInfoif we want feature parity with today's box.LUCID_THEME):LUCID_WELCOME=offrestores omp's default welcome.Alternatives considered (rejected)
PI_LOGO/APP_NAME— a fork; violates invariant feat/mac-build #1. ChangingAPP_NAMEalso breaks.ompconfig/log path resolution.startup.quiet/ branding into the globalconfig.yml— leaks into bareomp; violates the P-THEME.1 "only the gated session is branded" principle.Acceptance criteria
lucid/lucid tuisplash shows the LUCID logo and contains no "omp" substring (title, logo, or version line).ompis visually unchanged (no global config/theme writes).LUCID_WELCOME=off), the session still starts; a dead scanner still causes exit 1 with zero omp spawns (fail-closed untouched).-eorder: gate first, then theme, then welcome; appended policy + user passthru unchanged.make testgreen; a newmake demo-<increment>green; new unit tests for the extension (provisioning / fail-open / argv order), mirroringlucid_theme_extension.test.ts+launcher/lucid_acp.test.ts.Open questions
setWidgetvs. a transcript startup message vs.custom) — finalize against the installed omp (16.3.6) during implementation.--configoverlay is the cleanest per-sessionstartup.quietroute on 16.3.6.P-BRAND.1).References
harness/omp/lucid_theme_extension.ts,harness/launcher/lucid_acp.ts,docs/NEOVIM.md.src/modes/components/welcome.ts(PI_LOGO:454, title:357),src/modes/interactive-mode.ts:840-864,@oh-my-pi/pi-utils/src/dirs.ts:20(APP_NAME),src/config/settings-schema.ts:1543(startup.quiet),dist/types/extensibility/extensions/types.d.ts(ExtensionUIContext).