🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

持久自治 ttmouse/dsh-muse

DeepSeek Harness
ttmouse29 天前有提交已提供中文文档扫描:含敏感能力

授权一次即可跨重启持续推进,只在必要时主动开口

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/5 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add ttmouse/dsh-muse
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · chat
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 29 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件
查看扫描证据(共 53 处,展示前 47 条)
  • 读取本地文件
    artifacts/ideas/build.mjs:7
    try { ideas = JSON.parse(readFileSync(src, 'utf8')).ideas ?? [] } catch { ideas = [] }
  • 写入本地文件
    artifacts/ideas/build.mjs:18
    writeFileSync(new URL('./ideas.html', import.meta.url), html)
  • 读取本地文件
    muse/src/intent-store.ts:47
    if (!existsSync(file)) return latestAutonomy(events)
  • 读取本地文件
    muse/src/intent-store.ts:48
    const value = JSON.parse(readFileSync(file, 'utf8')) as Intent
  • 写入本地文件
    muse/src/mailbox.ts:10
    mkdirSync(dirname(path), { recursive: true, mode: 0o700 })
  • 写入本地文件
    muse/src/mailbox.ts:13
    try { writeFileSync(descriptor, JSON.stringify(value, null, 2) + '\n'); fsyncSync(descriptor) }
  • 写入本地文件
    muse/src/mailbox.ts:15
    renameSync(temporary, path)
  • 读取本地文件
    muse/src/mailbox.ts:38
    if (existsSync(path)) return { id, queued: false }
  • 写入本地文件
    muse/src/mailbox.ts:40
    mkdirSync(dirname(path), { recursive: true, mode: 0o700 })
  • 删除本地文件
    muse/src/mailbox.ts:46
    finally { unlinkSync(prepared) }
  • 读取本地文件
    muse/src/mailbox.ts:53
    const value = JSON.parse(readFileSync(path, 'utf8')) as MuseNotice
  • 读取本地文件
    muse/src/routines.ts:85
    if (!existsSync(path)) return { version: 1, sessionId, options, routines: [] }
  • 读取本地文件
    muse/src/routines.ts:86
    const file = JSON.parse(readFileSync(path, 'utf8')) as RoutineFile
  • 读取本地文件
    muse/src/routines.ts:181
    if (!existsSync(this.root)) return
  • 写入本地文件
    muse/src/routines.ts:182
    appendFileSync(join(this.root, 'activity.log'), `${new Date().toISOString()} ${line}\n`, { mode: 0o600 })
  • 读取本地文件
    muse/src/routines.ts:203
    for (const name of existsSync(directory) ? readdirSync(directory).filter(n => n.endsWith('.json')) : []) {
  • 读取本地文件
    muse/src/routines.ts:203
    for (const name of existsSync(directory) ? readdirSync(directory).filter(n => n.endsWith('.json')) : []) {
  • 读取本地文件
    muse/src/routines.ts:205
    const seed = JSON.parse(readFileSync(join(directory, name), 'utf8')) as RoutineFile
  • 写入本地文件
    muse/src/routines.ts:256
    renameSync(path, `${path}.invalid`)
  • 写入本地文件
    muse/src/routines.ts:264
    renameSync(path, `${path}.expired`)
  • 读取本地文件
    tool-memory/src/index.ts:38
    const d = JSON.parse(readFileSync(identityFilePath(), 'utf8'))
  • 读取本地文件
    tool-memory/src/index.ts:78
    if (!existsSync(path)) return ''
  • 读取本地文件
    tool-memory/src/index.ts:79
    const raw = readFileSync(path, 'utf8')
  • 读取本地文件
    tool-memory/src/index.ts:87
    if (!existsSync(path)) return 0
  • 读取本地文件
    tool-memory/src/index.ts:89
    const lines = readFileSync(path, 'utf8').split('\n')
  • 写入本地文件
    tool-memory/src/index.ts:96
    mkdirSync(dirname(archivePath), { recursive: true })
  • 读取本地文件
    tool-memory/src/index.ts:97
    const prev = existsSync(archivePath) ? readFileSync(archivePath, 'utf8') : '# Archive\n\n'
  • 写入本地文件
    tool-memory/src/index.ts:98
    writeFileSync(archivePath, prev + moved.join('\n').replace(/ ?$/, '\n') + '\n', { mode: 0o600 })
  • 写入本地文件
    tool-memory/src/index.ts:99
    writeFileSync(path, kept.join('\n'), { mode: 0o600 })
  • 执行外部命令固定命令
    tool-memory/src/storage.ts:10
    try { return execFileSync('git', ['rev-parse', '--show-toplevel'], { cwd, stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim() }
  • 写入本地文件
    tool-memory/src/storage.ts:21
    mkdirSync(dirname(path), { recursive: true })
  • 读取本地文件
    tool-memory/src/storage.ts:27
    const prior = readFileSync(lock, 'utf8')
  • 读取本地文件
    tool-memory/src/storage.ts:33
    if (readFileSync(lock, 'utf8') !== prior) throw error
  • 删除本地文件
    tool-memory/src/storage.ts:34
    unlinkSync(lock)
  • 写入本地文件
    tool-memory/src/storage.ts:38
    writeFileSync(descriptor, String(process.pid))
  • 删除本地文件
    tool-memory/src/storage.ts:40
    finally { closeSync(descriptor); unlinkSync(lock) }
  • 写入本地文件
    tool-memory/src/storage.ts:44
    mkdirSync(dirname(path), { recursive: true })
  • 写入本地文件
    tool-memory/src/storage.ts:46
    writeFileSync(temporary, text, { mode: 0o600, flag: 'wx' })
  • 写入本地文件
    tool-memory/src/storage.ts:47
    renameSync(temporary, path)
  • 写入本地文件
    tool-memory/src/storage.ts:54
    if (!existsSync(path)) writeFileSync(path, MEMORY_HEADER, { mode: 0o600, flag: 'wx' })
  • 读取本地文件
    tool-memory/src/storage.ts:54
    if (!existsSync(path)) writeFileSync(path, MEMORY_HEADER, { mode: 0o600, flag: 'wx' })
  • 读取本地文件
    tool-memory/src/storage.ts:55
    const text = readFileSync(path, 'utf8')
  • 读取本地文件
    tool-memory/src/storage.ts:65
    if (!existsSync(path)) return { archived: 0, kept: 0 }
  • 读取本地文件
    tool-memory/src/storage.ts:71
    for (const line of readFileSync(path, 'utf8').split('\n')) {
  • 执行外部命令来自配置/变量
    wechat-deep-triage.mjs:27
    JSON.parse(execFileSync(READER, [sub, ...scriptArgs, '--pretty'], { timeout: 60000, encoding: 'utf8' }))
  • 读取本地文件
    wechat-deep-triage.mjs:33
    keyPeople = JSON.parse(readFileSync(kpPath, 'utf8')).people ?? []
  • 写入本地文件
    wechat-deep-triage.mjs:114
    appendFileSync(join(projectDir, 'demo-journal.md'),
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 跨重启持续运行
  • 授权一次长期有效
  • 静默主动心跳

为 DSH 带来 Muse 式持久化:重启后依然自主运行,外加静默主动心跳

README

由 DeepSeek 最新模型翻译生成
dsh-muse(中文说明) 给 DSH 的 agent 加上 Muse 式的持续性:授权一次,跨重启持续推进;外加「只在该说话时才说话」的静默心跳。 这是什么 三个 DSH 插件 + 一组体验配方,复刻 Meta Muse 的产品内核:一个常驻长对话,agent 替你盯事、持续推进、值得说时才开口。 | 组成 | 职责 | | muse/ — @deepseek-ai/dsh-muse | 把自治授权持久化并绑定原始人类消息;keeper 在会话恢复时重新武装已 disarm 的 active 目标,长期目标因此能跨进程重启延续 | | tool-muse/ — @deepseek-ai/dsh-tool-muse | muse_autonomy 模型工具:只有人类的直接请求能授予/撤销自治;自动续跑与子代理一律拒绝 | | tool-memory/ — @deepseek-ai/dsh-tool-memory | memory_save 工具 + 每 turn 记忆注入,存储为人类可编辑的纯文本(~/.dsh/memories/main.md)——「越用越懂你」的那一块 | | docs/ | 机制分析、主动触发设计、安装踩坑、发布清单 | 安全边界继承自 dsh-goal:activation 永不自动继承。
展开完整文档(README 剩余 1 节)
dsh-muse(中文说明)

给 DSH 的 agent 加上 Muse 式的持续性:授权一次,跨重启持续推进;外加「只在该说话时才说话」的静默心跳。

这是什么

三个 DSH 插件 + 一组体验配方,复刻 Meta Muse 的产品内核:一个常驻长对话,agent 替你盯事、持续推进、值得说时才开口。

| 组成 | 职责 |
| muse/ — @deepseek-ai/dsh-muse | 把自治授权持久化并绑定原始人类消息;keeper 在会话恢复时重新武装已 disarm 的 active 目标,长期目标因此能跨进程重启延续 |
| tool-muse/ — @deepseek-ai/dsh-tool-muse | muse_autonomy 模型工具:只有人类的直接请求能授予/撤销自治;自动续跑与子代理一律拒绝 |
| tool-memory/ — @deepseek-ai/dsh-tool-memory | memory_save 工具 + 每 turn 记忆注入,存储为人类可编辑的纯文本(~/.dsh/memories/main.md)——「越用越懂你」的那一块 |
| docs/ | 机制分析、主动触发设计、安装踩坑、发布清单 |

安全边界继承自 dsh-goal:activation 永不自动继承。手动 disarm 永远优先;paused/blocked 目标不会被擅自恢复。

安装

要求 DSH 运行时的插件树包含 goal 家族(dsh-goal、dsh-goal-round-driver)。

在 profile 目录(如 ~/.dsh/profiles/web)
dsh plugin --profile web add <已发布的包名或 git 地址> # 两个包都装

然后把两个 bundle 加进 profile 的 dsh.profile.bundles(排在 goal 家族之后)。包自带 dsh.bundle.patch 元数据,插件面板会识别为 profile 层插件。若运行时版本与 peer 范围不匹配,按 docs/install-notes.md 在对应 profile 授予兼容性豁免。

体验三步

1. 持续推进:新会话里说「建一个长期目标:<任务>。我要离开了,授予自主推进,不用再问我,做到完为止。」→ 看 create_goal → muse_autonomy{true} → 自主轮次连续推进。
2. 重启不丢:停掉运行时 → 重启 → 回到该会话说「继续」→ keeper 凭持久授权自动恢复,不要求重新授权。
3. 静默心跳:按 docs/heartbeat-recipes.md 配置「检查但未必说」的心跳;或用 examples/gate/ 的对话外闸门做到「没事零痕迹、有事才注入」。

文档

- 持续演进框架 — 长期方向、每轮合同、一手资料、场景验收和证据账本。先运行 pnpm evolution:status 找下一步,pnpm evolution:check 检查闭环。
- docs/goals.md — Muse ↔ DSH 机制对照(含证据)
- docs/experience-guide.md — 三种体感的体验指南
- docs/proactivity-design.md — 主动触发设计(事件驱动 + 唤醒/打扰分离)
- docs/FAQ.md — 常见报错与修复
- docs/capability-checklist.md — 历史能力盘点;当前优先级和证据以演进账本为准
- examples/habits/ — 跨项目习惯挖掘器(主动想法的输入)
- docs/gaps.md — 已实现 vs Muse 尚缺(事件 ingress、记忆 seam、外部通知)

状态

定时推进闭环已通过包测试和 CLI 集成测试,包含真实 AgentLoop + JSONL 冷恢复。当前重点是同一会话内有预算的持续推进、等待/完成状态和静默反思;外部事件和其他会话暂缓。具体行为、验证与限制见 docs/timer-first.md。

许可

MIT

Timer-first progress loop / 定时推进闭环 — same-session routines, waiting/completion state, native cold wake, non-human mailbox delivery and proposal-only reflection.
预览分享卡片长什么样 ↓ttmouse/dsh-muse
分享 · DeepSeek Harness Hub
ttmouse/dsh-muse

授权一次即可跨重启持续推进,只在必要时主动开口

这是你的仓库?认领条目

回到顶部