Preface¶
DeepSeek Harness (dsh for short) is an open-source agent framework developed by DeepSeek. The official repository positions itself with the slogan “Everything is a Plugin”: models, tools, conversations, and interfaces can all be added or replaced as Cordis plugins. Many standalone directory sites have emerged in the community to retrieve these plugins; among them, the DeepSeek Harness Plugin Repository is a community-maintained discovery portal, which has no official affiliation with DeepSeek / Horizon AI. It should not be treated as an official app store.
A common pain point when using dsh in the web interface is that the main session keeps spamming tool calls and long responses. Some users hope to let the backend continue writing code and fixing bugs, while switching the frontend to a visual novel-style full-screen stage: with characters speaking, backgrounds changing, and options popping up. dsh-gal is a fun plugin built specifically for this scenario. This article introduces it after cross-checking the plugin directory page, GitHub repository README, and source code: what it is, how to install it, how to launch it, and the boundaries to note when using it.
The current repository version is 0.3.0, with the npm package name @loserfox/dsh-gal. As of 2026-08-17, GitHub shows 19 stars, while the directory page shows 18 stars when indexed; the last push to the default master branch was on 2026-08-13, and the directory page indexed the plugin on 2026-08-15.
What is it¶
dsh-gal is a fun standalone plugin maintained by LoserFox. The directory page summarizes it in one sentence: a dual-agent stage that turns vibe coding into a full-screen visual novel. The frontend uses the Flash model with a character persona to improvise the plot, while the backend main session agent (pro) continues with real work; when plot progression is needed, the frontend will run a segment and present options.
The repository README aligns with the directory page’s positioning: Galgame Mode, using a visual novel-style full-screen stage for vibe coding. The plugin declares dsh.bundle (pointing to cordis.patch.yml) and includes dsh.client injection; the platform is set to web, meaning it is designed for the web interface, not TUI/headless skins.
Both the directory page and README describe the frontend character as “Xiao Jing” (a seaside café owner). However, the GM persona in the current source code is: a barista in a company break room, who makes coffee and prepares afternoon tea during the day, occasionally writes code late at night, and carries a cyber daily life vibe. This article will follow the actual performance settings described in the source code.
Core Features¶
The plugin is split into host and client halves, as explicitly stated in the repository README.
Dual Agent分工 (Dual Agent Division of Labor)¶
- Frontend GM: Fixed to call
deepseek-v4-flashwithreasoningEffort=off, running a lightweight loop that only includes thegal_stagetool. It uses the “Xiao Jing” persona to improvise lines, change scenes, and present options, and is not responsible for writing business code. The source code comments clarify: this is not a complete sub-agent stack, but a direct tool loop over a streaming LLM. Options and free input will block onuserQuestionsuntil the player responds. - Backend Agent: The pro model in the main session continues writing code, fixing bugs, and researching information. The plugin inserts a note in the system prompt: “Galgame Mode (Backend Director)”, stating that it should not write performance lines, and should call
gal_gmwhen plot progression is needed, passing the “plot progress summary + user’s original words + work progress” to the frontend; after completing a real task, callgal_gmagain to weave the results into the plot. - Launch without going through the pro model: Click the “🎬 Galgame” button in the input bar, and the client will send the
【gal:开场】marker; after the host detects this user message, it will directly send the flash GM to run the opening briefing. The/galcommand will also launch the opening immediately. The “Let Xiao Jing start” on the title screen also follows the same marker.
Stage Tools and Events¶
The frontend truly drives the screen through gal_stage, with the following operation enumerations:
- stage: Open a scene (background + appearing characters)
- bg: Change background/positioning (scene switching is an update, not a full restart)
- line: A single line of dialogue (speaker + text + optional expression variation)
- choose: Present 2~4 options, blocking until the player selects one
- ask: Free input, blocking until the player submits
- end: End the scene
These operations will trigger persistent events in the session: gal/stage, gal/bg, gal/line, gal/end. The payload only includes IDs (charId/emotion/bg) without asset URLs; the client then maps the IDs to packaged assets. The host will also serve character sprites and backgrounds under /gal/assets, with path traversal protection enabled.
Currently packaged background IDs include 12 options: office (default, company break room), meetingroom, bedroom, bedroomnight, classroom, corridor, riverside, streetdusk, supermarket, checkout, mall, foodcourt. The xiaojing character has 20 expression variations (idle, happy, smile, shy, etc.). The narrator speaker ID is narrator, with no sprite or name tag.
Full-screen Client¶
package.json injects the client into @deepseek-ai/dsh-client-runtime, the session UI, slots, and locale. When an unfinished gal-scene node appears in the session, the overlay will automatically enter full-screen stage mode. Operations listed in the README and source code include:
- Click dialogue boxes to advance lines (space/Enter also work)
- History LOG
- CONFIG: Text speed, auto-advance interval, fast-forward interval, sound effect volume
- Option panel, plus “input yourself”
- Free input (sent to the main session)
- AUTO / SKIP / EXIT
The title screen copy reads “Xiao Jing’s Day / ~AI Improv Plot Galgame Stage~”. In the chat area, scenes from the same run will be collapsed into a single gal-scene node, replayed in event order.
Installation and Activation¶
The installation command given on the directory page, run in the DeepSeek Harness terminal:
dsh plugin add github:LoserFox/dsh-gal
The full form of the official CLI is dsh plugin --profile <profile> add ..., which forwards to pnpm in that profile’s directory. Since this plugin’s client platform is web, the README specifies installing it into the web profile. A more reliable command is:
dsh plugin --profile web add github:LoserFox/dsh-gal
For reproducible installations, the directory page recommends pinning the commit hash. As of 2026-08-17, the latest commit on master is fd7154767000b25c58e13f3d2fe52bd235dd76d2:
dsh plugin --profile web add github:LoserFox/dsh-gal#fd7154767000b25c58e13f3d2fe52bd235dd76d2
For local development, the README uses link installation:
dsh plugin --profile web add link:/path/to/dsh-gal
The README notes that this is a bundle-type plugin, which requires restarting the dsh instance to take effect after registration. The repository has already committed lib/index.js and lib/client.js; there is currently no prepare script in package.json. If pnpm ≥10 still blocks build scripts for git dependencies, the first add may fail. Follow the CLI prompt to add the package name to the allowBuilds field of that profile’s pnpm-workspace.yaml and run the command again. This is a general note from DeepSeek Harness’s official documentation for GitHub installations, not a step unique to this plugin.
The security reminder on the directory page should be taken seriously: the plugin runs with the permissions of the current dsh process, and may execute code during installation. You should inspect the source code repository and license before installing. package.json declares the license as MIT; the GitHub repository currently does not have a separate LICENSE file, so GitHub API does not display license metadata.
Typical Usage¶
The following steps are sourced from the README and source code, not a fictional workflow:
- Confirm that you are running the DeepSeek Harness web interface under the web profile, and that the current session can call
deepseek-v4-flash(the frontend GM hardcodes this model name; the provider defaults to the configuration in the session request header, which isdeepseek-officialby default). - After installing and restarting dsh, open a session. A Galgame button will appear on the left side of the input box; clicking it is equivalent to sending:
【gal:开场】
You can also run /gal in the command. The host will immediately launch the flash GM opening: default background office, character xiaojing centered on screen, first setting the daily break room atmosphere, and presenting a choose option when reaching a branching point.
3. After the full-screen stage opens, click the dialogue box to advance lines. When reaching an option, click one of the labels or select “input yourself”. When you need to talk to the backend (for example, “Fix that test just now”), use the free input on the stage; the main session pro will continue working and call gal_gm at the appropriate time.
4. The top-right quick menu (only displayed when the mouse hovers over the stage) can open AUTO, SKIP, LOG, CFG, and EXIT will close the current scene. When a new unfinished scene appears, the stage will reopen automatically.
The repository’s local build command is pnpm install followed by pnpm build (tsc -b && tsdown), which regular users do not need to run when installing from GitHub.
Applicable Scenarios and Notes¶
It is suitable for users who are already using the DeepSeek Harness web interface and want to add a visual novel shell to their vibe coding. It solves the division of labor of “how the frontend performs and how the backend works”, and is not a general-purpose galgame engine, nor can it be used as a skin in TUI/headless profiles.
It is recommended to clarify these boundaries before use:
1. Platform: dsh.client.platform is web, and the full-screen stage is mounted on conversation.input.dock. Without a web client, this UI set does not exist.
2. Model: The frontend hardcodes deepseek-v4-flash. If the current provider cannot access this model, both the opening and gal_gm calls will fail. Which pro model the backend uses is determined by the main session’s own configuration, and the plugin does not modify it.
3. Assets are pre-packaged: Events only pass IDs, and the client maps them to sprites and backgrounds in the repository’s assets/ folder. The GM prompt in the source code also requires that bg, emotion, and charId fall within this enumeration. You cannot treat this as a tool that allows “uploading any sprites to start a new game”.
4. Plot is improvised: There is no fixed script, only a persona, opening briefing, and stage tools. The GM loop has a minimum line count requirement (the entire scene will continue if it has fewer than 5 lines; presenting options with too few lines will be rejected). The specific performance will be different for each session.
5. Permissions and Licensing: The plugin has the same permissions as the current dsh process, and can register HTTP routes, write events to sessions, and call models. Read the source code before installing; the license is subject to the MIT declaration in package.json, and there is currently no separate LICENSE file in the repository root.
6. Documentation is not fully synchronized: The directory page / README still mentions “seaside café owner”, but the source code persona has been changed to a break room barista; the directory page’s installation command does not include --profile web, while the README emphasizes the web profile and restarting. In case of conflict, refer to the repository source code and official CLI documentation.
Summary¶
dsh-gal applies DeepSeek Harness’s “Everything is a Plugin” philosophy to a fun use case: the host half provides gal_stage/gal_gm, the /gal command, and asset serving, while the client half turns unfinished gal-scene nodes into a full-screen visual novel. The frontend flash handles performance, the backend pro continues writing code, and the two are connected via session events and a single blocking option问答.
It is not an official bundled plugin, nor a general-purpose game editor. If you are already using the dsh web profile, you can install it using the directory page’s command, pin the commit, restart the instance, then click the launch button once to see if the stage loads.
Directory page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-gal/
GitHub: https://github.com/LoserFox/dsh-gal