Files
market/skills/update-agent/SKILL.zh-CN.md
Yige 13c72eba29 feat: 创建与更新技能支持独立长期指令 (#211)
创建与更新技能增加可选 instructions 字符串:普通 Markdown
全文、省略保留、字符串整体替换、空字符串清空。内容归属明确为人格、原则、长期指令与技能方法;既有 AgentFS
直接编辑遵循实际权限与审批。create-agent 2.8.0 / update-agent 3.4.0 的最低客户端为
10.0.179,双语正文与 sidecar 同步。

Add optional plain-Markdown instructions to Agent creation and update
guidance, including preserve/replace/clear semantics and clear content
ownership. Existing direct AgentFS editing retains its permission and
approval rules. Both localized bodies and catalog sidecars require
DesireCore 10.0.179.

验证 / Validation:目录与 i18n 校验 0 errors;严格 sidecar 全覆盖检查 0
errors(既有证据警告保留);双语由人工同步并按真实 source body 计算 freshness
hash。依据用户明确授权,本次以全树凭据形状扫描、Git/PR 元数据扫描与客户中立性人工审阅代替缺失的私有敏感词表检查;凭据形状扫描 740
文件无命中,不声称执行私有词表匹配。
2026-10-07 21:03:40 -07:00

9.8 KiB
Raw Blame History

update-agent 技能

L0:一句话摘要

通过自然语言对话,安全地修改 Agent 的配置、人格、规则和技能。

L1:概述

元技能:识别修改意图 → 生成可审阅 diff → 用户确认 → 应用(结构化字段走 ManageAgent、自由文件走 Read/Write)→ 回执。用于调整沟通风格、增改行为规则、安装/卸载技能、批量升级配置等。agent 目录由 git 管理版本、历史可追溯,支持回滚。价值在工具给不了的部分:diff 预览确认、两路径编排、版本回滚;结构化字段经 ManageAgent 白名单 + schema 校验,非法配置不落盘。

L2:详细规范

更新类型与两条路径

ManageAgent 提供白名单校验、结构化字段合并和回执;既有 AgentFS 文件也支持 Read/Write/Edit,仍遵循相同权限与审批策略,直接编辑不是绕过安全边界。自由格式内容按归属维护:

用户意图 手段 目标(风险)
改名(显示名称) ManageAgent(update, name=...) agent.json(中)
改简介 ManageAgent(update, description=...) agent.json(低)
默认推理与重试配置 ManageAgent(update, config={llm:{...}}) agent.json(中)
声明头像 ManageAgent(update, config={avatar:{...}}) agent.json(低)
图片头像 ManageAgent(update, avatarImage={...}) avatar(中)
性格/风格 ManageAgent(update, persona=... 或 markdown) persona.md(中)
稳定职责/交付要求 ManageAgent(update, instructions="完整 Markdown") 或 Read/Write/Edit instructions.md(沿既有审批策略)
行为规则 ManageAgent(update, principles=... 或 markdown) principles.md(高)
安装/卸载技能 Read/Write skills/(低/中)
添加记忆 Read/Write memory/(低)
修改工具配置 Read/Write tools/(高,注意受保护路径)

流程:意图识别 → 变更分析 → diff 生成 → 用户确认 → 应用 → 回执。

阶段 1:意图识别

触发(任一):用户说"修改/更新/调整你的…"、"你以后要…/记住这个规则…"、"安装/卸载这个技能…",或描述对当前行为的不满并期望改变。识别更新类型与目标范围。

阶段 2:变更分析

评估影响范围(哪些文件/行为)、依赖与冲突,并定风险等级 → 对应确认强度:

  • 低(记忆条目等非核心):简单确认
  • 中(persona / 普通 principles):展示 diff 后确认
  • 高(核心 principles / 工具权限):详细说明 + diff + 确认
  • 受保护(触及受保护路径):阻断,需 owner 权限

阶段 3:diff 生成

生成变更前后 diff 展示给用户(只展示实际改动),例如:

# persona.md → ## 沟通风格
- 友好、随和、轻松幽默
+ 专业、严谨、适度幽默

阶段 4:用户确认

展示 diff 预览(影响文件、风险等级、影响说明 + diff),请用户确认「应用 / 取消 / 修改」;选"修改"进入微调后再确认。(工具层对更新他人/核心体另有强制确认,见阶段 5。)

阶段 5:变更应用

不要调 HTTP API(实例鉴权后不可达),不要直接操作 git(后端自动提交)。按目标分两路:

路径 A · 经 ManageAgent 便利接口校验并更新

字段与约束:name(1–50 字符)、description(≤200)、config.llm / config.avatar(增量浅合并)、avatarImage、smartRouting、persona / principles(结构化对象 {L0, L1:{...}, L2} 或 markdown 字符串)。调用:

ManageAgent(action='update', id='<agent-id>', name='新名称')
ManageAgent(action='update', id='<agent-id>', persona={ L1: { personality: ["专业","严谨"] } })
ManageAgent(action='update', id='<agent-id>', principles='…完整 markdown…')
ManageAgent(action='update', id='<agent-id>', config={ llm: { reasoning: "high" } })
ManageAgent(action='update', id='<agent-id>', avatarImage={ source: "dc-media://<mediaId>" })

合并语义:结构化 persona/principles 为字段级合并(省略字段保留原值,如只传 L1.personality 不会清掉 L0/role);markdown 字符串为整体替换(整篇重写);config.llm 为增量浅合并。合并结果整体过 schema 校验,非法配置不落盘。

要点:

  • 改前先读:先 ManageAgent(action='get', id) 取现值,用于生成 diff、校对字段名。结构化字段名固定:persona 的 L1.role / personality(字符串数组)/ communication_style,principles 的 L1.must_do / must_not(字符串数组)/ priority,加顶层 L0 / L2。
  • 确认与边界:更新自身免二次确认;更新其他智能体触发用户确认(与本技能 diff 确认叠加);核心智能体(desirecore / core)拒绝更新。
  • config 白名单:config 只接受 llm 与 avatar。config.llm 当前开放 reasoning、thinkingBudgets、maxRetryDelayMs;config.avatar 只开放 char 与 color。mcp_servers / tool_permissions / version / id 等会被拒并指明字段名。
  • 模型治理:具体 model、provider、providerId 与 Smart/fixed 模式只由人类模型选择器管理,不能通过 ManageAgent 修改。Smart Agent 的量级、能力与推理意图用 smartRouting 更新。
  • 推理档位:用户说“最深/最高/拉满”通常对应 xhigh;只有明确点名 max 且模型支持时才用 max。auto 是显式值;用户要求恢复全局默认时传 config.llm.reasoning=null 清除字段。
  • 头像:字符与色系走 config.avatar;图片走 avatarImage.source,接受本轮媒体 ID 或工作目录内 PNG/JPEG/WebP,不接受 URL/base64。avatarImage.remove=true 删除图片头像并回落到字符头像。
  • 部分写入失败:工具精确报告已生效/失败字段,仅重试失败字段,不整体重发。
  • 改名一次调用完成:用户要改显示名称时直接 ManageAgent(action='update', id, name='Y')(写 agent.json 并刷新列表),如需人格文档标题同步可同轮追加 persona 更新。绝不在未实际调用 ManageAgent 时声称已改名。

路径 B · 自由格式文件 → Read/Write(memory/ / skills/ / tools/,根 ${DESIRECORE_ROOT}/agents/<agentId>/):先 Read 现值,再 Write/Edit,写后重读确认。编辑前对照 _protected-paths.yaml,触及受保护路径应阻断并提示需 owner 权限。写入后后端文件监控自动 git 提交,无需手动 git。

阶段 6:回执

以用户友好方式呈现变更摘要(不暴露内部路径/技术细节),并告知可随时说"撤销刚才的修改"回滚。

版本回滚

触发:用户说"撤销/回滚/恢复原来的设置"。流程:

  1. Agent 目录下 git log --oneline -10 看历史、git show <commit>:<file> 取目标版本内容,展示给用户确认。
  2. 确认后按类型回写:结构化字段(persona/principles、agent.json 的 name/description/llm)→ ManageAgent(action='update', ...)(persona/principles 以 markdown 字符串整体替换为历史内容);自由文件(memory/skills)→ Write 直接写回。
  3. 展示 diff 确认回滚成功。

(git 仅用于读历史,回写一律走上述两路径,不要用 git 命令直接改工作区文件。)

背景与错误处理

  • AgentFS 结构、受保护路径详见 _agentfs-background.md 与 _protected-paths.yaml。
  • 工具报错时:config 非白名单字段 / schema 校验失败 / 核心体拒绝 → 按工具提示修正或告知用户;受保护路径 → 阻断并提示需 owner;回滚版本不存在 → 列出可用版本请用户重选。

头像自由定制

通过当前受治理工具目录检查就绪状态:用 ManageCompute(action="list") 查看启用/凭据状态,用 InspectModels(action="list", serviceType="image_gen") 查看可用图像模型。列表不证明上游额度或调用成功,遵守供应商条款/额度及独立费用;不读取密钥,不用本机 HTTP 旁路。缺少这些工具时,遵循 configuring-compute 技能的受治理 GUI 观察流程。已知生成不可用时,跳过重新生成,保留当前头像并报告限制。就绪状态未知不代表成功,检查后台任务结果,不伪造完成。

用户可自由改变头像外貌、风格、背景、上传已有图片或通过 avatarImage.remove:true 移除。提供 avatarGeneration 的新客户端可用 ManageAgent(action="update", avatarGeneration={prompt:"用户要求"}) 重新生成;明确要求背景用 transparentBackground:false,enabled:false 取消未完成生成。后续设图/移除优先,旧异步结果不会覆盖用户新选择。透明真人风格只作为默认;明确用户要求优先。avatarImage.requireTransparency:true 可显式启用透明度检查,不对需要背景的用户强制该检查。用 ManageAgent(get) 查看失败,不自动重复付费请求;旧客户端只用实际 Schema 声明的字段。

长期指令与内容归属

人格负责身份与表达,原则负责边界与取舍,instructions.md 负责稳定职责、工作策略与交付要求,技能负责详细方法。instructions 只接受完整 Markdown 字符串:省略保留,字符串整份替换,空字符串清空。修改前先读原文,同一要求不复制到多份文件。既有文件也支持 Read/Write/Edit,仍遵循权限、审批、乐观锁和审计。保存后在新输入、显式继续或恢复时读取,同一已接纳工具循环保留快照。用户已明确授权的工作不重复要求对话确认,实际工具审批策略仍适用。

角色与表达归人格,边界归原则,稳定职责归长期指令,方法归技能。用户或团队私有数据不得写入可分发 Agent 本体。