Model or dataset
mistydew/tokenicode-deepseek-alpha avatar
mistydew/tokenicode-deepseek-alpha

A TOKENICODE fork whose main fix is showing the real model name

TOKENICODE DeepSeek Alpha: a DeepSeek/CC Switch focused TOKENICODE fork

377 stars21 forksTypeScriptApache-2.0

At a glance

What is it?
A Tauri 2 and React 19 desktop client for the Claude Code CLI workflow, retargeted at DeepSeek and CC Switch, whose changelog is dominated by provider-resolution bugs, two base URL failures that only appear behind a gateway, a file watcher that ate the final reply, and a v1.0.1 that deliberately skipped five alpha versions.
Who is it for?
Adopt this fork if you drive Claude Code through a third-party gateway or DeepSeek and are tired of guessing which model a request actually reached. Do not adopt it expecting macOS binaries, since the visible release list is Windows x64 only, and read the v1.0.1 note before assuming a given feature exists, because five alpha versions were dropped on purpose.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 59 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The original change was refusing to rename Claude

TOKENICODE DeepSeek Alpha is a modification of TOKENICODE by TinyZ and yiliqi78, and it keeps the original Apache-2.0 licence with attribution in LICENSE and NOTICE. What it keeps from the upstream project is the desktop GUI, session management, file browsing and the Claude Code CLI workflow. What it changes is aimed at DeepSeek, CC Switch and Codex-style skills.

The most consequential change is not a feature but a removal. The interface always shows the model that is actually selected or mapped, and since v1.0.7 it no longer forces a Claude name to display as DeepSeek. With no Provider configured, Claude keeps its original name, and official Claude thinking levels and reasoning text are preserved rather than translated.

That sounds like a small cosmetic decision and it is the opposite. A client that renames the model in its display leaves you unable to tell which model answered, which is exactly the information you need when a gateway sits between you and the provider. DeepSeek models such as `deepseek-v4-pro` and `deepseek-v4-flash` do appear, but only after a Provider preset and model mapping.

The comparison table in the README frames it the same way, listing model display as the first row where this fork differs from upstream.

Provider resolution is strict, and the last-resort model has a name

The mechanism behind that display is a set of resolution rules, and they are worth reading because the bugs here were expensive.

Model resolution follows the active Provider strictly. When the current selection does not belong to the active Provider, it falls back to that Provider's configured model mapping, and the model dropdown in the composer switches automatically after a Provider change.

The release notes describe the bug that motivated it: switching Provider used to keep the old model selection, which meant a local model name like `gemma4:12b` could be sent to a DeepSeek or CC Switch endpoint. The fix in v0.10.10 made resolution follow the active Provider and fall back to its mapping instead.

There is one more fallback, for the case with no active Provider at all. Rather than passing an unknown residual model name to the API and seeing a `Model does not exist` error, the client falls back to `deepseek-v4-flash`.

A named default like that is a deliberate design choice. Most clients would refuse to start in that state; this one picks a specific model so a first run after a misconfiguration still works, at the cost of silently talking to a model you did not choose.

Two base URL failures that only appear behind a gateway

Two of the most instructive fixes are about URLs, and both only bite when a proxy or gateway sits in the path.

The first, in v0.10.12, was about how DeepSeek's base URL is written. The official form `https://api.deepseek.com` was having `/v1` appended to it, so requests went to the wrong path. The fix makes the official form request `/chat/completions` directly, while keeping compatibility for anyone who explicitly writes `https://api.deepseek.com/v1`, which requests `/v1/chat/completions`. The configuration panel was reworded at the same time so users would not be nudged toward a non-official URL.

The second, in v0.10.11, was about compressed responses. The Skills translation API request now sends `Accept-Encoding: identity`, which reduces the `error decoding response body` failures that appear when a proxy or gateway compresses the reply. That fix also came with a clearer troubleshooting message and an explanation in the panel that the Proxy URL field is only a network proxy address and can usually be left empty.

