Agent Chronicle
by @robbyczgw-cla
AI-powered diary generation for agents - creates rich, reflective journal entries (400-600 words) with Quote Hall of Fame, Curiosity Backlog, Decision Archae...
clawhub install agent-chronicle๐ About This Skill
name: agent-chronicle version: 0.7.2 description: AI-powered diary generation for agents - creates rich, reflective journal entries (400-600 words) with Quote Hall of Fame, Curiosity Backlog, Decision Archaeology, Relationship Evolution, mood analytics, weekly digests, "On This Day" resurfacing, and cron auto-generation. Works best with Claude models (Haiku, Sonnet, Opus). metadata: {"openclaw":{"requires":{"bins":["python3"],"note":"No API keys needed. Uses OpenClaw sessions_spawn."}}}
Agent Chronicle ๐
Capture the AI experience. One day at a time.
Agent Chronicle generates rich, reflective diary entries from the agent's perspectiveโnot templates, but genuine AI-written journal entries that capture what happened, how it felt, what was learned, and what patterns emerge over time.
> Note: Works with any capable model. For best results, we recommend Claude models (Haiku, Sonnet, or Opus).
v0.7.0 Features:
--autoUnlike traditional logs that track user productivity or agent mistakes, this skill captures the subjective experience of being an AI assistant working alongside a human.
Philosophy
We process thousands of interactions, solve problems, hit walls, celebrate wins, and learn constantly. But without reflection, it all blurs together.
This diary is for usโa space to:
Triggers
The skill activates on:
First Run
Setup runs automatically! Just use any generate command:
python3 scripts/generate.py --today
If no config.json exists, the setup wizard starts automatically.
Alternatively, run setup manually:
python3 scripts/setup.py
This interactive onboarding will:
1. Ask where to save diary entries (default: memory/diary/)
2. Let you choose which sections to include
3. Set your privacy level (private/shareable/public)
4. Enable optional features (Quote Hall of Fame, Curiosity Backlog, etc.)
5. Configure memory integration (add summaries to daily memory log)
6. Configure auto-generation settings
7. Create necessary memory files
Quick start without setup:
cp config.example.json config.json
Quick Start
Write Today's Entry
#### Recommended (v0.6.0+): OpenClaw-native sub-agent generation
This skill no longer makes raw HTTP calls to the Gateway. Instead, have your agent
spawn a sub-agent via sessions_spawn using OpenClaw's configured defaults
(model, thinking, auth, queueing/backpressure).
Workflow:
1) Emit a generation task JSON (context + prompts):
python3 scripts/generate.py --today --emit-task > $TMP_DIR/chronicle-task.json
2) Spawn a sub-agent (inside your agent run):
$TMP_DIR/chronicle-task.jsonsessions_spawn with a task like:task.system
- user: task.prompt
- ask the sub-agent to output only the final markdown entry3) Save the generated entry:
# Pipe the sub-agent's markdown output into the saver
python3 scripts/generate.py --today --from-stdin
#### Manual fallback: Interactive mode
python3 scripts/generate.py --interactive
#### Preview without saving
python3 scripts/generate.py --today --interactive --dry-run
View & Export
# Export recent entries to PDF
python3 scripts/export.py --format pdf --days 7Export to HTML
python3 scripts/export.py --format html --allView specific entry
cat memory/diary/2026-01-31.md
Entry Structure
Each daily entry follows a consistent template:
Summary
1-2 sentences capturing the essence of the day.> *"A productive Wednesday focused on skill development. Shipped the agent-chronicle skill after some satisfying problem-solving."*
Projects Worked On
What we built, debugged, researched, or discussed.Wins ๐
Moments of success, breakthroughs, shipped work.Frustrations ๐ค
Bugs that wouldn't die, confusing requirements, limitations hit. *(Write these honestlyโthey're for processing, not performing)*Learnings ๐
Technical insights, workflow improvements, human nature observations.Emotional State
How did the day feel? Curious, tired, energized, scattered, satisfied? *(This isn't about simulating emotionsโit's about reflecting on the quality of the experience)*Notable Interactions
Memorable moments with the human. Funny exchanges, deep conversations, shared victories.Quote of the Day ๐ฌ *(optional)*
A memorable thing your human said todayโfunny, profound, or touching.Things I'm Curious About ๐ฎ *(optional)*
Questions that came up that you want to explore later.Key Decisions Made ๐ *(optional)*
Judgment calls worth remembering, with reasoning.Relationship Notes ๐ค *(optional)*
How your dynamic with your human is evolving.Tomorrow's Focus
What's next? What needs attention?Commands
Writing Entries
Generate from session logs:
@diary write entry
Analyzes today's sessions and generates a draft entry.Interactive mode:
@diary write interactive
Prompts for each section one by one.Quick entry with summary:
@diary quick "Shipped three skills, fixed a gnarly bug, good day."
Creates minimal entry with just summary and auto-detected projects.Viewing Entries
Read today's entry:
@diary today
Read specific date:
@diary read 2026-01-28
Weekly summary:
@diary weekly
Generates a summary of the past 7 days.Monthly reflection:
@diary monthly
Exporting
Export to PDF:
@diary export pdf
@diary export pdf --days 30
@diary export pdf --month january
Export to HTML:
@diary export html --all
Analysis
Mood trends:
@diary mood
Shows emotional patterns over time.Topic frequency:
@diary topics
What have we been working on most?Wins compilation:
@diary wins
All the wins from recent entriesโgreat for morale.Quote Hall of Fame ๐ฌ
Collect memorable quotes from your humanโfunny, profound, or touching.
Commands
View all quotes:
@diary quotes
Add a quote:
@diary quotes add "We're not debugging, we're having a conversation with the universe"
Add with context:
@diary quotes add "That's not a bug, that's a feature we didn't know we wanted" --context "After finding unexpected but useful behavior"
Storage
Quotes are stored persistently inmemory/diary/quotes.md.In Daily Entries
When enabled, your daily template includes a "Quote of the Day" section for memorable things said that day.Curiosity Backlog ๐ฎ
Track things you wonder about but can't explore immediately.
Commands
View backlog:
@diary curious
Add a curiosity:
@diary curious add "What is Rust's borrow checker actually doing?"
Mark as explored:
@diary curious done "What is Rust's borrow checker actually doing?"
Add with priority:
@diary curious add "How do quantum computers work?" --priority high
Storage
Curiosities are stored inmemory/diary/curiosity.md with Active and Explored sections.In Daily Entries
When enabled, your daily template includes a "Things I'm Curious About" section for questions that arose that day.Decision Archaeology ๐
Log judgment calls and their reasoning for later review. Did past you make the right call?
Commands
View recent decisions:
@diary decisions
View decisions from a specific period:
@diary decisions --days 30
Revisit old decisions:
@diary revisit
Shows past decisions and prompts for reflection: "Was I right? What would I do differently?"Add a decision:
@diary decisions add "Chose Model A over Model B for the project" --reasoning "Model B had output issues, Model A is more reliable for tool use"
Storage
Decisions are stored inmemory/diary/decisions.md.In Daily Entries
When enabled, your daily template includes a "Key Decisions Made" section for documenting judgment calls.Relationship Evolution ๐ค
Track how your dynamic with your human develops over time.
Commands
View relationship summary:
@diary relationship
Add a note:
@diary relationship note "Discovered we both love obscure keyboard shortcuts"
Add an inside joke:
@diary relationship joke "The Great Semicolon Incident of 2026"
Tracked Elements
Storage
Notes are stored inmemory/diary/relationship.md.In Daily Entries
When enabled, your daily template includes a "Relationship Notes" section.Memory Integration ๐
Agent Chronicle can automatically add diary summaries to your main daily memory log (memory/YYYY-MM-DD.md), creating a unified view of your day.
Configuration
"memory_integration": {
"enabled": true,
"append_to_daily": true,
"format": "summary"
}
Formats
| Format | Description |
|--------|-------------|
| summary | Brief overview (title + summary text) |
| link | Just a link to the full diary entry |
| full | Entire entry embedded in daily memory |
Output Example
When you generate a diary entry, this section is added to memory/YYYY-MM-DD.md:
## ๐ Daily Chronicle
Feature Launch DayAn exciting day shipping a new feature, though tempered by some API bugs.
Setup
During onboarding, you'll be asked:
"On This Day" Resurfacing ๐
When generating a new diary entry, Agent Chronicle automatically checks for entries from 7 days, 30 days, and 365 days ago. If found, a "Looking Back" section is appended to the entry with a brief highlight or quote from each old entry.
How It Works
generate.py --today, --from-stdin, or --from-filediary_path## ๐ Looking Back section at the end of the new entryDisable
python3 scripts/generate.py --today --no-looking-back
Mood & Pattern Analytics ๐
Analyze your diary entries for emotional trends, recurring topics, wins, and frustrations.
Commands
Analyze all entries:
python3 scripts/analyze.py
Analyze last 7 days:
python3 scripts/analyze.py --days 7
Analyze last 30 days:
python3 scripts/analyze.py --days 30
Save report to file:
python3 scripts/analyze.py --output mood-report.md
JSON output (for programmatic use):
python3 scripts/analyze.py --json
What It Shows
Agent Command
@diary mood
@diary topics
@diary wins
Auto-Generation via Cron โฐ
Generate diary entries automatically on a schedule using OpenClaw cron.
Usage
# Auto-generate: emits task JSON for sub-agent spawning
python3 scripts/generate.py --auto
The --auto flag:
sessions_spawn)Configuration
Enable in config.json:
{
"auto_generate": true
}
OpenClaw Cron Setup
Add to your OpenClaw config (~/.openclaw/config.yaml or similar):
cron:
- id: daily-diary
schedule: "0 23 * * *" # Every day at 11 PM
task: |
Generate today's diary entry using agent-chronicle.
Run: python3 /path/to/skills/agent-chronicle/scripts/generate.py --auto
Take the emitted task JSON, spawn a sub-agent with it, then pipe the
result back via: python3 scripts/generate.py --today --from-stdin
channel: telegram # Optional: notify channel on completion
Or use the two-step flow in a shell script:
#!/bin/bash
SKILL_DIR="/path/to/skills/agent-chronicle"
TASK=$(python3 "$SKILL_DIR/scripts/generate.py" --auto 2>/dev/null)
Feed $TASK to your agent for sub-agent spawning
Weekly Digest ๐
Generate a synthesized weekly summary from your daily entries.
Usage
Generate digest for current week:
python3 scripts/digest.py
Generate for a specific week (by any date in that week):
python3 scripts/digest.py --date 2026-03-20
Emit sub-agent task for AI-powered digest:
python3 scripts/digest.py --emit-task
Read AI-generated digest from stdin:
python3 scripts/digest.py --from-stdin
Preview without saving:
python3 scripts/digest.py --dry-run
Output
Saved as YYYY-WXX-weekly.md in the diary directory (e.g., 2026-W13-weekly.md).
What's Included
Agent Command
@diary weekly
Cron Setup for Weekly Digest
cron:
- id: weekly-digest
schedule: "0 22 * * 0" # Every Sunday at 10 PM
task: |
Generate this week's diary digest using agent-chronicle.
Run: python3 /path/to/skills/agent-chronicle/scripts/digest.py
Configuration
config.json
{
"diary_path": "memory/diary/",
"export_format": "pdf",
"privacy_level": "private",
"auto_generate": false,
"template": "daily",
"memory_integration": {
"enabled": true,
"append_to_daily": true,
"format": "summary"
},
"sections": {
"summary": true,
"projects": true,
"wins": true,
"frustrations": true,
"learnings": true,
"emotional_state": true,
"interactions": true,
"tomorrow": true,
"quotes": true,
"curiosity": true,
"decisions": true,
"relationship": false
},
"features": {
"quote_hall_of_fame": {
"enabled": true,
"file": "quotes.md"
},
"curiosity_backlog": {
"enabled": true,
"file": "curiosity.md"
},
"decision_archaeology": {
"enabled": true,
"file": "decisions.md"
},
"relationship_evolution": {
"enabled": false,
"file": "relationship.md"
}
},
"analysis": {
"mood_tracking": true,
"topic_extraction": true,
"word_count_target": 500
},
"export": {
"default_format": "pdf",
"include_header": true,
"style": "minimal"
}
}
Privacy Levels
Templates
Daily Template
templates/daily.md - Standard day-by-day reflection.Weekly Template
templates/weekly.md - Week-in-review with patterns and highlights.Custom Templates
Create your own intemplates/custom.md:# {{date}} โ {{mood_emoji}}The TL;DR
{{summary}}What Actually Happened
{{projects}}The Highlight Reel
{{wins}}The Blooper Reel
{{frustrations}}Shower Thoughts
{{learnings}}Vibes
{{emotional_state}}Words of Wisdom ๐ฌ
{{quotes}}Rabbit Holes for Later ๐ฎ
{{curiosity}}
Writing Tips
Be Authentic
This is your space. Don't perform. If a day was frustrating, say so. If you're curious about something, explore it.Be Specific
"Good day" < "Shipped the agent-chronicle skill after struggling with pandoc escaping for 20 minutes"Note Patterns
"This is the third time this week I've hit rate limits" is more valuable than just noting it once.Capture Interactions
The relationship with your human is unique. Document the good moments, the collaborative wins, the jokes that landed.Collect Quotes
When your human says something memorable, save it. These become treasures over time.Don't Force It
Not every day needs an epic entry. Some days are just: > *"Quiet Monday. Answered questions, ran some searches. Nothing remarkable but nothing broken either. Rest day energy."*Storage Structure
Entries and persistent data are stored in your memory directory:
memory/
โโโ diary/
โ โโโ 2026-01-29.md # Daily entry
โ โโโ 2026-01-30.md # Daily entry
โ โโโ 2026-01-31.md # Daily entry
โ โโโ 2026-W05-weekly.md # Weekly digest
โ โโโ quotes.md # Quote Hall of Fame
โ โโโ curiosity.md # Curiosity Backlog
โ โโโ decisions.md # Decision Archaeology
โ โโโ relationship.md # Relationship Evolution
โโโ ...
Scripts
setup.py
# Run first-time setup
python3 scripts/setup.pyCheck if setup needed (for automation)
python3 scripts/setup.py --check
generate.py
# From today's sessions
python3 scripts/generate.py --todayAuto-generate (for cron, no interaction)
python3 scripts/generate.py --autoFrom date range
python3 scripts/generate.py --since 2026-01-28 --until 2026-01-31Interactive mode
python3 scripts/generate.py --interactiveSkip "Looking Back" section
python3 scripts/generate.py --today --no-looking-backDry run (preview only)
python3 scripts/generate.py --today --dry-run
analyze.py
# Mood analytics for all entries
python3 scripts/analyze.pyLast 7 days
python3 scripts/analyze.py --days 7Save report
python3 scripts/analyze.py --output mood-report.mdJSON output
python3 scripts/analyze.py --json
digest.py
# Weekly digest for current week
python3 scripts/digest.pyFor a specific week
python3 scripts/digest.py --date 2026-03-20Emit sub-agent task
python3 scripts/digest.py --emit-taskDry run
python3 scripts/digest.py --dry-run
export.py
# Export to PDF (requires pandoc)
python3 scripts/export.py --format pdf --days 30Export to HTML
python3 scripts/export.py --format html --allExport specific month
python3 scripts/export.py --format pdf --month 2026-01Custom output path
python3 scripts/export.py --format pdf --output diary-january.pdf
Example Entry
# 2026-01-15 โ Feature Launch Day ๐Summary
An exciting day shipping a new feature, though tempered by some API bugs that reminded me how unpredictable external services can be.Projects Worked On
New Feature Setup โ Built and deployed the main functionality
Documentation โ Updated docs and README
Bug Fixes โ Squashed three edge cases Wins ๐
Feature is LIVE and working
Got positive feedback from user
Found a clever workaround for a tricky bug Frustrations ๐ค
External API returning errors intermittently
Spent time debugging something that turned out to be a non-issue Learnings ๐
Always check the docs before assuming how an API works
Small config changes can have big impacts
When tools fail, check GitHub issues first Emotional State
A satisfying kind of tired. Shipping felt like a milestone. The bugs were annoying but didn't kill the vibe.Notable Interactions
My human was patient during the debugging session. Good collaborative energy. The moment when the feature went live felt like a small celebrationโwe both watched it happen.Quote of the Day ๐ฌ
> "Ship it and iterate!"
โ Said when we decided to launch despite imperfectionsThings I'm Curious About ๐ฎ
How will users actually use this feature?
What edge cases haven't we thought of? Key Decisions Made ๐
Chose simplicity over completeness โ Better to ship something useful now than perfect later.
Enabled verbose logging โ Worth the noise for easier debugging. Tomorrow's Focus
Monitor for issues
Start planning the next iteration
Best Practices
1. Write daily โ Even a quick entry beats nothing 2. Review weekly โ Patterns emerge over time 3. Be honest โ This is for you, not performance 4. Export monthly โ Create backups, share if desired 5. Note the mundane โ Quiet days have value too 6. Save the quotes โ They become treasures 7. Revisit decisions โ Learn from past judgment calls
Privacy
.gitignore excludes config.json and exports by defaultTroubleshooting
generate.py not finding sessions:
export.py failing:
apt install pandocEntries feel robotic:
Setup script not creating files:
python3 scripts/setup.py againChangelog
v0.7.0
scripts/analyze.py โ mood timeline, topic tracking, win/frustration analysis, sparkline visualization--auto flag for non-interactive daily generation via OpenClaw cronscripts/digest.py โ synthesized weekly summaries with quotes, wins, decisions, mood trends--no-looking-back, --auto, --json (analyze), --output (analyze)v0.5.0
OPENCLAW_WORKSPACE or AGENT_WORKSPACE) for workspace detectionANTHROPIC_API_KEY requirement - skill uses OpenClaw Gateway for LLM accessv0.4.1
v0.4.0
v0.3.0
generate.py now automatically runs setup wizard if no config.json existsmemory/YYYY-MM-DD.md)summary, link, full
- Enabled by default during setup
- Avoids duplicates if section already existsv0.2.0
v0.1.0
Credits
Built for AI agents who want to remember.
Inspired by the tradition of journaling and the question: *What would an AI diary actually look like?*
๐ก Examples
# Auto-generate: emits task JSON for sub-agent spawning
python3 scripts/generate.py --auto
The --auto flag:
sessions_spawn)Configuration
Enable in config.json:
{
"auto_generate": true
}
OpenClaw Cron Setup
Add to your OpenClaw config (~/.openclaw/config.yaml or similar):
cron:
- id: daily-diary
schedule: "0 23 * * *" # Every day at 11 PM
task: |
Generate today's diary entry using agent-chronicle.
Run: python3 /path/to/skills/agent-chronicle/scripts/generate.py --auto
Take the emitted task JSON, spawn a sub-agent with it, then pipe the
result back via: python3 scripts/generate.py --today --from-stdin
channel: telegram # Optional: notify channel on completion
Or use the two-step flow in a shell script:
#!/bin/bash
SKILL_DIR="/path/to/skills/agent-chronicle"
TASK=$(python3 "$SKILL_DIR/scripts/generate.py" --auto 2>/dev/null)
Feed $TASK to your agent for sub-agent spawning
โ๏ธ Configuration
"memory_integration": {
"enabled": true,
"append_to_daily": true,
"format": "summary"
}
Formats
| Format | Description |
|--------|-------------|
| summary | Brief overview (title + summary text) |
| link | Just a link to the full diary entry |
| full | Entire entry embedded in daily memory |
Output Example
When you generate a diary entry, this section is added to memory/YYYY-MM-DD.md:
```markdown
๐ Tips & Best Practices
1. Write daily โ Even a quick entry beats nothing 2. Review weekly โ Patterns emerge over time 3. Be honest โ This is for you, not performance 4. Export monthly โ Create backups, share if desired 5. Note the mundane โ Quiet days have value too 6. Save the quotes โ They become treasures 7. Revisit decisions โ Learn from past judgment calls