DSH Hub

863683348/dsh-plugin-focus

dsh-plugin-focus

UIWeb UI1 GitHub stars· updated 2026-08-16

Focus board for DeepSeek Harness agents: durable, model-maintained notes in the session workspace — pins objective, constraints and decisions across compaction and sessions; auto context injection, archive on clear, session projection, experimental web panel

Install

npx @deepseek-ai/dsh plugin --profile <profile> add /path/to/dsh-plugin-focus

Restart `dsh web` after install. Bundle APIs can change during the developer preview.

README badge

dsh-plugin-focus DSH Hub badge
[![DSH Hub](https://dshhub.dev/badge/dsh-plugin-focus.svg)](https://dshhub.dev/plugins/dsh-plugin-focus)

Paste this into your README. The star count updates with every catalog sync.

From the README

Excerpt from 863683348/dsh-plugin-focus, cleaned of badges and images.

dsh-plugin-focus — Focus Board for DeepSeek Harness agents

A real, installable DSH plugin (DeepSeek Harness / Cordis profile bundle) that gives the agent a focus tool and a durable focus board — a small note file (default .dsh/focus.md) in the session workspace that pins the objective, hard constraints, and decisions across context compaction and across sessions on the same workspace. The todo list tracks what to do next; the focus board tracks why we are doing it and what must not drift.

Features

FeatureStatus
focus tool — set / get / append / clear✅ stable
Prompt guidance section (focus:instructions)✅ stable
Automatic injection — board is re-injected into model context at every turn start and whenever it changes✅ stable
Archive on clearclear moves the old board to .dsh/focus.md.bak (accumulates)✅ stable
focusBoard session projection for UIs✅ stable
Read-only web panel (composer dock)🧪 experimental (loader-format client bundle, not verified against a running web instance)

How it works

  • The board is a plain, append-friendly text file. Entries are timestamped and ordered; get renders newest-first with a configurable character cap (the file is never trimmed by rendering).
  • The plugin is a single Cordis plugin: the host face (lib/index.js) registers the tool, the projection, and the auto-injection; the browser face (lib/client.js) renders the panel. The same composition row covers both faces via the package's dsh.bundle + dsh.client manifest sections.
  • All file access goes through the host ctx.fs service, and every resolved path is containment-checked against the agent's session workspace — the board can never escape it.
  • Auto-injection mirrors the in-box dsh-time-context mechanism: an agent/pre-step waterfall listener appends a plugin snapshot message carrying the board text (step 1 of every turn, plus mid-turn whenever the text changes). Resumed sessions get the board back on their first step.

Install

The package declares "dsh": { "bundle": { "patch": "./cordis.patch.yml" } }, so it goes through DSH's official plugin management:

# from a local checkout (equivalent to pnpm add <path> + auto-reconcile of the bundles list)
dsh plugin --profile <profile> add /path/to/dsh-plugin-focus

# or after publishing to npm
dsh plugin --profile <profile> add dsh-plugin-focus

Restart DSH. The focus tool is registered host-wide; the read-only panel appears in the web UI on a web profile.

Alternative: mount on one agent preset only

  1. Copy a built-in preset to $DSH_HOME/.agent-presets/<id>/ (never edit the deployment's own preset — an upgrade overwrites it).
  2. Append to agent.cordis.yml:
- id: focus
  name: 'dsh-plugin-focus'
  config:
    file: '.dsh/focus.md'
  1. Make sure dsh-plugin-focus resolves (installed in the profile's node_modules or the module fallback directory).

Usage (model side)

actionargsbehavior
setnote (required)append an entry pinning the current focus / constraints
appendnote (required)append a log entry (decision, discovery, reversal)
getread the whole board (newest first, capped, omitted-count footer)
clearempty the board; the old board is archived to the archive file

Related plugins