Better DeepSeek
Better DeepSeek is a browser extension that enhances the DeepSeek chat interface with a powerful set of tools, persistent memory, and a customizable system prompt. It enables DeepSeek to generate files, run code, create presentations, and manage complex projects directly within the conversation, all while keeping your data local and private. > "Better DeepSeek" is an unofficial, independent, and community-driven open-source extension. It is NOT affiliated with, endorsed by, sponsored by, or officially connected to DeepSeek or DeepSeek AI in any way. All product names, logos, and brands are property of their respective owners. ## Showcase
Memory Management
 | Webpage Skills
 | Long Work
 |
Persona Creation
 | Presentations
 | Attach Menu
 |
## Features ### Hidden System Prompt Inject a custom system prompt that guides DeepSeek's behavior without cluttering the chat. The prompt is automatically injected into every conversation and can be edited from the extension's settings panel. ### Tool Tags for Enhanced Output Better DeepSeek introduces a set of special tags that DeepSeek can use to produce rich, interactive content: -
<BDS:HTML>...</BDS:HTML> – Render a full HTML document in a preview card. -
<BDS:VISUALIZER>...</BDS:VISUALIZER> – Create high-contrast, monochrome simulations and interactive diagrams using a built-in UI kit. -
<BDS:create_file fileName="path/to/file.ext">...</BDS:create_file> – Generate a downloadable file with the specified name and content. -
<BDS:pptx>...</BDS:pptx> – Generate a PowerPoint presentation using the PptxGenJS library. -
<BDS:excel>...</BDS:excel> – Generate an Excel spreadsheet using SheetJS. -
<BDS:docx>...</BDS:docx> – Generate a Word document using the docx library. -
<BDS:AUTO:REQUEST_WEB_FETCH>url</BDS:AUTO:REQUEST_WEB_FETCH> – Automatically fetch and convert a web page to markdown, then inject it into the chat context. -
<BDS:AUTO:REQUEST_GITHUB_FETCH>url</BDS:AUTO:REQUEST_GITHUB_FETCH> – Automatically fetch a GitHub repository and inject its codebase into the chat context. -
<BDS:AUTO:SEARCH_IN_DIRECTORY queries="..."> – Search codebase directories for files and symbols (active when DeepCode is enabled). -
<BDS:AUTO:LIST_DIR path="..." depth="..."> – Inspect directory contents in connected workspace (active when DeepCode is enabled). -
<BDS:AUTO:FILE_READ path="..." startLine="..." endLine="..."> – Read specific files or line ranges from the connected codebase (active when DeepCode is enabled). -
<BDS:memory_write>key: value, importance: always|called</BDS:memory_write> – Store persistent facts about the user that are injected into future prompts. -
<BDS:character_create name="..." usage="...">...</BDS:character_create> – Define a roleplay persona that DeepSeek can adopt. ### DeepCode (Experimental) & DeepSeek Harness Integration Better DeepSeek introduces
DeepCode, a collaborative code planning and inspection mode designed to work alongside
DeepSeek Harness. -
Interactive Code Planning: Activate DeepCode to allow DeepSeek to explore codebases, inspect file structures with auto-tools (
FILE_READ,
LIST_DIR,
SEARCH_IN_DIRECTORY), and draft structured implementation plans. -
DeepSeek Harness Handoff: Once a plan is formulated, easily send tasks directly to DeepSeek Harness for automated execution and testing. -
Plugin Integration: Install the
dsh-better-deepseek plugin in DeepSeek Harness for complete end-to-end integration. ### MCP (Model Context Protocol) Tool Access Better DeepSeek supports the
Model Context Protocol for connecting to remote MCP servers. When configured, the AI can discover and invoke tools from these servers automatically. -
Add a server: Open Settings → MCP Servers, enter the server URL and optional API key. -
Test the connection: Click "Test" to verify the server responds and list its available tools. -
How it works: Tool schemas are injected into the system prompt. When the AI outputs
<BDS:AUTO:MCP url="..." tool="..." args='...'>, the extension calls the tool and injects the result back into the conversation as an attached file.
Note: Only HTTP/Streamable HTTP transport is supported. Stdio-based MCP servers are not supported. ### LONG_WORK Project Mode When building multi-file projects, DeepSeek can use the
<BDS:LONG_WORK> tag. All files created inside this block are collected, zipped, and presented as a single download after the block closes. During generation, the user sees only a "Working..." indicator, keeping the chat clean.