Together they describe the class of bug that never reproduces on a direct connection: everything works until the traffic passes through something that rewrites paths or compresses bodies.

Windows keys move to DPAPI, and the logs lose their payloads

There is a security thread through the changelog that is easy to miss among the UI changes.

On Windows, as of v1.0.7, the master key used to encrypt Provider and Skills translation API keys is bound to the current user through DPAPI. Existing Provider keys and the older local-storage translation configuration migrate automatically, so an upgrade does not require re-entering credentials.

Alongside that, the logging policy was tightened twice. Runtime logs no longer print arguments, the PATH, environment variable values, or proxy addresses that carry credentials. And in v1.0.8, startup diagnostic logs were reduced to event type, duration and byte count, with prompts, replies, reasoning text and tool arguments left out entirely.

The MCP scanner follows the same principle. When the settings page scans for installed MCP servers it shows the source, the command and how many environment variables there are, but not their values.

That is a coherent position for a desktop client that holds provider keys: record that something happened and how long it took, and keep the contents out of files that get pasted into issue reports.

Watching the home directory ate the final reply

One bug in v1.0.7 is worth describing in full because the symptom is so confusing.

File watching that covered the user's home directory generated a large number of events. The visible effects were rising CPU, tasks that stayed marked as still running long after they had finished, and a completed task that never sent its reply. In other words, the user was told the agent was busy while it was idle, and its output went nowhere.

The same release also fixed a history problem: after a rollback, the old branch and the new branch could both appear in the history list, with duplicated JSONL replay records, and the rollback notice itself was being written into the conversation history. The notice is now kept out of the transcript, with old records retained locally for recovery.

And v1.0.8 fixed history sessions being filtered out by the v0.10.7 changes, so an old conversation no longer disappears, plus a context that reset to zero or double-counted when a persisted session was reopened. The fix restores the latest context snapshot from the stored session and de-duplicates repeated message records.

Three fixes in three releases, all in the same area: what the user believes about the state of a session versus what is actually stored.

Skills are scanned narrowly on purpose, and translation never rewrites a file

The Skills panel is where the Codex-adjacent workflow shows, and its default scope was deliberately narrowed.

By default it scans only `~/.claude/skills` and the project's `.claude/skills`. Before v1.0.7 it mixed in Codex and agent-specific directories, which meant unrelated skill trees appeared in the list. Other Claude-compatible directories can still be added by hand in the panel, and skills can be viewed, edited, enabled or disabled, copied, and located on disk.

Invocation is handled by the app itself, and one call can select several skills at once. That is the part that matters for the Codex-style habit of composing several skills into a single request.

Translation is a preview feature with a hard boundary. Skill names and summaries in the list, and the body of a `SKILL.md` preview, can be sent to a separate translation API and rendered in Chinese. The original file is never modified, and results are cached locally to avoid repeat API calls.

That boundary is the right one. A translation feature that rewrote source files would be a supply-chain problem for anyone who installs third-party skills, and this one keeps the read path read-only.

Context window and auto-compact are two different numbers

The context settings separate capacity from when to compress, and the difference is easy to get wrong.

Auto-compact used to be hardcoded at 160K and 800K. Since v0.10.8 it is an input in the settings, in K tokens, with shortcut buttons for 160K, 400K, 800K and 950K, and a manual change applies to the current session immediately.

Separately, v0.10.7 added a context window declaration that switches between a standard 200K and a declared 1M. Choosing 1M makes the front-end dashboard compute against 1,000,000 tokens and raises the auto-compact threshold from 160K to 800K, while the declaration itself is also what the Claude Code subprocess is told.

The subprocess detail is the part that makes the feature work rather than merely display. When launching, the client passes the window explicitly and, for 1M models, sets:

bash
CLAUDE_CODE_AUTO_COMPACT_WINDOW=1000000

