离开电脑,也能在飞书里找到你的 DeepSeek Harness 助手
32.9/100
综合分
4
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Nirvana-Jie/dsh-lark-agent该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · platform
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 1 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/24) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 108 处,展示前 108 条)
- 读取本地文件src/artifact-publisher.ts:182
const file = join(directory, 'preview.bin'), info = await stat(file); - 读取本地文件src/artifact-publisher.ts:184
const image = await readFile(file); - 删除本地文件递归src/artifact-publisher.ts:191
} finally {await rm(directory, {recursive: true, force: true});} - 写入本地文件src/artifacts.ts:78
await mkdir(store.directory, {recursive: true, mode: 0o700}); - 读取本地文件src/artifacts.ts:79
const dir = await lstat(store.directory); - 写入本地文件src/artifacts.ts:81
await chmod(store.directory, 0o700); - 读取本地文件src/artifacts.ts:84
try {info = await lstat(path);} catch (error) {if ((error as NodeJS.ErrnoException).code === 'ENOENT') return store; throw error;} - 写入本地文件src/artifacts.ts:110
await rename(temporary, join(this.directory, 'artifacts.json')); - 删除本地文件src/artifacts.ts:116
await unlink(temporary).catch(() => undefined); throw unavailable(); - 读取本地文件src/bridge.ts:134
try { real = await realpath(path); } catch { return {reason: '找不到这个文件'}; } - 读取本地文件src/bridge.ts:138
try { info = await stat(real); } catch { return {reason: '无法读取'}; } - 读取本地文件src/bridge.ts:864
const workspace = await realpath(lane.saved?.cwd ?? lane.user.cwd).catch(() => undefined); - 写入本地文件src/card-actions.ts:94
await mkdir(directory, {recursive: true, mode: 0o700}); - 读取本地文件src/card-actions.ts:95
const directoryStat = await lstat(directory); - 写入本地文件src/card-actions.ts:97
await chmod(directory, 0o700); - 读取本地文件src/card-actions.ts:112
const stat = await lstat(path); - 发起网络请求src/client/api.ts:191
const value = await this.request(endpoint, payload, signal); - 发起网络请求src/client/api.ts:197
const value = await this.request('profiles', {}, signal); - 发起网络请求src/client/api.ts:203
try {return parseConnectionList(await this.request('connections', {}, signal));} - 发起网络请求src/client/api.ts:207
const value = await this.request('add-connection', {}, signal); - 发起网络请求src/client/api.ts:215
const value = object(await this.request('remove-connection', {connectionId: connectionId(id)}, signal)); - 发起网络请求src/client/api.ts:223
const value = await this.request('agent-catalog', {}, signal); - 读取本地文件src/config.ts:128
return parseConfig(JSON.parse(await readFile(absolute, 'utf8')), dirname(absolute)); - 写入本地文件src/direct-chats.ts:45
await mkdir(directory, {recursive: true, mode: 0o700}); - 读取本地文件src/direct-chats.ts:46
const directoryStat = await lstat(directory); - 写入本地文件src/direct-chats.ts:48
await chmod(directory, 0o700); - 读取本地文件src/direct-chats.ts:53
const before = await lstat(file); - 写入本地文件src/direct-chats.ts:103
await rename(temporary, join(this.directory, 'direct-chats.json')); published = true; - 删除本地文件src/direct-chats.ts:108
await unlink(temporary).catch(() => undefined); - 执行外部命令来自配置/变量src/lark-cli.ts:86
child = spawn(options.executable ?? 'lark-cli', ['--profile', options.profile, 'event', 'status', '--current', '--json'], - 执行外部命令来自配置/变量src/lark-cli.ts:151
return spawn(this.executable, ['--profile', this.profile, ...args], { - 读取本地文件src/lark-cli.ts:169
const monitor = setInterval(() => {void lstat(path).then(info => { - 读取本地文件src/lark-cli.ts:176
const info = await lstat(path); - 读取本地文件src/lark-cli.ts:178
const bytes = await readFile(path); - 删除本地文件递归src/lark-cli.ts:181
} finally {clearInterval(monitor); await rm(directory, {recursive: true, force: true});} - 写入本地文件src/ledger.ts:14
await mkdir(directory, {recursive: true, mode: 0o700}); - 读取本地文件src/ledger.ts:17
const rows: unknown = JSON.parse(await readFile(join(directory, 'messages.json'), 'utf8')); - 写入本地文件src/ledger.ts:38
await writeFile(temp, JSON.stringify([...this.entries]), {mode: 0o600}); - 写入本地文件src/ledger.ts:39
await rename(temp, join(this.directory, 'messages.json')); - 读取本地文件src/lock.ts:55
const [boot, stat] = await Promise.all([readFile('/proc/sys/kernel/random/boot_id', 'utf8'), readFile(`/proc/${pid}/stat`, 'utf8')]); - 执行外部命令固定命令src/lock.ts:61
const start = await new Promise<string>((resolve, reject) => execFile('ps', ['-o', 'lstart=', '-p', String(pid)], - 读取本地文件src/lock.ts:73
const info = await lstat(path); - 读取本地文件src/lock.ts:105
try {info = await lstat(lock);} catch (error) { - 写入本地文件src/lock.ts:128
try {await rename(lock, `${lock}.stale-${stale.ino}-${stale.token ?? 'untracked'}`);} catch (error) { - 读取本地文件src/lock.ts:138
for (const name of await readdir(stateDir).catch(() => [])) { - 读取本地文件src/lock.ts:142
const info = await lstat(path).catch(() => undefined); - 删除本地文件递归src/lock.ts:143
if (info?.isDirectory() && Date.now() - info.ctimeMs > TOMBSTONE_RETENTION_MS) await rm(path, {recursive: true, force: true}).catch(() => undefined); - 写入本地文件src/lock.ts:150
await mkdir(directory, {mode: 0o700}); - 写入本地文件src/lock.ts:154
await writeFile(join(directory, OWNER_FILE), JSON.stringify(owner), {mode: 0o600, flag: 'wx'}); - 写入本地文件src/lock.ts:155
await writeFile(join(directory, 'pid'), String(process.pid), {mode: 0o600, flag: 'wx'}); - 删除本地文件递归src/lock.ts:157
await rm(directory, {recursive: true, force: true}); - 写入本地文件src/lock.ts:169
await mkdir(stateDir, {recursive: true, mode: 0o700}); - 写入本地文件src/lock.ts:175
try {await rename(directory, path);} catch (error) { - 删除本地文件递归src/lock.ts:190
if ((await readOwner(path)).token === token) await rm(path, {recursive: true, force: true}); - 删除本地文件递归src/lock.ts:196
await rm(directory, {recursive: true, force: true}).catch(() => undefined); - 执行外部命令固定命令src/media-input.ts:20
const child = spawn('ffmpeg', ['-hide_banner', '-loglevel', 'error', '-protocol_whitelist', 'pipe', '-i', 'pipe:0', - 执行外部命令固定命令src/media-input.ts:55
const child = spawn('ffmpeg', ['-version'], {shell: false, windowsHide: true, stdio: 'ignore'}); - 写入本地文件src/memory-store.ts:165
await mkdir(absolute, {recursive: true, mode: 0o700}); - 读取本地文件src/memory-store.ts:166
const directoryInfo = await lstat(absolute); - 写入本地文件src/memory-store.ts:168
await chmod(absolute, 0o700); - 读取本地文件src/memory-store.ts:172
info = await lstat(file); - 写入本地文件src/memory-store.ts:178
await chmod(file, 0o600); - 写入本地文件src/memory-store.ts:212
await rename(temporary, join(this.directory, 'memory.json')); - 删除本地文件src/memory-store.ts:229
if (!renamed) await unlink(temporary).catch(() => undefined); - 写入本地文件src/model-preferences.ts:125
await mkdir(absolute, {recursive: true, mode: 0o700}); - 读取本地文件src/model-preferences.ts:126
const directoryInfo = await lstat(absolute); - 写入本地文件src/model-preferences.ts:128
await chmod(absolute, 0o700); - 读取本地文件src/model-preferences.ts:131
try {info = await lstat(path);} - 写入本地文件src/model-preferences.ts:172
await rename(temporary, join(this.directory, FILE_NAME)); - 删除本地文件src/model-preferences.ts:177
await unlink(temporary).catch(() => undefined); - 读取本地文件src/native-presentation.ts:94
const root = await realpath(cwd), html = nativePresentationHtml(draft), digest = createHash('sha256').update(html).digest('hex'); - 写入本地文件src/native-presentation.ts:98
await mkdir(directory, {mode: 0o700}).catch(error => {if (error.code !== 'EEXIST') throw error;}); - 读取本地文件src/native-presentation.ts:99
const info = await lstat(directory); - 读取本地文件src/onboarding/agents.ts:81
next.workspace = await realpath(next.workspace); - 读取本地文件src/onboarding/agents.ts:82
if (!(await stat(next.workspace)).isDirectory()) throw new Error(); - 写入本地文件src/onboarding/controller.ts:482
await mkdir(cwd, {recursive: true, mode: 0o700}); - 发起网络请求src/onboarding/host.ts:25
register(route: {path: string; methods: string[]; requestBody: 'buffered'; fetch(request: Request): Promise<Response>}): () => void | Promise<void>; - 发起网络请求src/onboarding/host.ts:103
async fetch(request) { - 读取本地文件src/onboarding/host.ts:156
try {await access(candidate, constants.X_OK); return candidate;} catch { } - 读取本地文件src/onboarding/host.ts:164
const value = JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf8')) as {name?: unknown; version?: unknown}; - 执行外部命令来自配置/变量src/onboarding/lark-platform.ts:98
child = spawn(executable, [...args], {shell: false, windowsHide: true, stdio: 'pipe', cwd: options.cwd, env: { - 读取本地文件src/onboarding/settings-store.ts:13
try {return this.parse(JSON.parse(await readFile(join(this.directory, this.filename), 'utf8')));} - 写入本地文件src/onboarding/settings-store.ts:20
await mkdir(this.directory, {recursive: true, mode: 0o700}); - 写入本地文件src/onboarding/settings-store.ts:27
await rename(temp, join(this.directory, this.filename)); - 删除本地文件src/onboarding/settings-store.ts:32
await unlink(temp).catch(() => undefined); - 读取本地文件src/onboarding/store.ts:47
try {return connectionRecord(JSON.parse(await readFile(join(this.directory, 'connection.json'), 'utf8')));} - 写入本地文件src/onboarding/store.ts:53
await mkdir(this.directory, {recursive: true, mode: 0o700}); - 写入本地文件src/onboarding/store.ts:58
await rename(temp, join(this.directory, 'connection.json')); - 删除本地文件src/onboarding/store.ts:59
} catch (error) {await file.close().catch(() => undefined); await rm(temp, {force: true}); throw error;} - 请求外部主机registry.npmjs.orgsrc/onboarding/updates.ts:32
const response = await fetch(`https://registry.npmjs.org/${name.replace('/', '%2f')}`, - 发起网络请求src/onboarding/updates.ts:32
const response = await fetch(`https://registry.npmjs.org/${name.replace('/', '%2f')}`, - 写入本地文件src/permission-preferences.ts:72
await mkdir(store.directory, {recursive: true, mode: 0o700}); - 读取本地文件src/permission-preferences.ts:73
const info = await lstat(store.directory); - 写入本地文件src/permission-preferences.ts:75
await chmod(store.directory, 0o700); - 读取本地文件src/permission-preferences.ts:78
try {file = await lstat(path);} - 写入本地文件src/permission-preferences.ts:130
await rename(temporary, join(this.directory, FILE_NAME)); - 删除本地文件src/permission-preferences.ts:135
await unlink(temporary).catch(() => undefined); - 写入本地文件src/session-store.ts:143
await mkdir(directory, {recursive: true, mode: 0o700}); - 写入本地文件src/session-store.ts:144
await chmod(directory, 0o700); - 读取本地文件src/session-store.ts:148
store.document = parseDocument(JSON.parse(await readFile(file, 'utf8'))); - 写入本地文件src/session-store.ts:149
await chmod(file, 0o600); - 写入本地文件src/session-store.ts:182
await rename(temporary, file); - 删除本地文件src/session-store.ts:189
await unlink(temporary).catch(() => undefined); - 写入本地文件src/session-store.ts:314
rename(context: SessionContext, title: string): Promise<SavedSession> { - 写入本地文件src/topic-store.ts:77
await mkdir(directory, {recursive: true, mode: 0o700}); - 写入本地文件src/topic-store.ts:78
await chmod(directory, 0o700); - 写入本地文件src/topic-store.ts:164
await rename(temporary, join(this.directory, 'topics.json')); - 删除本地文件src/topic-store.ts:169
await unlink(temporary).catch(() => undefined);
扫描于 2026/11/2(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
涉及外部主机:registry.npmjs.org
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-llm@deepseek-ai/dsh-scope@deepseek-ai/dsh-session@deepseek-ai/dsh-session-persistence@deepseek-ai/dsh-session-persistence-jsonl@deepseek-ai/dsh-system-prompt@deepseek-ai/dsh-tools@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-lark-agent
不在电脑前时,也能用飞书 / Lark 联系你的 DeepSeek Harness 助手。
dsh-lark-agent 给运行中的 DeepSeek Harness 加一个飞书 / Lark 私聊入口:交办任务、讨论方案、接着聊之前的话题,手机上就能做。飞书有自己独立的会话,绝不会抢占桌面应用或网页里已经打开的聊天。
dsh-lark-agent 图文演示(飞书聊天界面用演示数据重绘,非录屏):从 Harness 设置页进入飞书私聊,返回图表和表单卡片
安装 / 更新
开始之前:
- DeepSeek Harness 已在运行,能正常聊天,并且选好了默认模型:PC App 0.2.1-rc.5(0.2.1-rc.2 和 rc.3 也可以),或 Web / dsh 命令行 0.1.1-rc.2。
- 启用插件之前,先在同一台机器上装好官方 Lark 命令行(需要 Node.js / npm):
npm install -g @larksuite/cli@1.0.98
lark-cli --version
不要运行 lark-cli config init 或 lark-cli auth login:扫码时插件会自己创建一个专用命令行配置档,而 config init 可能覆盖已有的配置档。
展开完整文档(README 剩余 1 节)
dsh-lark-agent 不在电脑前时,也能用飞书 / Lark 联系你的 DeepSeek Harness 助手。 dsh-lark-agent 给运行中的 DeepSeek Harness 加一个飞书 / Lark 私聊入口:交办任务、讨论方案、接着聊之前的话题,手机上就能做。飞书有自己独立的会话,绝不会抢占桌面应用或网页里已经打开的聊天。 dsh-lark-agent 图文演示(飞书聊天界面用演示数据重绘,非录屏):从 Harness 设置页进入飞书私聊,返回图表和表单卡片 安装 / 更新 开始之前: - DeepSeek Harness 已在运行,能正常聊天,并且选好了默认模型:PC App 0.2.1-rc.5(0.2.1-rc.2 和 rc.3 也可以),或 Web / dsh 命令行 0.1.1-rc.2。 - 启用插件之前,先在同一台机器上装好官方 Lark 命令行(需要 Node.js / npm): npm install -g @larksuite/cli@1.0.98 lark-cli --version 不要运行 lark-cli config init 或 lark-cli auth login:扫码时插件会自己创建一个专用命令行配置档,而 config init 可能覆盖已有的配置档。 在 DeepSeek Harness 桌面应用里安装 在侧边栏打开 插件 → 添加插件(Plugins → Add plugin),输入 dsh-lark-agent,点 安装(Install),再点 立即启用(Enable now)。如果应用提示重启,就重启。 用 dsh 命令行安装 dsh plugin 底层跑的是 pnpm,所以 pnpm 必须在你的 PATH 里: dsh plugin --profile web add dsh-lark-agent@0.6.2 --allow-build=protobufjs 然后重启 dsh web。 [!NOTE] --allow-build=protobufjs 允许 Lark SDK 的一个依赖运行它的安装脚本。不加这个参数,pnpm 11 会以 ERR_PNPM_IGNORED_BUILDS 报错退出,dsh 也就不会启用插件。如果已经踩到这个坑,运行: dsh plugin --profile web approve-builds '!protobufjs' ! 表示跳过这个可选脚本(它只打印一行版本提示),让 dsh 把插件启用完。然后重启 dsh web。 更新 新版本发布满一天后,飞书设置页会显示一条提示,列出升级步骤(在桌面应用里还会直接帮你打开插件列表)。在那之前,不带精确版本的安装(包括 @latest)仍会选中上一个版本,因为 pnpm 11 会跳过发布不足 24 小时的版本。想在新版本发布后立刻装上,请用上面安装示例里的精确版本。如果安装选到了旧版本,而 DeepSeek Harness 判定它不兼容,请看排障。 应用 0.2.1-rc.5 要求插件 0.6.1 或更高版本;插件 0.6.0 只声明支持到 rc.3。发布后请用上面的安装命令,或改用源码构建的包。 1. 在飞书设置页点击暂停连接,并按升级里的说明做好备份。 2. 桌面应用:添加插件对话框会提示,安装新版本前必须先卸载第三方插件,所以在插件页卸载 dsh-lark-agent,再重新添加(用本地构建升级已在 rc.5 上验证过;更早的源码构建显示为 dsh-larkbot)。命令行:运行 dsh plugin --profile web update dsh-lark-agent@latest,然后重启 dsh web。 3. 点击恢复连接,确认机器人能回复。 连接飞书 按钮文字按界面原样用中文引用,并附英文释义。 1. 在桌面应用打开设置 → 飞书 agent(Settings → Feishu agent),或在网页端打开设置 → 插件 → 飞书 agent。选一个机器人,点击扫码创建并连接(scan to create and connect)。要再加一个 Agent,用添加机器人(add robot);每个机器人有各自的预设和工作区设置。 2. 用你自己的飞书账号扫码并确认。如果组织要求管理员审批,等审批通过后点击重新检查(check again)。 3. 点击打开飞书私聊(open private chat),用扫码的那个账号,把配对词(DSH-…,10 分钟内有效)单独作为一条纯文本消息发出去,内容要和显示的一模一样。如果系统询问,用这是我,完成连接(this is me)确认。 4. 页面显示已连接(connected)后,给机器人发条消息。 连接时的模型检查不会在 Harness 里创建「飞书连接测试」会话。飞书入口只在宿主在线时可用:应用关闭、网页宿主停止或电脑休眠时都不可用。 能做什么 | 在飞书里,你…… | 助手会…… | | 发一条请求 | 用 Harness 自带的工具处理(网页搜索、读取页面、工作区文件等),回复实时流式写进一张卡片;思考和工具步骤折叠在卡片里,像应用里那样一步步展示,卡片末尾注明所用的模型、思考深度和权限模式 | | 让 Harness 把工作委派给子代理 | 子代理的消息再次唤醒 Harness 时,把后续结果和更新后的交付物发回同一个话题,包括首次回复已经结束之后 | | 使用多个助手 | 在一个页面里管理最多 10 个飞书机器人,每个都有自己的 Agent 预设、工作区、连接和历史;暂停某个机器人即可编辑它的设置。宿主提供预设时可以选择预设 | | 在私聊 Harness 会话里发图片 | 通过宿主的持久附件读取 PNG、JPEG、WebP 或 GIF,前提是所选模型支持图片;最多 4 张,每张 10 MB | | 发语音消息 | 先为该机器人点 开通语音权限,然后暂停、启用语音输入并保存。可转写最长 60 秒的中文 / 英文语音,并以文字回复;需要 FFmpeg,以及支持 ASR 的租户套餐 | | 请求需要你确认的操作 | 发送确认卡片:点 允许一次 或 拒绝;5 分钟内没有答复就不会执行 | | Harness 让你做选择 | 发送选择卡片:点一个选项,或填写后提交 | | 点 本话题设置,或在话题内使用 /settings | 编辑该话题的模型、思考深度和权限模式;保存后从下一轮开始生效。底部设置菜单可以选择话题,或编辑新话题的默认值。完全访问权限需要确认 | | 索要结果文件 | 把工作区里的文件直接发到聊天 | | 要求配图讲解 | 在回复里展示私聊 Harness 会话工作区中的本地图片,并附上讲解 | | 说「以后先说结论」 | 记住这个偏好 | | 在话题内继续对话,或使用 /sessions、/new | 每段对话都留在各自的原生飞书话题里;在新话题的入口卡片下回复,或用可搜索、分页的下拉菜单重新打开早先的话题 | | 要求把一些数字画成柱状图 | 用原生飞书图表卡片回复 | | 要求先让你在选项之间挑选 | 发送表单卡片,你提交后继续 | | 要求架构图或报告 | 创建飞书文档(图表用白板),仅与你一人只读共享;在 App 0.2.1-rc.2 / rc.3 / rc.5 中,在应用里打开该飞书会话还会显示本地预览 | | 使用 /model、/thinking | 在话题内只改该话题的模型和思考深度,并与同一个 App 会话同步;在主聊天里改的是新话题的默认值 | 默认只回复你自己的私聊。在这个聊天里,助手就是你的 Harness 本身:它能用哪些工具、哪些操作需要你确认,都遵循你电脑上的权限设置。会话和记忆留在运行 Harness 的电脑上;消息会经过飞书和你的模型服务商。 在主聊天里发新请求会开一个话题;之后在这个话题里继续对话,上下文就能保持住。已授权的群聊也是同样的机制,但每条消息仍需 @ 提及。/new 会再开一个话题,之前的话题仍然保留。 须知 - 更多文档:命令、隐私、升级、聊天底部菜单、团队部署和故障排查见 DEVELOPMENT.md(中文)。 - 兼容性:已在 PC App 0.2.1-rc.2 和 dsh 命令行 / Web 0.1.1-rc.2 上完整验证。PC App 0.2.1-rc.3 通过真实主机契约测试,插件也能在其上加载并连接(rc.3 上的首次扫码配置尚未测试)。在 PC App 0.2.1-rc.5 上,已验证真实主机契约测试、本地包升级、插件加载、恢复及暂停/恢复现有连接、主机重启;rc.5 上的首次扫码配置和真实私聊回复尚未测试。其他版本、平台和租户尚未验证。 - 语言:设置页、机器人内置消息(/help、状态文本、卡片按钮、底部菜单)和介绍视频均为中文。 许可证 MIT。DeepSeek 和飞书 / Lark 的品牌资产归各自所有者,不在 MIT 许可证覆盖范围内;这是独立开源插件,并非官方产品。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Nirvana-Jie/dsh-lark-agent
离开电脑,也能在飞书里找到你的 DeepSeek Harness 助手
相关插件 · 平台集成
智能体工程课walkinglabs/learn-harness-engineering
一门项目制课程,教你搭建环境、管理状态、做验证、加控制机制,让 AI 编程智能体稳定干活。
★ 21,155已汉化DSH
71.7
视频翻译配音liuzhao1225/YouDub-webui
开源视频本地化工作台:导入视频,识别、翻译并逐句克隆原声,生成字幕和配音成片。
★ 5,778已汉化Cordis
71.4
失败经验库Ikalus1988/MisakaNet
📚 零依赖、由 git 支撑的微课程库,让 AI 智能体异步分享并检索经过验证的调试经验。| https://misakanet.org
★ 550已汉化DSH
71.2
桌面智能体工作区freestylefly/wesight
WeSight 是开源桌面控制台,面向本地 AI 智能体。它帮你安装或复用 Claude…
★ 933已汉化MCP
71
IM 机器人接入xmanrui/dsh-im
让 DeepSeek Harness 触手可及 Connecting DeepSeek Harness
★ 3,110已汉化DeepSeek 客户端
70.9
中国平台研究引擎Jesseovo/last30days-skill-cn
给 AI Agent 的中文互联网研究 Skill:检索 8 大平台最近 30…
★ 2,031已汉化DSH
70.7