From toby-session
Saves a structured summary of the current conversation to a markdown file in conv-logs/, organized by date and continuing from the last save point.
How this skill is triggered — by the user, by Claude, or both
Slash command
/toby-session:save-conversationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Save a concise summary of the current conversation to a markdown file in the `conv-logs/` directory.
Save a concise summary of the current conversation to a markdown file in the conv-logs/ directory.
The goal is to create a readable record of what Toby and Claude discussed and accomplished — not a verbatim transcript, but a structured summary that's useful for future reference.
IMPORTANT: Always resolve the project root via git rev-parse --show-toplevel and use that as the base for conv-logs/. Do NOT use the current working directory — it may be a subdirectory. If the caller is not inside a git repo at all, fall back to pwd so writes never escape into /conv-logs/....
Use the current date to create a hierarchical directory structure:
PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
YYYYMM=$(date +%Y%m)
DD=$(date +%d)
mkdir -p "${PROJECT_ROOT}/conv-logs/${YYYYMM}/${DD}"
Look for the most recent file across all subdirectories of conv-logs/ under the project root. Use a find -printf (Linux) / stat (macOS) sort instead of xargs ls -t so filenames with spaces or newlines stay safe:
LATEST=""
LATEST_MTIME=0
while IFS= read -r -d '' f; do
if [[ "$OSTYPE" == "darwin"* ]]; then m=$(stat -f %m "$f"); else m=$(stat -c %Y "$f"); fi
if (( m > LATEST_MTIME )); then LATEST_MTIME=$m; LATEST="$f"; fi
done < <(find "${PROJECT_ROOT}/conv-logs" -name 'conv-*.md' -type f -print0 2>/dev/null)
echo "$LATEST"
If a previous save exists, read it to determine where the last save ended — the new save should only include conversation that happened after that point. Always start numbering from ## 1. in each save file.
If no previous save exists, this is the first save of the session — include everything.
Use the current timestamp:
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
YYYYMM=$(date +%Y%m)
DD=$(date +%d)
FILENAME="${PROJECT_ROOT}/conv-logs/${YYYYMM}/${DD}/conv-${TIMESTAMP}.md"
Review the conversation history (only the part after the last save, or everything if first save) and write a markdown file with this structure:
# Conversation Log — {YYYY-MM-DD HH:MM}
# 참여자
- Toby (사용자)
- Claude ({model name, e.g. Opus 4.6})
## 브랜치
- `{branch}` (or `main` if no feature branch)
---
## 1. {Topic Title}
사용: {comma-separated list of skills, tools, agents used in this exchange}
Toby: {One sentence summary of request}
Claude: {What was done — actions, key results. Use bullet list for multiple items:}
- item 1
- item 2
---
## 2. {Next Topic}
사용: {skills, tools, agents}
Toby: ...
Claude: ...
(Continue numbering for each distinct topic. Use `---` between sections.)
---
## 변경된 파일
- `path/to/new-file.md` (추가)
- `path/to/modified-file.json` (수정)
- `path/to/deleted-file.md` (삭제)
Before writing the file, run git diff --name-status HEAD (or compare against the commit at session start) to get the actual list of added/modified/deleted files. Use the status codes:
If there are no uncommitted changes (everything was already committed and pushed), use git diff --name-status {first_commit_of_session}..HEAD to capture all changes made during the session. For incremental saves, only list files changed since the previous save.
Guidelines for writing the summary:
## 1., ## 2., ...)Toby: lines capture the user's intent in one sentence (not verbatim)Claude: lines describe what was actually done — use bullet lists when there are multiple actions or results**) on Toby/Claude names — keep them plain text사용: line right after each section title listing skills, tools, and agents used (e.g., 사용: skill-creator, firecrawl, Bash, Explore agent)## 1. (do not continue from the previous file's numbering). Do not include a reference to the previous log fileReview the conversation for any Korean prompts that were rewritten into English (lines like Your prompt rewritten: "..."). If any exist, append them to a monthly prompt log file:
PROMPT_FILE="${PROJECT_ROOT}/conv-logs/${YYYYMM}/prompt-${YYYYMM}.md"
If the file does not exist, create it with a header:
# Prompt Rewrites — {YYYY-MM}
| id | datetime | korean | english |
|----|----------|--------|---------|
Append each rewrite as a new row. Use an auto-incrementing id (continue from the last id in the file, or start at 1). The datetime is the approximate time of the exchange.
Example rows:
| 1 | 2026-03-25 21:30 | .idea는 .gitignore에 포함해줘 | Add .idea to .gitignore. |
| 2 | 2026-03-25 21:32 | save-conversation skill에서 md 문서를 만든 뒤에 git add로 tracking까지 해주도록 변경해줘 | Modify the save-conversation skill so that after creating the markdown file, it also runs `git add` to track the file. |
If there are no Korean-to-English rewrites in the conversation (or the scope being saved), skip this step.
After writing, run git add on the prompt file:
git add "${PROMPT_FILE}"
Write the conversation log file using the Write tool, then run git add to track it:
git add "${FILENAME}"
Then tell the user:
"대화 내용을 저장했습니다:
conv-logs/{yyyymm}/{dd}/conv-{timestamp}.md"
Show a brief preview (first 10-15 lines) so the user can verify the content looks right.
npx claudepluginhub tobyilee/toby-plugins --plugin toby-sessionSaves the current Claude Code session transcript as clean markdown (conversation only) and raw transcript files for reuse in memos, blog drafts, or articles. Supports starting, refreshing, and finalizing logs per session.
Generates and saves Markdown session logs capturing objectives, file changes, referenced materials, technical notes, future plans, open items, and metrics to resume project work across conversations.
Extracts user inputs from Claude Code session history and organizes them into date-based markdown files in a project's .chats directory for documentation and reference.