dsh-nav-rail
September 1, 2026 · View on GitHub
A minimal left-edge rail navigator for the DeepSeek Harness web GUI.
Every user question in the current session renders as one thin bar pinned to the conversation column's left edge. Hovering ripples the bars like water, a floating card previews the full question text, and clicking smooth-scrolls the conversation to that message.
Features
- Minimal rail — no panel, no header: just a column of 2px bars pinned to the left edge of the conversation area (auto re-anchors on layout changes).
- Uniform bars, capped window — bars are equal length by default; the rail shows at most 7 at a time (wheel to scroll, edge fade hints overflow, hovered bar auto-scrolls into view).
- Hover ripple — the hovered bar stretches and brightens; neighboring bars stretch with distance falloff (46 / 36 / 28 / 22 / 18 → 16 px).
- Scroll-spy — scrolling the conversation highlights the bar of the question currently in view.
- Hover preview — a stable-position floating card shows the full question text (anchored to the rail, never covering the bars).
- Click-to-jump — smooth-scrolls to the message via stable
data-chat-anchor-keyanchors. - Steering aware — interrupt (steering) questions render in amber.
- Theme aware — all colors come from
--dsw-*tokens, so light/dark themes apply automatically.
Install
From a local checkout:
dsh plugin --profile web add file:/path/to/dsh-nav-rail
Or manually: place the package under ~/.dsh/ext/dsh-nav-rail,
add it to the web profile's dependencies and dsh.profile.bundles
in ~/.dsh/profiles/web/package.json, run pnpm install there, then
restart the dsh web process.
How it works
- Bundle patch (
cordis.patch.yml) inserts one Loader row naming this package, so the client-modules scan picks up thedsh.clientdeclaration and serveslib/client.jsintowindow.__DSH_BOOT__. - The browser half registers an additive entry in the
shell.overlayslot (no shipped UI is replaced), reads the current session through the officialsessions.binding(id).sessionface (ConversationSnapshot), and listsuser/steeringchat nodes. - The rail position tracks
[data-conversation-scroll]via aResizeObserver; the scroll-spy listens to the conversation scrollport withrequestAnimationFramethrottling. - Pure UI plugin: zero server-side dependencies (
lib/index.jsis an emptyapplyso the package shows up in Settings → Plugins).
Remove
dsh plugin --profile web remove dsh-nav-rail
License
MIT