Skill: luyu925065781/daily-diary (version 1.0.1)

--- name: daily-diary description: AI-assisted daily diary system. Automatically review the day's conversations, extract key events, decisions, and insights, then generate a structured diary draft for user review. Use when the user wants to keep a daily journal, needs help writing diary entries, wants to reflect on their day, or when triggered by a scheduled evening reminder. Supports cron-based daily prompts, structured templates, and tag-based organization. --- # Daily Diary Generate structured diary entries by reviewing conversation history. ## Workflow Diary generation follows these steps: 1. Review today's conversations → extract topics, achievements, decisions, insights 2. Generate draft → fill structured template, write in first person 3. Deliver to user → present draft with prompts for additions 4. Archive → save to `~/diary/YYYY/MM/YYYY-MM-DD.md` ## Step 1: Review Conversations Scan all conversations from today. Extract: - **Topics discussed** — projects, domains, problems worked on - **Concrete achievements** — tasks completed, features shipped, issues resolved - **Key decisions** — choices made and their rationale - **Challenges** — blockers, bugs, frustrations encountered - **Insights** — ideas, lessons learned, perspectives shifted **Sensitive data filter** — ALWAYS strip all credentials, keys, personal identity information, server addresses, and configuration file contents from extracted content before including in diary. Redact paths containing usernames to `~/`. Content the user explicitly marked as confidential must also be excluded. ## Step 2: Generate Draft Write in first person ("I"). Tone: warm, natural, like writing to future self. Use this structure: ``` 📔 YYYY-MM-DD Diary ☀️ Today's Summary (One sentence capturing the day's main thread) ✅ Achievements - Achievement 1 - Achievement 2 🧭 Key Decisions - Decision: rationale and conclusion 💡 Reflections (Insights or lessons extracted from conversations) 📋 Tomorrow's Plan - [ ] Task 1 - [ ] Task 2 🎯 One-Line Mood (Leave blank for user to fill) 🏷️ Tags #tag1 #tag2 #tag3 ``` **Quality rules:** - Be specific with details, avoid generic summaries - Preserve the user's original phrasing when it captures something well - Extract 3-5 topic tags from content (domains like `#AI`, `#product`; types like `#decision`, `#milestone`; moods like `#productive`, `#focused`) - Omit sections with no content rather than filling with filler - Double-check that no sensitive data made it into the draft before delivery **Writing style:** - State facts directly. Drop filler phrases like "Additionally", "It is worth noting", "In this context" - Vary sentence length. Short punchy sentences, then longer ones with detail. Mix it up, avoid mechanical repetition - Do not inflate significance. "Finished security hardening" not "Completed a landmark security upgrade marking a new era for the system" - Use concrete facts over vague attribution. "Deployed rate limiting" not "Took a series of critical measures" - Have opinions and warmth. Diaries are personal — say "Hit a nasty bug today" or "Really happy with this solution" ## Step 3: Deliver to User Append this footer to every diary draft: ``` --- 💬 To complete your entry: 1. How was your mood today? (one sentence is fine) 2. Anything to add or change? 3. Reply ✅ to archive as-is ``` ## Step 4: Archive | User response | Action | |---------------|--------| | Adds content | Merge additions, then save | | Replies ✅ or "ok" | Save immediately | | No reply within 24h | Save as draft (status: unreviewed) | Save path: `~/diary/YYYY/MM/YYYY-MM-DD.md` Append status line at end of file: ``` --- *Generated by [agent-name] at HH:MM | Status: confirmed/unreviewed* ``` ## Empty Day Handling When no conversations exist for today: 1. Briefly inform user: "No conversation records today." 2. Offer 2 guided prompts from the reference file. See [quick-prompts.md](references/quick-prompts.md). 3. If user responds, build entry from their input. 4. If no response, skip today's entry. ## Guided Prompts When the user says they have nothing to write, or when conversation content is thin, use prompts from [quick-prompts.md](references/quick-prompts.md) to draw out content. Rules: pick at most 2-3 questions per session. Choose based on the day's conversation topics. Keep the tone light — journaling should never feel like homework. ## Cron Setup Add to `cron/jobs.json` for automated daily triggers: ```json { "name": "daily-diary", "schedule": { "expr": "0 20 * * *", "kind": "cron", "tz": "Asia/Shanghai" }, "sessionTarget": "isolated", "payload": { "kind": "agentTurn", "message": "It's evening diary time. Review today's conversations and generate a diary draft following the daily-diary skill workflow.", "timeoutSeconds": 180 }, "delivery": { "channel": "feishu", "mode": "announce", "to": "chat:<group-id>" } } ``` Adjust `tz`, `channel`, and `to` for your setup. ## Storage Structure ``` ~/diary/ ├── YYYY/ │ └── MM/ │ └── YYYY-MM-DD.md └── weekly/ (future: auto-generated weekly summaries) ``` ## Security - Filter all sensitive data (credentials, personal identity info, etc.) before writing. When uncertain, omit. - Diary files are local-only. Never transmit beyond the configured delivery channel. - May read user personality files to match writing style, but never copy raw content into entries. - Never access system configuration or credential directories unrelated to diary generation. - Only deliver to the conversation owner. Drafts remain drafts until user confirms. ## Scope This skill ONLY: - Reads conversation history for content extraction - Creates and edits files within `~/diary/` - Delivers diary drafts through the user's configured channel This skill NEVER: - Modifies files outside the diary directory (reading personality files for tone matching is allowed) - Sends diary content to external services or third parties - Deletes diary entries without explicit user approval - Stores any sensitive information in diary text - Makes network requests beyond the configured delivery channel


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)