A Session row's "..." menu and its hover buttons become two list slots the WorkspaceBrowser entry declares, `sidebar.workspaces.session.menu.item` and `sidebar.workspaces.session.row.action`. The shipped actions register from apply the way a client plugin does: pin (menu 100, button 200), rename (200), fork (300), archive (menu 400, button 100). An entry receives only the row identity, reads the pin and archive sets through Set hooks its own face injects, decides its own visibility, renders `MenuItemButton` or one icon button, and dismisses the menu through the slot-level `useMenuOpenState` hook bound from the row's render occurrence. Each action's behavior lives in its injected callbacks. `UiWorkspace` gains `pinSession` and `unpinSession`; the pin write into the saved orders happens there, through the viewing-store instance the apply creates and hands the browser's registration as its handle (the ui-layout pattern), reading the memberships current at completion. The rename dialog and the row-action notice are `shell.overlay` entries fed by apply-closure observables through the faces' `hooks`; the archived notice switches the archived filter directly. WorkspaceBrowser threads no action callbacks, renders no toast, and hosts no rename dialog; its title double-click raises the same rename request. In ui-primitives, `MenuItemButton` is the plain `role="menuitem"` row for menus whose rows are components: it shares a data row's markup and styling and needs no shared state, because `Menu` decides the keyboard walk from the DOM and now runs the post-selection focus return once on the list's click bubble for every row kind. `Menu` accepts such rows as `children` beside `items`, which becomes optional together with `onSelect`; `separatorBefore` lets a row start a group with the same hairline a separator entry draws. The context-based `MenuAction` goes away with its extension group.
DeepSeek Harness
English | 中文
DeepSeek Harness (dsh) is an open-source agent harness developed by DeepSeek AI.
It is built on an everything-is-a-plugin architecture and powered by Cordis, whose design is described in A Programming Paradigm for Spatiotemporal Composability.
Documentation: https://deepseek-harness.github.io/deepseek-harness/
Developer preview
DeepSeek Harness is in developer preview and iterating rapidly. THERE WILL BE COMPATIBILITY-BREAKING CHANGES.
Review the safety notice before running the project.
Run
Run from npm
Install Node.js, then run:
npx @deepseek-ai/dsh web
The command starts the Web UI at http://127.0.0.1:3080 by default and opens it in the default browser for a local launch. An SSH launch only prints the host URL because the SSH client or editor owns the local forwarded address. Pass --no-open to run the server without opening a browser. 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
pnpm run build prepares the repository artifacts. pnpm dsh web uses those built artifacts without rebuilding.
Community and support
- 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.
Citation
@misc{deepseek-harness2026,
title={DeepSeek Harness: Everything is a Plugin},
author={DeepSeek-AI},
year={2026},
publisher={GitHub},
howpublished={\url{https://github.com/deepseek-ai/deepseek-harness}},
}
License
Third-party dependencies and their licenses are disclosed in THIRD_PARTY_NOTICES.md.