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.

Working Activity — DSH Plugin for DeepSeek Harness
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins

dsh-working-activity

Working Activity

Live model working-status line: playful copy, running tool, turn elapsed — for TUI prompt and Web UI

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

npx -y @deepseek-ai/dsh plugin --profile web add dsh-working-activity@0.4.0
READMECompatibilityVersions

Compatibility and provenance

Working Activity is published as dsh-working-activity and currently resolves to version 0.4.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
npm
Registry updated
9/20/2026

Versions

0.4.0stable
8/30/2026
0.3.3stable
8/20/2026
0.3.2stable
8/19/2026
Show 3 more versionsCollapse versions
0.3.0stable
8/19/2026
0.2.6stable
8/16/2026
0.2.5stable
8/16/2026

Related plugins

Loading related plugins…

Latest
0.4.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
300.9 kB
Files
58
Surface
web
License
BSD-3-Clause
Source
npm
GitHub
★ 0
Weekly downloads
4,758
Security scan
✓ v0.4.0 scan passed
View source ↗Project homepage ↗
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

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 pluginsClient 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.Client Ui Git Graph@linxin666/dsh-client-ui-git-graphExternal dsh web GUI plugin: a blank-session git branch selector + Git graph, with real host-side git operations and guards, as a dsh profile bundle

README

dsh-working-activity

A live "working line" for DeepSeek Harness: the model's real-time activity — playful thinking copy, the tool actually running, elapsed time, and a turn-end summary — shown while the agent works.

What it does

Folds the durable session stream (turn/start, assistant/chunk, tool/call, tool/result, turn/end) plus agent/status into one status line, refreshed on a render tick:

  • Thinking: short colloquial copy rotates every few seconds (嗯…让我捋捋, 盘一下盘一下, 大脑转起来了, deadpan lol / hm / ok), tiered when thinking runs long (30s / 1min / 5min), night-owl copy mixed in between 00:00–06:00 local time.
  • Tool activity: the running tool renders as 俏皮动词 + 参数细节 + 已耗时 (跑个命令 npm test · 12s); failed tools show 翻车了-style copy in the done line.
  • Turn summary: on turn/end the line becomes 搞定 ✓ · N 工具 · 想Xs 干Ys (thinking/tool split), with the last tool's fragment pinned for a few seconds.
  • Minimal mode: phrases: false renders plain functional labels (思考中 · 总1m23s, bash npm test · 12s).

Two optional sinks, both off by default only when their seam is absent:

  1. TUI prompt slot — registers the ${activity} template value on ctx.tuiPrompt when the TUI is composed. Add ${activity} to theme.leftPrompt to see it next to cwd/model/context.
  2. Session events — appends log-only activity/status events (never surface events: the model never sees them) for Web and other UI consumers; replay ignores them.

Installation

The package is a self-mounting bundle: it declares dsh.bundle.patch (cordis.patch.yml), so the official CLI both installs it and appends it to the profile's bundle layer stack:

dsh plugin --profile <profile> add dsh-working-activity

At boot, app-boot applies the bundle's patch list over the profile root and the package inserts its own working-activity row — no manual configuration required. To tune a value, override the row's config by id in the profile's user layer ($DSH_HOME/profiles/<profile>/cordis.patch.yml) instead of inserting a second same-id row:

- id: working-activity
  config:
    publishIntervalMs: 500

Host and TUI integration supports the DSH 0.1.0-rc.6 and 0.1.1-rc lines, plus 0.1.2-alpha.2. The optional Web client still uses the rc client-runtime contract and is not covered by alpha.2 compatibility.

TUI usage

Install the plugin into a profile that composes the official dsh-tui, then add the ${activity} slot to the left prompt template in the profile's user layer ($DSH_HOME/profiles/<profile>/cordis.patch.yml):

- id: tui
  config:
    theme:
      leftPrompt: '${cwd}${git/worktree}${activity}${model}${token_meter/cache_hit_rate}${context}'

