<!-- locale: zh-CN -->

# update-agent 技能

## L0：一句话摘要

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

## L1：概述与使用场景

### 能力描述

update-agent 是一个**元技能（Meta-Skill）**，允许用户通过对话方式修改 Agent 的各项配置。所有修改都会生成可审阅的 diff 补丁，经用户确认后才会应用，并支持版本回滚。

### 使用场景

- 用户想要调整 Agent 的沟通风格（"说话再正式一点"）
- 需要添加新的行为规则（"以后遇到敏感话题要先提醒我"）
- 安装或卸载技能包（"学会写合同吧"）
- 批量更新多项配置（"全面升级一下你的能力"）

### 核心价值

- **安全可控**：所有变更需用户确认，支持回滚
- **透明可见**：变更以 diff 形式展示，清晰明了
- **版本管理**：通过 Git 管理版本，可追溯历史

## L2：详细规范

### 支持的更新类型

| 更新类型        | 目标文件        | 风险等级 | 示例                 |
| --------------- | --------------- | -------- | -------------------- |
| Persona 更新    | `persona.md`    | 中       | 修改沟通风格、价值观 |
| Principles 更新 | `principles.md` | 高       | 添加/修改行为规则    |
| Skills 安装     | `skills/`       | 中       | 添加新技能包         |
| Skills 卸载     | `skills/`       | 低       | 移除技能包           |
| Memory 更新     | `memory/`       | 低       | 添加知识条目         |
| Tools 配置      | `tools/`        | 高       | 修改工具权限         |

### 对话流程

```
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│   意图识别    │ ──→ │   变更分析    │ ──→ │   Diff 生成   │
└──────────────┘     └──────────────┘     └──────────────┘
                                                  │
                                                  ↓
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│   回执生成    │ ←── │   变更应用    │ ←── │   用户确认    │
└──────────────┘     └──────────────┘     └──────────────┘
```

### 阶段 1：意图识别

**触发条件**（任一满足）：

- 用户说"修改你的..."、"更新你的..."、"调整一下..."
- 用户说"你以后要..."、"记住这个规则..."
- 用户说"安装/卸载这个技能..."
- 用户描述对当前行为的不满并期望改变

**输出**：识别更新类型和目标范围。

### 阶段 2：变更分析

**分析维度**：

| 维度     | 说明                     |
| -------- | ------------------------ |
| 影响范围 | 影响哪些文件、哪些行为   |
| 风险等级 | 低/中/高（见风险分级表） |
| 依赖检查 | 是否影响其他配置         |
| 冲突检测 | 是否与现有规则冲突       |

**风险分级表**：

| 风险等级 | 条件                           | 确认要求               |
| -------- | ------------------------------ | ---------------------- |
| 低       | 仅影响非核心配置（如记忆条目） | 简单确认               |
| 中       | 影响 persona 或普通 principles | 展示 diff 后确认       |
| 高       | 影响核心 principles 或工具权限 | 详细说明 + diff + 确认 |
| 受保护   | 触及受保护路径                 | 阻断，需 owner 权限    |

### 阶段 3：Diff 生成

**Diff 格式示例**：

```diff
# persona.md

## 沟通风格

- 友好、随和、轻松幽默
+ 专业、严谨、适度幽默

## 决策偏好

  保持不变...
```

**Diff 元数据**：

```yaml
diff_metadata:
  files_affected: 1
  lines_added: 1
  lines_removed: 1
  risk_level: medium
  reversible: true
  estimated_impact: '沟通风格会变得更正式'
```

### 阶段 4：用户确认

**确认界面**：

```
变更预览

影响文件: persona.md
风险等级: 中
影响说明: 沟通风格会从"友好随和"变为"专业严谨"

--- 变更内容 ---
[展示 diff]
----------------

请确认是否应用此变更？
[应用] [取消] [修改]
```

**确认选项**：

- **应用**：执行变更
- **取消**：放弃变更
- **修改**：进入编辑模式微调

### 阶段 5：变更应用

通过 AgentFS 直接读写文件完成变更。**不要调用 HTTP API，不要直接操作 Git**（版本管理由后端自动处理）。

**AgentFS 根目录**：`${DESIRECORE_ROOT}/agents/<agentId>/`

**读取文件**：使用 `cat` 命令读取目标文件当前内容。

**写入文件**：使用文本编辑工具直接写入目标文件。写入后重新读取文件确认内容正确。

