phoenixclaw技能使用说明
PhoenixClaw:零标签被动日志记录
PhoenixClaw运用语义智能,自动提炼日常对话为有意义的反思。
自动识别值得记录的时刻、模式和成长机遇。

🛠️ 核心工作流程
[!critical]强制要求:完整执行工作流程无论调用方式如何,必须完整执行此9步工作流程:
- 定时任务执行(每晚10点)
- 手动调用(“显示我的日志”、“生成今日日志”等)
- 重新生成请求(“重新生成我的日志”、“更新今日条目”)
切勿跳过任何步骤。部分执行会导致:
- 图像缺失(未扫描会话日志)
- 财务数据缺失(未触发账本插件)
- 日志不完整(插件未执行)
PhoenixClaw遵循结构化流程,以确保一致性和深度:
- 用户配置:检查
~/.phoenixclaw/config.yaml文件是否存在。如果缺失,则启动定义在references/user-config.md中的新用户引导流程。 - 上下文检索:
- 扫描记忆文件(新增):读取
memory/YYYY-MM-DD.md和memory/YYYY-MM-DD-*.md文件,以获取手动记录的每日反思。这些文件包含用户通过“记一下”等指令明确要求AI记住的个人想法、情感和背景信息。关键:切勿跳过这些文件——它们包含会话日志可能遗漏的、用户明确的反思内容。 - 扫描会话日志:调用
memory_get获取当日的记忆,然后关键:扫描所有原始会话日志,并按消息时间戳进行筛选。会话文件通常被分割成多个文件。请勿按会话文件对图像进行分类修改时间:# Read all session logs from ALL known OpenClaw locations, then filter by per-message timestamp # Use timezone-aware epoch range to avoid UTC/local-day mismatches. TARGET_DAY="$(date +%Y-%m-%d)" TARGET_TZ="${TARGET_TZ:-Asia/Shanghai}" read START_EPOCH END_EPOCH < <( python3 - <<'PY' "$TARGET_DAY" "$TARGET_TZ"
- 扫描记忆文件(新增):读取
from datetime import datetime, timedelta from zoneinfo import ZoneInfo import sys
day, tz = sys.argv[1], sys.argv[2] start = datetime.strptime(day, "%Y-%m-%d").replace(tzinfo=ZoneInfo(tz)) end = start + timedelta(days=1) print(int(start.timestamp()), int(end.timestamp())) PY )
# Recursively scan all session directories (multi-agent architecture support)
for dir in "$HOME/.openclaw/sessions" \
"$HOME/.openclaw/agents" \
"$HOME/.openclaw/cron/runs" \
"$HOME/.agent/sessions"; do
[ -d "$dir" ] || continue
find "$dir" -type f -name "*.jsonl" -print0
done |
xargs -0 jq -cr --argjson start "$START_EPOCH" --argjson end "$END_EPOCH" '
(.timestamp // .created_at // empty) as $ts
| ($ts | split(".")[0] + "Z" | fromdateiso8601?) as $epoch
| select($epoch != null and $epoch >= $start and $epoch < $end)
'
```
Read **all matching files** regardless of their numeric naming (e.g., file_22, file_23 may be earlier in name but still contain today's messages).
- **EXTRACT IMAGES FROM SESSION LOGS**: Session logs contain `type: "image"` entries with file paths. You MUST:
1. Find all image entries (e.g., `"type":"image"`)
2. Keep only entries where message `timestamp` is in the target date range
3. Extract the `file_path` or `url` fields
4. Copy files into `assets/YYYY-MM-DD/`
5. Rename with descriptive names when possible
- **Why session logs are mandatory**: `memory_get` returns **text only**. Image metadata, photo references, and media attachments are **only available in session logs**. Skipping session logs = missing all photos.
- **Activity signal quality**: Do not treat heartbeat/cron system noise as user activity. Extract user/assistant conversational content and media events first, then classify moments.
- **FILTER HEARTBEAT MESSAGES (CRITICAL)**: Session logs contain system heartbeat messages that MUST be excluded from journaling. When scanning messages, SKIP any message matching these criteria:
1. **User heartbeat prompts**: Messages containing "Read HEARTBEAT.md" AND "reply HEARTBEAT_OK"
2. **Assistant heartbeat responses**: Messages containing ONLY "HEARTBEAT_OK" (with optional leading/trailing whitespace)
3. **Cron system messages**: Messages with role "system" or "cron" containing job execution summaries (e.g., "Cron job completed", "A cron job")
Example jq filter to exclude heartbeats:
```jq
# Exclude heartbeat messages
| select(
(.message.content? | type == "array" and
(.message.content | map(.text?) | join("") |
test("Read HEARTBEAT\.md"; "i") | not))
and
(.message.content? | type == "array" and
(.message.content | map(.text?) | join("") |
test("^\\s*HEARTBEAT_OK\\s*$"; "i") | not))
)
```
- **Edge case - Midnight boundary**: For late-night activity that spans midnight, expand the **timestamp** range to include spillover windows (for example, previous day 23:00-24:00) and still filter per-message by `timestamp`.
- 合并来源:结合来自记忆文件和会话日志的内容。记忆文件记录明确的用户反思;会话日志记录对话流程和媒体信息。使用两者来构建完整的上下文。
- 回退方案:如果记忆内容稀疏,则从会话日志重建上下文,然后更新记忆以便后续运行使用增强的记忆。通过
memory_search(如果嵌入不可用则跳过此步骤)
-
时刻识别:识别“值得记录”的内容:关键决策、情绪转变、里程碑事件或共享的媒体。关于照片处理,请参阅
references/media-handling.md。此步骤生成moments插件所依赖的数据结构。图像处理(关键):- 对于每张提取的图像,通过视觉分析生成描述性替代文本
- 对图像进行分类(食物、自拍、截图、文档等)
过滤财务截图(新增): 支付截图(微信支付、支付宝等)不应包含在日记叙述中。这些是工具性图片,而非生活瞬间。
检测标准(满足任意一项即可):
- OCR关键词: "支付成功", "支付完成", "微信支付", "支付宝", "订单号", "交易单号", "¥" + 金额
- 上下文线索: 发送图片时,附近文本包含"记账", "支付", "付款", "转账"
- 视觉模式: 标准支付应用界面布局(微信绿色、支付宝蓝色)
处理规则:
-
标记为
finance_screenshot类型 -
如果账本插件已启用,则路由至该插件进行交易记录
-
从日记主叙事中排除除非明确描述为生活时刻的一部分(例如,"今天请朋友吃饭"并附有支付截图)
-
切勿在日记的日常图片部分包含原始支付截图
-
将图片与时刻匹配(例如,早餐照片 → 早餐时刻)
-
将图片元数据与时刻一同存储,以便日记嵌入
-
模式识别:检测重复出现的主题、情绪波动和能量水平。利用
references/skill-recommendations.md将这些映射到成长机会 -
。插件执行:
在声明的钩子点执行所有已注册的插件。完整的插件生命周期请参见references/plugin-protocol.md:预分析→ 对话分析前时刻后分析→账本和其他主要插件在此处执行→ 在检测到模式后日志生成→ 插件注入自定义部分日志生成后→ 日志完成后
-
日志生成:使用
assets/daily-template.md将一天的事件合成为一个美观的Markdown文件。遵循references/visual-design.md中的视觉指南。包含所有插件生成的部分,并按照它们声明的section_order- 位置进行排列。仅嵌入精选图片
- ,而非所有图片。优先突出亮点和重要时刻。将财务相关截图(如收据、发票、交易凭证)路由至分类账
- 部分。
使用references/media-handling.md - 基于文件系统真实情况生成图片链接:计算图片路径相对于当前日记文件目录的位置。绝不输出绝对路径。
- 不要硬编码路径深度(
../或../../):根据daily_file_path和image_path动态计算。 - 使用复制的文件名作为真实来源:如果资源文件是
image_124917_2.jpg,链接必须引用该确切文件名。
-
时间线集成:如果发生重大事件,将其追加到
timeline.md中的主索引,使用来自assets/timeline-template.md和references/obsidian-format.md. -
成长地图:更新
growth-map.md(基于assets/growth-map-template.md),如果检测到新的行为模式或技能兴趣。 -
档案演进:更新长期用户档案(
profile.md),以反映关于价值观、目标和人格特质的最新观察。参见references/profile-evolution.md和assets/profile-template.md。
⏰ 定时任务与被动运行
PhoenixClaw 设计为无需用户干预即可运行。它利用 OpenClaw 内置的 cron 系统,在每天当地时间晚上 10:00(0 22 * * *)触发其分析。
- 设置详情可在
references/cron-setup.md中找到。 - 模式:主要为被动模式。AI会主动总结当天的活动,无需用户询问。
滚动日志窗口(新功能)
为解决22:00-24:00时段内容丢失的问题,PhoenixClaw现已支持滚动日志窗口机制:
问题:固定的24小时窗口(00:00-22:00)在22:00生成日志时,会遗漏22:00-24:00的内容。
解决方案:scripts/rolling-journal.js会扫描从上次日志时间 → 当前时间的内容,而非固定的每日时间边界。
功能特性:
- 可配置的生成时间(默认:22:00,可通过
~/.phoenixclaw/config.yaml自定义) - 滚动窗口:即使生成时间变化,也不会丢失内容
- 向后兼容现有的
late-night-supplement.js
配置(~/.phoenixclaw/config.yaml):
schedule:
hour: 22 # Journal generation time
minute: 0
rolling_window: true # Enable rolling window (recommended)
使用:
# Default: generate from last journal to now
node scripts/rolling-journal.js
# Specific date
node scripts/rolling-journal.js 2026-02-12
💬 显式触发
虽然设计上是被动触发的,但用户可以使用以下短语直接与 PhoenixClaw 互动:
- "显示我今天/昨天的日记。"
- "我今天完成了什么?"
- "分析我过去一周的情绪模式。"
- "生成我的周度/月度总结。"
- "我的个人目标进展如何?"
- "重新生成我的日记。"/"重新生成日记"
[!警告]手动调用 = 完整流程当用户请求生成/重新生成日记时,您必须执行完整的 9 步核心工作流(如上所述)。这确保了:
- 照片会被包含在内(通过会话日志扫描)
- 账本插件运行(通过
后时刻分析钩子)- 所有插件执行(在各自的钩子点)
需要避免的常见错误:
- ❌ 仅调用
memory_get(会遗漏照片)- ❌ 跳过时刻识别(插件永远不会触发)
- ❌ 直接生成日志而不包含插件部分
📚 文档参考
参考文件 (references/)
用户配置.md:初始入门和持久化设置。定时任务设置.md:夜间自动化的技术配置。插件协议.md:插件架构、钩子点和集成协议。media-handling.md: 从照片和富媒体中提取意义的策略。session-day-audit.js: 用于验证会话日志中目标日信息覆盖率的诊断工具。visual-design.md: 针对可读性和美观性的布局原则。obsidian-format.md: 确保与 Obsidian 及其他 PKM 工具的兼容性。profile-evolution.md: 系统如何维护长期用户身份。skill-recommendations.md: 基于日志洞察推荐新技能的逻辑。
Assets (assets/)
daily-template.md: 每日日志条目的蓝图。weekly-template.md: 高层级每周总结的蓝图。profile-template.md: 用户配置文件的结构。profile.md持久身份文件。timeline-template.md:用于构建timeline.md时间顺序索引的结构。growth-map-template.md:用于构建growth-map.md主题索引的结构。


微信扫一扫,打赏作者吧~