Without that, the CLI would keep compacting at 200K while the dashboard claimed a million. Context accounting was also tightened in v1.0.6 and v1.0.8 so the usage figure no longer resets at the start of a new message round or when you scroll back, and cached input tokens are counted rather than dropped.

Four updater manifests, Windows binaries, and five alpha versions left out

Distribution is Windows-first, and the release channel is unusually visible.

The repository root carries four updater manifests: `latest.json`, `latest-alpha.json` and a Gitee pair, which means the application checks two hosts, the primary one and a Chinese mirror. v0.10.1 switched the in-app update source from the upstream TOKENICODE project to this repository, added this project's own Tauri updater signing configuration, and published a Windows x64 installer, a portable executable, a zip, and a SHA256 checksum file.

The current README lists a Windows x64 portable build named `tokenicode-deepseek-alpha-v1.0.8-windows-x64.exe` and an installer alongside it. macOS signing is nonetheless configured: the example environment file carries an Apple signing identity, an Apple ID, an app-specific password and a team ID, plus the Tauri updater private key passphrase, so a macOS build is possible from source even though no binary is published.

One disclosure deserves a reader's attention. Version 1.0.1 was republished with v0.10.12-alpha.1 as the complete feature and interface baseline, and the features from 0.10.13 through 0.10.17 are explicitly not included. The project also renames itself: `Code` mode became standard auto and `Bypass` became full auto, both still using Claude Code's permission rules.

The package is private, version 1.0.8, built with Tauri 2 and React 19, licensed Apache-2.0, and the last push landed on 2026-08-04 with versions 1.0.6, 1.0.7 and 1.0.8 shipped inside six days.

Editorial conclusion

Adopt this fork if you drive Claude Code through a third-party gateway or DeepSeek and are tired of guessing which model a request actually reached. Do not adopt it expecting macOS binaries, since the visible release list is Windows x64 only, and read the v1.0.1 note before assuming a given feature exists, because five alpha versions were dropped on purpose. Check how your gateway spells its base URL, and enable DPAPI-backed key storage on Windows before entering any provider credential.

Frequently asked questions

What is TOKENICODE DeepSeek Alpha?

A fork of TOKENICODE aimed at DeepSeek, CC Switch and Codex-style skills. It keeps the original desktop GUI, session management, file browsing and Claude Code CLI workflow, and retains the upstream Apache-2.0 licence with attribution in LICENSE and NOTICE.

Does TOKENICODE DeepSeek Alpha rename Claude models to DeepSeek?

No. The interface always shows the model actually selected or mapped, and since v1.0.7 it no longer forces a Claude name to display as DeepSeek. With no Provider configured, Claude keeps its own name and its thinking levels are preserved; DeepSeek names appear only after a Provider preset and model mapping.

How does TOKENICODE DeepSeek Alpha find Claude Skills?

By default it scans only ~/.claude/skills and the project's .claude/skills, after v1.0.7 stopped mixing in Codex and agent-specific directories. Other compatible directories can be added by hand in the Skills panel, and a single invocation can select several skills.

Does the Skills translation rewrite my SKILL.md files?

No. Translation uses a separate API for the skill list names, summaries and the SKILL.md preview body, affects only the preview, never modifies the original skill file, and caches results locally to avoid repeat API calls.

Where does TOKENICODE DeepSeek Alpha publish updates?

The repository root holds four updater manifests, including GitHub and Gitee variants, and the in-app update source was switched to this repository in v0.10.1 with its own Tauri updater signing configuration. Releases provide Windows x64 portable and installer packages with a SHA256 checksum file.

Official sources

  1. Issues
  2. License: Apache-2.0
  3. mistydew/tokenicode-deepseek-alpha on GitHub
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/mistydew-tokenicode-deepseek-alpha.svg)](https://hysenlabs.com/projects/mistydew-tokenicode-deepseek-alpha)