AgentSkillsCN

save

将学习内容保存为 TIL 文件,并批量更新每日笔记、MOC 以及待办事项

SKILL.md
--- frontmatter
name: save
description: "학습 내용을 TIL 파일로 저장하고 Daily 노트, MOC, 백로그를 일괄 업데이트"
argument-hint: "[주제] [카테고리]"
plugin-version: "__PLUGIN_VERSION__"

Save Skill

학습 대화의 결과물을 Obsidian 호환 TIL 마크다운으로 저장하고, 연관 파일(Daily 노트, TIL MOC, 백로그)을 빠짐없이 업데이트한다.

핵심 원칙은 .claude/rules/save-rules.md에 항상 로드되어 있다. 이 스킬은 상세 템플릿과 워크플로우를 정의한다.

활성화 조건

  • "저장해줘", "저장", "정리해줘", "TIL로 만들어줘"
  • "/save"
  • /til Phase 2 완료 후 사용자가 저장을 요청할 때

비활성화 조건

  • 학습 대화 없이 호출 (저장할 내용이 없음) → "저장할 학습 내용이 없습니다" 안내
  • 이미 저장된 TIL 파일을 수정하고 싶을 때 → 직접 파일 편집
  • 백로그만 확인하고 싶을 때 → /backlog 사용

MCP 도구 활용

oh-my-til MCP 서버가 연결되어 있으면 MCP 도구를 활용한다:

  • 저장 전: til_get_context로 주제 관련 기존 TIL과 백로그를 한 번에 파악
  • 저장 전: til_list로 기존 TIL 목록을 확인하여 동일/유사 주제 중복 방지. til_list는 JSON을 반환한다: { totalCount, categories: [{ name, count, files }] }
  • 저장 전: vault_get_active_file로 사용자가 보고 있는 파일 컨텍스트 확인

MCP 도구를 사용할 수 없는 경우, ./til/TIL MOC.md./til/{카테고리}/backlog.md를 직접 읽어 기존 TIL과 백로그를 파악한다.

워크플로우

Step 1: 컨텍스트 확인

  1. 현재 대화에서 학습한 주제를 파악한다
  2. 카테고리가 지정되지 않았으면 주제에 맞는 카테고리를 자동 추천한다
  3. 주제나 카테고리가 불명확하면 사용자에게 질문한다

Step 2: 링크 후보 파악

  1. MCP 도구(til_get_context) 또는 MOC/백로그 파일을 읽어 기존 TIL과 백로그 항목을 파악한다
  2. 학습 내용에서 언급된 관련 개념을 분류한다:
    • 기존 TIL → 본문에서 바로 마크다운 링크 사용
    • 백로그 항목 → 본문에서 바로 마크다운 링크 사용 (이미 학습 계획에 있으므로)
    • 존재하지 않는 개념 → 학습하면 좋을 개념만 후보로 선별
  3. 존재하지 않는 개념 후보가 있으면 사용자에게 질문한다:
    • "다음 개념들이 아직 TIL에 없습니다. 관련 노트에 추가할까요?"
    • 각 후보를 목록으로 보여주고, 사용자가 선택한 것만 ## 관련 노트 섹션에 추가
    • 후보가 없으면 질문 없이 다음 단계로 진행
    • 첫 TIL 작성 시 (기존 TIL/백로그 없음) 관련 노트 후보가 과도하면 핵심 2~3개만 제안한다

