DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Mobile — DSH Plugin for DeepSeek Harness
← Plugins
M

@ericleoo/dsh-mobile

Mobile

Mobile-first overlay for the DeepSeek Harness web UI: full-width chat, sidebar-as-drawer, thumb-friendly composer, and safe-area/overscroll polish on touch devices.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:ericleoo/dsh-mobile#35c9c4870acfb4365f3961e4f35fe52738f2b7db
READMECompatibilityVersions

Compatibility and provenance

Mobile is published as @ericleoo/dsh-mobile and currently resolves to version 0.1.0-rc.11. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
github
Registry updated
9/16/2026

Versions

0.1.0-rc.11prerelease
9/16/2026
Show 2 more versionsCollapse versions
0.1.0-rc.9prerelease
9/9/2026
0.1.0-rc.8prerelease
8/29/2026

Related plugins

Loading related plugins…

Latest
0.1.0-rc.11
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
web
License
MIT
Source
github
GitHub
★ 0
Weekly downloads
0
Last push
9/16/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in

Related plugins

More verified plugins in ui-customization.

Web App@deepseek-ai/dsh-web-appThe dsh browser-surface bundle: the web patch layer over dsh-base plus the runtime glue plugin (frontend dist serving, web-surface prompt, bash runtime variables, URL line)Experimental Agent Team Web Profile@deepseek-ai/dsh-experimental-agent-team-web-profileExperimental Web profile layer for Agent Teams Remote and UI pluginsRemote Web Ui@linxin666/dsh-remote-web-uiScan-to-pair remote access for the dsh web GUI that shares one official interface: a QR beside the settings button pairs phones and PCs into the same Web GUI (a portrait-touch adaptation layer for phones, full desktop on PCs) through one-time tokens and rClient Ui Task Board@linxin666/dsh-client-ui-task-boardHost-authoritative task board for the DSH Web GUI with real session execution, Host cron scheduling, and optional cross-platform idle-sleep protection; mounted without DSH source changes.

README

@ericleoo/dsh-mobile

Mobile-first overlay for the DeepSeek Harness web UI (dsh web).

The built-in web surface is a three-column desktop shell: a sidebar rail, a conversation center column, and a details track. On a phone the rail and the empty details track still consume width, squeezing the chat into a narrow slit. This plugin turns the same composition into a mobile surface without forking any of the built-in UI.

What it does

At viewports < 1024px (matching the layout plugin's own "narrow" breakpoint):

  • Full-bleed chat — the sidebar rail and details track collapse to 0, so the conversation gets the whole viewport.
  • Sidebar as a drawer — the rail is hidden; a hamburger in the conversation header (and a floating button on the blank/hero screen) opens the sidebar as an overlay drawer with a backdrop. Esc, the backdrop, the sidebar's own fold toggle, and switching sessions all close it.
  • Details panel as a sheet — opening a tool's details covers the chat as a full-screen sheet instead of rendering off-screen.
  • Settings as a full-screen sheet — the built-in settings modal is an 800px two-column dialog (188px nav rail + content column), which leaves the content column at ~150px on a phone. At the narrow breakpoint the shell is restacked into a full-bleed sheet: the nav rail becomes a horizontal section strip (title + per-section icons dropped) and the content column takes the full width. The sheet's own overlay already covers the open drawer, so no drawer coordination is needed.
  • Directory picker as a full-screen sheet — "Select Workspace Directory" is a min(680px, 100%) dialog with a two-pane Miller column (each pane min-width 256px), so on a phone the panes overflow and the footer wraps to two rows. At the narrow breakpoint the dialog goes full-bleed, the panes become full-width scroll-snap pages (the picker already auto-scrolls to the newly opened child pane; swipe back to the parent), and the footer becomes a single non-wrapping row that scrolls horizontally when tight. The create-folder subdialog stays a centered card.
  • Touch polish — safe-area insets for notched phones, overscroll containment, touch-action: manipulation (no double-tap zoom delay), no tap-highlight flash, and a bottom-safe-area composer.

Desktop (≥ 1024px) is untouched: the plugin contributes nothing there.

How it works

A bundle plugin — the same pattern as @deepseek-ai/dsh-escalation-tolerance:

  • cordis.patch.yml inserts one loader entry (dsh-mobile) into the web composition after @deepseek-ai/dsh-web-app.
  • package.json declares dsh.client (platform: "web"), so @deepseek-ai/dsh-client-modules serves lib/client.js as a browser bundle and the web shell boots it as a client-side cordis entry.
  • lib/client.js injects a stylesheet (CSS overrides keyed off the frame's data-shell-overlay marker, so it survives the hashed class names) and registers three slot contributions:
    • conversation.session.header.actions — the hamburger,
    • shell.overlay — the drawer/details backdrop + the hero floating menu,
    • plus a document-level Esc handler and a session-switch listener.
  • Drawer state is read from the same layout store instance the AppFrame writes (ctx.slots.hostFace().storeOf(rootEntry, "root")), so the drawer always mirrors the shell's own narrowExpanded / details state; opening and closing goes through ctx.layout.toggleSidebar() / ctx.layout.closeDetails().

Installing

The plugin lives at $DSH_HOME/plugins/dsh-mobile and is wired into the web profile:

# from the web profile directory
cd "$DSH_HOME/profiles/web"
pnpm install    # links @ericleoo/dsh-mobile (already in package.json)

If you prefer a separate surface, add "@ericleoo/dsh-mobile" to the dsh.profile.bundles list of any other profile (for example a new mobile profile) — the bundle's patch layer applies the same way.

Notes

  • Everything is viewport-scoped (@media (max-width: 1023px)); desktop behavior is untouched.
  • The CSS overrides are keyed to the frame's [data-shell-overlay] child (an attribute the built-in layout plugin renders) so they survive the hashed CSS module class names of the built-in UI. If the layout plugin changes that marker, the selectors need a refresh.
  • Client bundle changes require a page reload (the graph re-hash is picked up on the next boot; pnpm run dev:web in the dsh checkout provides HMR for the in-box client packages).