<div align="center">
📁 dsh-projects
A Project Center for DeepSeek Harness Web — inspired by Cowork & WorkBuddy.
   
<br>
<table> <tr><td align="left">
📂 Need a persistent Projects concept in DSH Web — beyond plain sessions?<br> 🧭 Need each project bound to a real folder with its own instructions and files?<br> 🔄 Need project memory synced to the folder's CLAUDE.md so every AI tool sees it?
</td></tr> </table>
✨ dsh-projects brings Cowork/WorkBuddy-style project management into DSH Web.
A sidebar 📁 Projects entry opens a full-screen project center: card grid, create dialog (name + instructions + folder), and a detail view with editable instructions, folder & file browsing, manual file pins, and two-way CLAUDE.md memory sync.
<br>
[Features](#features) · [Install](#install) · [Quick start](#quick-start) · [CLAUDE.md sync](#claudemd-sync) · [Data](#data) · [Development](#development)
English · 简体中文
</div>
---
Features
- Sidebar entry — a
📁 项目row injected below the Automations entry (falls back next to the task-board/SSH/skill-explorer family when dsh-automation is not installed). - Project grid — searchable card grid (name, description, updated date, folder badge).
- Create project — name + instructions (the "prompt" telling AI how to work in this project) + link an existing folder or plan a new one.
- Project detail —
- editable instructions; - related files: live listing of the linked folder + manually pinned files (pick via an in-app file browser — no typing paths); - folder is editable (re-browse after change); - scheduled tasks / memory placeholders for future automation & mneme integration.
- CLAUDE.md two-way sync —
- export: save instructions and (optionally) write them into the folder's CLAUDE.md inside a <!-- dsh-projects:{id} --> fenced section — any AI tool (Claude Code, Cowork, WorkBuddy…) working in that folder reads the project context; - import: load the folder's CLAUDE.md back into the instructions (project section preferred, whole file fallback).
- Persistent & portable — data lives in
~/.dsh/dsh-projects/projects.json(plain JSON, git-friendly). No user path is hard-coded.
Install
The plugin is a standard DSH web plugin bundle. Two ways:
Via GitHub (recommended)
dsh plugin --profile web add github:alwaysmid-19990/dsh-projectsManual (local copy)
mkdir -p ~/.dsh/plugins
git clone https://github.com/alwaysmid-19990/dsh-projects.git ~/.dsh/plugins/dsh-projects
# register into the web profile:
# add "dsh-projects": "link:/Users/<you>/.dsh/plugins/dsh-projects" to
# ~/.dsh/profiles/web/package.json dependencies, and append "dsh-projects"
# to its dsh.profile.bundles list, then:
# ln -s ~/.dsh/plugins/dsh-projects ~/.dsh/profiles/web/node_modules/dsh-projectsThen restart DSH Web. The sidebar shows the 📁 项目 entry.
> The plugin self-registers through its bundled cordis.patch.yml; no extra > configuration is required.
Quick start
1. Click 📁 项目 in the sidebar (bottom of the nav group). 2. Click + 新项目. 3. Enter a name and instructions, then link an existing folder (e.g. your real working directory). 4. Open the project card → edit instructions, browse folder files, pin key files via 📂 选择文件…. 5. Optionally tick sync to CLAUDE.md when saving, or press 📥 载入为项目说明 to pull the folder's existing CLAUDE.md into the instructions.
CLAUDE.md sync
The sync is opt-in per save (checkbox off by default — editing instructions never touches the folder unless you ask). When enabled, the host writes a fenced section into <folder>/CLAUDE.md:
<!-- dsh-projects:p-xxxxxxxx -->
## 项目:My project
Instructions text…
<!-- /dsh-projects:p-xxxxxxxx -->- Existing section → replaced in place.
- No section → appended at the end.
- No
CLAUDE.md→ created.
Data
| What | Where |
|---|---|
| Project records | ~/.dsh/dsh-projects/projects.json |
| REST API | /api/dsh-projects/* (host half, webServer) |
| Folder listing | read-only readdirSync via /api/dsh-projects/browse |
Development
node --check lib/index.js # host half
node --check lib/client.js # browser half (ModuleLoader format)Layout:
lib/index.js— host half: REST endpoints, JSON persistence, CLAUDE.md sync.lib/client.js— browser half: sidebar entry (self-healing DOM injection),
project center UI (React without JSX), in-app file picker.
cordis.patch.yml— bundle patch that mounts the plugin row.
License
[MIT](LICENSE)