Install
openclaw skills install openclaw-diary-insights日记洞察提取与可视化系统。从日记中提取思维卡片、情绪轨迹和成长维度,生成可交互的本地可视化页面。 **立即触发当**:用户说「分析日记」「生成洞察」「我的思考花园」「insights」「提取笔记」「/note-extractor」。 **主动建议当**:用户连续记录日记超过 7 天,或月末时主动提醒用户可以生成本月洞察。 读取 ~/write_me/00inbox/journal/ 下的日记文件,提取结构化洞察,生成本地 HTML 可视化页面。
openclaw skills install openclaw-diary-insights第一步:确定配置文件路径
读取 ~/.openclaw/workspace/diary/config/diary-config.json。
注意:
~ 为完整的用户主目录路径echo $HOME 获取主目录如果配置文件不存在,告诉用户:
看起来你还没有初始化日记系统。请先运行 onboarding skill 来完成设置:
在对话中说:setup my journal
第二步:确认日记数据存在
从配置中获取 storage.path,展开 ~,检查目录下是否有 .md 文件。
如果没有日记文件:
还没有日记记录。先用 diary skill 记录一些想法吧!
在对话中说:记一下
第三步:确认输出目录
输出目录:~/write_me/02notes/insights/
如果目录不存在,创建它:
mkdir -p ~/write_me/02notes/insights
使用 Read 工具读取 storage.path 下的日记文件。
确定目标文件:
如果用户说「分析本月日记」或未指定范围:
time_boundary(默认 06:00)判断:如果当前时间 < 边界,使用昨天的日期date_format(默认 YYYY-MM)生成文件名,如 2026-03.md如果用户说「分析所有日记」:
{展开后的storage.path}/*.md读取用户身份(如果启用):
如果配置中 user_identity.enabled 为 true,读取 {user_identity.path}/identity.md 获取用户名和角色。如果文件不存在,使用默认值:name = "用户",role = ""。
日记文件格式(由 diary skill 生成):
# 日记 2026-03
## 14:30 [主动记录] - 项目进展
**事实**:
和同事讨论了项目方案。
**用户说**:
"他提出要改设计风格,我觉得有道理但工作量会增加。"
**AI观察**:
用户对设计变更持开放态度。
解析规则:
## HH:MM [tag] - 标题 → 一条日记条目的开始**用户说**: / **用户观点**: 后面的内容 → 用户原话(最重要,这是"人味儿")**事实**: 后面的内容 → 客观事实**文章**: 后面的内容 → 文章标题/链接**讨论**: 后面的内容 → 对话记录(区分用户发言和 AI 发言)**决定**: 后面的内容 → 决策记录**AI观察**: 后面的内容 → AI 的补充(次要权重)重要:严格区分用户原话和 AI 观察。提取洞察时,只从「用户说」和「事实」中提取,不要把 AI 的观察当作用户的想法。
对读取到的所有日记内容,执行以下四个提取任务。
从日记中提取用户的核心洞察和金句。
提取标准:
分类体系(根据用户实际内容动态生成,以下为参考):
输出格式(JSON 数组):
[
{
"id": 1,
"insight": "用户的原话或提炼的核心观点",
"source_date": "2026-03-14",
"category": "分类名称",
"importance": 4
}
]
importance:1-5 分,5 分最高。判断标准:原创性、可复用性、对用户的长期价值为每个有日记记录的日期标注情绪。
情绪判断依据:
情绪分类:
输出格式(JSON 对象):
{
"2026-03-14": {
"mood": "positive",
"label": "自豪",
"entries": [
{
"time": "14:30",
"type": "主动记录",
"content": "用户说的原话或事实摘要(简短)"
}
]
}
}
label:用中文,2-3 个字的情绪词entries:当天的条目摘要,每条不超过 50 字content 中只放用户说的话和事实,不放 AI 观察按月对用户在以下六个维度的关注度和成长进行打分。
六个维度:
打分规则:
输出格式(JSON 对象):
{
"一月": {
"职业技能": 75,
"学习成长": 80,
"投资理财": 40,
"社交关系": 50,
"健康平衡": 30,
"创造输出": 45
}
}
从日记中提取实体和关联,生成 2D 知识关联图谱的数据。
节点提取规则:
从日记中识别三类实体:
主题领域(group: "topic")
概念/框架(group: "concept")
人物(group: "person")
连线生成规则:
当两个节点在同一天的日记中共同出现,或存在明确的因果/关联关系时,生成一条连线。
输出格式:
nodeData 数组:
[
{"id": "AI Agent", "group": "topic", "desc": "从日记中提取的简短描述", "size": 22}
]
linkData 数组:
[
{"s": "Vivi", "t": "AI Agent"}
]
size:节点大小,基于在日记中的出现频率。范围 12-28。desc:从日记中提取的关于该节点的简短描述,不超过 20 字。HTML 模板通过 <script src="data.js"> 加载外部数据文件,Claude 只需要生成 data.js 并复制 HTML 模板,不需要读取或修改 HTML。
生成步骤:
data.js 数据文件(见下方格式)data.js 写入输出目录:~/write_me/02notes/insights/data.jscp 命令):
cp {skill目录}/demo/insights.html ~/write_me/02notes/insights/insights-{YYYY-MM}.html
data.js 文件格式:
// 此文件由 note-extractor skill 自动生成
const thoughtCards = [
{id:1,insight:"用户原话",date:"2026-03-14",cat:"分类名",imp:4},
// ...
];
const catStyles = {"分类名":"brand", ...};
const diaryEntries = {
"2026-03-14":{mood:"positive",label:"自豪",entries:[
{time:"14:30",type:"主动记录",content:"用户说的话或事实摘要"}
]},
// ...
};
const moodPositive = ["inspired","energetic","eureka","confident","proud","validated","excited","hopeful","enlightened","accomplished","flow","refreshed","grateful","warm","creative","optimistic","reinforced"];
const moodNeutral = ["curious","focused","analytical","reflective","philosophical","strategic","calm","productive","wise","determined","persistent","satisfied","mind-blown"];
const dimensionScores = {
"一月":{职业技能:75,学习成长:80,投资理财:40,社交关系:50,健康平衡:30,创造输出:45},
// ...
};
const nodeData = [
{id:"用户名",group:"person",desc:"简短描述",size:28},
// ...
];
const linkData = [
{s:"节点A",t:"节点B"},
// ...
];
字段名映射:
提取时使用完整字段名(便于理解),写入 data.js 时需转换为缩写格式:
| 提取输出 | data.js 变量 |
|---|---|
source_date | date |
category | cat |
importance | imp |
分类与样式映射:
HTML 模板支持以下 CSS 样式类:brand(玫瑰粉)、product(鼠尾草绿)、ai(薰衣草紫)、life(沙金)、invest(暖金)。
生成 catStyles 时,将每个动态分类映射到最接近的样式类。例如:
{
"职业洞察": "brand",
"产品思考": "product",
"AI 认知": "ai",
"人生智慧": "life",
"投资理财": "invest",
"创作方法论": "product"
}
如果分类无法明确归类,默认使用 "life"。
输出文件:
~/write_me/02notes/insights/data.js(固定文件名,每次覆盖)~/write_me/02notes/insights/insights-{YYYY-MM}.htmlinsights-all.html同时将提取的原始数据保存为 JSON,方便其他 skill 或工具使用。
输出文件路径:~/write_me/02notes/insights/data-{YYYY-MM}.json
JSON 结构:
{
"generated_at": "2026-03-15T10:30:00",
"source_files": ["2026-01.md", "2026-02.md", "2026-03.md"],
"user_profile": {
"name": "从 identity.md 读取",
"role": "从 identity.md 读取"
},
"thought_cards": [],
"diary_entries": {},
"dimension_scores": {},
"knowledge_graph": {
"nodes": [],
"links": []
}
}
生成完成后,告诉用户:
✓ 洞察已生成!
- 可视化页面:~/write_me/02notes/insights/insights-2026-03.html
- 数据文件:~/write_me/02notes/insights/data-2026-03.json
在浏览器中打开 HTML 文件即可查看你的思考花园。
本次提取了 {N} 张思维卡片,覆盖 {M} 天的日记记录。
然后询问用户是否要立即打开:
要我帮你打开看看吗?
如果用户同意,使用 Bash 工具执行:
open {HTML文件的完整路径}
用户说:「分析日记」「生成洞察」
用户说:「分析所有日记」「全部洞察」
用户说:「提取金句」「思维卡片」
当检测到当前日期是月末(28-31日),且本月有日记记录时:
这个月你记录了 {N} 天的日记,要不要生成本月的思考花园?
我会从日记中提取你的核心洞察、情绪轨迹和成长维度,生成一个可视化页面。
如果日记文件存在但内容为空或格式不符合预期:
如果总共只有 1-2 条日记记录:
如果 demo/insights.html 模板文件不存在:
data.js 和 JSON 备份bash install.sh~ 的路径都要展开为完整路径echo $HOME 获取主目录mkdir -p 创建目录02notes/insights/,不影响 00inbox/journal/01studio/me/identity.md 获取用户基本信息(如果存在)最后更新:2026-03-15