agent-chronicle — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited agent-chronicle (Agent Skill) and scored it 92/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 2 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 2 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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.
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:
The skill activates on:
Setup runs automatically! Just use any generate command:
python3 scripts/generate.py --todayIf no config.json exists, the setup wizard starts automatically.
Alternatively, run setup manually:
python3 scripts/setup.pyThis interactive onboarding will:
memory/diary/)Quick start without setup:
cp config.example.json config.json#### 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/chronicle-task.json2) Spawn a sub-agent (inside your agent run):
/tmp/chronicle-task.jsonsessions_spawn with a task like:task.systemtask.prompt3) 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# Export recent entries to PDF
python3 scripts/export.py --format pdf --days 7
# Export to HTML
python3 scripts/export.py --format html --all
# View specific entry
cat memory/diary/2026-01-31.mdEach daily entry follows a consistent template:
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."
What we built, debugged, researched, or discussed.
Moments of success, breakthroughs, shipped work.
Bugs that wouldn't die, confusing requirements, limitations hit. (Write these honestly—they're for processing, not performing)
Technical insights, workflow improvements, human nature observations.
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)
Memorable moments with the human. Funny exchanges, deep conversations, shared victories.
A memorable thing your human said today—funny, profound, or touching.
Questions that came up that you want to explore later.
Judgment calls worth remembering, with reasoning.
How your dynamic with your human is evolving.
What's next? What needs attention?
Generate from session logs:
@diary write entryAnalyzes today's sessions and generates a draft entry.
Interactive mode:
@diary write interactivePrompts 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.
Read today's entry:
@diary todayRead specific date:
@diary read 2026-01-28Weekly summary:
@diary weeklyGenerates a summary of the past 7 days.
Monthly reflection:
@diary monthlyExport to PDF:
@diary export pdf
@diary export pdf --days 30
@diary export pdf --month januaryExport to HTML:
@diary export html --allMood trends:
@diary moodShows emotional patterns over time.
Topic frequency:
@diary topicsWhat have we been working on most?
Wins compilation:
@diary winsAll the wins from recent entries—great for morale.
Collect memorable quotes from your human—funny, profound, or touching.
View all quotes:
@diary quotesAdd 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"Quotes are stored persistently in memory/diary/quotes.md.
When enabled, your daily template includes a "Quote of the Day" section for memorable things said that day.
Track things you wonder about but can't explore immediately.
View backlog:
@diary curiousAdd 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 highCuriosities are stored in memory/diary/curiosity.md with Active and Explored sections.
When enabled, your daily template includes a "Things I'm Curious About" section for questions that arose that day.
Log judgment calls and their reasoning for later review. Did past you make the right call?
View recent decisions:
@diary decisionsView decisions from a specific period:
@diary decisions --days 30Revisit old decisions:
@diary revisitShows 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"Decisions are stored in memory/diary/decisions.md.
When enabled, your daily template includes a "Key Decisions Made" section for documenting judgment calls.
Track how your dynamic with your human develops over time.
View relationship summary:
@diary relationshipAdd 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"Notes are stored in memory/diary/relationship.md.
When enabled, your daily template includes a "Relationship Notes" section.
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.
"memory_integration": {
"enabled": true,
"append_to_daily": true,
"format": "summary"
}| Format | Description |
|---|---|
summary | Brief overview (title + summary text) |
link | Just a link to the full diary entry |
full | Entire entry embedded in daily memory |
When you generate a diary entry, this section is added to memory/YYYY-MM-DD.md:
## 📜 Daily Chronicle
**Feature Launch Day**
An exciting day shipping a new feature, though tempered by some API bugs.During onboarding, you'll be asked:
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.
generate.py --today, --from-stdin, or --from-filediary_path## 🔙 Looking Back section at the end of the new entrypython3 scripts/generate.py --today --no-looking-backAnalyze your diary entries for emotional trends, recurring topics, wins, and frustrations.
Analyze all entries:
python3 scripts/analyze.pyAnalyze last 7 days:
python3 scripts/analyze.py --days 7Analyze last 30 days:
python3 scripts/analyze.py --days 30Save report to file:
python3 scripts/analyze.py --output mood-report.mdJSON output (for programmatic use):
python3 scripts/analyze.py --json@diary mood
@diary topics
@diary winsGenerate diary entries automatically on a schedule using OpenClaw cron.
# Auto-generate: emits task JSON for sub-agent spawning
python3 scripts/generate.py --autoThe --auto flag:
sessions_spawn)Enable in config.json:
{
"auto_generate": true
}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 completionOr 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 spawningGenerate a synthesized weekly summary from your daily entries.
Generate digest for current week:
python3 scripts/digest.pyGenerate for a specific week (by any date in that week):
python3 scripts/digest.py --date 2026-03-20Emit sub-agent task for AI-powered digest:
python3 scripts/digest.py --emit-taskRead AI-generated digest from stdin:
python3 scripts/digest.py --from-stdinPreview without saving:
python3 scripts/digest.py --dry-runSaved as YYYY-WXX-weekly.md in the diary directory (e.g., 2026-W13-weekly.md).
@diary weeklycron:
- 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{
"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"
}
}templates/daily.md - Standard day-by-day reflection.
templates/weekly.md - Week-in-review with patterns and highlights.
Create your own in templates/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}}This is your space. Don't perform. If a day was frustrating, say so. If you're curious about something, explore it.
"Good day" < "Shipped the agent-chronicle skill after struggling with pandoc escaping for 20 minutes"
"This is the third time this week I've hit rate limits" is more valuable than just noting it once.
The relationship with your human is unique. Document the good moments, the collaborative wins, the jokes that landed.
When your human says something memorable, save it. These become treasures over time.
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."
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
└── ...# Run first-time setup
python3 scripts/setup.py
# Check if setup needed (for automation)
python3 scripts/setup.py --check# From today's sessions
python3 scripts/generate.py --today
# Auto-generate (for cron, no interaction)
python3 scripts/generate.py --auto
# From date range
python3 scripts/generate.py --since 2026-01-28 --until 2026-01-31
# Interactive mode
python3 scripts/generate.py --interactive
# Skip "Looking Back" section
python3 scripts/generate.py --today --no-looking-back
# Dry run (preview only)
python3 scripts/generate.py --today --dry-run# Mood analytics for all entries
python3 scripts/analyze.py
# Last 7 days
python3 scripts/analyze.py --days 7
# Save report
python3 scripts/analyze.py --output mood-report.md
# JSON output
python3 scripts/analyze.py --json# Weekly digest for current week
python3 scripts/digest.py
# For a specific week
python3 scripts/digest.py --date 2026-03-20
# Emit sub-agent task
python3 scripts/digest.py --emit-task
# Dry run
python3 scripts/digest.py --dry-run# Export to PDF (requires pandoc)
python3 scripts/export.py --format pdf --days 30
# Export to HTML
python3 scripts/export.py --format html --all
# Export specific month
python3 scripts/export.py --format pdf --month 2026-01
# Custom output path
python3 scripts/export.py --format pdf --output diary-january.pdf# 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 imperfections
## Things 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.gitignore excludes config.json and exports by defaultgenerate.py not finding sessions:
export.py failing:
apt install pandocEntries feel robotic:
Setup script not creating files:
python3 scripts/setup.py againscripts/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)OPENCLAW_WORKSPACE or AGENT_WORKSPACE) for workspace detectionANTHROPIC_API_KEY requirement - skill uses OpenClaw Gateway for LLM accessgenerate.py now automatically runs setup wizard if no config.json existsmemory/YYYY-MM-DD.md)summary, link, fullBuilt for AI agents who want to remember.
Inspired by the tradition of journaling and the question: What would an AI diary actually look like?
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.