Step 3: TIL 파일 저장

  1. 학습 내용을 아래 템플릿에 맞춰 정리한다 (Step 2에서 확정한 링크 반영)
  2. ./til/{카테고리}/{주제슬러그}.md에 저장한다
  3. 동일 슬러그 파일이 있는 경우 — 자동 병합은 한 가지 조건에서만 허용한다:
    • 자동 병합 조건: 현재 대화에서 /til Phase 1이 기존 TIL을 감지하고, 사용자가 "심화 학습"을 명시적으로 선택하고, 그 대화가 끊기지 않고 바로 이어진 경우에만
    • 그 외 모든 경우 (독립 /save 호출, 대화가 길어진 경우, /til에서 "새로 작성"을 선택한 경우 등): 자동 병합하지 않고 사용자에게 "기존 파일에 병합 / 덮어쓰기 확인"을 요청한다
    • 자동 병합 시 → 기존 파일에 병합한다:
      • frontmatter: date 유지, updated를 오늘 날짜로 추가/갱신, tags/aliases에 새 항목 추가 (기존 유지)
      • > [!tldr] 요약: 심화 내용을 반영하여 재작성
      • ## 핵심 내용: 기존 내용 유지 + 새 소제목/내용 추가
      • ## 예시: 새 예시가 있으면 추가
      • ## 참고 자료: 기존 + 신규 병합
      • ## 관련 노트: 기존 + 신규 병합
      • 원칙: 기존 내용을 삭제하지 않고 추가/보강만 한다 (단, tldr은 전체 반영을 위해 재작성)
    • 그 외 (새 학습인데 슬러그가 겹치는 경우) → 사용자에게 덮어쓸지 확인한다

Step 4: Daily 노트 업데이트

해당 날짜의 Daily 노트(./Daily/YYYY-MM-DD.md)에 카테고리별로 그룹핑하여 링크를 추가한다.

Step 5: TIL MOC 업데이트

./til/TIL MOC.md의 해당 카테고리에 항목을 추가한다.

Step 6: 백로그 체크

해당 카테고리 백로그(./til/{카테고리}/backlog.md)에 항목이 있으면 [x]로 체크하고, 링크가 표준 마크다운 형식([표시명](til/{카테고리}/{slug}.md))이 아니면 업데이트한다.

Step 7: 완료 안내

저장된 파일 경로를 사용자에게 안내한다.

Step 8: 문서 리뷰

커밋 전에 사용자가 저장된 문서를 검토할 수 있도록 한다.

  1. 저장된 TIL 파일의 전체 내용을 보여준다
  2. AskUserQuestion 도구로 확인을 요청한다 ("확인 완료" / "수정 필요")
  3. "수정 필요" 선택 시 수정 사항을 반영한 후 다시 리뷰한다
  4. "확인 완료" 선택 시 다음 단계로 진행한다

Step 9: git commit

변경된 파일(TIL, Daily 노트, MOC, 백로그)을 하나의 atomic commit으로 커밋한다.

  • 커밋 메시지 형식: 📝 til: {한글 제목}({영문 제목}) - {카테고리}
    • 예: 📝 til: 클로저(Closure) - javascript
  • push는 하지 않는다 (로컬 커밋만)
  • Step 1~8이 모두 완료된 후에만 커밋한다

저장 경로 규칙

code
./til/
├── TIL MOC.md              ← Obsidian MOC (Map of Content)
├── javascript/
│   ├── closure.md
│   └── event-loop.md
├── rust/
│   └── ownership.md
└── devops/
    └── docker-network.md
  • 기본 경로: ./til/{카테고리}/{주제슬러그}.md
  • 카테고리 폴더가 없으면 자동 생성
  • 주제 슬러그: 영문 소문자, 하이픈 구분 (예: event-loop, docker-network)
  • 날짜는 파일명이 아닌 frontmatter date 필드에 기록한다

TIL 마크다운 템플릿

markdown
---
date: YYYY-MM-DDTHH:mm:ss
category: 카테고리
tags:
  - til
  - 태그1
  - 태그2
aliases:
  - "한글 제목"
  - "영문 제목"
---

# 제목

> [!tldr] 한줄 요약
> 핵심을 한 문장으로 요약

## 핵심 내용

학습한 핵심 개념을 설명한다. 필요하면 소제목으로 나눈다.

관련 개념이 vault에 있거나 앞으로 작성될 수 있으면 표준 마크다운 링크로 연결한다.

### 소제목 (필요시)

상세 설명...

## 예시

