Rebrand: DeepSeek TUI → Ghosty
August 28, 2026 · View on GitHub
Starting with v0.8.41, this project ships under a new name: ghosty.
This document explains what changed, what didn't, and how to migrate. None of the DeepSeek provider integration changed — only the local CLI / TUI brand.
TL;DR
# 1. Uninstall the old wrapper or binaries.
npm uninstall -g deepseek-tui # or:
cargo uninstall deepseek-tui-cli 2>/dev/null || true
cargo uninstall deepseek-tui 2>/dev/null || true
# Homebrew:
# brew upgrade ghosty
# 2. Install under the new name.
npm install -g ghosty # or:
cargo install ghosty-cli --locked
# Homebrew:
# brew tap blissito/ghostycode
# brew install ghosty
# 3. Run with the new command.
ghosty doctor
ghosty
Your existing ~/.deepseek/config.toml, ~/.deepseek/sessions/,
~/.deepseek/skills/, ~/.deepseek/tasks/, and ~/.deepseek/mcp.json are
not deleted. New Ghosty installs prefer ~/.ghosty/, and legacy
~/.deepseek/ state remains a read fallback while you migrate. Existing
DEEPSEEK_* environment variables continue to work.
What got renamed
| Surface | Before | After |
|---|---|---|
| Installed commands | deepseek / deepseek-tui | ghosty / ghosty-tui |
| npm wrapper package | deepseek-tui | ghosty |
| Crates.io crates | deepseek-tui-cli / deepseek-tui / deepseek-* | ghosty-cli / ghosty-tui / ghosty-* |
| Release assets | deepseek-<platform> / deepseek-tui-<platform> | ghosty-<platform> / ghosty-tui-<platform>; ghosty-tui-<platform> remains a compatibility-only filename |
| Checksum manifest | deepseek-artifacts-sha256.txt | ghosty-artifacts-sha256.txt |
What changed for local state
New installs write product-owned state under ~/.ghosty/. Existing
~/.deepseek/ config, sessions, skills, tasks, MCP config, memory, and notes
remain readable as legacy fallbacks while you migrate. Ghosty never deletes
the legacy directory automatically.
What did NOT change
Anything that targets the DeepSeek provider API stays exactly as it was:
- Environment variables:
DEEPSEEK_API_KEY,DEEPSEEK_BASE_URL,DEEPSEEK_MODEL,DEEPSEEK_PROVIDER,DEEPSEEK_PROFILE,DEEPSEEK_YOLO,DEEPSEEK_LOG_LEVEL, plus the existingDEEPSEEK_TUI_*runtime knobs (DEEPSEEK_TUI_BIN,DEEPSEEK_TUI_RELEASE_BASE_URL, etc.). They're kept for backward compatibility; renaming them would break every shell rc on the planet. - Model IDs:
deepseek-v4-pro,deepseek-v4-flash, and the legacy aliasesdeepseek-chatanddeepseek-reasoner. - Hosts:
api.deepseek.com(global). The legacy typo hostapi.deepseeki.comis not an official DeepSeek endpoint; it is only still accepted in URL heuristics for existing configs and is not offered as a fallback (#1079). - GitHub repository URL:
https://github.com/blissito/ghostycode. The oldHmbown/DeepSeek-TUIURL redirects there during the transition. - Homebrew tap and formula: the formula is
ghosty. The tap GitHub repo is stillblissito/homebrew-ghostyuntil it is renamed;brew tap blissito/ghostycode && brew install ghostyis the current path. The legacydeepseek-tuiformula remains a deprecated alias for one overlap release. - Docker image:
ghcr.io/blissito/ghostycode.
Deprecation shims (removed in v0.9.0)
To keep existing shell aliases, scripts, and CI working through the rename, v0.8.41 and later v0.8.x releases shipped deprecation shims:
- A
deepseekbinary that prints a one-line warning to stderr and forwards argv toghosty. - A
deepseek-tuibinary that does the same forghosty-tui. - The legacy
deepseek-tuinpm package is deprecated and no longer receives new releases. Install theghostynpm package instead.
These binary shims are removed in v0.9.0. DeepSeek provider support, model
IDs, DEEPSEEK_* environment variables, and legacy ~/.deepseek/ state
fallbacks remain supported.
Migrating in practice
npm
npm uninstall -g deepseek-tui
npm install -g ghosty
Cargo
cargo uninstall deepseek-tui-cli 2>/dev/null || true
cargo uninstall deepseek-tui 2>/dev/null || true
cargo install ghosty-cli --locked
Or in a checkout:
cargo install --path crates/cli --locked --force
Cargo installs the canonical ghosty command. Release/npm/Homebrew
installers also provide the byte-identical ghosty-tui short name; Cargo users can
add an optional ghosty-tui symlink beside ghosty.
Legacy deepseek update
Current v0.8.x compatibility binaries recognize when they are running under a
legacy deepseek or deepseek-tui filename. In that case, deepseek update
or deepseek-tui update downloads the canonical Ghosty release assets and
installs them beside the legacy binary as ghosty and ghosty-tui when
the install directory is writable. That describes the historical v0.8
compatibility updater, not the current install surface; after upgrading, use
ghosty or ghosty-tui.
If that update path cannot write to the install directory, use the npm, Cargo,
Homebrew, or manual reinstall commands above. The legacy npm package
deepseek-tui remains deprecated and is not republished; npm users should move
to npm install -g ghosty.
Homebrew
Current published state (v0.9.10; workspace source candidate v0.9.11): The
formula is ghosty. New installs:
brew tap blissito/ghostycode
brew install ghosty
brew upgrade ghosty
The tap GitHub repo is still blissito/homebrew-ghosty until it is
renamed to blissito/homebrew-ghosty (then brew tap Hmbown/ghosty
works; the old tap name keeps working through GitHub's redirect). The
legacy deepseek-tui formula remains a deprecated alias for this overlap
release so existing brew upgrade deepseek-tui crontabs keep working.
Remaining rollout:
- Rename the tap repo to
blissito/homebrew-ghostywhen addingHOMEBREW_TAP_PAT, then tell Ghostybot. - After one more minor release, remove the
deepseek-tuialias.
Manual / GitHub Releases
v0.8.41 through v0.8.x Releases attached the canonical ghosty-* /
ghosty-tui-* assets (plus ghosty-tui-* from v0.8.66 onward) and
compatibility-only deepseek-* / deepseek-tui-* shim assets. Starting in
v0.9.0, Releases attach the current ghosty-* / ghosty-tui-* assets, the
ghosty-artifacts-sha256.txt checksum manifest, and byte-identical
ghosty-tui-* compatibility filenames required by legacy update clients.
Those compatibility filenames are not a third installed command. Install or
update through ghosty before moving to v0.9.0.
Sessions, skills, and manual workspaces
Renaming the binary does not require starting over:
- Config: on first launch, Ghosty copies
~/.deepseek/config.tomlto~/.ghosty/config.tomlif the Ghosty file does not already exist. It never overwrites a newer Ghosty config. You can inspect the active path withghosty doctor. - Sessions and tasks: managed state is read from
~/.ghosty/...when present, with~/.deepseek/...used as the legacy fallback when only the old directory exists. Existing saved sessions still appear inghosty sessionsand the TUI resume picker. - Skills: Ghosty discovers workspace skills first, then global skills,
including both
~/.ghosty/skillsand legacy~/.deepseek/skills. Existing skill directories withSKILL.mddo not need to be rewritten. - MCP config: the default path is
~/.ghosty/mcp.json. If that file is absent, Ghosty still reads legacy~/.deepseek/mcp.json. To use a custom MCP config file, setmcp_config_pathinconfig.tomlorDEEPSEEK_MCP_CONFIG. - Manual binary installs: keep the two current command files together on
your
PATH:ghostyandghosty-tui. On Windows, the recommended user-local location is%LOCALAPPDATA%\Programs\GhostyCode\bin. On Unix-like systems, any user-writablePATHdirectory is fine as long as both commands are present. Do not install a compatibility-onlyghosty-tui-*release filename as a third command. - Specified work directories: running
ghostyfrom a project directory, or launching it with a specific workspace path, does not move project files. Ghosty reads<workspace>/.ghosty/config.tomlfirst and falls back to legacy<workspace>/.deepseek/config.tomlwhen the new path is absent.
If both ~/.ghosty/... and ~/.deepseek/... copies exist, the Ghosty
path wins. Keep the legacy directory until you have confirmed ghosty doctor, ghosty sessions, and your expected skills all show the same state.
If sessions appear missing after an upgrade
Run ghosty doctor before copying or deleting anything. Doctor compares
top-level session JSON filenames and filesystem metadata only between
~/.deepseek/sessions/ and ~/.ghosty/sessions/. It does not read chat
contents, traverse checkpoints/, or modify either directory. The JSON form
exposes the same result at legacy_state.session_recovery.
If doctor lists recoverable filenames:
- Back up both session directories (if present) and close other Ghosty processes.
- Run
ghosty sessions. This invokes the existing additive migration, which creates only missing destination files, never overwrites a file that already exists under~/.ghosty/sessions/, skips checkpoint internals, and leaves every legacy original in place. - Rerun
ghosty doctor, then confirm the sessions appear withghosty sessions. If any filenames remain listed, keep both backups and report the listed source/destination filenames without sharing chat contents.
An explicit GHOSTY_HOME intentionally isolates that home and disables the
ambient ~/.deepseek fallback. Doctor will not inspect the ambient legacy home
in that mode. To diagnose the default home without changing the isolated one,
use a separate shell with GHOSTY_HOME unset and rerun ghosty doctor.
Why the name change
Ghosty is a shorter, terminal-friendlier handle for the same terminal
coding agent and the longer-term product direction: an agentic terminal for
open source and open-weight coding models, with DeepSeek — the provider the
project started with — remaining first-class alongside every other provider. The project name,
command names, package names, release assets, Docker image, and CNB mirror move
to Ghosty; the official DeepSeek provider, model IDs, env vars, and
~/.deepseek/ config surface remain first-class.
Reporting issues with the rename
If your install broke during the migration, please open an issue at https://github.com/blissito/ghostycode/issues and include:
- The output of
ghosty --version(ordeepseek --versionif you're still on the shim). - Which install path you used (npm, cargo, brew, manual).
- The exact command you ran and the full error output.
We'll prioritize migration regressions.