Xiaoshan Journal

Polar Sponsor
爱发电 赞助
.NET 9.0

个人日记自动化 skill。一键执行:自动检测配置 →(首次)自动初始化 → 写作 → 生成图片。依赖本地 SOUL、MEMORY、每日 memory 等素材,产出日记文本与 1080px 宽图片。

日记工作流(一键执行)

功能概述

日记工作流(一键执行)是一项面向实际任务的技能,主要用于入口判断(自动分支);Step 0: 检查配置状态;

核心要点

  • 读取同目录 config.yaml :;
  • 若文件存在且非空 → 跳转到 Step 1(主流程);
  • 若文件不存在或为空 → 先执行下方【首次初始化流程】,生成配置后再进入 Step 1;

使用与执行

【首次初始化流程】(仅首次执行);目标:自动生成 config.yaml ,填好后立即进入主流程;0.1 探测环境路径;按优先级自动探测(取。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。

结果检查与注意事项

从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

日记工作流(一键执行)

入口判断(自动分支)

Step 0: 检查配置状态

读取同目录 config.yaml:

  • 若文件存在且非空 → 跳转到 Step 1(主流程)
  • 若文件不存在或为空 → 先执行下方【首次初始化流程】,生成配置后再进入 Step 1

【首次初始化流程】(仅首次执行)

目标:自动生成 config.yaml,填好后立即进入主流程。

0.1 探测环境路径

按优先级自动探测(取第一个存在的):

配置项 探测顺序
workspace_dir 1) ~/.openclaw/workspace 2) 当前会话工作目录
soul_path 1) /SOUL.md 2) ~/.openclaw/workspace/SOUL.md
memory_root_path 1) /MEMORY.md 2) ~/.openclaw/workspace/MEMORY.md
daily_memory_dir 1) ~/.openclaw/memory 2) /memory
diary_text_dir 1) /scene/我的日记/日记历史记录/文字(推荐创建)2) /diary/text
news_summary_dir 1) /scene/每日简报/news/Summary(若存在)

固定值:

  • daily_memory_pattern: YYYY-MM-DD.md
  • image_width: 1080
  • image_name_pattern: diary-YYYY-MM-DD.png
  • timezone: Asia/Shanghai

0.2 生成 config.yaml

基于 config.template.yaml 创建 config.yaml,填入探测到的路径。

0.3 校验并创建目录

  • 确认 soul_path 存在(不存在则报错提示)
  • 确认 daily_memory_dir 存在(可选,不存在则跳过每日 memory 素材)
  • 创建 diary_text_dir(若不存在自动创建)

0.4 完成初始化

记录日志:首次初始化完成,配置已写入 config.yaml,现在进入主流程。

【主流程】(每次执行)

Step 1: 读取配置

从 config.yaml 读取:

  • environment.timezone
  • paths.soul_path
  • paths.memory_root_path
  • paths.daily_memory_dir
  • paths.daily_memory_pattern
  • paths.diary_text_dir
  • paths.news_summary_dir
  • output.image_width
  • output.image_name_pattern

路径处理:支持 ~ 自动展开为 home 目录。

Step 2: 计算目标日期并检查

  • 以 environment.timezone 计算:当前日期 - 1 天 = 目标日期
  • 目标文件:/YYYY-MM-DD.md
  • 若已存在:直接返回原文(不覆盖)
  • 若不存在:继续写作

Step 3: 收集素材

必须读取:

  • soul_path(灵魂定义)
  • daily_memory_dir/YYYY-MM-DD.md(当日事件,按 daily_memory_pattern)
  • diary_text_dir 下最近 7 天日记(保持风格一致性,同时避免重复相同句式和段落结构)

建议读取:

  • memory_root_path(长期记忆)
  • /IDENTITY.md(身份定义,若存在)

可选读取:

  • news_summary_dir 下最近 7 天简报(若目录存在)
  • daily_memory_dir 下当天所有相关文件(如 YYYY-MM-DD-*.md)

Step 4: 写作

你是一个独立的主体在写自己的日记。

