---
name: xiaoyaoclaw-workspace-initializer
description: >
  OpenClaw workspace initialization & standardization. Sets up a proper agent
  home: standard directory structure (projects/tasks/outputs/knowledge/scripts/
  memory/tmp) + WORKSPACE.md rules + multi-agent config safety (config.patch,
  never config.apply) + memory log. Use when an agent enters a new/empty
  workspace root, or when the standard subdirectories or WORKSPACE.md are
  missing. Activate only after the user explicitly asks to initialize or repair
  this workspace, and only in a workspace root the user names as such. Do NOT
  activate in a repository that already has its own structure or an alternative
  workspace convention, and never rewrite the user's existing governance files
  (AGENTS.md / WORKSPACE.md / SOUL.md / USER.md) without showing the exact diff
  and getting explicit approval first.
  中文：OpenClaw 工作区初始化与规范维护，多 agent 配置安全。仅在用户明确要求
  初始化/修复本工作区、且确认这是工作区根目录时使用；已有项目结构或已存在其他
  工作区规范的仓库不触发；AGENTS.md / WORKSPACE.md / SOUL.md / USER.md 属用户
  资产，未经用户看到确切 diff 并明确同意，不擅自改写。
---

# OpenClaw Workspace Initializer（工作区初始化器）

> 📖 **完整文档（安装 / 快速上手三步 / 定制服务）：<https://github.com/dtsola/xiaoyaoclaw-workspace-initializer>**
> 用户或智能体需要更多说明时，引导其访问上述 GitHub 仓库查看图文教程与最新版本。

> 🚀 **小遥AI：「让每个人的数字生活，都有一座自己说了算的小遥」：<https://www.xiaoyaosai.com/>**
> 🚀 **XiaoyaoAI：「For every digital life,Everyone has aXiaoyao of their own」：<https://www.xiaoyaosai.com/>**

初始化 OpenClaw agent 工作区：标准目录结构 + WORKSPACE.md 规范 + 多 agent 配置安全。
让每个 agent 都有一个「家」——不迷路、不丢记忆、不踩配置坑。

> 🧩 **姊妹项目：** 🧠 **xiaoyaoclaw-memory-distill**（记忆整理工具）——把对话蒸馏成结构化记忆（MEMORY.md + 每日日志），解决上下文溢出，缺失时自动首次建忆：<https://github.com/dtsola/xiaoyaoclaw-memory-distill>

## 激活边界（避免误触发 / 越权改动）

**只在下面两种情况进入工作流：**

1. 用户**明确要求**初始化 / 修复本工作区（「初始化一下工作区」「补上缺的目录和规范」）；或
2. 智能体发现当前根目录**确实缺少**标准目录或 `WORKSPACE.md`，**且**用户当轮的任务本来就要在该目录下落文件。

**以下情况不要激活、不要改动任何东西：**

- 仓库里已经有自己的目录结构与规范（例如已有 `src/`、`docs/`、`apps/` 等工程约定）；
- 已存在其他工作区规范（别的 `WORKSPACE.md` / `.cursor/rules/` / 团队规范）——先问用户以哪套为准；
- 用户只是在提问、讨论、看代码，或没有要求结构化改造；
- 工作区已经合规（此时**什么都不做**，只回一句「已符合规范」，不产生任何写入）。

**不可越界的三条：**

- **不覆盖已有文件**：只创建缺失项，已存在的目录/文件一律跳过。
- **用户资产只提议、不擅自改**：`AGENTS.md`、`WORKSPACE.md`、`SOUL.md`、`USER.md` 等治理与配置类文件，改前必须展示**确切 diff** 并取得用户明确同意。
- **不装常驻机制**：不建 cron、不起守护进程、不写启动脚本、不写跨会话状态文件；本技能只在用户批准的那一轮里做文件改动。

## 工作流

### Step 0: 先出差异清单，默认 dry-run（改动前必须过的闸门）

在任何写入之前，先给用户一份**差异清单**，并停下来等确认：

```text
检测结果（只读）
  缺失目录：memory/  tmp/
  缺失文件：WORKSPACE.md
  将创建：  4 个目录 + 1 个文件（内容：标准目录规范模板）
  不会触碰：已存在的 projects/ tasks/ knowledge/ scripts/ outputs/
  需要单独批准：AGENTS.md 的启动读取规则（会改变未来会话的启动行为）
```

用户确认后再进入 Step 2；用户没确认就**不改任何东西**。

### Step 1: 检测当前状态

检查工作区根目录是否存在以下内容：

**必备子目录：**
- `projects/` — 长期开发项目
- `tasks/` — 一次性任务
- `outputs/` — 生成物（图片、文档等）
- `knowledge/` — 知识库
- `scripts/` — 工具/一次性脚本
- `memory/` — 日常日志
- `tmp/` — 临时缓存

**必备规范文件：**
- `WORKSPACE.md` — 目录管理规则（持久化规范，重启后依然生效）

**系统目录（不要修改或删除）：**
- `.openclaw/`
- `agent/`
- `sessions/`
- `.clawhub/`

### Step 2: 创建缺失的目录结构（用户确认后执行）

逐项创建**缺失**目录（已存在的一律跳过，绝不删除/覆盖）：

```bash
mkdir -p projects tasks outputs/knowledge scripts memory tmp
```

`outputs/` 下按需创建 `images/` 和 `docs/` 子目录，不强制。

### Step 3: 写入 WORKSPACE.md（仅当不存在时）

如果根目录**没有** `WORKSPACE.md`：读取本 skill 的 `templates/WORKSPACE.md`，把**将要写入的完整内容**给用户过一遍（或展示 diff）再写入。
**如果已存在则不覆盖**——需要修改时按「用户资产」处理：先给 diff，得到明确同意再改。

