@open-dingtalk/dingtalk-workforce-harness
v0.1.0-beta.2
Published
钉钉数字员工:配置引导、进程管理和稳定版 / beta 升级
Readme
open-dingtalk-executive
开发和部署钉钉数字员工的项目。Harness 用 deepseek-harness(dsh,
从 npm 装,版本 pin 在 package.json + pnpm-lock.yaml),所有能力通过 dsh 插件实现,
profile 按员工 spec 组装。
当前有两个员工:hr(制度政策问答)和 assistant(Boss 秘书:收任务 → LLM 规划 →
主管审批 → 真执行 → 双向反馈)。两者共用同一个 dws 登录态,由 router/ 扇出消息 ——
否则钉钉 Stream 随机单播,约 50% 消息静默丢失。
架构一览
图示为多员工共用一个 DWS 账号:Router 只广播,准入与寻址由各员工处理。 各员工独立运行 DSH,按 profile 装配插件,并保存各自的会话与状态。点击图可查看 SVG 大图。
用 coding agent 上手(推荐)
checkout 后直接用 Claude Code(或任意 coding agent)打开本项目,发一句提示词:
帮我配置并启动钉钉数字员工agent 以 CLAUDE.md 为索引、以 docs/ 为深水区完成初始化。
LLM 凭据只填 .env;钉钉侧走 dws 的 OAuth 登录态,不填也能 build。
手动快速开始
nvm use # node 版本见 .nvmrc(engines >=26.8.1 <27)
cp .env.example .env # 只填 LLM 凭据
make build # 装 dsh(版本 pin)+ 组装 profile 到 var/<NAME>/
make start # 启动
make status # 端口在听 ≠ 钉钉链路活着,status 才查订阅
make reset # 改配置后、钉钉侧验证前必做,否则模型照抄旧会话答案多员工:make start NAME=assistant(一员工 = 一进程 = 一 var/<name>/)。
命令全集见 make help。
两个 checkout 后容易踩的坑
- 别按包名写
modules。_base.patch.yml禁掉的是 client 产物注册表(无头部署不渲染界面), entry id 是modules,包名才是@deepseek-ai/dsh-client-modules—— 按包名写静默无效,make check抓过。 bin/employee里的cd "$REPO"和exec不能删。 dsh 的 app-boot 扫的是 invocation cwd 的.env;exec保证 SIGTERM 直达 dsh、让插件退订 dws 事件 (中间不能有吞信号的包装进程,停机也绝不kill -9)。
文档
| 你想干什么 | 读这篇 | |---|---| | 给 coding agent 的索引、十条硬红线、目录结构 | CLAUDE.md | | 排查钉钉链路(不回消息、丢一半、准入、出站) | docs/dws-event-consume.md | | 改 profile / patch / 写新插件 | docs/dsh-机制.md | | 加语料、改检索 | docs/知识库与检索.md | | 加 eval、写闸门、开源脱敏 | docs/spec-与-evals.md | | 部署、容器、升级 dsh、换机迁移 | docs/部署.md | | Employee Loop 与审批流的设计 | docs/degital-employee-loop.md | | 某个员工能做什么 | employees/hr/SPEC.md · employees/assistant/SPEC.md | | 这个项目是怎么被「说」出来的 | docs/runbook/ |
