AgentSkillsCN

phoenixclaw

一种被动式日记技能,通过 Cron 定期扫描日常对话,利用语义理解生成 Markdown 日记。 适用场景: - 用户请求记录日记(“给我看看我的日记”、“我今天都做了些什么?”) - 用户希望进行模式分析(“分析我的行为模式”、“我最近表现如何?”) - 用户要求生成摘要(“生成周报/月报”)

SKILL.md
--- frontmatter
name: phoenixclaw
description: |
  Passive journaling skill that scans daily conversations via cron to generate
  markdown journals using semantic understanding.

  Use when:
  - User requests journaling ("Show me my journal", "What did I do today?")
  - User asks for pattern analysis ("Analyze my patterns", "How am I doing?")
  - User requests summaries ("Generate weekly/monthly summary")
metadata:
  version: 0.0.10

PhoenixClaw: Zero-Tag Passive Journaling

PhoenixClaw automatically distills daily conversations into meaningful reflections using semantic intelligence.

Automatically identifies journal-worthy moments, patterns, and growth opportunities.

🛠️ Core Workflow

[!critical] MANDATORY: Complete Workflow Execution This 9-step workflow MUST be executed in full regardless of invocation method:

  • Cron execution (10 PM nightly)
  • Manual invocation ("Show me my journal", "Generate today's journal", etc.)
  • Regeneration requests ("Regenerate my journal", "Update today's entry")

Never skip steps. Partial execution causes:

  • Missing images (session logs not scanned)
  • Missing finance data (Ledger plugin not triggered)
  • Incomplete journals (plugins not executed)

PhoenixClaw follows a structured pipeline to ensure consistency and depth:

  1. User Configuration: Check for ~/.phoenixclaw/config.yaml. If missing, initiate the onboarding flow defined in references/user-config.md.

  2. Context Retrieval:

    • Call memory_get for the current day's memory
    • CRITICAL: Scan ALL raw session logs and filter by message timestamp. Session files are often split across multiple files. Do NOT classify images by session file mtime:
      bash
      # Read candidate session files (all or recent), then filter each message by timestamp
      TODAY=$(date +%Y-%m-%d)
      find ~/.openclaw/sessions -name "*.jsonl" -print0 |
        xargs -0 jq -cr --arg day "$TODAY" '
          select((.timestamp // "")[:10] == $day)
        '
      
      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.
    • 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.
    • If memory is sparse, reconstruct context from session logs, then update daily memory
    • Incorporate historical context via memory_search (skip if embeddings unavailable)
  3. Moment Identification: Identify "journal-worthy" content: critical decisions, emotional shifts, milestones, or shared media. See references/media-handling.md for photo processing. This step generates the moments data structure that plugins depend on. Image Processing (CRITICAL):

    • For each extracted image, generate descriptive alt-text via Vision Analysis
    • Categorize images (food, selfie, screenshot, document, etc.)
    • Match images to moments (e.g., breakfast photo → breakfast moment)
    • Store image metadata with moments for journal embedding
  4. Pattern Recognition: Detect recurring themes, mood fluctuations, and energy levels. Map these to growth opportunities using references/skill-recommendations.md.

  5. Plugin Execution: Execute all registered plugins at their declared hook points. See references/plugin-protocol.md for the complete plugin lifecycle:

    • pre-analysis → before conversation analysis
    • post-moment-analysisLedger and other primary plugins execute here
    • post-pattern-analysis → after patterns detected
    • journal-generation → plugins inject custom sections
    • post-journal → after journal complete
  6. Journal Generation: Synthesize the day's events into a beautiful Markdown file using assets/daily-template.md. Follow the visual guidelines in references/visual-design.md. Include all plugin-generated sections at their declared section_order positions.

    • Embed curated images only, not every image. Prioritize highlights and moments.
    • Route finance screenshots to Ledger sections (receipts, invoices, transaction proofs).
    • Use Obsidian format from references/media-handling.md with descriptive captions.
  7. Timeline Integration: If significant events occurred, append them to the master index in timeline.md using the format from assets/timeline-template.md and references/obsidian-format.md.

  8. Growth Mapping: Update growth-map.md (based on assets/growth-map-template.md) if new behavioral patterns or skill interests are detected.

  9. Profile Evolution: Update the long-term user profile (profile.md) to reflect the latest observations on values, goals, and personality traits. See references/profile-evolution.md and assets/profile-template.md.

⏰ Cron & Passive Operation

PhoenixClaw is designed to run without user intervention. It utilizes OpenClaw's built-in cron system to trigger its analysis daily at 10:00 PM local time (0 22 * * *).

  • Setup details can be found in references/cron-setup.md.
  • Mode: Primarily Passive. The AI proactively summarizes the day's activities without being asked.

💬 Explicit Triggers

While passive by design, users can interact with PhoenixClaw directly using these phrases:

  • "Show me my journal for today/yesterday."
  • "What did I accomplish today?"
  • "Analyze my mood patterns over the last week."
  • "Generate my weekly/monthly summary."
  • "How am I doing on my personal goals?"
  • "Regenerate my journal." / "重新生成日记"

[!warning] Manual Invocation = Full Pipeline When users request journal generation/regeneration, you MUST execute the complete 9-step Core Workflow above. This ensures:

  • Photos are included (via session log scanning)
  • Ledger plugin runs (via post-moment-analysis hook)
  • All plugins execute (at their respective hook points)

Common mistakes to avoid:

  • ❌ Only calling memory_get (misses photos)
  • ❌ Skipping moment identification (plugins never trigger)
  • ❌ Generating journal directly without plugin sections

📚 Documentation Reference

References (references/)

  • user-config.md: Initial onboarding and persistence settings.
  • cron-setup.md: Technical configuration for nightly automation.
  • plugin-protocol.md: Plugin architecture, hook points, and integration protocol.
  • media-handling.md: Strategies for extracting meaning from photos and rich media.
  • visual-design.md: Layout principles for readability and aesthetics.
  • obsidian-format.md: Ensuring compatibility with Obsidian and other PKM tools.
  • profile-evolution.md: How the system maintains a long-term user identity.
  • skill-recommendations.md: Logic for suggesting new skills based on journal insights.

Assets (assets/)

  • daily-template.md: The blueprint for daily journal entries.
  • weekly-template.md: The blueprint for high-level weekly summaries.
  • profile-template.md: Structure for the profile.md persistent identity file.
  • timeline-template.md: Structure for the timeline.md chronological index.
  • growth-map-template.md: Structure for the growth-map.md thematic index.