Feature hasn't been suggested before.
I checked the two prior issues the bot flagged. Neither was rejected on merit:
#36609 ("Add option to hide splash/startup screen", "splash": false) was
auto-closed for not following the template within the 2-hour window — the
closing note explicitly says "Feel free to open a new issue that follows our
issue templates." #11373 was about skipping the entry splash to open
directly to the chat view and was auto-closed after 90 days of inactivity.
This request follows the template and focuses on the exit splash for
embedded/white-label use, which neither covers.
Describe the enhancement you want to request
Context. We ship a CLI that runs opencode as its coding engine,
configured and branded for our product. Users never type opencode — they
type our command. Everything on the way in and out is themed via config and a
TUI plugin (custom home_logo, home_footer, theme, commands), which works
well.
The one thing we can't reach is the exit splash. On quit the TUI writes
the wordmark plus:
Session <title>
Continue opencode --mini -s <session-id>
to the scrollback. In an embedded context this is confusing: it shows a
product name and a opencode … command the user's shell doesn't have (our
binary is named differently and lives elsewhere), so the resume hint is dead.
Per #31813 the exit banner is intentional and its absence was treated as a
bug — so I'm not asking to remove it or change the default. I'm asking for
an opt-in way to disable it.
Proposed API (either or both, defaulting to today's behavior):
- An env var in the existing
OPENCODE_DISABLE_* family:
OPENCODE_DISABLE_EXIT_SPLASH=true (and OPENCODE_DISABLE_ENTRY_SPLASH
for symmetry).
- A
tui.json key: "exitSplash": false (or "splash": false).
Where it hooks in. The gate already exists internally, it just isn't
reachable from outside:
packages/opencode/src/cli/cmd/run/runtime.lifecycle.ts (~L322):
const show = renderer.isDestroyed ? false : next.showExit — showExit
would just need to also honor the env/config flag.
packages/opencode/src/cli/cmd/run/splash.ts — the exit branch rendering
the wordmark, Session and Continue opencode --mini -s ….
Why a plugin isn't enough. TUI plugins can fill slots (home_logo,
home_footer) but there's no exit slot, and showExit / the Lifecycle
object aren't exposed to plugins — so an embedder can rebrand everything except
this one banner.
Workarounds and why they're bad. SIGKILL instead of a graceful quit
skips close() and the banner but loses clean session teardown; filtering
stdout doesn't work because it's terminal escape output, not a text stream,
and the TUI needs a real TTY so a pipe breaks rendering.
Happy to send a PR if a maintainer sketches the preferred shape (env var vs
config key vs both).
Feature hasn't been suggested before.
I checked the two prior issues the bot flagged. Neither was rejected on merit:
#36609 ("Add option to hide splash/startup screen",
"splash": false) wasauto-closed for not following the template within the 2-hour window — the
closing note explicitly says "Feel free to open a new issue that follows our
issue templates." #11373 was about skipping the entry splash to open
directly to the chat view and was auto-closed after 90 days of inactivity.
This request follows the template and focuses on the exit splash for
embedded/white-label use, which neither covers.
Describe the enhancement you want to request
Context. We ship a CLI that runs
opencodeas its coding engine,configured and branded for our product. Users never type
opencode— theytype our command. Everything on the way in and out is themed via config and a
TUI plugin (custom
home_logo,home_footer, theme, commands), which workswell.
The one thing we can't reach is the exit splash. On quit the TUI writes
the wordmark plus:
to the scrollback. In an embedded context this is confusing: it shows a
product name and a
opencode …command the user's shell doesn't have (ourbinary is named differently and lives elsewhere), so the resume hint is dead.
Per #31813 the exit banner is intentional and its absence was treated as a
bug — so I'm not asking to remove it or change the default. I'm asking for
an opt-in way to disable it.
Proposed API (either or both, defaulting to today's behavior):
OPENCODE_DISABLE_*family:OPENCODE_DISABLE_EXIT_SPLASH=true(andOPENCODE_DISABLE_ENTRY_SPLASHfor symmetry).
tui.jsonkey:"exitSplash": false(or"splash": false).Where it hooks in. The gate already exists internally, it just isn't
reachable from outside:
packages/opencode/src/cli/cmd/run/runtime.lifecycle.ts(~L322):const show = renderer.isDestroyed ? false : next.showExit—showExitwould just need to also honor the env/config flag.
packages/opencode/src/cli/cmd/run/splash.ts— theexitbranch renderingthe wordmark,
SessionandContinue opencode --mini -s ….Why a plugin isn't enough. TUI plugins can fill slots (
home_logo,home_footer) but there's no exit slot, andshowExit/ theLifecycleobject aren't exposed to plugins — so an embedder can rebrand everything except
this one banner.
Workarounds and why they're bad.
SIGKILLinstead of a graceful quitskips
close()and the banner but loses clean session teardown; filteringstdout doesn't work because it's terminal escape output, not a text stream,
and the TUI needs a real TTY so a pipe breaks rendering.
Happy to send a PR if a maintainer sketches the preferred shape (env var vs
config key vs both).