安装 xtz 命令,一键启动并管理插件与模型
30.7/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add kedoupi/xiaotaozi-dsh该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · other
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 54 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包xiaotaozi-dsh(未发布到 npm,仅可源码安装)
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/12 15:08:38
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量
查看扫描证据(共 122 处,展示前 116 条)
- 读取本地文件apps/cli/src/app.ts:565
const stats = await lstat(path); - 删除本地文件递归apps/cli/src/app.ts:773
await rm(path, { recursive: true, force: true }); - 写入本地文件apps/cli/src/app.ts:774
await mkdir(dirname(path), { recursive: true }); - 读取本地文件apps/cli/src/app.ts:1948
await access(path); - 读取本地文件apps/cli/src/app.ts:2001
return await readFile(path, "utf8"); - 写入本地文件apps/cli/src/app.ts:2008
ensureDirectory: async (path) => { await mkdir(path, { recursive: true }); }, - 写入本地文件apps/cli/src/app.ts:2010
await mkdir(dirname(path), { recursive: true }); - 写入本地文件apps/cli/src/app.ts:2011
await writeFile(path, text, options?.mode === undefined ? undefined : { mode: options.mode }); - 写入本地文件apps/cli/src/app.ts:2014
await mkdir(dirname(path), { recursive: true }); - 写入本地文件apps/cli/src/app.ts:2016
await writeFile(temporary, text, { flag: "wx", mode: 0o600 }); - 删除本地文件apps/cli/src/app.ts:2024
await unlink(temporary).catch(() => {}); - 读取本地文件apps/cli/src/app.ts:2029
return await readFile(path, "utf8"); - 删除本地文件apps/cli/src/app.ts:2041
await unlink(temporary).catch(() => {}); - 读取本地文件apps/cli/src/app.ts:2046
return await readFile(path, "utf8") === text; - 读取本地文件apps/cli/src/app.ts:2061
if (await readFile(quarantine, "utf8") === text) return true; - 删除本地文件apps/cli/src/app.ts:2067
await unlink(quarantine).catch(() => {}); - 删除本地文件apps/cli/src/app.ts:2073
await unlink(path); - 删除本地文件递归apps/cli/src/app.ts:2082
removeTree: async (path) => { await rm(path, { recursive: true, force: true }); }, - 读取本地文件apps/cli/src/metadata.ts:21
const pkg = JSON.parse(await readFile(packageUrl, "utf8")) as PackageJson; - 执行外部命令来自配置/变量apps/cli/src/open-url.ts:10
execFile(command, args, { windowsHide: true }, (error) => { - 读取本地文件apps/cli/src/profile-reconciliation.ts:72
const entries = await readdir(dir, { withFileTypes: true }); - 读取本地文件apps/cli/src/profile-reconciliation.ts:83
snapshot[name] = createHash("sha256").update(await readFile(path)).digest("hex"); - 读取本地文件apps/cli/src/profile-reconciliation.ts:100
if ((await lstat(path)).isSymbolicLink()) throw new Error(`profile contains symlink: ${path}`); - 读取本地文件apps/cli/src/repo.ts:7
await access(path); - 执行外部命令来自配置/变量apps/cli/src/runtime.ts:49
execFile( - 读取本地文件apps/cli/src/runtime.ts:68
readFile(`/proc/${pid}/stat`, "utf8"), - 读取本地文件apps/cli/src/runtime.ts:69
readFile("/proc/sys/kernel/random/boot_id", "utf8"), - 读取本地文件apps/cli/src/runtime.ts:166
const pkg = JSON.parse(await readFile(packagePath, "utf8")) as { - 执行外部命令来自配置/变量apps/cli/src/runtime.ts:201
const child = spawn(launch.command, [...launch.prefixArgs, ...args], { - 执行外部命令来自配置/变量apps/cli/src/runtime.ts:275
const child = spawn(launch.command, [...launch.prefixArgs, ...args], { - 执行外部命令来自配置/变量apps/cli/src/runtime.ts:295
const child = spawn(launch.command, [...launch.prefixArgs, ...args], { - 写入本地文件plugins/im/src/journey-trace.ts:133
await mkdir(dirname(file), { recursive: true }); - 写入本地文件plugins/im/src/journey-trace.ts:134
await appendFile(file, line); - 读取本地文件plugins/market/src/allow-builds.ts:140
current = readFileSync(path, "utf8"); - 写入本地文件plugins/market/src/allow-builds.ts:146
mkdirSync(webProfileDir(env), { recursive: true }); - 写入本地文件plugins/market/src/allow-builds.ts:147
writeFileSync(path, next, "utf8"); - 读取本地文件plugins/market/src/plugin-entry.ts:96
pkg = JSON.parse(readFileSync(join(packageDir, "package.json"), "utf8")); - 读取本地文件plugins/market/src/plugin-entry.ts:108
if (!existsSync(file)) { - 读取本地文件plugins/market/src/plugin-entry.ts:114
if (clientFile !== null && existsSync(clientFile)) { - 读取本地文件plugins/market/src/plugin-entry.ts:117
source = readFileSync(clientFile, "utf8"); - 读取本地文件plugins/market/src/plugin-mutate.ts:73
packageJson = JSON.parse(readFileSync(packagePath, "utf8")) as DshPackageJson; - 执行外部命令来自配置/变量plugins/market/src/plugin-mutate.ts:184
const child = spawn(launch.command, [...launch.prefixArgs, ...args], { - 读取本地文件plugins/market/src/profile-deps.ts:22
const parsed: unknown = JSON.parse(readFileSync(profilePackagePath(env), "utf8")); - 读取本地文件plugins/market/src/state-store.ts:16
readText: (path) => readFileSync(path, "utf8"), - 写入本地文件plugins/market/src/state-store.ts:17
ensureParent: (path) => mkdirSync(dirname(path), { recursive: true, mode: 0o700 }), - 写入本地文件plugins/market/src/state-store.ts:18
writePrivate: (path, text) => writeFileSync(path, text, { encoding: "utf8", mode: 0o600 }), - 写入本地文件plugins/market/src/state-store.ts:19
replace: (from, to) => renameSync(from, to), - 删除本地文件plugins/market/src/state-store.ts:20
remove: (path) => rmSync(path, { force: true }), - 读取本地文件plugins/providers/src/index.ts:233
const data = await readFile(join(videosDirectory(), name), { signal }); - 写入本地文件plugins/providers/src/paths.ts:19
await mkdir(dir, { recursive: true, mode: 0o700 }); - 写入本地文件plugins/providers/src/paths.ts:21
await chmod(dir, 0o700); - 读取本地文件plugins/providers/src/paths.ts:38
await stat(dest); - 写入本地文件plugins/providers/src/paths.ts:41
await copyFile(legacyPluginData(file), dest); - 写入本地文件plugins/providers/src/paths.ts:42
await chmod(dest, 0o600); - 读取本地文件plugins/sidebar/src/agent-opens.ts:157
info = await stat(target) - 启用终端会话(PTY)plugins/sidebar/src/agent-pty.ts:222
const pty = this.nodePty.spawn(shell ?? this.shell, shellSpawnArgs(shellArgs ?? this.shellArgs), { - 读取本地文件plugins/sidebar/src/bundle-route.ts:51
const info = await stat(path) - 读取本地文件plugins/sidebar/src/bundle-route.ts:56
const etag = `"${shortHash(await readFile(path))}"` - 读取本地文件plugins/sidebar/src/bundle-route.ts:107
const body = await readFile(join(chunkDir, `client-${name}.js`)) - 读取本地文件plugins/sidebar/src/fs-operations.ts:42
const info = await stat(safeTarget) - 写入本地文件plugins/sidebar/src/fs-operations.ts:48
await mkdir(dirname(safeTarget), { recursive: true }) - 写入本地文件plugins/sidebar/src/fs-operations.ts:59
await rename(tmp, safeTarget) - 删除本地文件plugins/sidebar/src/fs-operations.ts:62
if (owned) await rm(tmp, { force: true }).catch(() => {}) - 写入本地文件plugins/sidebar/src/fs-operations.ts:92
await mkdir(dirname(safeTarget), { recursive: true }) - 写入本地文件plugins/sidebar/src/fs-operations.ts:93
const stream = createWriteStream(tmp, { flags: 'wx' }) - 写入本地文件plugins/sidebar/src/fs-operations.ts:114
await rename(tmp, safeTarget) - 读取本地文件plugins/sidebar/src/fs-operations.ts:115
const info = await stat(safeTarget) - 删除本地文件plugins/sidebar/src/fs-operations.ts:122
await rm(tmp, { force: true }).catch(() => {}) - 读取本地文件plugins/sidebar/src/fs-search.ts:85
const level = await opendir(dir).catch(() => undefined) - 读取本地文件plugins/sidebar/src/fs-tree.ts:49
level = await opendir(path) - 读取本地文件plugins/sidebar/src/fs-tree.ts:100
const info = await stat(row.path).catch(() => undefined) - 执行外部命令固定命令plugins/sidebar/src/git.ts:163
const child = spawn('git', full, { - 读取本地文件plugins/sidebar/src/git.ts:252
const entries = await readdir(cwd, { withFileTypes: true }).catch(() => []) - 读取本地文件plugins/sidebar/src/index.ts:215
if (await stat(sessionPath).then(() => true).catch(() => false)) return sessionPath - 读取本地文件plugins/sidebar/src/index.ts:233
const info = await stat(path).catch((error: unknown) => { - 读取本地文件plugins/sidebar/src/index.ts:876
const info = await stat(path) - 读取本地文件plugins/sidebar/src/index.ts:880
const body = await readFile(path) - 读取本地文件plugins/sidebar/src/index.ts:932
const info = await stat(absolute) - 读取本地文件plugins/sidebar/src/index.ts:936
const body = await readFile(absolute) - 执行外部命令来自配置/变量plugins/sidebar/src/open-external.ts:86
const child = spawn(spec.command, spec.args, { detached: true, stdio: 'ignore' }) - 读取本地文件plugins/sidebar/src/path-security.ts:10
return await realpath(path) - 读取本地文件plugins/sidebar/src/path-security.ts:59
const realTarget = await realpath(existingPath) - 读取本地文件plugins/sidebar/src/pty-deps.ts:124
return existsSync(join(dir, 'package.json')) && existsSync(join(dir, 'pnpm-workspace.yaml')) - 读取本地文件plugins/sidebar/src/pty-deps.ts:147
if (!existsSync(file)) return false - 读取本地文件plugins/sidebar/src/pty-deps.ts:149
const parsed = JSON.parse(readFileSync(file, 'utf8')) as { name?: unknown } - 读取本地文件plugins/sidebar/src/pty-deps.ts:188
if (existsSync(script)) { - 读取本地文件plugins/sidebar/src/pty-deps.ts:193
if (existsSync(script)) { - 写入本地文件plugins/sidebar/src/pty-manager.ts:38
if (existsSync(helper)) chmodSync(helper, 0o755) - 读取本地文件plugins/sidebar/src/pty-manager.ts:38
if (existsSync(helper)) chmodSync(helper, 0o755) - 启用终端会话(PTY)plugins/sidebar/src/pty-manager.ts:156
pty: this.nodePty.spawn(shell ?? this.shell, shellSpawnArgs(shellArgs ?? this.shellArgs), { - 删除本地文件plugins/wecom-office/src/auth.ts:64
await rm(join(configDir, "credentials.enc"), { force: true }); - 删除本地文件递归plugins/wecom-office/src/auth.ts:65
await rm(join(configDir, "cache"), { recursive: true, force: true }); - 执行外部命令固定命令plugins/wecom-office/src/cli.ts:107
const killer = spawn("taskkill", ["/pid", String(child.pid), "/T", "/F"], { - 读取本地文件plugins/wecom-office/src/im-bridge.ts:57
const value: unknown = JSON.parse(await readFile(path, "utf8")); - 读取本地文件plugins/wecom-office/src/local-file-policy.ts:47
canonicalWorkspace ??= await realpath(workspace); - 读取本地文件plugins/wecom-office/src/local-file-policy.ts:48
if (!(await lstat(canonicalWorkspace)).isDirectory()) throw new OfficeError("local-file-denied", DENIED); - 读取本地文件plugins/wecom-office/src/local-file-policy.ts:49
const canonical = await realpath(isAbsolute(path) ? path : resolve(canonicalWorkspace, path)); - 读取本地文件plugins/wecom-office/src/local-file-policy.ts:50
if (!strictChild(canonicalWorkspace, canonical) || !(await lstat(canonical)).isFile()) { - 读取本地文件plugins/wecom-office/src/local-file-policy.ts:75
const currentPath = await realpath(sourcePath); - 读取本地文件plugins/wecom-office/src/local-file-policy.ts:76
const current = await lstat(currentPath, { bigint: true }); - 删除本地文件递归plugins/wecom-office/src/local-file-policy.ts:121
if (stageRoot !== undefined) await rm(stageRoot, { recursive: true, force: true }).catch(() => {}); - 写入本地文件plugins/wecom-office/src/local-file-policy.ts:128
await mkdir(directory, { mode: 0o700 }); - 写入本地文件plugins/wecom-office/src/office-controller.ts:173
await mkdir(configDir, { recursive: true, mode: 0o700 }); - 读取本地文件plugins/wecom-office/src/settings.ts:134
return sanitizeOverlay(JSON.parse(await readFile(path, "utf8"))); - 写入本地文件plugins/wecom-office/src/settings.ts:157
await mkdir(dirname(path), { recursive: true, mode: 0o700 }); - 写入本地文件plugins/wecom-office/src/settings.ts:161
await writeFile(temporary, `${JSON.stringify(candidate, null, 2)}\n`, { mode: 0o600, flag: "wx" }); - 写入本地文件plugins/wecom-office/src/settings.ts:163
await rename(temporary, path); - 删除本地文件plugins/wecom-office/src/settings.ts:167
await rm(temporary, { force: true }).catch(() => undefined); - 读取本地文件plugins/xtz-ui/src/dsh-home.ts:29
if (existsSync(currentPath) || !existsSync(legacyPath)) return; - 写入本地文件plugins/xtz-ui/src/dsh-home.ts:30
mkdirSync(dirname(currentPath), { recursive: true, mode: 0o700 }); - 写入本地文件plugins/xtz-ui/src/dsh-home.ts:31
copyFileSync(legacyPath, currentPath); - 读取密钥环境变量plugins/xtz-ui/src/host-routes.ts:33
readInstanceToken: () => string | undefined = () => process.env.XIAOTAOZI_DSH_INSTANCE_TOKEN, - 读取本地文件plugins/xtz-ui/src/settings-store.ts:10
const parsed: unknown = JSON.parse(readFileSync(path, "utf8")); - 写入本地文件plugins/xtz-ui/src/settings-store.ts:19
mkdirSync(dirname(path), { recursive: true, mode: 0o700 }); - 写入本地文件plugins/xtz-ui/src/settings-store.ts:21
writeFileSync(tmp, `${JSON.stringify(pickFeaturePatch(config), null, 2)}\n`, { encoding: "utf8", mode: 0o600 }); - 写入本地文件plugins/xtz-ui/src/settings-store.ts:22
renameSync(tmp, path);
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 安装xtz命令
- 一键启动插件
- 管理插件与模型
xiaotaozi-dsh:小桃子 DeepSeek Harness 插件与 Mac 客户端
README
由 DeepSeek 最新模型翻译生成xiaotaozi-dsh
小桃子 DSH:用户产品是 xtz CLI,外加一套 DeepSeek Harness 插件。
English ·中文 ·规范 ·流程 · DeepSeek Harness
小桃子 DSH 是建立在 DeepSeek Harness 上的产品套装:用户安装的是 apps/cli/ 里的 xtz 命令,plugins/ 是它种下的能力层。出了问题,或还缺某个插件?提个 issue。
快速开始
需要 PATH 上有 Node.js ^22.19.0 || >=24.0.0:
npm install -g xiaotaozi-dsh-cli
xtz start
第一次 xtz start 会准备好正式 web profile,把 plugins/ 下所有自研插件种好,然后在浏览器里打开界面。想用别的装法?安装脚本(curl -fsSL https://raw.githubusercontent.com/kedoupi/xiaotaozi-dsh/main/apps/cli/scripts/install.sh | sh)和 bun add -g xiaotaozi-dsh-cli 装的是同一个 CLI;xtz 运行仍是 Node。
展开完整文档(README 剩余 1 节)
xiaotaozi-dsh 小桃子 DSH:用户产品是 xtz CLI,外加一套 DeepSeek Harness 插件。 English ·中文 ·规范 ·流程 · DeepSeek Harness 小桃子 DSH 是建立在 DeepSeek Harness 上的产品套装:用户安装的是 apps/cli/ 里的 xtz 命令,plugins/ 是它种下的能力层。出了问题,或还缺某个插件?提个 issue。 快速开始 需要 PATH 上有 Node.js ^22.19.0 || >=24.0.0: npm install -g xiaotaozi-dsh-cli xtz start 第一次 xtz start 会准备好正式 web profile,把 plugins/ 下所有自研插件种好,然后在浏览器里打开界面。想用别的装法?安装脚本(curl -fsSL https://raw.githubusercontent.com/kedoupi/xiaotaozi-dsh/main/apps/cli/scripts/install.sh | sh)和 bun add -g xiaotaozi-dsh-cli 装的是同一个 CLI;xtz 运行仍是 Node。 开放命令:帮助/版本、start/web、stop、restart、open、status、config path、doctor。刻意禁用:init、plugin、run/ask、config dump/defaults、update。xtz 只管理自己拉起的进程,绝不抢占 3080 端口。完整命令和安全边界见 apps/cli/README.zh.md。CLI 固定 DeepSeek Harness @deepseek-ai/dsh@0.1.2-rc.1;其他 DSH 版本不视为兼容。 插件中心 从 新会话 下方的左侧工具条打开 插件中心。它占用会话主区域,侧栏和右侧工作台保持可用。 默认打开 已安装,内置能力为小桃子功能、侧边工作台、模型和 IM 机器人。 发现插件 使用精选目录。外部安装的顶层插件也会出现在已安装列表里,确认后可以移除。 移除包不承诺删除其凭据、会话或已保存数据。 首次欢迎确认打开 插件中心 → 已安装 → 模型。归档也可从会话 ⋯ 菜单打开。运行参数位于 设置 → 高级。技术 Loader 清单不是用户设置页;故障诊断使用 xtz doctor。 你会得到什么 - 模型 —— 官方订阅登录和 API Key 同一页,对话只列出勾选过的模型。 - IM 机器人 —— 九个聊天渠道(飞书、微信、Slack 等)和一个实验性 AI Office 连接器,完整嵌入插件中心。 - 企业微信办公 —— 通过官方 wecom-cli 使用日程、文档、会议、通讯录、表格、待办和微盘。 - 小桃子壳 —— 品牌界面和欢迎说明保持开启;开关覆盖归档、Git 图谱和向 Agent 宣告。 - 侧边工作台 —— 右侧面板里的文件、编辑器、Git 和终端。 - 插件中心 —— 内置配置、已安装插件和精选发现,一键安装。 看看小桃子 DSH Web 应用第一次打开时,欢迎弹框向用户问好。 小桃子 DSH 欢迎弹框 插件中心 → 已安装 → 小桃子功能 开关覆盖归档、Git 图谱和向 Agent 宣告。 插件中心里的小桃子功能开关 Git 图谱标出当前提交、分支引用和合并泳道,不替代 Host 原有 Git 工作流。 小桃子 Git 图谱 右侧工作台把文件留在会话旁边;会话上还有 Git 图谱胶囊。 对话旁的 Sidebar 文件栏 插件中心 → 已安装 → 模型 展示已接入的服务商、可选的智能选择,以及对话会提供的模型。 模型总览与模型选择 添加服务商列出用户还可以登录或填密钥的所有厂商。 添加服务商目录 插件中心 → 已安装 → IM 机器人 列出聊天渠道;微信默认扫码接入。 插件中心里的 IM 机器人:微信选中 手动接入 Telegram 机器人只需要 Bot Token;凭据保存在 Host 凭据存储,而不是客户端包。 手动接入机器人:粘贴 Bot Token 插件中心 → 发现插件 列出精选第三方插件,支持搜索和标签。 发现插件:搜索、标签和插件卡片 插件详情页展示版本、来源和确切的安装规格。 插件详情:版本、来源和安装规格 插件 一个包做一件事;每个自研插件都会在第一次 xtz start 时种好。每个插件也都能用 github:kedoupi/xiaotaozi-dsh#path:plugins/ 的 Git 路径单独构建安装。 | 包 | 占用 | 做什么 | Git 路径安装 | | dsh-providers | 插件中心 → 已安装 → 模型 | 服务商登录、API Key、模型勾选和可选智能选择(无在线学习、reasoning effort 路由、耐久路由审计)。EN · | github:kedoupi/xiaotaozi-dsh#path:plugins/providers | | dsh-im | 插件中心 → 已安装 → IM 机器人 | 九个聊天渠道和实验性 AI Office 连接器。EN · | github:kedoupi/xiaotaozi-dsh#path:plugins/im | | dsh-wecom-office | 插件中心 → 已安装 → IM 机器人 → 企业微信机器人卡片 | 通过 wecom-cli 接企业微信日程、文档、会议、通讯录、表格、待办和微盘。EN · | github:kedoupi/xiaotaozi-dsh#path:plugins/wecom-office | | dsh-xtz-ui | 插件中心 → 已安装 → 小桃子功能;设置 → 高级 | 品牌壳、归档、Git 图谱和功能开关。EN · | github:kedoupi/xiaotaozi-dsh#path:plugins/xtz-ui | | dsh-sidebar | 插件中心 → 已安装 → 侧边工作台 | 右侧文件 / 编辑器 / Git / 终端面板。EN · | github:kedoupi/xiaotaozi-dsh#path:plugins/sidebar | | dsh-market | 插件中心 | 已安装能力与 发现插件;点 安装 添加第三方插件。EN · | github:kedoupi/xiaotaozi-dsh#path:plugins/market | 第三方市场 插件中心 → 发现插件 从第三方插件的上游 Git/npm 源安装;本仓库只保存 plugins/market 里的目录行(MARKET_PLUGINS),从不 vendor 那些仓库。当前收录:Agent Teams、会话上下文 和 OpenContext。 正式环境与沙箱 两套 Harness 家目录,绝不混用: | | 正式(用户) | 沙箱(插件开发) | | 家目录 | ~/.dsh | /.dsh-home(gitignore) | | 命令 | xtz start | pnpm dev | | 端口 | 3080 | 3081 | | 插件 | 第一次 xtz start 种好;额外插件用 dsh plugin --profile web add | 从本仓库 link: | xtz 和正式安装绝不碰沙箱;沙箱工具也绝不碰 ~/.dsh。 继续了解 - 贡献入口:CONTRIBUTING.zh.md;给 agent 的硬性规则:AGENTS.md - 规范:docs/conventions.zh.md;流程:docs/workflow.zh.md;文档地图:docs/README.zh.md - 产品快照:CHANGELOG.md;锁定版本:versions.json - CLI 合同与源码:apps/cli/ License MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
kedoupi/xiaotaozi-dsh
安装 xtz 命令,一键启动并管理插件与模型
相关插件 · 其他
模型破甲清洗HunYiSage/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,993已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,269已汉化DSH
70.8
这是你的仓库?认领条目