Part 1
一张薄整合层,一座技能库,一个借来的引擎
easel/ 只有 768 行。产品不在循环里,在三件事:给 OpenClaw 喂自包含的画像前缀、让脚本把成品写进 outputs/<主题>/、真发前用确定性扫描拦住密钥。
flowchart TB
subgraph UI["创作者看见的"]
W["React 工作台"]
C["easel CLI"]
end
subgraph HOST["Easel 宿主"]
P["persona.py 画像前缀"]
A["web/app.py SSE · 双锁 · uuid5"]
G["content_guard · persona_gate"]
end
subgraph ENG["借来的引擎"]
O["openclaw --profile easel"]
end
subgraph DISK["项目磁盘"]
S["112 SKILL + 44 共享脚本"]
O2["outputs/ 内容项目"]
end
W --> A --> P --> O
C --> P
O -->|cd 项目根| S --> O2
G --> O2
和 Open Design 的亲缘
都是宿主:循环不是自己的。Open Design 接 25 个 CLI 做设计文件;Easel 接 1 个 OpenClaw 做国内六平台内容。卡片视觉还写在致谢里借鉴了 open-design。
Part 1 · 续
五层是写给模型看的分工,不是 Python 调度器
仓库里没有 WorkflowEngine。发现 9 / 策划 16 / 制作 50 / 发布 20 / 归因 11 / 基础 6,靠 SKILL.md 的 layer: 和跨层时的薄 manifest。单层任务直接做;跨两层以上才给短 Plan。
| 层 | Skill 数 | 磁盘上留下什么 |
|---|---|---|
| discover | 9 | 选题简报、热榜摘要 |
| plan | 16 | brief.md、日历、大纲 |
| produce | 50 | 卡片 / 视频 / 文案成品 |
| publish | 20 | 真发 + publish-log |
| attribute | 11 | 数据回流 memory.md |
被否掉的方案写在注释里:全局 USER.md(并发互踩)、三入口各写各的超时、OpenClaw 默认 thinking=high(历史丢签名导致回放 400)。宿主的工作就是把这些伤口包扎好。
Part 2
四个实验台:把源码逻辑拨给你看
下面不是示意图。LAB 01 按 docs/prompt-stack.md 装配;LAB 02 用 description 做路由(仓库里没有 Python 路由器);LAB 03 移植 output_paths.py 的泛名与层级规则;LAB 04 移植 content_guard.py 的 BLOCK / WARN 分级。
LAB 01
提示词四层栈
拨开关看哪些层进 OpenClaw 的上下文。常驻层(SOUL / AGENTS / CONTEXT)每轮都在;SKILL 被触发才加载;画像是消息前缀,不是全局 USER.md;TURN_REMINDER 只加在 Web 对话末尾。
SOUL.md 人格常驻 · 不写具体 skill 名
AGENTS.md 宪法先路由 · 先 cd 项目根 · 真产物才算完
CONTEXT.md 路径sync.sh 生成绝对路径
SKILL.md 被触发按需 · 脚本不进 prompt
画像前缀(消息内联)否掉了全局 USER.md
TURN_REMINDERWeb 对话末尾 · 抗指令衰减
常驻 system
按需 skill
每轮消息(近因)
LAB 02
Skill 路由(description 就是路由器)
输入一句创作者会说的话。匹配规则移植自 SKILL.md 的中文 description:精确命中 → 相邻边界 → 否则通用
social-content。仓库里没有 if intent == 的 Python 路由器。
LAB 03
outputs 路径门禁
移植
output_paths.py:内容必须 outputs/<人类可读主题>/文件;泛名(xhs / test / tmp / 主题)直接拒绝;_ 系统目录要显式允许。
LAB 04
出站闸门 BLOCK / WARN
移植
content_guard.py 的分级:密钥 / 内部域名 / 代理 IP / env 名 → exit 7 硬拦;「由 AI 生成」/ 模型名 → 只告警(论文解读可能是正文)。人设分数不在这里——那道闸永不阻断发布。
Part 3
读下去
实验台只覆盖四条承重规则。会话双锁、uuid5 钉死 transcript、thinking 自愈、SSE 断线不杀、小红书 SOP,都在全文里按 文件:行号 展开。
| 去哪 | 得到什么 |
|---|---|
| Easel 源码分析(20 章) | 动机 → 约束 → 被否方案 → 选择 → 代价 · 冻在 765f5a6 |
| 从零构建教程(15 步) | 跟着「做一条小红书并发出去」装配 minieasel |
| Open Design 解析站 | 同一条「不写循环」路线的设计宿主对照 |