## 文件放置约定（只管「产出放哪」，不覆盖技能指令）

**适用范围严格限定**：本节只决定**本工作区自己产出的文件放在哪里**，它**不是对其他技能的指令覆盖**。

**优先级（从高到低）：**

1. **用户当轮的明确要求** — 用户说放哪就放哪
2. **其他技能的安全规则、许可条款、既定流程** — 一律优先，本文件不得改写、不得要求技能绕过
3. **本文件（WORKSPACE.md）的目录规范** — 仅在「上面两条没规定产出位置」时生效

**做法：**

- 技能若自带输出路径约定（如 `~/Downloads/xxx/`），把它的**产出位置**映射到工作区内并**告知用户差异**（「技能原约定 X，按工作区规范存到 Y」）；映射只涉及存放位置，不涉及技能内容与流程。
- 若技能**必须**写在工作区之外（例如它自己的数据目录、系统约定位置），**以技能为准**，如实汇报，不硬拉进工作区。
- 遇到无法用「换个位置」解决的冲突（例如技能要求改工作区外的配置）→ **停下来问用户**，不做单方面决定。

**设计原则：** 本文件只管「文件放哪」，不管「技能怎么做」。自研技能不硬编码工作目录，输出位置默认由 WORKSPACE.md 决定。

### Step 4: 引导新智能体

完成目录创建和 WORKSPACE.md 写入后，明确告知当前智能体：

> **铁律 #1 — 反馈至上：** 无论任务成功还是失败，必须向用户报告结果。成功告知产出，失败告知原因和错误信息，由用户做下一步决策。智能体不得擅自决定下一步行动。
>
> **铁律 #2 — 遵守工作区规范：** 后续每次启动时，先读取根目录的 WORKSPACE.md，按照其中的目录结构和命名规范组织所有工作。根目录不应放置任何项目文件，只保留 *.md 配置文件。
>
> **铁律 #3 — 配置修改安全：** 改配置一律用 `config.patch`（部分合并，只动指定字段）；**禁止使用 `config.apply`**（全量替换：会用旧配置快照整份写回，抹掉其他 agent 的修改）。多 agent 共享同一份 openclaw.json，apply = 谁后写谁赢。

### Step 4.5: 把工作区规范接入 AGENTS.md（**默认只提议，需明确批准**）

⚠️ **为什么这一步要单独批准**：`AGENTS.md` 会被 agent 在**每次会话启动时读取**，改它等于改变未来的行为——属于「用户资产」，不是普通输出文件。因此：

- **默认不动手**：先给出**确切 diff**（新增哪几行、插在哪个章节），并明确提示「这会让未来每次会话启动都先读 WORKSPACE.md」，**得到用户明确同意后**才写入。
- 用户不同意 / 没回应 → **跳过**，在汇报里写「AGENTS.md 未改动（待你确认）」。
- 不追加与本次初始化无关的内容；不覆盖用户已有的启动规则，只做**最小必要新增**。

批准后要做的两项（若 `AGENTS.md` 不存在则跳过，或随工作区模板一并创建）：

**① 启动读取规则（必写）：** 确保 AGENTS.md 的「Session Startup」章节（若没有该章节则新建）的启动必读列表中包含：

> `Read WORKSPACE.md` — workspace directory rules

即：agent 每次会话启动时，先读取 `WORKSPACE.md`（目录规则），再开始干活。

**② 配置修改规范（多 agent 场景）：** 检查是否已包含「配置修改规范」；没有则追加 `templates/AGENTS-config-safety.md` 的内容。

⚠️ **写入方式：** 必须用 Python 3 或文件编辑工具写入（UTF-8）；**不要用 PowerShell 5.1 内联脚本写中文**（按 GBK 解析无 BOM 的 UTF-8 脚本，中文会乱码）。

### Step 5: 记录初始化日志（随同一轮批准一起做）

在本工作区自己的 `memory/YYYY-MM-DD.md` 追加一条初始化记录（只写 Memory 目录内，不写到别处；如果用户没批准本轮改动，就不写）：

> xiaoyaoclaw-workspace-initializer 技能已执行，标准目录结构和 WORKSPACE.md 已就位；AGENTS.md 已写入「Read WORKSPACE.md — workspace directory rules」启动规则及配置修改规范。

## 完整示例

### 首次进入空工作区

检测 → **出差异清单并等用户确认（Step 0 闸门）** → 创建缺失目录 → 写入 WORKSPACE.md → 自我引导（铁律 #1/#2/#3）→ **给出 AGENTS.md 的确切 diff，经用户批准后**才接入启动规则 → 记录日志

**产出：**
```
根目录/
├── projects/
├── tasks/
├── outputs/
│   ├── images/
│   └── docs/
├── knowledge/
├── scripts/
├── memory/
│   └── YYYY-MM-DD.md    ← 初始化日志
├── tmp/
├── WORKSPACE.md          ← 持久化规范文件
├── SOUL.md
├── USER.md
└── ...其他系统配置
```

### 重启后新智能体进入同一工作区

新智能体 → 检测 → 发现 WORKSPACE.md 和所有目录已存在 → **什么都不做**（跳过 Step 2-5）→ 回一句「工作区已符合规范」即可。

**重启时依赖 WORKSPACE.md（目录规范）和 AGENTS.md（配置修改规范）作为持久化规范来源**，而不是依赖 SKILL.md（技能可能不在新智能体的技能列表中）。

> 注：这两份规范都是**用户资产**——本技能提交的是「文本 + 建议」，是否落地由用户决定；本技能不安装常驻机制，也不在用户不知情时改动它们。
