# Better DeepSeek: a browser extension that gives DeepSeek a toolbox

> Better DeepSeek is an unofficial browser extension that adds tool tags, persistent memory, file generation, MCP tool access and a long-running project mode to the DeepSeek chat interface, with everything stored locally. It suits someone who wants to stay in the DeepSeek web app and still get files, charts and documents back, and it is a poor fit if you need an official integration.

**EdgeTypE/better-deepseek** — A powerful browser extension that supercharges DeepSeek Chat with custom tooling, persistent memory, and seamless project scaffolding. Generate and download files, run Python in-browser, create PowerPoint and Excel documents, build multi-file projects as ZIP archives, and manage custom skills and characters.

- Repository: https://github.com/EdgeTypE/better-deepseek
- Website: https://chromewebstore.google.com/detail/better-deepseek/aabiopennjmopfippagcalmkdjlepdhh
- Stars: 729 · Forks: 71
- Language: JavaScript
- License: MIT
- Published: 2026-10-21 · Updated: 2026-10-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/edgetype-better-deepseek

## An extension that rewrites the chat, not an API integration

Better DeepSeek is a browser extension that enhances the DeepSeek chat interface with a set of tools, persistent memory and a customizable system prompt. The stated result is that DeepSeek can generate files, run code, create presentations and manage projects inside the conversation, while the data stays local and private.

The disclaimer in the readme is worth repeating because it defines the project's position. Better DeepSeek is an unofficial, independent, community-driven open-source extension, not affiliated with, endorsed by, sponsored by or officially connected to DeepSeek or DeepSeek AI in any way. The topic list reinforces the stance with local-first and privacy-focused among its tags.

The mechanism explains the privacy claim. The extension injects a custom system prompt into every conversation, and the model then emits special tags that the extension intercepts. A tag such as `<BDS:create_file fileName="path/to/file.ext">` tells the extension to create a downloadable file, `<BDS:excel>` produces a spreadsheet with SheetJS, `<BDS:pptx>` produces a presentation with PptxGenJS, and `<BDS:chart>` produces interactive charts using the declarative Vega-Lite specification. The model is never given a direct tool call interface; it is given a vocabulary, and the extension acts on the vocabulary.

That is a clever design, and it is also the whole security story. The extension is a proxy between a model and your browser, and anything it can do, it does by interpreting model output and running code locally. Which is exactly why the unofficial status and the privacy claim sit next to each other in the readme rather than being in tension.

## The tag vocabulary, and what each tag actually does

The feature list is a set of tags, and reading it tells you what the extension is capable of.

On the content side there is `<BDS:VISUALIZER>`, described as creating high-contrast, monochrome simulations and interactive diagrams with a built-in UI kit. There are the document generators for PowerPoint, Excel and Word, and the chart tag backed by Vega-Lite.

On the retrieval side there are two automatic fetch tags. `<BDS:AUTO:REQUEST_WEB_FETCH>` fetches a web page, converts it to markdown and injects it into the chat context, and `<BDS:AUTO:REQUEST_GITHUB_FETCH>` fetches a GitHub repository and injects its codebase into the context.

Then there are the tags that only work when DeepCode is enabled, which the project describes as an experimental mode. `<BDS:AUTO:SEARCH_IN_DIRECTORY>` searches codebase directories for files and symbols, `<BDS:AUTO:LIST_DIR>` inspects directory contents in a connected workspace, and `<BDS:AUTO:FILE_READ>` reads specific files or line ranges. Those three need a connected workspace, so the extension is reaching outside the chat page into a directory on disk, which is a different order of trust from fetching a URL.

The state tags come last. `<BDS:memory_write>` stores persistent facts about the user in a key and value form with an importance of always or called. `<BDS:character_create>` defines a roleplay persona that DeepSeek can adopt.

The distinction between always and called memories is the useful part of the memory design. An always memory is included in every request, which is how you pin a persistent preference such as a preferred output format. A called memory appears only when its key is mentioned, which is how you keep a large fact base from eating the context on every turn.

## LONG_WORK, skills and the drawer

The LONG_WORK project mode is the feature that addresses the most obvious failure of chat interfaces, which is that a multi-file project is many messages and many files.

When DeepSeek uses the `<BDS:LONG_WORK>` tag, every file created inside the block is collected, zipped and presented as a single download once the block closes. During generation the user sees only a Working indicator, which keeps the chat clean instead of filling it with a dozen file-creation notices. The project description also lists generating and downloading files, running Python in the browser, creating PowerPoint and Excel documents, and building multi-file projects as ZIP archives.

Skills are the other half of the customization story. They are markdown files you upload that define custom instructions or behaviours, and they can be toggled on and off from the drawer. Characters, the roleplay personas, sit alongside them and are created and managed the same way. The hidden system prompt is the third piece, injected automatically into every conversation and editable from the extension's settings panel.

Together those three are a per-user configuration layer that sits above the model, and they are all local. The readme describes the extension as having a customizable system prompt, persistent memory, and the ability to manage custom skills and characters, with everything kept on your own machine.

MCP support extends the same idea outward. The extension can connect to remote MCP servers, and when one is configured the AI can discover and invoke its tools automatically. The flow is: open Settings, go to MCP Servers, enter the server URL and an optional API key, then use Test to verify the server responds and to list its available tools. The tool schemas are injected into the system prompt, and when the model outputs a call tag, the extension invokes the tool and injects the result back into the conversation as an attached file.

The transport limitation is explicit: only HTTP and Streamable HTTP are supported, and stdio-based MCP servers are not. That rules out the local-process servers many people run, which is the most consequential single fact about the MCP support.

## How the extension is built, and what the tests cover

