DeepSeek Harness
This repository is a feature fork: dsh-report-card adds a
card: 'report'
render intent to DeepSeek Harness so tools can render interactive HTML
reports directly inside the conversation.
What this fork adds
-
packages/client/ui-report-panel- a standalone client plugin
(dsh-client-ui-report-panel) that contributes the report
artifact surface through public ui-conversation slots: the turn-tail card
and the right-hand panel (tabs, search, scroll memory, minimize,
multi-document tabs, ask-in-chat). The fork'sui-conversationstays at the
upstream baseline; the panel is an opt-in composition entry. -
packages/core/tools/src/presentation.ts— newReportCallView/
ReportResultView(card: 'report', carrying a self-contained HTML
document), wired into theToolCallView/ToolResultViewunions. The wire
types flow to clients automatically, so any tool can emit the card. -
packages/client/ui-primitives/src/ReportBlock.tsx— sandboxed inline
renderer: the report HTML is displayed in an<iframe sandbox="allow-scripts">
(no same-origin), so report scripts can run but cannot touch the host page.
The frame auto-resizes via apostMessageheight contract
(dsh-report-height), can open the report in a new tab, copy the HTML, or
download it as a title-named file. The details panel renders the report as a
full-height reading surface (up to 4096px). -
packages/client/ui-tool—reportCardModelderivation plus render wiring
in the chat tool row and the details panel; malformed wire payloads (bad
title, empty or >5MBhtml) fall back to the generic card instead of
crashing. Report cards show up in the conversation immediately as standalone
ChatGPT-style cards: a compact preview with an Expand action to view the
full HTML and Collapse to shrink it back. The standalone card renders in the
core conversation renderer at the turn tail (the bottom of the message),
fully outside the tool-call tree. Clicking the card opens a right-side
application panel showing the full report; the panel shares the same layout
plane (the conversation is pushed left), includes a Refresh action, and
auto-replaces its content when a newer report arrives. Controls follow the
UI language (zh/en). The panel is fixed to the right side of the viewport
(full height, independent scroll) and the conversation reserves its width,
so the two are independent parallel spaces. The report fills the panel
height, so the whole pane is used. Multiple reports open as tabs in the
panel, and the panel width is draggable (320-800px). Reports load through
blob URLs with an injected in-frame navigation shim, so in-report anchor
links (table of contents) smooth-scroll to their target without blanking
the frame, and the collapsed preview stays scrollable. The panel searches
inside the report (the sandboxed frame is opaque to host Ctrl+F), remembers
each tab's scroll offset across switches, and minimizes to a narrow bar
without losing the tab set. Batch deliveries open as multi-document tabs
with an index page whose links switch reports, and the panel can compose an
ask-about-report question into the main conversation. -
demo/report-card-demo— a demo tool that emits the card. -
demo/report-html-integration— mounts the
dsh-report-html plugin so
its report tools emit the card; verified end to end with a real headless run.
Demo

Real server, real model round: ask for a report, click the card, and the full
report opens in an independent right-hand panel.
Install the panel plugin
The report panel ships as an npm plugin and can be added to any dsh host:
dsh plugin --profile web add dsh-client-ui-report-panel
Pair it with a report generator such as
dsh-report-html
(dsh plugin --profile web add dsh-report-html). The fork's demo overlay
demo/report-html-integration/cordis.yml mounts both for local development.
Try the demo
pnpm install
pnpm dsh --profile web --patch ./demo/report-card-demo/cordis.yml
Open http://127.0.0.1:3080 and ask: Use the demo_report tool. The returned
HTML report renders inline in the conversation.
Any tool can use the intent by declaring a presentResult that returns
{ card: 'report', title, html }; dsh-report-html is the full report
generator companion that produces the HTML payload.
English | 中文
DeepSeek Harness (dsh) is an open-source agent harness developed by DeepSeek AI.
It uses an architecture where everything is a plugin, and is powered by Cordis, whose design is described in A Programming Paradigm for Spatiotemporal Composability.
Developer preview
DeepSeek Harness is currently in developer preview and is iterating rapidly. THERE WILL BE COMPATIBILITY-BREAKING CHANGES.
Run
Run from npm
Install Node.js, then run:
npx @deepseek-ai/dsh web
The command starts the Web UI, served at http://127.0.0.1:3080 by default. See Web UI guide.
Run from source
To run from a repository checkout:
git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web
Community and support
- Feel free to submit feedback or bug reports through GitHub Discussions.
- Add the
dsh-plugintopic to your plugin repository for discoverability. - Join DeepSeek Harness Discord community.
Contributing
See CONTRIBUTING.md.
Development
Start with the development guide and architecture documentation.
For agents, follow AGENTS.md.
License
Third-party dependencies and their licenses are disclosed in THIRD_PARTY_NOTICES.md.