While a turn runs, the prompt line shows e.g. dsh main 跑个命令 npm test · 12s deepseek-chat …; while thinking, 嗯…让我捋捋 · 总1m23s; after the turn, 搞定 ✓ · 4 工具 · 想12s 干11s briefly. Without ${activity} in the template, the plugin is inert in the TUI (the slot is unregistered values are omitted by the template renderer).

Web usage

The Web client renders the live line two ways, both fed by the activity/status events:

  • The turn-level status label (TurnStatus, formerly the static "Deep diving...") shows the live line while a turn runs, keeping its sweep animation.
  • A working-line dock entry (WorkingLine on conversation.input.dock) renders the turn-end statistics (token/elapsed/tool summary) above the composer after a turn settles; live phases stay on the turn label.

Both fall back to the previous static label while the plugin is absent, so the Web UI is unaffected by disabling it.

Configuration

KeyTypeDefaultMeaning
phrasesbooleantruePlayful copy pool; false renders plain functional labels
publishbooleanfalseAppend activity/status session events for UI consumers. Off by default: appended events currently make session logs unresumable (see note below)
tickMsnumber500Status render tick interval (100–5000)
publishIntervalMsnumber2000Minimum interval between published events while the line is stable (500–30000)
detailLimitnumber40Max displayed detail length (paths/commands/patterns), 8–120
customActionsobject{}Exact tool-name → action-copy pools, e.g. {"my_deploy": ["部署一下", "上线中"]}
narratebooleantrueInject the ⏵ self-narration contract into the system prompt; the line is surfaced live and stripped from the chat body

Event contract

activity/status is a log-only session event (merge-extensible SessionEventMap member, no surfaceOp):

{
  phase: 'idle' | 'waiting' | 'thinking' | 'tool' | 'done'
  line: string            // plain-text status line, no ANSI
  label?: string          // current work label (tool action / stage)
  detail?: string         // path / command / pattern fragment
  phrase?: string         // current playful phrase
  toolCount: number       // tools completed this turn
  turnElapsedMs: number   // ms since turn start
  phaseStartedAt: number  // epoch ms the phase started (animation anchor)
}

Why publish is off by default: session.append() cannot mark events ignorable, and the resume read path refuses any log containing unknown non-ignorable event types — so with publish: true, every session that rendered a status line fails to resume. Re-enable only for a log-replaying consumer on a harness that supports ignorable appends. The live TUI prompt line is unaffected.

Publishing rules: line changes publish immediately; a stable line republishes at most every publishIntervalMs so a long tool's elapsed time stays live without flooding the log. All data is lossless JSON; optional fields are omitted when absent.

Export shape

A function/namespace plugin: name / Config / apply, no default export. The state machine (ActivityTracker) and copy pools live in ./status and ./phrases (pure, clock-injected, unit-tested). The invariant companion registers under ./invariant.

Model Experience

Prompt and tool surface

Nothing. The plugin injects no prompt sections, registers no tools, and appends no surface events. activity/status is UI state only: it never enters derived model history, so the model cannot see its own working line.

Token effect

Zero per request.

KV Cache effect

No system-prompt contribution, so no cache-stability effect.

Known Limitations and Deferred Work

  • Single active line: the plugin keeps one status line per session; the TUI slot shows the most recently active session.
  • Narration is opt-in: the ⏵ self-narration contract (model writes a short status line at the top of each reply) is injected by default (narrate: true); set narrate: false for a purely event-derived line.
  • No progress percentages: DSH has no tool progress events; a long tool shows elapsed time only.
  • No animated frames: the TUI slot renders a static text fragment; frame animation (moon/comet/braille presets) is deferred until the prompt-slot contract supports a frame callback.
  • Web dock entry duplicates the turn label: the input-dock WorkingLine and the chat TurnStatus show the same snapshot; the dock entry exists for session views where the turn label is not visible.