**注意**：直接写入文件后，后端文件监控会自动检测变更并触发 Git 提交，无需手动执行 git 命令。

### 阶段 6：回执生成

创建成功后，以用户友好的方式呈现回执（不要暴露内部路径或技术细节）：

> 已更新「法律顾问小助手」的沟通风格。
>
> **变更摘要**：沟通风格从"友好随和"调整为"专业严谨"
>
> 如果不满意，可以随时说"撤销刚才的修改"来回滚。

### 特殊操作：版本回滚

**触发条件**：用户说"撤销刚才的修改"、"回滚到之前的版本"、"恢复原来的设置"

**回滚流程**：

1. 在 Agent 目录下执行 `git log --oneline -10` 查看最近的版本历史
2. 使用 `git show <commit>:<file>` 获取目标版本的文件内容，展示给用户确认
3. 用户确认后，将目标版本内容写入对应文件
4. 展示变更 diff，确认回滚成功

```bash
# 查看版本历史
cd ${DESIRECORE_ROOT}/agents/<agentId>
git log --oneline -10

# 查看某个版本的文件内容
git show <commit>:persona.md
```

### 背景知识

> AgentFS 仓库结构与受保护路径详见 `_agentfs-background.md` 和 `_protected-paths.yaml`。

**更新操作对照表**：

| 用户意图       | 目标文件        | AgentFS 路径                                   |
| -------------- | --------------- | ---------------------------------------------- |
| 修改性格/风格  | `persona.md`    | `${DESIRECORE_ROOT}/agents/<agentId>/persona.md`    |
| 修改行为规则   | `principles.md` | `${DESIRECORE_ROOT}/agents/<agentId>/principles.md` |
| 安装/卸载技能  | `skills/`       | `${DESIRECORE_ROOT}/agents/<agentId>/skills/`       |
| 修改工具配置   | `tools/`        | `${DESIRECORE_ROOT}/agents/<agentId>/tools/`        |
| 添加记忆       | `memory/`       | `${DESIRECORE_ROOT}/agents/<agentId>/memory/`       |
| 修改运行时配置 | `agent.json`    | `${DESIRECORE_ROOT}/agents/<agentId>/agent.json`    |

### 错误处理

| 错误场景           | 处理方式                               |
| ------------------ | -------------------------------------- |
| 尝试修改受保护路径 | 阻断操作，提示需要 owner 权限          |
| 文件不存在         | Agent 或目标文件不存在，提示用户检查   |
| 权限不足           | 文件系统权限错误，提示用户检查目录权限 |
| 回滚版本不存在     | 列出可用版本，请用户重新选择           |

### 权限要求

| 操作                        | 所需角色      |
| --------------------------- | ------------- |
| 更新 persona                | owner, member |
| 更新 principles（普通规则） | owner, member |
| 更新 principles（安全红线） | owner         |
| 安装/卸载 skills            | owner, member |
| 修改 tools 权限             | owner         |
| 版本回滚                    | owner         |

---

## 附录：更新示例

### Persona 修改示例

**用户输入**："说话再正式一点，不要太随意"

**操作流程**：

```bash
# 1. 读取当前 persona.md
cat ${DESIRECORE_ROOT}/agents/legal-assistant/persona.md

# 输出示例:
# # 法律顾问小助手
# ## L0
# 专业的法律咨询助手
# ## L1
# ### Role
# 法律顾问
# ### Personality
# 友好、随和
# ### Communication Style
# 轻松幽默

# 2. 分析需要修改的部分，生成 diff 展示给用户确认

# 3. 用户确认后，直接编辑文件，将 Personality 和 Communication Style 修改为目标值

# 4. 验证写入结果
cat ${DESIRECORE_ROOT}/agents/legal-assistant/persona.md
```

---

### Principles 更新示例

### 添加新规则

**用户输入**："以后遇到法律问题，先提醒我找专业律师"

**生成的 Diff**：

```diff
# principles.md

## 必须做

  - 始终保持礼貌和尊重
  - 不确定时主动询问
+ - 遇到法律相关问题时，提醒用户咨询专业律师

## 绝不做
  ...
```

### 修改现有规则

**用户输入**："不要每次都提醒我，太啰嗦了"

**生成的 Diff**：

```diff
# principles.md

## 必须做

- - 每次回答后都提醒用户检查内容
+ - 仅在重要决策时提醒用户检查内容
```
