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

数字分身工坊 oxmumu3/ai-twin-starter

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

把现有工作智能体变成在线分身:可移植的配置模板,外加一个 DeepSeek Harness 初始化器。

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · tool
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 1 天前
档位由哪些信号合成

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

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

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

读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 61 处,展示前 61 条)
  • 读取本地文件
    src/workspace.mjs:20
    const stat = await lstat(current);
  • 读取本地文件
    src/workspace.mjs:24
    const stat = await lstat(workspace);
  • 读取本地文件
    src/workspace.mjs:33
    stat = await lstat(directory);
  • 读取本地文件
    src/workspace.mjs:59
    const stat = await lstat(path);
  • 读取本地文件
    src/workspace.mjs:102
    name, content: await readFile(new URL(`../templates/${name}`, import.meta.url)),
  • 写入本地文件
    src/workspace.mjs:105
    await mkdir(target.directory, { mode: 0o700 });
  • 读取本地文件
    src/workspace.mjs:170
    return readFile(new URL('../templates/RUNBOOK.md', import.meta.url), 'utf8');
  • 读取本地文件
    src/distill.mjs:22
    const stat = await lstat(current);
  • 写入本地文件
    src/distill.mjs:31
    try { await mkdir(path, { mode: 0o700 }); } catch (error) { if (error.code !== 'EEXIST') throw error; }
  • 读取本地文件
    src/distill.mjs:46
    try { await lstat(path); return true; } catch (error) { if (error.code === 'ENOENT') return false; throw error; }
  • 读取本地文件
    src/distill.mjs:51
    const stat = await lstat(path);
  • 写入本地文件
    src/distill.mjs:253
    try { await mkdir(lock, { mode: 0o700 }); } catch (error) {
  • 写入本地文件
    src/distill.mjs:274
    await mkdir(directory, { mode: 0o700 });
  • 写入本地文件
    src/distill.mjs:287
    await rename(temporary, join(base, 'current.json'));
  • 删除本地文件
    src/distill.mjs:288
    } finally { if (await exists(temporary)) await unlink(temporary); }
  • 删除本地文件
    src/distill.mjs:294
    } finally { await rmdir(lock); }
  • 读取密钥环境变量
    src/channel.mjs:34
    export function createSlackAdapter({ token = process.env.AGENT_TWIN_SLACK_BOT_TOKEN, fetchImpl = globalThis.fetch, signal } = {}) {
  • 读取本地文件
    src/channel.mjs:134
    const stat = await lstat(current);
  • 读取本地文件
    src/channel.mjs:139
    const stat = await lstat(directory);
  • 读取本地文件
    src/channel.mjs:148
    const stat = await lstat(path);
  • 读取本地文件
    src/channel.mjs:166
    const existing = await lstat(path);
  • 写入本地文件
    src/channel.mjs:176
    await rename(temporary, path);
  • 删除本地文件
    src/channel.mjs:179
    await unlink(temporary).catch((error) => { if (error.code !== 'ENOENT') throw error; });
  • 删除本地文件
    src/channel.mjs:445
    if (lock) { await lock.close(); await unlink(lockPath); }
  • 读取本地文件
    src/materials.mjs:26
    const stat = await lstat(current);
  • 读取本地文件
    src/materials.mjs:50
    try { await lstat(path); return true; } catch (error) { if (error.code === 'ENOENT') return false; throw error; }
  • 写入本地文件
    src/materials.mjs:55
    try { await mkdir(path, { mode: 0o700 }); } catch (error) { if (error.code !== 'EEXIST') throw error; }
  • 读取本地文件
    src/materials.mjs:61
    const stat = await lstat(path);
  • 读取本地文件
    src/materials.mjs:111
    try { stat = await lstat(path); }
  • 读取本地文件
    src/materials.mjs:137
    const directory = await opendir(path);
  • 读取本地文件
    src/materials.mjs:155
    const stat = await lstat(absolute);
  • 写入本地文件
    src/materials.mjs:262
    try { await mkdir(lock, { mode: 0o700 }); }
  • 写入本地文件
    src/materials.mjs:270
    await mkdir(directory, { mode: 0o700 });
  • 写入本地文件
    src/materials.mjs:285
    await rename(temporary, join(base, 'current.json'));
  • 删除本地文件
    src/materials.mjs:286
    } finally { if (await exists(temporary)) await unlink(temporary); }
  • 删除本地文件
    src/materials.mjs:291
    } finally { await rmdir(lock); }
  • 读取本地文件
    src/native-service.mjs:276
    const stat = await lstat(resolve(cwd, ".agent-twin"));
  • 读取本地文件
    src/native-service.mjs:1343
    if (resolve(cwd) !== (await realpath(cwd)))
  • 发起网络请求
    src/native-host.mjs:91
    try{return await fetch(request);}catch{return response({error:'未确认完成操作,请刷新后核对。'},400);}
  • 读取本地文件
    src/native-store.mjs:20
    stat = await lstat(current);
  • 写入本地文件
    src/native-store.mjs:23
    await mkdir(current, { mode: 0o700 });
  • 读取本地文件
    src/native-store.mjs:24
    stat = await lstat(current);
  • 读取本地文件
    src/native-store.mjs:39
    const stat = await lstat(path);
  • 读取本地文件
    src/native-store.mjs:92
    const stat = await lstat(path);
  • 写入本地文件
    src/native-store.mjs:113
    await rename(temporary, path);
  • 删除本地文件
    src/native-store.mjs:122
    await unlink(temporary).catch((error) => {
  • 读取本地文件
    src/native-store.mjs:163
    const stat = await lstat(target);
  • 删除本地文件
    src/native-store.mjs:193
    await unlink(owned.target);
  • 写入本地文件
    src/native-store.mjs:206
    await chmod(directory, 0o700);
  • 删除本地文件
    src/native-store.mjs:258
    await unlink(lockPath);
  • 写入本地文件
    src/native-store.mjs:282
    await chmod(directory, 0o700);
  • 删除本地文件
    src/native-workbench.mjs:96
    await unlink(temporary).catch(error => { if (error.code !== 'ENOENT') throw error; });
  • 读取本地文件
    src/project-structure.mjs:9
    const stat=await lstat(path);if(stat.isSymbolicLink()||!stat.isFile()||stat.size>65536)throw new Error('Unsafe project structure document');
  • 写入本地文件
    src/project-structure.mjs:13
    try{await mkdir(path,{mode:0o700});}catch(error){if(error.code!=='EEXIST')throw error;}
  • 读取本地文件
    src/project-structure.mjs:14
    const stat=await lstat(path);if(stat.isSymbolicLink()||!stat.isDirectory())throw new Error('Unsafe project structure directory or symlink');
  • 写入本地文件
    src/project-structure.mjs:18
    try{file=await open(tmp,constants.O_WRONLY|constants.O_CREAT|constants.O_EXCL|constants.O_NOFOLLOW,0o600);await file.writeFile(value);await file.sync(
  • 删除本地文件
    src/project-structure.mjs:18
    try{file=await open(tmp,constants.O_WRONLY|constants.O_CREAT|constants.O_EXCL|constants.O_NOFOLLOW,0o600);await file.writeFile(value);await file.sync(
  • 读取本地文件
    src/project-structure.mjs:23
    const state=join(cwd,'.agent-twin');const stat=await lstat(state);if(stat.isSymbolicLink()||!stat.isDirectory())throw new Error('Unsafe project state
  • 读取本地文件
    src/material-capture.mjs:11
    for(const part of absolute.slice(root.length).split(sep).filter(Boolean)){current=join(current,part);const stat=await lstat(current);if(stat.isSymboli
  • 写入本地文件
    src/material-capture.mjs:18
    export async function privateDirectory(path){await checkedDirectory(dirname(path));try{await mkdir(path,{mode:0o700});}catch(e){if(e.code!=='EEXIST')t
  • 读取本地文件
    src/material-capture.mjs:20
    await checkedDirectory(dirname(path));const before=await lstat(path);if(before.isSymbolicLink()||!before.isFile()||before.size>limit)throw new Error('
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-tools@deepseek-ai/schemastery@deepseek-ai/dsh-llm
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
Agent Twin · 0.4 预发布 📖 设计思考与生态复盘:《DeepSeek Harness 要走向极客玩具还是大众普惠?》 在 DeepSeek Harness 内搭建并持续管理一个有来源、有权限边界的 AI 分身。原生工作台提供四个常驻模块:「项目沉淀、分身能力、通道连接、身份与规则」。首次搭建完成后,日常管理中可以继续补材料、更新能力、处理审批、检查回执。 原生版面向 DeepSeek Harness Web / Desktop 0.2.1-rc.2、0.2.1-rc.3、0.2.1-rc.4、0.2.1-rc.5 / Node.js 22.13+。Desktop 已验证安装启用、真实模型整理蒸馏、候选试跑与明确采用、日报和材料回流;真实 Slack 收发仍待验收,完整证据见 0.4 发布说明。其他宿主版本需重新验证。模型使用宿主配置,Slack 需要你自己的应用授权。完整路径见 原生运行手册。 用已有工作 Agent,按四步搭分身:准备分身材料 → 蒸馏分身 → 连接通道 → 设定权限。 你只需指定项目范围、补充必要事实,并完成自己的渠道授权。资料盘点、结构化整理、命令和 JSON 提案由当前 Agent 处理;不要求你先把项目整理成一套完美的知识库。
展开完整文档(README 剩余 1 节)
Agent Twin · 0.4 预发布

📖 设计思考与生态复盘:《DeepSeek Harness 要走向极客玩具还是大众普惠?》

在 DeepSeek Harness 内搭建并持续管理一个有来源、有权限边界的 AI 分身。原生工作台提供四个常驻模块:「项目沉淀、分身能力、通道连接、身份与规则」。首次搭建完成后,日常管理中可以继续补材料、更新能力、处理审批、检查回执。

原生版面向 DeepSeek Harness Web / Desktop 0.2.1-rc.2、0.2.1-rc.3、0.2.1-rc.4、0.2.1-rc.5 / Node.js 22.13+。Desktop 已验证安装启用、真实模型整理蒸馏、候选试跑与明确采用、日报和材料回流;真实 Slack 收发仍待验收,完整证据见 0.4 发布说明。其他宿主版本需重新验证。模型使用宿主配置,Slack 需要你自己的应用授权。完整路径见 原生运行手册。

用已有工作 Agent,按四步搭分身:准备分身材料 → 蒸馏分身 → 连接通道 → 设定权限。

你只需指定项目范围、补充必要事实,并完成自己的渠道授权。资料盘点、结构化整理、命令和 JSON 提案由当前 Agent 处理;不要求你先把项目整理成一套完美的知识库。

四步分别做什么

1. 准备分身材料:在选定项目内盘点元数据,明确选材后读取正文,整理背景、知识、判断、工作流、案例、工具和成果;保留出处与缺口。原生版调用宿主模型,通用 CLI 由当前 Agent 组织提案。
2. 蒸馏分身:从所选原始来源提炼知识、判断、工作流和工具卡,校验出处。原生版先生成候选,用具体任务试跑,再明确采用;材料包或候选生成都不等于能力已经验收。
3. 连接通道:用自己的 Slack 授权核对真实身份、允许频道和本人目的地。先做只读核验,原生版另行执行明确的回传测试并保存记录;通用工具路径保持只读。
4. 设定权限:按稳定身份、范围、动作和目的地设置规则。陌生身份拒绝,越权或不明确的请求交本人;原生服务还需本人明确启用,通用 channel-tick 继续只读 dry-run。

代码负责读取边界、来源校验、落盘、通道探测、权限与任务状态。材料可以边工作边积累;安装不会附带作者的业务知识、工具账号或个人记忆。

给 Agent 的一句话

其他 Agent:

请阅读 https://github.com/oxmumu3/ai-twin-starter 的 README 和全部 Releases(含预发布),选择已公开、与当前宿主兼容的版本,核对包及 SHA256SUMS,再按该版本 SETUP.md 带我准备材料、蒸馏分身、连接通道、设定权限。先完成只读验收。

DeepSeek Harness:

请阅读 https://github.com/oxmumu3/ai-twin-starter 的 README 和 https://github.com/oxmumu3/ai-twin-starter/releases (包含预发布),核对当前 Harness 版本,选择已经公开且兼容的安装包,验证 SHA256SUMS 后安装并回读启用状态。按对应版本运行手册带我搭建 AI 分身;若安装 0.4,打开原生「AI 分身」页面,完成首次搭建后继续日常管理。先核验模型、来源和 Slack 权限,再由我明确启用服务。

首次由你选定可读取范围,并完成自己的 Slack 授权和必要的身份/范围设置。不要在对话中粘贴 token。免开发指这些已实现步骤不要求你编写程序;不代表免授权、没有材料也能复制能力,或安装后自动常驻。

从零散项目开始

零散项目示例用独立编写的合成背景、笔记、旧报告和工具说明演示材料准备。待转换的 PDF 留作缺口,被排除的配置不作为知识来源;不要求先有成套规则文件。后续过程是盘点 → 选择与读取来源 → Agent 整理材料/缺口 → 校验落包 → 从原始来源蒸馏。

工作方法示例保留既有的四类蒸馏演示。它们均不包含真实业务资料或作者私有知识包。

Agent 使用的命令

要求 Node.js 22.13+。以下为兼容 0.3 的通用 CLI 路径,语义整理由当前 Agent 完成;0.4 原生工作台则调用宿主已配置的真实模型。下面的命令由 Agent 执行,用户无需手写提案。

git clone https://github.com/oxmumu3/ai-twin-starter.git
cd ai-twin-starter
node bin/agent-twin.mjs init --cwd /absolute/path/to/your/project
node bin/agent-twin.mjs materials-inventory --cwd /absolute/path/to/your/project --root .
node bin/agent-twin.mjs materials-prepare --cwd /absolute/path/to/your/project --entry notes.md --entry reports/previous.md

Agent 用 prepare 返回的真实内容组织 {project, materials, gaps},写本地私有提案,再运行 materials-apply --batch <batchId> --packet <proposal.json>。materials-status 核对材料包;materials-distill 重新读取已选原始来源,进入既有 distill-apply 流程。完整操作见 SETUP.md,卡片结构见 蒸馏说明,授权与只读接口见 通道说明。

本地工作流与材料回流

原生「分身能力」支持严格 CSV 输入的本地日报、正文预览和历史;「项目沉淀」支持材料提交、审阅、明确采纳,再单独纳入来源。这两项都由主人显式发起,远程来信不能触发;材料采纳后仍须重新整理、蒸馏、试跑并采用能力候选。通用命令行继续可用,命令与边界见 SETUP.md。

DSH 与市场

DSH 插件同时提供原生工作台和兼容 0.3 的 agent_twin 工具。后者使用宿主当前项目目录,并尊重只读/工作区权限。安装说明列出宿主版本和操作。

DSH 有官方提供的自定义插件市场功能。本项目提供自托管索引,可以添加到该发现页;这不代表本项目经过官方统一审核或收录。直接安装固定版本 .tgz 不需要先添加市场。

版本与验收边界

- 0.1.0:模板初始化;当时未实现内容蒸馏和通道连接,把它描述成完整搭建入口不准确。
- 0.2.0:增加显式资料蒸馏、来源刷新、Slack 只读探测和代码权限 dry-run,仍默认用户已有可直接选择的材料。
- 0.3.0:补上零散项目的材料盘点、整理、缺口与来源校验,并从已选原始来源衔接蒸馏。
- 0.4.0-preview.3:新增原生日报与材料回流管理,保留 preview.1 的四模块与服务机制。
- 0.4.0-preview.1:新增原生四模块、能力候选试跑与采用、授权知识问答/草稿/Slack 回传、审批、持久任务与恢复。仅作为预发布提供,下载是否可用以 全部 Releases 的实际资产为准;不依赖 /releases/latest 发现预发布。

0.3 通用工具中的正式业务执行、审批消费、对外回复和持续调度仍由原智能体与其授权工具承担,须分别验收。合成示例和测试不能证明真实 Slack 已收发或服务已全天在线;status 不把配置齐全标成已在线。

0.4 原生执行器只使用本次身份获准的来源卡片,完成问答、草稿和消息回传,不开放任意智能体工具调用。工具卡说明不等于已经接通或执行了工具。合成模型和隔离消息适配器的端到端验收及重启恢复已完成;Desktop 的实际安装和本地工作流另有实跑记录。真实 Slack 收发、真实同事体验及长期稳定性仍需验收。GitHub 预发布分发不代表官方市场收录或生产服务验收。

MIT,作者:牛村木木山(oxmumu3)。安装说明、原生运行手册、0.4 发布说明。旧验收记录、架构和通道说明描述通用 0.3 路径;原生版以本次发布说明及运行手册为准。

官方 rc.3 兼容维护

0.4.0-preview.3 保留已安装 0.4.0-preview.2 的全部运行代码,仅更新官方 Harness 0.2.1-rc.3 及其 SDK 兼容声明、版本和安装文案。不含正在开发的 0.5 新功能。现有能力、身份规则、材料及投递记录不迁移、不清除。详见兼容验收。
预览分享卡片长什么样 ↓oxmumu3/ai-twin-starter
分享 · DeepSeek Harness Hub
oxmumu3/ai-twin-starter

把现有工作智能体变成在线分身:可移植的配置模板,外加一个 DeepSeek Harness 初始化器。

这是你的仓库?认领条目

回到顶部