### Persistent Memory and Skills -
Memory: Store key-value facts about the user. "Always" memories are included in every request; "called" memories appear only when their key is mentioned. -
Skills: Upload markdown files that define custom instructions or behaviors. Skills can be toggled on and off from the drawer. -
Characters: Create and manage roleplay personas. Only one character can be active at a time. ### Voice Support (STT & TTS) Better DeepSeek now supports full voice interaction: -
Voice-to-Text: Dictate your prompts using the microphone button next to the chat input. Supports optional auto-submission for a hands-free experience. -
Text-to-Speech: Assistant responses can be automatically read aloud once generation is complete. -
Language Selection: Configure your preferred voice and recognition language directly from the extension settings. ### Native Navigation The DeepSeek logo and "New Chat" button have been transformed into native links, allowing for standard browser interactions such as "Open in New Tab" via right-click or Ctrl/Cmd+Click. ### User Interface A sleek drawer slides out from a floating button on the DeepSeek page. Inside you can: - Edit the system prompt. - Toggle auto-download behavior for files and LONG_WORK zips. - Import, export, download, and manage skills. - Import, export, and manage memory entries. - Create, edit, download, and activate characters/personas. - Define Claude-style Projects, define project-level instructions, and upload project files and attach them to chats.

### Code Block Download Buttons Every code block in DeepSeek responses gains a "Download" button, making it easy to save snippets with the correct file extension. ### Advanced File Upload The extension adds a "+" button next to the chat input, offering: - Upload a folder (concatenates all text files into a single workspace file). - Import a GitHub repository (fetches and packages the repo as a text file, with optional GitHub token support for private repositories). - Fetch a web page (converts the main content to markdown). ## Installation ### Recommended: Browser Stores The easiest way to install Better DeepSeek is through the official stores: -
Chrome Web Store -
Microsoft Edge Add-ons -
Firefox Add-ons ### Latest Development Build If you want to try the very latest features before they reach the store, you can download the
Latest Automated Build. Download the ZIP for browsers, or the
signed APK for Android. Load the browser extension via "Load unpacked" in Chrome. ### Manual Installation (Developer Mode) If you prefer to build from source or contribute to development: #### Prerequisites - Node.js (version 18 or later) - npm #### Build from Source 1. Clone the repository:
bash git clone https://github.com/EdgeTypE/better-deepseek.git cd better-deepseek 2. Install dependencies:
bash npm install 3. Build the extension:
bash npm run build This will create a
dist-chrome and
dist-firefox folder with the unpacked extension. 4. Load the extension in your browser: 1.
Chrome: 1. Open Chrome and go to
chrome://extensions. 2. Enable "Developer mode" (top-right toggle). 3. Click "Load unpacked" and select the
dist-chrome folder. 2.
Firefox: 1. Open Firefox and go to
about:debugging. 2. Click "This Firefox". 3. Click "Load Temporary Add-on". 4. Select the
better-deepseek-firefox.zip file.
Note: Firefox build is experimental. The extension should now appear in your extensions list and be active on
chat.deepseek.com. ## Usage Once installed, visit
chat.deepseek.com. You will see a "BDS" button in the top-right corner. Click it to open the settings drawer. ### Using Tool Tags Simply ask DeepSeek to perform a task that would benefit from one of the tools. For example: - "Create a Python script that calculates the Fibonacci sequence and run it." - "Make an interactive pendulum simulation." - "Generate a PowerPoint presentation about climate change." - "Build a complete React to-do app as a downloadable project." DeepSeek will use the appropriate tags automatically (guided by the injected system prompt). ### Managing Memory When DeepSeek writes to memory using
<BDS:memory_write>, the entries appear in the "Stored Memory" section of the drawer. You can also manually import/export memory as JSON. ### Uploading Folders and GitHub Repos Click the "+" button next to the chat input to reveal the advanced upload menu. Choose "Upload Folder" to select a local directory; the extension will concatenate all text files into a single upload. On browsers without the File System Access API (Firefox), the folder picker falls back to the browser's native directory input so the flow still works. "GitHub Repo" fetches the repository as a ZIP and converts it to a gitingest-style text file for context. For private repositories, add a classic GitHub personal access token with
repo scope in Advanced Settings. The token is stored locally in the extension and is only sent to GitHub when you explicitly fetch a repository. ## Development ### Project Structure
better-deepseek/ ├── src/ │ ├── background/ # Service worker for cross-origin requests │ ├── content/ # Content script (runs on DeepSeek page) │ │ ├── dom/ # DOM manipulation utilities │ │ ├── files/ # File/folder/GitHub readers and code block downloads │ │ ├── parser/ # BDS tag parsing and sanitization │ │ ├── tools/ # Tool card renderers (HTML, Python, PPTX, etc.) │ │ ├── ui/ # Svelte components for the drawer and overlays │ │ └── index.js # Content script entry point │ ├── injected/ # Script injected into the page's MAIN world │ ├── lib/ # Shared utilities (ZIP, download, hashing, etc.) │ ├── platform/ # Platform-specific globals and polyfills │ │ ├── android-bridge-shim.js # Android native bridge wrappers │ │ ├── android-chrome-polyfill.js # chrome.* API polyfill for Android │ │ ├── globals-android.js # Android platform globals entry │ │ └── globals-chrome.js # Chrome platform globals entry │ ├── sandbox/ # Sandboxed iframe for PPTX/Excel/DOCX generation │ └── styles/ # CSS files ├── android/ # Android WebView app │ ├── app/ │ │ ├── src/main/ │ │ │ ├── java/com/betterdeepseek/app/ │ │ │ │ ├── MainActivity.kt # Full-screen WebView Activity │ │ │ │ └── WebViewBridge.kt # @JavascriptInterface bridge │ │ │ ├── assets/bds/ # Auto-populated by build:android │ │ │ └── res/ # Android resources │ │ └── build.gradle.kts │ ├── build.gradle.kts │ ├── settings.gradle.kts │ └── gradle/ ├── static/ │ ├── manifest.json # Extension manifest │ └── sandbox.html # Sandbox page ├── scripts/ # Build helper scripts ├── tests/ # Test suites (unit, integration, E2E) ├── build.js # Vite multi-target build configuration └── package.json ### Building and Watching -
npm run build – Production build. -
npm run dev – Development build with watch mode. After making changes, rebuild the extension and reload it from
chrome://extensions (click the refresh icon on the extension card). ### Building for Android Better DeepSeek can run as a standalone Android app. It wraps
chat.deepseek.com in a WebView and injects the BDS enhancement layer. #### Prerequisites | Tool | Version | How to install | |------|---------|----------------| | Node.js | ≥18 |
winget install OpenJS.NodeJS.LTS | | Java JDK | 17 |
winget install EclipseAdoptium.Temurin.17.JDK | | Android SDK | API 34 | Install Android Studio, then SDK Manager → Android 14.0 (API 34), Build-Tools 34.0.0, Command-line Tools | | Gradle | 8.7 (one-time) | Download the binary-only ZIP from
https://gradle.org/releases, extract, and add
bin/ to your PATH | #### Environment Variables Set these in your system or user environment variables (Windows — use
setx in Command Prompt, not PowerShell):
JAVA_HOME=C:\Program Files\Eclipse Adoptium\jdk-17.0.19.10-hotspot ANDROID_HOME=C:\Users\YourName\AppData\Local\Android\Sdk Also add
%ANDROID_HOME%\platform-tools to your
Path. >
PowerShell pitfall: In PowerShell, use
$env:JAVA_HOME and
& to call > executables. In Command Prompt, use
%JAVA_HOME% and double‑quote paths with > spaces:
"%JAVA_HOME%\bin\java" -version. #### Verify the toolchain Open a
Command Prompt (cmd.exe) and run:
cmd echo %JAVA_HOME% "%JAVA_HOME%\bin\java" -version echo %ANDROID_HOME% dir %ANDROID_HOME%\platforms dir %ANDROID_HOME%\build-tools dir %ANDROID_HOME%\cmdline-tools gradle --version You should see OpenJDK 17,
android-34,
34.0.0 in build‑tools,
latest in cmdline‑tools, and Gradle 8.7. #### Create local.properties In the
android/ directory, create a file named
local.properties:
sdk.dir=C:\\Users\\YourName\\AppData\\Local\\Android\\Sdk Use
double backslashes — this is a Java properties file. This file is gitignored and must never be committed. #### Bootstrap the Gradle wrapper (one-time)
cmd cd android gradle wrapper --gradle-version 8.7 --distribution-type bin This creates
gradlew.bat and the
gradle/wrapper/ folder. After this you can build with
gradlew — the system Gradle is no longer needed. #### Build the JavaScript bundles
cmd npm run build:android This runs Vite with
--target=android and copies the output (content.js, injected.js, sandbox.js, sandbox.html, content.css) into
android/app/src/main/assets/bds/. #### Build the APK
cmd cd android gradlew assembleDebug The first build downloads Gradle and Android dependencies — expect a few minutes. Subsequent builds are fast. The debug APK lands at:
android\app\build\outputs\apk\debug\app-debug.apk #### Install and run
cmd adb install android\app\build\outputs\apk\debug\app-debug.apk Requires a physical device with USB debugging enabled, or an Android emulator (create one via Android Studio's Device Manager — API 34, x86_64, Google Play system image recommended). #### Common pitfalls | Problem | Fix | |---------|-----| |
%JAVA_HOME% prints literally in PowerShell | Use
$env:JAVA_HOME in PowerShell, or switch to cmd.exe | |
'C:\Program' is not recognized | Wrap the path in double quotes:
"%JAVA_HOME%\bin\java" | | Winget Temurin install fails with exit code 1602 | Run the downloaded MSI directly from
%TEMP%\WinGet\... | |
sdkmanager doesn't show license prompt | Run it again; the prompt sometimes scrolls past. Type
y and Enter | |
Unresolved reference: BuildConfig | Add
buildFeatures { buildConfig = true } to
android { } in
app/build.gradle.kts | |
INSTALL_FAILED_UPDATE_INCOMPATIBLE | Uninstall the existing app first:
adb uninstall com.betterdeepseek.app | | Play Protect blocks installation | Tap "Install anyway" — debug APKs are unsigned | | BDS toggle doesn't appear after login | Wait a few seconds; injection happens after the page fully loads | ### Design Principles - The content script uses Svelte 5 for reactive UI components. - The injected script patches
window.fetch and
XMLHttpRequest to modify outgoing chat completion requests. - All data (settings, skills, memories, characters) is stored locally using
chrome.storage.local. - The extension is designed to be non-intrusive: it only modifies the DOM by adding host containers next to messages and hiding original markdown when tool tags are present. ## Privacy Better DeepSeek does not collect, transmit, or sell any personal data. All settings, memories, skills, and characters are stored locally on your device. If you configure a GitHub personal access token for private repository support, it is stored locally and only sent to GitHub when you explicitly fetch a repository. See the full
Privacy Policy for details. ## Changelog ### v0.1.12 (2026-08-15) -
New Feature: DeepCode (Experimental). A collaborative coding mode that works alongside DeepSeek Harness. Enable DeepCode to plan tasks and execute multi-step code workflows with AI, then seamlessly transfer the plan to DeepSeek Harness. For full integration, install the
dsh-better-deepseek plugin in DeepSeek Harness. -
New Feature: DeepCode Auto Tools. Added three new BDS auto tools:
<BDS:AUTO:SEARCH_IN_DIRECTORY>,
<BDS:AUTO:LIST_DIR>, and
<BDS:AUTO:FILE_READ> (active when DeepCode mode is enabled) for codebase exploration. -
New Feature: Queued Prompts. If you send a message while DeepSeek is still generating a response, BDS automatically queues your prompt and submits it seamlessly as soon as generation completes. -
New Feature: Download Support for Created Items. Added download/export support for custom Personas and Skills directly from the drawer. -
Bug Fix: Fixed a parser issue affecting Long Work and related tool blocks caused by recent DeepSeek UI changes. -
Codebase Cleanup: Removed deprecated legacy tool cards from the codebase. -
Android Improvement: Added User-Agent header metadata to searches performed on Android devices. -
Stability & UI/UX Improvements: General bug fixes and interface refinements. ### v0.1.11 (2026-07-27) -
New Feature: MCP (Model Context Protocol) Server Support. Connect remote MCP servers to give DeepSeek access to external tools. For detailed information, visit the Advanced Settings. (See MCP section above for details.) -
New Feature: Dynamic Tables. Sort data and reorder columns directly in tables generated by DeepSeek, making data analysis more interactive. -
Stability & UX Improvements: Dozens of bug fixes and UI/UX improvements across the extension. ### v0.1.10 (2026-06-30) -
New Feature: BDS:IMAGE Tag with Wikimedia Commons. DeepSeek can now search and display images from Wikimedia Commons directly in conversations. Supports query, count, width, category, caption attributes, fullscreen viewer with keyboard navigation, lazy loading, and result caching. -
New Feature: Slash-Command System. A complete command subsystem with autocomplete, argument hints, and keyboard shortcuts. Built-in commands for common tasks, custom command-to-snippet mapping, and a context hand-off feature that compresses long conversations and opens a fresh session with summarized context. You can also define your own commands using saved snippets. -
New Feature: Load All History. Fetch full session history from the DeepSeek API, enabling complete exports and accurate token usage calculations even for sessions with lazy-loaded messages. -
New Feature: Message Timestamps. Display precise timestamps for each message. Configurable via a toggle in Settings. -
New Feature: Lua & Ruby Code Runners. DeepSeek can now write and execute Lua and Ruby code directly in the chat, powered by Fengari and Opal runtimes. -
Deep Research Improvements: Added 128K context budget guard to prevent context window overflow, adaptive step handling with deduplication and validation, automatic recovery from AUTO tag emission issues, report synthesis, and auto search narrowing with DDG/Bing fallback ranking. (Thanks to
@WhiteLicorice). -
New Feature: Search functionality in SettingsPanel to quickly find settings. Advanced settings grouped into collapsible accordions for a cleaner experience. -
UI/UX Improvements: Enhanced markdown styling using design system variables. BDS tool cards now appear at their original position within the message text instead of being appended at the end, with improved markdown styling throughout. -
Bug Fixes: Escape character handling in AI-generated BDS tag content. Whitespace preservation in code blocks. Improved send button detection and retry logic. Markdown reconstruction and list handling improvements. Various stability fixes. ### v0.1.9 (2026-06-13) -
New Feature: Multi-System Prompt Mode & Advanced Scheduling. Use multiple system prompt entries with per-entry scheduling - first message, every N turns, or always. -
New Feature: DeepResearch. Tell DeepSeek a topic, review the generated plan, and upon approval it conducts deep multi-step research automatically. (Thanks to
@WhiteLicorice). -
Visualizer Rework: Visualizer widgets can now be resized and downloaded. The entire UI has been reworked for a cleaner experience. -
Export/Import Overhaul: All extension data (settings, skills, memories, characters, projects) can now be exported and imported