```언어
// 코드 예시 또는 실제 사례

[!example] 실행 결과 코드 실행 결과나 동작 설명

참고 자료

관련 노트

code

### 템플릿 작성 규칙

1. **Properties (frontmatter)**
   - `tags`에 항상 `til`을 포함한다
   - `aliases`에 한글/영문 제목을 넣어 검색이 쉽게 한다
   - `date`는 ISO 형식 (YYYY-MM-DDTHH:mm:ss, 로컬 시간 기준). 반드시 `date` 명령어(`date +%Y-%m-%dT%H:%M:%S`)로 실제 현재 로컬 시각을 조회하여 사용한다

2. **링크** — 항상 표준 마크다운 링크 형식 사용
   - **형식**: `[표시명](til/{카테고리}/{slug}.md)` (예: `[클로저(Closure)](til/javascript/closure.md)`)
   - 본문, Daily 노트, MOC, 백로그 등 **모든 위치**에서 동일한 형식을 사용한다
   - **기존 TIL**: 본문에서 바로 마크다운 링크 사용
   - **백로그 항목**: 본문에서 바로 마크다운 링크 사용 (이미 학습 계획에 있으므로)
   - **존재하지 않는 개념**: 본문에서는 일반 텍스트로 작성하고, Step 2에서 사용자 확인 후 `## 관련 노트` 섹션에만 추가
   - **금지**: `[[위키링크]]` 형식 사용 금지. 표준 마크다운 링크만 사용한다
   - 예: "JavaScript의 [클로저(Closure)](til/javascript/closure.md)는 렉시컬 스코프를 기억한다"

3. **Callouts**
   - 한줄 요약: `> [!tldr]`, 실행 결과: `> [!example]`, 주의: `> [!warning]`, 팁: `> [!tip]`

4. **Mermaid 다이어그램**
   - 텍스트로 설명 어려운 구조/흐름에만 사용, TIL당 최대 1개

5. **태그**: frontmatter `tags`로 관리, 카테고리명도 태그에 포함

## Daily 노트 연동

TIL 저장 시 `./Daily/YYYY-MM-DD.md`에 카테고리별 링크 추가:

```markdown
## TIL

### javascript
- [클로저(Closure)](til/javascript/closure.md)

### devops
- [Docker 네트워크](til/devops/docker-network.md)
  • ### 카테고리 소제목으로 그룹핑
  • 기존 Daily 노트: ## TIL 섹션 찾아서 카테고리별 항목 추가 (없으면 파일 끝에 추가)
  • Daily 노트 없으면 새로 생성
  • 카테고리 소제목 순서: 기존 유지, 새 카테고리는 마지막

TIL MOC (Map of Content)

./til/TIL MOC.md에 카테고리별 항목 추가. MOC가 없으면 새로 생성:

markdown
---
tags:
  - moc
  - til
---

# TIL (Today I Learned)

## 카테고리

### javascript
- [클로저(Closure)](til/javascript/closure.md)

백로그 연동

./til/{카테고리}/backlog.md에 학습한 주제가 있으면:

  1. - [ ]- [x]로 변경
  2. 링크가 표준 마크다운 형식([표시명](til/{카테고리}/{slug}.md))이 아니면 업데이트

피해야 할 실패 모드

  • Daily/MOC/백로그 누락: 가장 흔한 실수. 체크리스트 반드시 확인
  • 의도하지 않은 슬러그 충돌: 새 학습인데 같은 슬러그 파일이 있는지 확인 (심화 학습 모드에서는 충돌이 정상)
  • 민감 정보 노출: example.com, your-api-key 등 대체값 사용

완료 체크리스트

저장 시 아래 항목을 모두 확인한다. 하나라도 빠지면 저장 미완료:

  • 링크 후보 파악 완료 (기존 TIL/백로그 확인, 미존재 개념은 사용자 확인)
  • TIL 파일이 템플릿 형식에 맞게 저장됨
  • Daily 노트에 카테고리별 링크 추가됨
  • TIL MOC에 항목 추가됨
  • 백로그 항목 있으면 [x] 체크 + 링크 업데이트
  • 저장 경로 안내함
  • 문서 리뷰 완료 (사용자 확인)
  • git commit (push 제외)