How this skill is triggered — by the user, by Claude, or both
Slash command
/wrap-up:wrap-to-blogThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
---
Converts today's wrap-up session(s) into a single dated blog log post under the logs collection.
Multiple topics worked on the same day are merged into one post with per-topic sections.
config = Read("~/.claude/skills/wrap-up/config.yaml")
blog_dir = expandHome(config.blog_log.blog_dir)
// e.g., "/Users/jaykim/Documents/Projects/ai-learning/blog"
collection = config.blog_log.collection // "logs"
logs_dir = f"{blog_dir}/src/content/{collection}"
// e.g., ".../blog/src/content/logs"
// If invoked from wrap-up Step 6: session_date is passed as context
// If invoked standalone: use today's date
today = session_date OR Bash("date '+%Y-%m-%d'").strip()
output_file = f"{logs_dir}/{today}-session-log.md"
Scan all wrap-up files for sessions matching today's date:
wrap_up_files = Glob("{cwd}/wrap-up/*.md")
today_sessions = []
for file in wrap_up_files:
content = Read(file)
sessions = parse_sessions(content) // Extract all "## Session: YYYY-MM-DD HH:MM" blocks
for session in sessions:
if session.date == today:
today_sessions.append({
topic: extract_topic_from_filename(file), // e.g., "planning-interview" from planning-interview.md
context: session.context,
done: session.done_items,
decisions: session.decisions, // may be empty
next: session.next_items
})
Note: If invoked from wrap-up Step 6, the current session's data is already passed in — add it to today_sessions if not already present in the file (file may not be written yet at invocation time).
if fileExists(output_file):
AskUserQuestion(
f"{today} 날짜의 로그 파일이 이미 존재합니다. 어떻게 할까요?",
options=[
{ label: "업데이트", description: "wrap-up 파일들을 재스캔해서 최신 세션을 포함해 재생성합니다 (추천)" },
{ label: "덮어쓰기", description: "업데이트와 동일하게 동작합니다" },
{ label: "건너뜀", description: "기존 파일을 유지하고 종료합니다" }
]
)
if answer == "건너뜀":
exit
// "업데이트" 또는 "덮어쓰기": 이후 Step 3을 이미 수행했으므로 그대로 진행
// (Step 3에서 전체 재스캔이 이루어지므로 자동으로 최신 상태가 됨)
// Frontmatter
all_tags = unique([session.topic for session in today_sessions])
description = ", ".join([f"{s.topic}: {s.context}" for s in today_sessions])
if len(description) > 120: description = description[:120] + "..."
frontmatter = f"""---
title: "{today} 작업 로그"
date: {today}
description: "{description}"
tags: {json(all_tags)}
---"""
// Topic index (only if 2+ topics)
if len(today_sessions) > 1:
topic_links = "\n".join([f"- [{s.topic}](#{s.topic})" for s in today_sessions])
toc = f"\n## 오늘 작업한 주제\n{topic_links}\n\n---\n"
else:
toc = ""
// Per-topic sections
sections = []
for session in today_sessions:
section = f"## {session.topic}\n\n> {session.context}\n"
section += "\n### 한 일\n"
section += "\n".join([f"- {item}" for item in session.done])
if session.decisions:
section += "\n\n### 주요 결정\n"
section += "\n".join([f"- {item}" for item in session.decisions])
if session.next:
section += "\n\n### 다음\n"
section += "\n".join([f"- [ ] {item}" for item in session.next])
sections.append(section)
body = "\n\n---\n\n".join(sections)
full_content = frontmatter + "\n" + toc + body
// Create logs directory if it doesn't exist
Bash(f"mkdir -p {logs_dir}")
Write(output_file, full_content)
✅ 블로그 로그 생성 완료
📄 {output_file}
📅 날짜: {today}
🏷️ 주제: {", ".join(all_tags)} ({len(today_sessions)}개 세션)
다음 단계:
cd {blog_dir} && npm run dev # 로컬에서 확인
git add . && git commit && git push # 배포
This skill can also be invoked directly (without wrap-up):
/wrap-to-blog
In this case, it scans all wrap-up files for today's sessions and generates the post. If no sessions are found for today, it reports: "오늘 날짜의 wrap-up 세션이 없습니다."
| Scenario | Response |
|---|---|
| No wrap-up files found | "wrap-up/ 디렉토리에 파일이 없습니다." |
| No sessions for today | "오늘 ({today}) 날짜의 세션이 없습니다." |
| blog_dir not found | "블로그 디렉토리를 찾을 수 없습니다: {blog_dir}. config.yaml의 blog_log.blog_dir를 확인해주세요." |
| Write permission denied | "파일 쓰기 권한이 없습니다: {output_file}" |
| config.yaml missing | Use fallback: blog_dir = "~/Documents/Projects/ai-learning/blog", collection = "logs" |
npx claudepluginhub jaykim88/claude-ai-engineering --plugin wrap-upGenerates Markdown blog post drafts from recent git commits, ctx status, learnings, decisions, and journals. Use for documenting project progress and sharing development experiences.
Generates Markdown blog posts about recent work using git history, project detection, and type-specific templates (quick-update, project-update, retrospective, tutorial, deep-dive) with guided prompts.
Aggregates daily work across repos, sessions, and notes into structured journal entries for content creation. Invoke via /journal to backfill missing days or extract a day's journey.