给不会编程的人用的工作任务管理看板 + 共同成长的智能助手;带鲸鱼娘浮窗,秘书/CEO/史官陪你把事做完。
31.2/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Flamencoff/dsh-xiaozhushou该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · desktop
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 3 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 120 处,展示前 95 条)
- 读取本地文件index.js:269
const lines = readFileSync(file, 'utf8').split(/ ? /).filter((line) => line.startsWith('- ')) - 读取本地文件index.js:647
const buffer = readFileSync(fileURLToPath(new URL('./assets/pet/pet.png', import.meta.url))) - 读取本地文件index.js:663
const buffer = readFileSync(fileURLToPath(new URL('./assets/pet/tail.png', import.meta.url))) - 写入本地文件index.js:832
mkdirSync(wanted, { recursive: true }) - 写入本地文件index.js:833
writeFileSync(join(wanted, '.write-test'), 'ok', 'utf8') - 删除本地文件index.js:834
rmSync(join(wanted, '.write-test'), { force: true }) - 读取本地文件index.js:1213
const months = readdirSync(root).sort().slice(-2) - 读取本地文件index.js:1215
for (const file of readdirSync(join(root, month)).sort().slice(-7)) { - 读取本地文件index.js:1216
text += readFileSync(join(root, month, file), 'utf8') + '\n' - 发起网络请求client.js:358
const res = await fetch(path, { headers: { accept: 'application/json' } }) - 发起网络请求client.js:451
const res = await fetch(API + '/task/status', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify(payload) }) - 发起网络请求client.js:468
const res = await fetch(API + '/task/status', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ id, action }) - 发起网络请求client.js:488
const res = await fetch(API + '/role/history?role=' + role) - 发起网络请求client.js:570
const res = await fetch(API + '/command', { - 发起网络请求client.js:596
await fetch(API + '/refresh', { method: 'POST', headers: { 'content-type': 'application/json' }, body: '{}' }) - 读取本地文件core/paths.js:32
if (!file || !existsSync(file)) return '' - 读取本地文件core/paths.js:33
const text = readFileSync(file, 'utf8').trim() - 读取本地文件core/paths.js:34
if (!text || !existsSync(text)) return '' - 写入本地文件core/paths.js:59
mkdirSync(dirname(file), { recursive: true }) - 写入本地文件core/paths.js:60
writeFileSync(file, String(target), 'utf8') - 写入本地文件core/paths.js:93
mkdirSync(target, { recursive: true }) - 读取本地文件core/audit.js:22
if (!existsSync(file)) return - 读取本地文件core/audit.js:23
if (statSync(file).size < MAX_BYTES) return - 写入本地文件core/audit.js:25
renameSync(file, join(dataDir, `审计-${stamp}.jsonl`)) - 写入本地文件core/audit.js:34
mkdirSync(dataDir, { recursive: true }) - 写入本地文件core/audit.js:38
appendFileSync(file, line, { encoding: 'utf8' }) - 读取本地文件core/store.js:23
const raw = readFileSync(pathOf(name), 'utf8') - 写入本地文件core/store.js:39
try { renameSync(pathOf(name), backup); store.lastError = `数据 ${name} 结构不对,已备份到 ${backup},本次只读` } catch {} - 写入本地文件core/store.js:51
renameSync(pathOf(name), backup) - 写入本地文件core/store.js:71
mkdirSync(dirname(target), { recursive: true }) - 写入本地文件core/store.js:73
writeFileSync(tmp, JSON.stringify({ version: CURRENT_VERSION, ...data }, null, 2), 'utf8') - 写入本地文件core/store.js:74
renameSync(tmp, target) - 写入本地文件core/store.js:87
mkdirSync(dirname(target), { recursive: true }) - 读取本地文件core/store.js:98
return readFileSync(pathOf(name), 'utf8') - 读取本地文件core/store.js:106
return existsSync(pathOf(name)) - 写入本地文件core/historian.js:183
mkdirSync(dirname(file), { recursive: true }) - 读取本地文件core/historian.js:190
const header = existsSync(file) - 写入本地文件core/historian.js:193
appendFileSync(file, header + lines.join('\n') + '\n', 'utf8') - 读取本地文件core/handover.js:40
while (existsSync(candidate) && index < 100) { - 写入本地文件core/handover.js:100
mkdirSync(root, { recursive: true }) - 写入本地文件core/handover.js:109
mkdirSync(attachDir, { recursive: true }) - 写入本地文件core/handover.js:113
writeFileSync(file, item.text, 'utf8') - 写入本地文件core/handover.js:120
writeFileSync(cardPath, card, 'utf8') - 写入本地文件core/handover.js:121
writeFileSync(ledgerPath, built.ledger, 'utf8') - 读取本地文件core/tools.js:388
const text = readFileSync(join(historian.historianRoot, '投喂', name), 'utf8').trim() - 读取本地文件core/tools.js:400
if (!existsSync(file)) return { ok: true, text: '没有 ' + date + ' 的言行录(点「真跑一次」才会写)' } - 读取本地文件core/tools.js:401
const lines = readFileSync(file, 'utf8').split(/ ? /).filter((line) => line.startsWith('- ')) - 读取本地文件core/role-chat.js:100
if (!existsSync(file)) return '' - 读取本地文件core/role-chat.js:101
return readFileSync(file, 'utf8').slice(-max) - 读取本地文件core/role-chat.js:120
if (!existsSync(root)) return '' - 读取本地文件core/role-chat.js:121
const months = readdirSync(root).sort().slice(-1) - 读取本地文件core/role-chat.js:124
for (const file of readdirSync(join(root, month)).sort().slice(-1)) { - 读取本地文件core/role-chat.js:137
if (!historianRoot || !existsSync(historianRoot)) return '' - 写入本地文件core/historian-feed.js:60
mkdirSync(root, { recursive: true }) - 写入本地文件core/historian-feed.js:61
writeFileSync(file, buildHistorianFeed(task, { now }), 'utf8') - 写入本地文件core/memory.js:65
mkdirSync(root, { recursive: true }) - 读取本地文件core/memory.js:71
if (existsSync(target)) continue - 写入本地文件core/memory.js:73
writeFileSync(target, skeleton(file), 'utf8') - 写入本地文件core/memory.js:273
writeFileSync(tmp, merged, 'utf8') - 写入本地文件core/memory.js:274
renameSync(tmp, target) - 读取本地文件core/memory.js:316
if (!existsSync(target)) return '' - 读取本地文件core/memory.js:317
return readFileSync(target, 'utf8') - 读取本地文件core/memory.js:331
files = readdirSync(folder).filter((name) => /^\d{4}-\d{2}-\d{2}\.md$/.test(name)).sort() - 读取本地文件core/memory.js:340
text = readFileSync(join(folder, file), 'utf8') - 读取本地文件core/memory.js:361
months = readdirSync(historianRecordRoot).filter((name) => /^\d{4}-\d{2}$/.test(name)).sort().slice(-2) - 写入本地文件core/notify.js:41
mkdirSync(root, { recursive: true }) - 写入本地文件core/notify.js:42
appendFileSync(join(root, JSONL), JSON.stringify(record) + '\n', 'utf8') - 读取本地文件core/notify.js:54
lines = readFileSync(file, 'utf8').trim().split('\n').filter(Boolean) - 写入本地文件core/notify.js:73
writeFileSync(join(dir, MD), content, 'utf8') - 读取本地文件core/notify.js:81
const lines = readFileSync(join(root, JSONL), 'utf8').trim().split('\n').filter(Boolean) - 读取本地文件core/find.js:65
entries = readdirSync(current.dir, { withFileTypes: true }) - 读取本地文件core/find.js:89
if (statSync(full).size > MAX_FILE_BYTES) continue - 读取本地文件core/find.js:90
const text = readFileSync(full, 'utf8') - 写入本地文件core/repair.js:87
mkdirSync(dataDir, { recursive: true }) - 写入本地文件core/repair.js:89
writeFileSync(tmp, content, 'utf8') - 写入本地文件core/repair.js:90
renameSync(tmp, target) - 读取本地文件core/task-flow.js:16
if (!existsSync(file)) return file - 读取本地文件core/task-flow.js:22
if (!existsSync(next)) return next - 写入本地文件core/task-flow.js:83
mkdirSync(dirs.handoff, { recursive: true }) - 写入本地文件core/task-flow.js:85
writeFileSync(file, text, 'utf8') - 写入本地文件core/task-flow.js:116
mkdirSync(dirs.result, { recursive: true }) - 写入本地文件core/task-flow.js:118
writeFileSync(file, text, 'utf8') - 写入本地文件core/task-flow.js:151
mkdirSync(folder, { recursive: true }) - 写入本地文件core/task-flow.js:153
writeFileSync(file, text, 'utf8') - 读取本地文件core/historian-schedule.js:70
if (!existsSync(file)) return fallback - 读取本地文件core/historian-schedule.js:71
return JSON.parse(readFileSync(file, 'utf8')) - 写入本地文件core/historian-schedule.js:79
mkdirSync(dirname(file), { recursive: true }) - 写入本地文件core/historian-schedule.js:80
writeFileSync(file, JSON.stringify(value, null, 2) + '\n', 'utf8') - 读取本地文件core/historian-schedule.js:94
for (const month of readdirSync(historyRoot).filter((name) => /^\d{4}-\d{2}$/.test(name)).sort()) { - 读取本地文件core/historian-schedule.js:95
for (const name of readdirSync(join(historyRoot, month)).filter((n) => /^\d{4}-\d{2}-\d{2}\.md$/.test(n))) { - 读取本地文件core/historian-schedule.js:104
for (const line of readFileSync(file, 'utf8').split(/ ? /)) { - 写入本地文件core/historian-schedule.js:187
mkdirSync(join(root, '周复盘'), { recursive: true }) - 读取本地文件core/historian-schedule.js:189
if (existsSync(file) && !readFileSync(file, 'utf8').includes('(等史官会话补充)')) { - 写入本地文件core/historian-schedule.js:194
writeFileSync(file, reviewDraft({ dataDir, now: at }), 'utf8') - 写入本地文件core/historian-schedule.js:215
writeFileSync(file, current.replace('(等史官会话补充)', () => chatText), 'utf8')
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
dsh小助手:给不会编程的小白用的 DSH 会话管理器 + 共同成长智能助理(秘书/CEO/史官)
README
由 DeepSeek 最新模型翻译生成dsh小助手(dsh-xiaozhushou)
给不会编程的人用的工作任务管理看板 + 共同成长的智能助手。
侧栏一块看板,屏幕边一只鲸鱼娘浮窗;记待办、看最急、盯提醒,不用写代码。
dsh小助手工作看板与三角色对话
截图为演示数据,不含真实任务与对话。
给谁用
这是给不会编程的小白用的:不用写代码、不用配环境,装上之后会说话就能用。
它把待办、优先级、提醒和任务收在一处;屏幕边的鲸鱼娘随时能喊出来,秘书、CEO、史官陪你聊、帮你判断、替你记录。所有数据都留在你自己电脑上。
最短路径(不会编程也能用)
1. 打开 DSH 的插件页,添加插件,输入 dsh-xiaozhushou,安装源选官方源;
2. 装完重启 DSH,点侧栏的 dsh小助手;
3. 在秘书框说一句:记一下:周五前交周报;
4. 看板里出现待办后,点 确认;
5. 之后每天打开看板看优先级,鲸鱼娘会在屏幕边提醒你;需要判断时对 CEO 说话即可。
不需要记命令、不需要改配置;下面的安装方式只是给愿意用命令行的人备用。
亮点:鲸鱼娘不是装饰
她常驻屏幕边,收起时只剩形象;点开是浮窗,直接显示最急的事和待办。可以拖到顺手的位置,右键隐藏或唤回;不想开整页看板时,点一下就能记一条、看今天最该干什么。
展开完整文档(README 剩余 1 节)
dsh小助手(dsh-xiaozhushou) 给不会编程的人用的工作任务管理看板 + 共同成长的智能助手。 侧栏一块看板,屏幕边一只鲸鱼娘浮窗;记待办、看最急、盯提醒,不用写代码。 dsh小助手工作看板与三角色对话 截图为演示数据,不含真实任务与对话。 给谁用 这是给不会编程的小白用的:不用写代码、不用配环境,装上之后会说话就能用。 它把待办、优先级、提醒和任务收在一处;屏幕边的鲸鱼娘随时能喊出来,秘书、CEO、史官陪你聊、帮你判断、替你记录。所有数据都留在你自己电脑上。 最短路径(不会编程也能用) 1. 打开 DSH 的插件页,添加插件,输入 dsh-xiaozhushou,安装源选官方源; 2. 装完重启 DSH,点侧栏的 dsh小助手; 3. 在秘书框说一句:记一下:周五前交周报; 4. 看板里出现待办后,点 确认; 5. 之后每天打开看板看优先级,鲸鱼娘会在屏幕边提醒你;需要判断时对 CEO 说话即可。 不需要记命令、不需要改配置;下面的安装方式只是给愿意用命令行的人备用。 亮点:鲸鱼娘不是装饰 她常驻屏幕边,收起时只剩形象;点开是浮窗,直接显示最急的事和待办。可以拖到顺手的位置,右键隐藏或唤回;不想开整页看板时,点一下就能记一条、看今天最该干什么。 鲸鱼娘表情集 鲸鱼娘形象已经约了专业画师绘制,完整版浮窗 pet 正在制作,完成后上线;现在这版先用现有形象顶着。 路线与状态(作者本人也在摸索) - 现在能用:工作任务看板、鲸鱼娘浮窗、待办台账、优先级、三角色聊天、定点提醒。 - 下一步会持续更新:把记忆系统和伴生秘书做得更合理,让它越用越懂你、跨会话不丢事。 - 本项目还在持续打磨,作者本人也在摸索中;欢迎提 issue 或反馈使用感受。 它是什么 dsh小助手是 DeepSeek Harness 的一个插件(bundle)。装上之后: - 鲸鱼娘浮窗:常驻屏幕边,收起只剩形象;点开看最急的事、记一条待办,拖拽换位置,右键隐藏/唤回; - 侧栏工作任务看板:待办、优先级、任务和三角色对话集中在一页;优先级卡只看紧急/重要,待办卡放全部事项和大概用时; - 三个角色:秘书简单陪聊、记待办;CEO 判断、拆解、派活与执行;史官只做结构化记录,给长期记忆供数据; - 秘书代问 CEO:只有你明确要“回复/结果/告诉我”时,秘书才追踪 CEO 回复并简短回传;等待状态只存内部文件,不占看板或浮窗空间; - 长期记忆(简化版):记忆/ 下四个 Markdown 由史官按周重写,秘书/CEO 只带一段摘要进对话; - 所有数据都在本地:台账、任务、审计、记忆都是普通 JSON / Markdown,可直接看、可备份。 安装(不会编程也能装) 插件零 npm 依赖;安装 npm 包需要联网;装完重启 DSH(或刷新页面)。 方式 A:一句话让 DSH 助手装(推荐,免命令行) 把下面这句发给 DSH 助手: 帮我安装 dsh-xiaozhushou 插件,npm 包名:dsh-xiaozhushou 成功标志:返回 application: applied;装完按提示重启 DSH。 方式 B:CLI(npm,推荐) 桌面版: dsh plugin --profile desktop add dsh-xiaozhushou Web 版: dsh plugin --profile web add dsh-xiaozhushou 方式 C:CLI(GitHub 源码安装,网络能访问 GitHub 时) dsh plugin --profile web add github:Flamencoff/dsh-xiaozhushou 方式 D:本地文件夹 / tgz(离线、调试用) 在 DSH 里让 Agent 执行: plugin_manager · action=install_bundle target = <本仓库绝对路径或 tgz 路径> --profile 后面换成你自己的 profile 名(web / desktop / …)。 卸载:dsh plugin --profile web remove dsh-xiaozhushou(桌面版把 web 换成 desktop)。卸载不删数据。 日常操作(会打字就行) 1. 点侧栏 dsh小助手 → 打开看板; 2. 在秘书框里说「记一下:周五前交周报」→ 待办里出现一条候选; 3. 点待办上的 确认,或对秘书说「确认这条」→ 开始参与提醒与优先级; 4. 想判断先干哪件,点「问 CEO」或对 CEO 说「这周先干哪件」; 5. 要开新任务会话,明确说「开个任务会话:整理三季度材料」→ 新会话标题是 CEO · 整理三季度材料,模糊指令不会自动新建; 6. 右键屏幕边的鲸鱼娘 → 刷新 / 唤出 / 隐藏。 数据与隐私 - 数据目录默认 ~/.dsh-session-steward/data(Windows 为 C:\Users\<你>\.dsh-session-steward\data),可用配置 dataDir 改到别处; - 史官默认开启,且默认读全部会话正文(enabled.historian: true + historian.scope.mode: all);只想读测试内容就按下面「开发 / 测试模式」切回 sandbox; - 插件不联网、无遥测;只有你主动在聊天框说话时,内容才会交给 DSH 宿主的模型服务; - 插件没有删除文件的能力;写操作只发生在数据目录(以及其上一级的 史官/言行录、CEO/交接卡); - 长期记忆在数据目录的 记忆/ 下(四份 Markdown + 状态.json),可直接打开看、也可手工改;手写内容放在 … 自动区外,周更不会覆盖; - 找文件默认只按文件名、只在白名单目录里找,默认不搜内容。 完整说明见 docs/PRIVACY.md。 配置 改 cordis.patch.yml(或你 profile 的 patch)里的 config: | 键 | 默认 | 说明 | | enabled.secretary / enabled.ceo / enabled.historian | true / true / true | 三个角色开关;0.47.0 发布默认全开(史官可关) | | historian.scope.mode | all | 发布默认读全部会话;sandbox 只读 [实验] 前缀 + 三个角色会话(开发测试用) | | historian.scope.prefixes | ['[实验]'] | sandbox 模式的会话标题前缀 | | historian.schedule.enabled | true | 每天记录 + 周五复盘的总开关 | | historian.schedule.dailyAt | '21:45' | 每天静默记录时间(插件零 token) | | historian.schedule.weeklyAt | '21:45' | 每周复盘时间(唤一次史官会话) | | historian.schedule.weeklyWeekday | 5 | 复盘星期几:0=周日 … 5=周五 | | alarm.fixedTimes | ['09:00','13:00','18:00'] | 每天定点提醒时间(HH:mm);旧版口径可设 ['08:05','12:05','18:05'] | | alarm.policy | confirmed | 确认制提醒:过期只在早、今天早/晚、明天只在晚;classic 恢复旧的“到点全列” | | alarm.quietHours | 23:00–07:00 | 静默时段(照常算,不弹) | | dataDir | 用户目录默认 | 数据目录;写了就优先用它 | | pet.enabled | true | 鲸鱼娘浮窗 | | find.allowedRoots | [](数据目录上一级) | 允许被「找文件」搜索的根目录 | | find.content | false | 是否允许按内容搜索(隐私默认关) | 开发 / 测试模式(史官只读测试会话) 本地开发、演示或涉密环境,不想让史官读真实会话,把 patch 里的 historian.scope 改回 sandbox: enabled: historian: true # 也可以 false,直接关掉史官 historian: scope: mode: sandbox prefixes: - '[实验]' sandbox 下只读两类会话:标题以 [实验] 开头的测试会话,以及三个角色自己的会话(dsh小助手 · 秘书 / CEO / 史官 对话)。 真实工作会话会被跳过并在结果里计数(filteredByScope);想恢复读全部就把 mode 改回 all。 接口与网络边界(27 条本地回环路由) - 插件向 DSH 本机 Web 服务注册 27 条 HTTP 路由,全部挂在 /api/dsh-xiaozhushou/* 下,地址形如 http://127.0.0.1:<端口>/api/dsh-xiaozhushou/health; - 它们是回环接口:只随 DSH 自己的 Web 服务监听 127.0.0.1(localhost),插件不另开端口、不监听 0.0.0.0、不对外提供网关/代理; - 端口每次启动会变,脚本调用先探 /health;写接口只接受 POST,并拦截跨源提交(Origin 与 Host 不一致直接 403); - 也就是说:别人在另一台机器上连不到这些接口;它们只服务本机页面上的看板/浮窗。 兼容性 - DSH:适配 0.2.1-rc.3 ~ 0.2.1-rc.5(engines.dsh = ">=0.2.1-rc.3 <0.3.0";0.3 以上未验证); - Node:≥ 20; - 平台:Windows 10 / 11 已适配;Linux、macOS、鸿蒙(HarmonyOS)没有做适配,未验证; - 依赖:零 npm 依赖;客户端只使用 DSH 宿主提供的 react。 自测与自检 node test/harness.mjs # 211 项自测 node scripts/check-release.mjs # 发布自检(版本/包体/个人痕迹/文档) node scripts/check-imports.mjs # 模块依赖体检(无循环、无外部依赖) 已知限制 1. 角色聊天必须先绑定真实会话:首次启动会自动建好三个角色会话(已有则复用);若被删,重启 DSH 会重新建;仍不可用时看 /health 与数据目录 维修站.md; 2. 长期记忆是简化版:四份 Markdown 由规则生成(台账/任务板统计 + 角色对话与言行录摘句),不做语义检索;周更只重写 … 自动区,你在自动区外手写的内容会保留;周更由「跑一次史官」触发; 3. 端口每次启动会变,写脚本调用时先探测 /health; 4. 没有独立的设置页 UI,配置改 cordis.patch.yml; 5. 「开新会话执行」与按钮开新会话共用限频(每小时最多 4 个);权限审批由 DSH 宿主在新会话里弹窗,插件不代点; 6. 仅中文界面文案(英文 locale 只有标题与描述)。 回退与卸载 - 卸载:用插件管理器的 remove_bundle,或执行 dsh plugin --profile web remove dsh-xiaozhushou(桌面版把 web 换成 desktop);卸载不删数据。 - 回退:装回上一个 tag 的版本即可(v0.47.3 / v0.47.2 / v0.47.1 / v0.47.0 / v0.46.0 都有发布包);数据在 ~/.dsh-session-steward/data,换版本不会丢。 - 彻底清掉:先备份数据目录,再删 %USERPROFILE%\.dsh-session-steward\(指针与数据);插件本体由配置档卸载。 - 出问题先看:GET /api/dsh-xiaozhushou/health(ok/version/degraded),以及数据目录下的 维修站.md(插件自检生成的诊断)。 仓库结构 | 路径 | 作用 | | index.js | 宿主半入口:27 条 HTTP 路由 + 角色/工具/定时器注册 | | client.js | 客户端半:侧栏图标 + 整页看板 + 浮窗 | | core/ | 39 个纯逻辑模块(台账、提醒、史官、长期记忆、任务板、CEO 执行、模型调用等) | | roles/ | 三个角色 preset 与身份提示词 | | locale/ | 中英文文案 | | test/harness.mjs | 零依赖自测台(211 项) | | scripts/ | 发布自检、依赖体检、市场索引生成 | | docs/ | 架构、发布流程、隐私说明、截图 | 架构与「模块如何解耦、分支怎么开」见 docs/ARCHITECTURE.md; Git 协作规范见 CONTRIBUTING.md。 许可 代码 MIT(见 LICENSE)。鲸鱼娘等素材来源见 THIRD_PARTY_NOTICES.md。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Flamencoff/dsh-xiaozhushou
给不会编程的人用的工作任务管理看板 + 共同成长的智能助手;带鲸鱼娘浮窗,秘书/CEO/史官陪你把事做完。
相关插件 · 桌面端
Codex 任务面板chuspeeism/dashi-taskboard
现代化可灵活嵌入的任务面板,支持 Codex、DeepSeek Harness
★ 3,409已汉化DSH
71.7
多智能体自进化开发平台Prism-Shadow/penguin-harness
统一、稳定的 Agent 自进化框架全自动优化:任意模型 · 任意算法 · 任意 Benchmark
★ 3,111已汉化DSH
71.1
桌面宠物PC2005-cloud/dsh-pet
DSH 桌面宠物:一行命令装好即用的透明动画小桌宠,支持多开、大小位置随心配置;还内置 DIY 素材链,能用 AI…
★ 5,341已汉化DSH
71
多端 Agent 工作台GCWing/OpenBitFun
OpenBitFun 是一个高度可定制的开源 Agent 工作台,让任务按你的方式持续推进。
★ 3,449已汉化DSH
70.8
DSH Desktopanywhere-labs/dsh-desktop
为 DeepSeek Harness DSH 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。
★ 34,532已汉化DSH
70.7
桌面宠物伴侣OpenPetsHQ/openpets
桌面伴侣平台,带宠物、插件,还能选配本地智能体集成。
★ 1,353已汉化DSH
70.2