Back to home@lhuans

dsh-genui

GenUI for DeepSeek Harness: interactive charts, forms, calculators, dashboards, and mini apps rendered inline in assistant replies, with actions that flow back to the model.

Stars
0
Language
JavaScript
Created
Aug 15, 2026
Updated
Sep 1, 2026

Introduction

dsh-genui

English · 简体中文

Turn DeepSeek Harness replies from a wall of text into an interface you can actually click.

You ask the AI to run a calculation and get back a formula. You ask it to file a request and get eight Markdown bullets. You ask about last week's traffic and get numbers lined up as plain text.

Nothing is wrong — but you still do the work yourself: copy, paste, do the math in your head, then type another message saying "I'll take the second one."

dsh-genui is a plugin for DeepSeek Harness (DSH). Install it, ask the same questions, and the answer grows a real interface: calculator keys you can press, dropdowns you can pick from, charts with actual axes. Whatever you click or fill in flows back into the conversation, and the AI picks up from there.

One command to install. No changes to DSH source.


Three real examples

All three screenshots are from a live DSH session — not mockups.

"Generate a calculator"

A calculator rendered inside a DSH conversation

Digits, operators, parentheses, backspace, clear — every key works. That 666 was typed on the keypad, not written into the text by the model.

"Generate a form"

A project proposal form rendered inside a DSH conversation

One sentence produces a full project proposal form: required-field validation, radio group, dropdown, headcount stepper, date picker, toggle, checkboxes, long text.

Hit Submit and your answers go back into the conversation, so the AI can rank the priority, draft a schedule, or write the proposal for you.

"Show the last 7 days of traffic as a line chart"

A traffic line chart rendered inside a DSH conversation

Two series, legend, axes, gridlines — a rendered chart, not ASCII art.


Before and after

SituationPlain chatWith dsh-genui
You need a toolThe AI hands you code to run yourselfThe tool appears in the reply, usable right away
Collecting input"Please provide the following 8 items", typed one by oneOne form: pick, fill, submit
Reading dataText tables, trends left to imaginationLines, bars, pies — the trend is obvious
Making a choiceYou reply "option B"Click a button, the choice carries into the next turn
Setup costOne dsh plugin add, no source changes

What you can ask for

Just talk normally. You never write JSON or learn a syntax. Each category below includes a prompt you can copy as-is.

Data: charts

Bar, line, pie, ring, radar, gauge, funnel, scatter, waterfall, and other common chart types.

"Chart revenue for the last three quarters as bars, and mark year-over-year growth"

"Show the order split by channel as a pie chart"

"Build a conversion funnel: 100k impressions, 8k clicks, 600 orders, 520 payments"

Good for weekly reports, retros, review decks, and anytime you'd rather not open a spreadsheet.

Input: forms

Text fields, textareas, dropdowns, radios, checkboxes, toggles, number steppers, date pickers, search boxes, transfer lists. Submitted values return to the conversation automatically.

"Make a time-off request form with leave type, start and end date, days, and reason"

"Build a survey asking which features people use most and how satisfied they are"

"Give me a customer intake form, phone number required"

Much nicer than being interrogated over eight turns — fill it in once and you're done.

Tools: little apps

The fun category. One sentence, and the AI builds you something that actually works.

"Generate a calculator"

"Make a BMI calculator — enter height and weight, get the result"

"Build a currency converter between USD and CNY"

"Give me a to-do list for today with checkboxes"

"Make a raffle picker for the team, I'll paste the names next"

Structure: tables, lists, layout

Tables (with paging and search), tree views, timelines, breadcrumbs, tabs, collapsible panels, cards, carousels, tooltips.

"Put these options in a comparison table: price, timeline, risk"

"Lay out the project milestones on a timeline"

"Split the frontend, backend, and QA schedules into tabs"

Flow: multi-turn interaction

Interactions travel back to the model, so you can build "you click, I continue" flows.

"Give me three options as cards — expand whichever one I click"

"Walk me through a setup wizard, then generate the config file"

"Quiz me with five multiple-choice questions and grade my answers"

One more thing

When you're not sure what to ask for, just say "answer me with an interface" and let the AI decide whether a chart, a table, or a form fits best.


Install

Prerequisites

  • Node.js installed
  • pnpm installed (DSH uses it to manage plugins). If you don't have it, run corepack enable or npm i -g pnpm, then open a new terminal and check that pnpm -v prints a version
  • DSH running: npx @deepseek-ai/dsh web, default at http://127.0.0.1:3080

Option 1: let the AI install it (easiest if you avoid the terminal)

The DSH assistant can run shell commands. Open a conversation and tell it:

Install the dsh-genui plugin from npm into the web profile: run dsh plugin --profile web add dsh-genui

It will run the command in front of you, possibly asking you to approve it. Then follow the restart steps below.

Option 2: run it yourself

In a new terminal:

dsh plugin --profile web add dsh-genui

This pulls from the public npm registry — no npm account, no cloning the repo.

Restart afterwards (don't skip this)

DSH locks in its plugin set at startup, so nothing changes in the UI until you restart.

  1. Go back to the terminal running DSH and press Ctrl+C
  2. Start it again: dsh web
  3. Refresh the browser
  4. Start a new conversation — the plugin's prompt is injected when a session begins, so older sessions won't pick it up

Check that it worked

In the new conversation, say:

Generate a calculator

If a working calculator appears in the reply, you're set. If you only see a code block, the plugin isn't active — see the FAQ below.

To verify before restarting:

dsh --profile web --dump-config

You should see a dsh-genui layer in the output.

Uninstall

dsh plugin --profile web remove dsh-genui

This also requires a restart to take effect.


FAQ

Still showing a code block after installing?

Nine times out of ten you skipped the restart or you're still in an old session. Run through all four steps: stop, restart, refresh, new conversation.

pnpm not found on PATH?

DSH needs pnpm to manage plugins. Run corepack enable (or npm i -g pnpm), then open a new terminal — PATH won't update in the old one.

The AI doesn't use interfaces on its own?

That's expected; it decides case by case. When you want one, just say "give me a form / chart / interface."

Does this change how DSH normally works?

No. Questions that don't need an interface get regular text answers, exactly as before.

Does it uninstall cleanly?

Yes. Run dsh plugin remove, restart, and DSH is back to its original state with no leftover config.


How it works

In short: the model no longer writes only text — it also writes a description of an interface, and the browser renders that description into real components.

A bit more detail: the plugin adds a prompt section teaching the model to emit structured JSON (inside a schemaJson code block) when an interface would help. The DSH web client picks up that JSON and hands it to a renderer. It's streaming, so the interface appears as the model writes it — no waiting for the full reply.

The components come from OpenTiny GenUI SDK and the OpenTiny Vue library — OpenTiny's generative-UI stack, a spec plus rendering engine for letting LLMs produce interfaces. dsh-genui wires that into the DSH conversation flow.

On safety: the model can only use whitelisted components. It cannot inject HTML or scripts, so nothing strange ends up in your conversation.


Links

License: MIT


DSH handles agents, sessions, and tools. dsh-genui adds the last piece: replies you can click, not just read.

One command, one restart, then say "generate a calculator" — thirty seconds to see the difference.