The repository is a Svelte and Vite project with a custom build script, and the test setup is unusual enough to be worth reading.

The build is driven by node build.js with a target flag, and the package scripts fan out from there:

```json
    "dev": "node build.js --dev",
    "build": "npm run build:chrome && npm run build:firefox",
    "build:chrome": "node build.js --target=chrome",
    "build:firefox": "node build.js --target=firefox",
```

There is a separate Android target, and a build:source variant. A sanitize script runs scripts/sanitize-dist.js, which reads as a step that strips something out of the built output before it is packaged.

The extension ships on the Chrome Web Store and as a Firefox add-on, and there is also an Android build, so three platforms from one source tree.

The test matrix is the part that tells you about the project's discipline. There is a unit suite run with vitest and coverage, a Playwright end-to-end suite, a separate Firefox end-to-end configuration, and a separate Android Playwright configuration driven through a Gradle wrapper script. The test script chains unit, web end-to-end and Firefox end-to-end, and the CI scripts are split into test:ci:web and test:ci:android with a combined test:ci that runs both. The pretest hook builds the project first, so tests always run against fresh output.

The dev dependencies explain the rest: Playwright, the Svelte Vite plugin, Vitest with the v8 coverage provider and the UI mode, jsdom for the DOM environment, selenium-webdriver, Svelte 5 and Vite 6. The repository root also carries LOCALIZATION.md, TESTING.md, a playwright.android.config.js, a vitest.firefox.config.js, an android/ directory and an extension/ directory for the extension assets.

The DeepCode mode is described as experimental, and the handoff to DeepSeek Harness is the intended exit path for it: once a plan is drafted, tasks can be sent to DeepSeek Harness for execution and testing, with a separate dsh-better-deepseek plugin available for that integration.

## Where Better DeepSeek is the wrong choice

The first limitation is the trust model, and it is not a small one. This extension injects a system prompt into your chat, executes file creation in the browser, reaches into a connected workspace to list directories and read files, and calls remote MCP servers on the model's instruction. Every one of those is a capability that the model drives. The design is that the model cannot act on its own, only through tags that the extension recognises, but the extension is still an interpreter of model output in a page that holds your session.

The second is the version coupling. The extension is tied to the DeepSeek web interface, and when DeepSeek changes its model or its web bundle, the tags the model was asked to emit may no longer be emitted at all, and the failure is silence rather than an error, because a model that stops using a tag simply produces text. The releases here move quickly, with 0.1.13, 0.1.14 and 0.1.15 published between August and October 2026, which is fast for a project at version 0.1, and fast is good for fixes and bad for stability.

The third is the unofficial status, which cuts both ways. It means no support commitment from DeepSeek, no compatibility promise, and no guarantee the chat interface stays the same. It also means the extension can exist at all, because a first-party version of the same ideas would not need to be careful about which UI it attaches to.

The fourth is that the most interesting features are the least finished. DeepCode is labelled experimental in the project documentation, the directory search and file read tags are marked as active only when DeepCode is enabled, and the stdio transport for MCP is not supported, so the most common local MCP servers are out of reach.

The fifth is the absence of any described data model. The readme says memory, skills and characters are local and private, and the tags show what is stored, but there is no description of where the memory store lives, whether it is encrypted, or how to export and wipe it. For a feature whose whole pitch is persistence, that is a gap a security-conscious user will notice.

## Conclusion

Better DeepSeek fits a developer who already works in the DeepSeek web interface and wants generated files, charts, presentations and a persistent memory of their preferences without moving to a different client, and the fact that the extension is MIT licensed and keeps its data local makes it easy to audit. It is the wrong choice if your work needs a supported DeepSeek integration, if you cannot run untrusted extensions against a session, or if the DeepCode mode, which the project labels experimental, is the part you depend on. Before installing it, read the extension's tag list rather than the showcase, check which tags your workflow actually needs, and note that the last push was on 2026-10-20 and that version 0.1.15 was published on 2026-10-09.

## FAQ

### What does Better DeepSeek add to the DeepSeek chat interface?

It injects a custom system prompt and adds tool tags that let the model generate files, PowerPoint presentations, Excel spreadsheets, Word documents and Vega-Lite charts, fetch web pages and GitHub repositories, write persistent memories, and create persona characters.

### How does the LONG_WORK mode in Better DeepSeek work?

When the model uses the LONG_WORK tag, every file created inside the block is collected, zipped and offered as a single download once the block closes. During generation the user sees only a Working indicator, so the chat stays readable.

### Can Better DeepSeek connect to local MCP servers?

No. Only the HTTP and Streamable HTTP transports are supported, and stdio-based MCP servers are not. You add a server by URL and optional API key under Settings, then use Test to confirm it responds and to list its tools.

### Is Better DeepSeek affiliated with DeepSeek?

No. The project states it is an unofficial, independent, community-driven open-source extension, not affiliated with, endorsed by, sponsored by or officially connected to DeepSeek or DeepSeek AI, and it is MIT licensed.

### Which platforms does Better DeepSeek run on?

It is published as a Chrome extension and a Firefox add-on, and the repository also carries an Android build with its own Gradle and Playwright configuration. The package scripts build for chrome, firefox and android targets from one source tree.

## Sources

- [EdgeTypE/better-deepseek on GitHub](https://github.com/EdgeTypE/better-deepseek)
- [License: MIT](https://github.com/EdgeTypE/better-deepseek/blob/main/LICENSE)
- [Project website](https://chromewebstore.google.com/detail/better-deepseek/aabiopennjmopfippagcalmkdjlepdhh)
- [README](https://github.com/EdgeTypE/better-deepseek/blob/main/README.md)
- [Releases](https://github.com/EdgeTypE/better-deepseek/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/edgetype-better-deepseek
