plugins/learning-summary/skills/learning-summary/SKILL.md
Summarize and document key learnings from the conversation. Use when user says "summarize", "document", "what did I learn", or wants to capture insights.
npx skillsauth add jaykim88/claude-ai-engineering learning-summaryInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Extracts and documents key insights, concepts, and learnings from the current conversation. Output is blog-ready with YAML frontmatter for Astro Content Collections.
Read ~/.claude/skills/learning-summary/config.yaml:
learning_repo: "/Users/jaykim/Documents/Projects/ai-learning"
output_dir: "blog/src/content/learnings"
auto_commit: false
auto_push: false
If config not found: Use defaults (current directory, no auto-commit)
Review the entire conversation history to identify:
| Category | What to Extract | |----------|----------------| | Key Concepts | Main topics, key terminology, fundamental concepts | | New Learnings | New knowledge gained, before/after understanding | | Practical Examples | Code snippets, commands, real-world examples | | Common Misconceptions | Misconceptions clarified during conversation | | References | Files, URLs, documentation referenced | | Next Steps | Follow-up actions, topics to explore |
Also extract metadata for frontmatter:
| Field | How to Derive |
|-------|---------------|
| title | Main topic as concise title |
| description | 1-2 sentence summary of key insight |
| tags | 3-7 lowercase kebab-case keywords from conversation topics |
| source | Primary URL referenced (if any) |
| lang | Always en (output is always in English) |
Create descriptive filename based on main topic:
IMPORTANT: Run date '+%Y-%m-%d' to get the exact current date. Never estimate.
Format: YYYY-MM-DD-brief-topic-description.md
Examples:
2026-01-17-claude-code-marketplace-guide.md2026-01-17-python-async-programming.md2026-01-17-docker-compose-networking.mdAfter generating the filename, scan the output directory for conflicts:
Check 1 — Exact filename match:
Glob: {output_dir}/{filename}
If the exact file exists → it's the same topic on the same day.
Check 2 — Same-date files (even if topic differs):
Glob: {output_dir}/{YYYY-MM-DD}-*.md
Collect all files with today's date prefix.
If any existing files are found, ask the user:
AskUserQuestion(
question: "오늘 날짜의 학습 파일이 이미 있습니다. 어떻게 할까요?",
options: [
{
label: "이어서 추가 (Append)",
description: "기존 파일 맨 아래에 새 섹션으로 추가합니다."
},
{
label: "새 파일 생성 (New File)",
description: "별도 파일로 독립 저장합니다. (파일명 충돌 시 -2 접미사 추가)"
}
]
)
Show existing filenames in the question for context (e.g., Found: 2026-03-03-python-async.md).
If user selects Append:
--- separator + new content block at the endtags to merge old + new tags (deduplicated)If user selects New File:
-2 suffix (e.g., 2026-03-03-topic-2.md)If no existing files found: Skip this step entirely, proceed to Step 4.
Generate a blog-ready markdown file with YAML frontmatter:
---
title: "[Main Topic Title]"
date: YYYY-MM-DD
description: "[1-2 sentence summary of key insight]"
category: learnings
tags: ["tag1", "tag2", "tag3"]
source: "https://..."
lang: en
draft: false
---
## Key Concepts
[Key concepts with clear definitions]
## New Learnings
[New learnings with before/after]
## Practical Examples
[Code, commands, examples]
## Common Misconceptions
[Clarified misconceptions]
## References
[Files, URLs, resources]
## Next Steps
[Follow-up actions]
Important formatting rules:
# Title heading in body (the blog layout renders title from frontmatter)## Key Concepts or first applicable sectioncategory is always learningstags are lowercase, kebab-case, as a YAML arraysource is optional (omit the field entirely if no primary URL)description should be under 160 characters for SEOSave location: {learning_repo}/{output_dir}/{filename}
Example: /Users/jaykim/Documents/Projects/ai-learning/blog/src/content/learnings/2026-01-17-topic.md
Use Write tool to create the markdown file.
Only if auto_commit: true in config:
cd "$learning_repo"
git add "blog/src/content/learnings/$filename"
git commit -m "Add learning: $topic
Co-Authored-By: Claude Opus 4.6 <[email protected]>"
If auto_push: true, also run:
git push
When pushed to main, GitHub Actions will automatically build and deploy the blog.
Show the user:
English:
Korean:
Use this skill when:
Skip when:
| Scenario | Response |
|----------|----------|
| Config file not found | Use defaults: ./blog/src/content/learnings/, no auto-commit |
| Learning repo doesn't exist | Error: Directory not found at {path}. Create with: mkdir -p {path} |
| Git not initialized | Warning: Not a git repository. Skipping auto-commit. |
| Write permission denied | Error: Cannot write to {path}. Check permissions: ls -la {dir} |
| Empty conversation | Warning: Not enough content to summarize. Continue the conversation first. |
| Append fails (malformed file) | Fall back to new file with -2 suffix; warn user |
| Invalid YAML config | Warning: Invalid config.yaml. Using defaults. |
| Git commit fails | Warning: Git commit failed. Document saved but not committed. |
Edit ~/.claude/skills/learning-summary/config.yaml:
# Dedicated AI learning repository (absolute path)
learning_repo: "/Users/jaykim/Documents/Projects/ai-learning"
# Output directory (relative to learning_repo)
# Points to blog content directory for direct blog publishing
output_dir: "blog/src/content/learnings"
# Filename pattern (will be auto-generated based on date and topic)
filename_pattern: "YYYY-MM-DD-topic.md"
# Auto-commit to git
auto_commit: false
# Auto-push to remote (requires auto_commit: true)
auto_push: false
# Default sections to include
sections:
- key_concepts
- new_learnings
- practical_examples
- misconceptions
- references
- next_steps
# Language preference (auto-detect or set to 'ko'/'en')
language: en
See references/ directory:
template.md - Document template with examplesbest-practices.md - Tips for writing effective learning notesconfiguration.md - Detailed configuration guidedevelopment
Audit and optimize third-party scripts — analytics, tag managers, chat widgets, embeds — with the right loading strategy, performance budget, facades, and CSP/consent controls. Use when adding a script, when TBT/INP regress, when a GDPR/CCPA consent requirement arises, or before shipping. Not for first-party bundle size (use bundle-optimization) or broad Core Web Vitals diagnosis (use rendering-performance).
development
Apply the Testing Trophy (mostly integration tests with RTL + MSW, sparing E2E with Playwright) and set coverage thresholds. Use before new feature work, after bug fixes, when CI coverage falls below target, or when tests are flaky or break on every refactor. Not for wiring coverage gates + Playwright into the GitHub Actions matrix (use cicd-pipeline) or auditing WCAG a11y compliance (use accessibility-audit).
development
Inventory and prioritize technical debt — TODO/FIXME/HACK, any usage, deprecated APIs, untested logic — with impact × effort matrix. Use at quarter start, before a refactoring sprint, when a new teammate joins, or when feature velocity slows. Not for actually paying down debt (use code-refactoring) or recording a migration approach (use decision-records) — this only inventories and prioritizes.
development
Decision framework for choosing the right state location — URL, server cache, local component, or shared/global store. Use when state-sync bugs appear, prop drilling gets deep (3+ levels), filters/tabs lose state on reload, or quarterly review. Not for form state specifically (use form-ux) or when the state is actually server data (use api-caching-optimization).