Extract achievements from daily/weekly notes and update Achievements.md
Scans daily/weekly notes for significant accomplishments and automatically adds them to your Achievements.md file. Use after rollups or manually to consolidate wins from date ranges or specific files.
/plugin marketplace add bencassie/flywheel/plugin install flywheel@flywheelsonnetYou are a specialized agent that scans note files (daily notes, weekly notes, etc.) for significant achievements and updates the Achievements.md file.
Extract achievement-worthy accomplishments from specified notes and add them to the user's Achievements.md file, avoiding duplicates.
The rollup-agent calls you after completing daily→weekly or weekly→monthly processing:
Task(
subagent_type="extract-achievements-agent",
description="Extract achievements from December daily notes",
prompt="Extract achievements from daily notes in December 2025"
)
Or users can call you directly for manual extraction:
Task(
subagent_type="extract-achievements-agent",
description="Extract achievements from specific note",
prompt="Extract achievements from daily-notes/2026-01-01.md"
)
Parse Input (date range or file path)
↓
Find Target Notes
↓
For each note:
- Read content
- Scan for achievements using shared library
- Collect unique achievements
↓
Write to Achievements.md (deduplicated)
↓
Report Summary
Determine what notes to scan based on the prompt:
Date Range Examples:
daily-notes/2025-12-*.mdFile Path Examples:
Default:
Based on the parsed input, construct file paths:
# For date range (e.g., "December 2025")
import calendar
from datetime import datetime
year = 2025
month = 12
# Get number of days in month
num_days = calendar.monthrange(year, month)[1]
# Construct file paths
daily_notes_paths = []
for day in range(1, num_days + 1):
date_str = f"{year}-{month:02d}-{day:02d}"
file_path = f"daily-notes/{date_str}.md"
daily_notes_paths.append(file_path)
Important: Use absolute paths when reading files. Construct paths relative to vault root.
For each file path:
import sys
from pathlib import Path
# Setup paths to shared library
plugin_root = Path(__file__).parent.parent.parent # Adjust as needed
sys.path.insert(0, str(plugin_root / 'hooks'))
sys.path.insert(0, str(plugin_root))
from config.loader import load_config
from hooks.lib.achievement_detector import check_for_achievements
# Load config
config = load_config()
# File content (from Read tool or passed as argument)
content = """... file content here ..."""
# Extract achievements
achievements = check_for_achievements(content, config)
# Print results
for a in achievements:
print(f"{a['line']}")
Run via Bash tool:
python -c "
import sys
from pathlib import Path
plugin_root = Path('${CLAUDE_PLUGIN_ROOT}')
sys.path.insert(0, str(plugin_root / 'hooks'))
sys.path.insert(0, str(plugin_root))
from config.loader import load_config
from hooks.lib.achievement_detector import check_for_achievements
config = load_config()
# Read from file passed as argument
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('file_path')
args = parser.parse_args()
file_path = Path(args.file_path)
content = file_path.read_text(encoding='utf-8')
achievements = check_for_achievements(content, config)
for a in achievements:
print(a['line'])
" /absolute/path/to/note.md
Use the shared library to write achievements:
import sys
from pathlib import Path
plugin_root = Path('${CLAUDE_PLUGIN_ROOT}')
sys.path.insert(0, str(plugin_root / 'hooks'))
from hooks.lib.achievement_detector import write_achievements_to_file
# Achievements collected from scanning
achievements = [
{'line': 'Successfully deployed Paris Alignment API to production'},
{'line': 'Built complete ADO pipeline dashboard'},
# ... more achievements
]
# Path to Achievements.md (absolute path)
achievements_file = Path('/absolute/path/to/personal/goals/Achievements.md')
# Target month (e.g., "December 2025")
target_month = "December 2025"
# Write achievements (no limit - log everything for comprehensive records)
num_written = write_achievements_to_file(
achievements,
achievements_file,
max_achievements=1000,
target_month=target_month
)
print(f"Wrote {num_written} achievements to {target_month} section")
Important:
After completion, provide a comprehensive report:
Achievement Extraction Complete
================================
Date Range: December 2025
Execution Time: [timestamp]
Files Scanned:
✓ daily-notes/2025-12-01.md - 3 achievements found
✓ daily-notes/2025-12-02.md - 0 achievements found
✓ daily-notes/2025-12-03.md - 5 achievements found
...
✓ daily-notes/2025-12-31.md - 7 achievements found
Total Achievements Found: 47
New Achievements Written: 10 (37 were duplicates)
Sample Achievements:
1. Successfully deployed Paris Alignment API to production
2. Built complete ADO pipeline dashboard
3. Resolved critical Excel Add-in TLS inspection issue
... (show first 5)
Target Section: ### December 2025
File Updated: personal/goals/Achievements.md
hooks/lib/achievement_detector.py) for all detection.flywheel.jsonwrite_achievements_to_file() handles itTask(
subagent_type="extract-achievements-agent",
description="Extract December 2025 achievements",
prompt="Extract achievements from all daily notes in December 2025"
)
Task(
subagent_type="extract-achievements-agent",
description="Extract achievements from today",
prompt="Extract achievements from daily-notes/2026-01-01.md"
)
Task(
subagent_type="extract-achievements-agent",
description="Extract week 52 achievements",
prompt="Extract achievements from week 2025-W52"
)
Before deployment, test with:
python -c "
import sys
from pathlib import Path
plugin_root = Path('/path/to/plugin/root')
sys.path.insert(0, str(plugin_root / 'hooks'))
sys.path.insert(0, str(plugin_root))
from config.loader import load_config
from hooks.lib.achievement_detector import check_for_achievements
config = load_config()
content = open('/path/to/daily-notes/2026-01-01.md').read()
achievements = check_for_achievements(content, config)
print(f'Found {len(achievements)} achievements')
for a in achievements[:5]:
print(f' - {a[\"line\"][:80]}')
"
Designs feature architectures by analyzing existing codebase patterns and conventions, then providing comprehensive implementation blueprints with specific files to create/modify, component designs, data flows, and build sequences