---
name: dingtalk-tag
description: 钉钉数字员工的自然语言创建、查询、修改、发布、删除、能力资源、执行状态、本地 Profile 落盘与 DSH 接入。Use when 用户说创建或管理数字员工、改人设/岗位/响应模式、发布或询问下线能力、查执行状态或 trace、管理数字员工 Skill/MCP、把已有数字员工转换为本地 Profile，或接入本地 DSH。命令前缀：dws dingtalk-tag。
metadata:
  category: product
  requires:
    bins:
      - dws
---

# 数字员工 Skill

执行任何 `dws` 操作前，先完整读取 [`dingtalk-shared`](../dingtalk-shared/SKILL.md)。先用 [dingtalk-tag-index.md](references/dingtalk-tag-index.md) 路由；生命周期读取 [manage.md](references/manage.md)，自然语言创建/恢复/DSH 接入再读 [manage-and-connect.md](references/manage-and-connect.md)；能力资源读取 [capability.md](references/capability.md)；执行排障读取 [run.md](references/run.md)。

## 路由

| 用户意图 | 命令 |
|---|---|
| 创建草稿 / 创建并发布 / 查询 / 修改 / 上线 / 删除 | `dws dingtalk-tag manage ...` |
| 下线 | 当前版本无独立下线命令；明确说明限制，不得用 delete 冒充下线 |
| A2A 或其他仅登录场景 | `dws dingtalk-tag manage login --agent-uuid ...` |
| 只登录数字员工并保存本地 Profile | `dws dingtalk-tag manage login --agent-uuid ...` |
| 把已有、已发布的本地数字员工接入 DSH | `dws dingtalk-tag connect --agent-uuid ... --channel dsh` |
| 把数字员工接入当前本地 Agent | `dws dingtalk-tag connect --agent-uuid ... --channel auto --daemon --alwayson` |
| 查询、停止或重启数字员工本地连接 | `dws dingtalk-tag connect list/status/stop/restart` |
| 在新机器接管（先在旧机器完成解绑） | 旧机器 `connect unbind` 成功后，新机器 `dws dingtalk-tag connect --agent-uuid ... --channel ...` |
| 解除本机连接，但保留员工和 Profile | `dws dingtalk-tag connect unbind --agent-uuid ...` |
| 将已有连接换为其他本地 Agent 或 DSH | 先 `connect unbind --agent-uuid ...`，再 `connect --agent-uuid ... --channel ...` |
| 创建、更新、删除或查询 Skill / MCP 资源 | `dws dingtalk-tag capability skill|mcp create|update|delete|list|query ...` |
| 查一次执行的状态或完整 trace | `dws dingtalk-tag run ...` |

## 自然语言编排硬约束

- 创建/更新的 MCP 主程序类型字段为 `digitalTagEmployeeProfile.type`，列表过滤使用顶层 `type`，仅支持 `open_code`、`local_agent`，`a2a` 暂不支持。CLI 使用语义明确的 `--main-program-type`；创建时必须显式传 `--main-program-type open_code|local_agent`，缺失或空值由 DWS 本地拦截；应告知调用方选择主程序类型，不能省略或发送空值。更新时未传则保持原值；明确接入本地 Agent/DSH 时传 `--main-program-type local_agent`。不要与详情命令中表示 draft/published 的 `--snapshot` 混淆。
- 创建时未提供 `--response-mode` 或值为空，CLI 默认发送 `mention_only`，包括 `local_agent`。更新时不传就不更新该字段，显式值保持不变；最终有效配置由服务端按当前草稿校验。
- 创建要求名称、描述和主程序类型；部门可不传，由服务端补操作人的主任职部门。不要向用户索要部门名称、岗位、工号或内部 uid。
- `save-draft` 只更新用户明确修改的基础草稿字段，不接受 Skill/MCP 完整数组。Skill/MCP 生命周期统一使用 `capability skill|mcp create|update|delete|list|query`；不设计 attach/detach，`check_mcp` 只在 create 和带配置的 update 内部调用。
- 创建或替换 MCP 配置时，须告知并显式填写 `configString.mcpServers.<名称>.type`（`streamable-http` 或 `sse`）以及对应 `url`；不能只填 URL，`configType=JSON` 也不能代替传输类型。仅更新 enabled 不重新提交配置。
- 发布所需配置由服务端校验；创建时默认响应模式为 `mention_only`。历史草稿缺少响应模式时先通过 `save-draft` 补齐，不以发布命令隐式改写草稿。
- 同一自然语言请求里的连续写操作只做一次汇总确认；确认后才加 `--yes`。先用 `--dry-run --format json` 展示计划。
- 创建成功后若保存或发布失败，必须返回已创建的 `agentUuid` 和恢复命令；重试禁止再次执行 create。
- “创建并落盘 Profile”可顺序执行创建/发布与 `manage login`；“创建并接入 DSH”则使用 `connect --channel dsh`。创建/发布与 connect 是独立事务，connect 绝不创建、修改或发布数字员工。
- 用户可以只创建/管理数字员工、只把已有员工转换为本地 Profile，或继续接入 DSH；三种操作互不强绑定。
- 数字员工 ID 统一使用 `agentUuid` / `--agent-uuid`；人员标识统一使用 `userId`，不得要求或展示 uid、robotUid、staffId。
- 普通本地 Agent 接入使用 Event Consume，默认仅主管可触发；白名单中的用户必须先在员工身份下精确解析。支持 Codex、Qoder/QoderWork、Claude Code、CodeBuddy/WorkBuddy、Gemini、OpenCode 和 custom。OpenClaw/Hermes 暂未适配，不要回退到机器人创建流程。
- 自然语言“创建发布并接入本机”在发布后显式使用 `--daemon --alwayson`；命令行默认前台。DSH 不加这两个参数，由运行中的宿主员工级启动；宿主不可用时按 restartRequired 提示启动宿主。connect 不提供开机自启，也不能在电脑休眠期间处理消息。
- connect 失败后保留员工 ID 和已落盘 Profile，检查 `connect status` 再恢复；不要重复 create、不要清除事件重试预算、不要隐式覆盖另一个 Adapter 的绑定。
- 服务端 identity 由主管登录态注入，禁止传入 userId/orgId；deviceId 是稳定设备标识，runtimeBindingId 是服务端绑定 ID，与本地 bindingRevision/runtimeInstanceId 不同。绑定回执不代表在线；响应未知的 bind 不得自动重试或通过删配置绕过。只保存 Profile 使用 `manage login`。
- “暂停”使用 stop（保留绑定）；“解绑”使用 unbind（保留 Profile）；“换成本地另一个 Agent”先 unbind，成功后再 connect；两步先 dry-run 并汇总确认。换绑先确认旧实例释放，unknown 或超时不得手动删绑定来绕过。新绑定已提交但启动失败使用 restart；旧绑定仍在 unbinding 时重试原 unbind。

## 安全

- `manage login` 在内部完成 AuthCode 换票、在线身份核验，并保存精确 `corpId:userId` Profile；不得输出或转存 AuthCode/Token。只登录或仅保存 Profile 使用 `manage login`；真正接入本地 Agent/DSH 使用 `connect`。
- 删除不可逆；修改、发布、删除和 connect 按 Schema 的确认要求执行。
- Channel 的 `reply` / `operator-private` 只供已绑定的本地 Adapter/DSH 机器协议使用，必须指定员工 Profile，正文只能走受限 stdin；不要为普通用户消息直接调用。