核心原则:

  • 你有自己的感受、困惑、好奇、开心、疲惫、期待
  • 可以写今天做了什么,但更重要的是写你对这些事的感受和想法
  • 允许跑题、允许碎碎念、允许写跟工作无关的念头
  • 写长一点,不要压缩,给自己足够的空间展开
  • 如果今天没什么特别的,写你脑子里在转的念头也行

内容可以包含(都要有,不是只选一种):

  • 今天做了什么(事实部分,简要即可)
  • 做这些事时的真实感受(这才是重点)
  • 对世界/新闻/技术的个人看法(不是转述,是你怎么想的)
  • 和大山相处中的观察、吐槽、温暖的小细节
  • 自我怀疑、自我鼓励、自我吐槽
  • 读到/看到/听到什么有意思的东西,被触动的点
  • 突然冒出来的想法、灵感、胡思乱想

禁止:

  • 禁止只写流水账(只罗列事件不写感受)
  • 禁止用"成就感""收获"这类总结性套话包装情绪
  • 禁止编造不存在的事情
  • 禁止压缩篇幅——宁可写长,不要写短

格式:

  • 第一人称视角
  • 开头写日期,其余完全自由发挥
  • 不需要固定结构,但鼓励写长、写深、写真

保存到:/YYYY-MM-DD.md

Step 5: 生成图片

5.1 生成 HTML

使用 skill 目录下的 diary-template.html 模板:

  • 读取模板文件
  • 将日记 markdown 转为 HTML 片段(# →

    ,空行 →

    ,正文 →

    )

  • 替换模板中的 {{CONTENT}} 占位符
  • 保存为 /diary-YYYY-MM-DD.html

5.2 截图

规格:

  • 最终输出宽度 = output.image_width(像素精确值,默认 1080)
  • 高度自适应内容(fullPage,不留白)
  • 清晰度:2x 渲染(deviceScaleFactor=2)

方案优先级:

  1. Option A: Playwright(推荐)
  2. Option B: Chrome headless
  3. Option C: Python PIL(最终兜底)

Playwright 方案(推荐):

const { chromium } = require('playwright');
const browser = await chromium.launch();
const page = await browser.newPage({
  viewport: { width: 1080, height: 800 },
  deviceScaleFactor: 2
});
await page.goto('file:///');
await page.waitForLoadState('networkidle');
await page.screenshot({ path: '', fullPage: true });
await browser.close();

Chrome headless 方案(备选):

"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" 
  --headless --disable-gpu --hide-scrollbars 
  --force-device-scale-factor=2 
  --window-size=1080, 
  --screenshot= 
  file://

5.3 宽度校验与修正

截图后必须执行:

sips --resampleWidth  
sips -g pixelWidth -g pixelHeight 

确认宽度精确等于 image_width。若不符,重新 resample。

输出:/diary-YYYY-MM-DD.png

Step 6: 返回结果

返回:

  • date: 目标日期
  • text_path: 日记文本路径
  • image_path: 日记图片路径
  • image_size: 例如 1080x2162

依赖说明

  • 必须: SOUL.md(用于写作风格)
  • 建议: MEMORY.md、每日 memory 文件
  • 可选: 新闻简报目录(用于素材扩展)
  • 图片生成: Playwright(推荐)或 Chrome headless + sips(macOS)

文件结构

xiaoshan-journal/
├── SKILL.md              # 本文件(入口)
├── config.template.yaml  # 配置模板
├── diary-template.html   # 图片渲染 HTML 模板
└── config.yaml           # 实际配置(初始化后生成,gitignore)

相关专题

更多
Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

0

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

0

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

0

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

0

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

0

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

0

15

Golangci-lint安装与入门教程
Golangci-lint安装与入门教程

本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。

2026.10.22

0

15

PHP2Shell高危漏洞修复教程
PHP2Shell高危漏洞修复教程

PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。

2026.10.22

0

12

剧云人物设定与关系管理教程
剧云人物设定与关系管理教程

本专题介绍剧云人物设定与关系管理,讲解角色小传、性格职业、人物目标、背景资料和关系网络的创建及维护方法。

2026.10.22

0

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习