Save Skill
학습 대화의 결과물을 Obsidian 호환 TIL 마크다운으로 저장하고, 연관 파일(Daily 노트, TIL MOC, 백로그)을 빠짐없이 업데이트한다.
핵심 원칙은 .claude/rules/save-rules.md에 항상 로드되어 있다. 이 스킬은 상세 템플릿과 워크플로우를 정의한다.
활성화 조건
- •"저장해줘", "저장", "정리해줘", "TIL로 만들어줘"
- •"/save"
- •
/tilPhase 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: 컨텍스트 확인
- •현재 대화에서 학습한 주제를 파악한다
- •카테고리가 지정되지 않았으면 주제에 맞는 카테고리를 자동 추천한다
- •주제나 카테고리가 불명확하면 사용자에게 질문한다
Step 2: 링크 후보 파악
- •MCP 도구(
til_get_context) 또는 MOC/백로그 파일을 읽어 기존 TIL과 백로그 항목을 파악한다 - •학습 내용에서 언급된 관련 개념을 분류한다:
- •기존 TIL → 본문에서 바로 마크다운 링크 사용
- •백로그 항목 → 본문에서 바로 마크다운 링크 사용 (이미 학습 계획에 있으므로)
- •존재하지 않는 개념 → 학습하면 좋을 개념만 후보로 선별
- •존재하지 않는 개념 후보가 있으면 사용자에게 질문한다:
- •"다음 개념들이 아직 TIL에 없습니다. 관련 노트에 추가할까요?"
- •각 후보를 목록으로 보여주고, 사용자가 선택한 것만
## 관련 노트섹션에 추가 - •후보가 없으면 질문 없이 다음 단계로 진행
- •첫 TIL 작성 시 (기존 TIL/백로그 없음) 관련 노트 후보가 과도하면 핵심 2~3개만 제안한다
Step 3: TIL 파일 저장
- •학습 내용을 아래 템플릿에 맞춰 정리한다 (Step 2에서 확정한 링크 반영)
- •
./til/{카테고리}/{주제슬러그}.md에 저장한다 - •동일 슬러그 파일이 있는 경우 — 자동 병합은 한 가지 조건에서만 허용한다:
- •자동 병합 조건: 현재 대화에서
/tilPhase 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: 문서 리뷰
커밋 전에 사용자가 저장된 문서를 검토할 수 있도록 한다.
- •저장된 TIL 파일의 전체 내용을 보여준다
- •
AskUserQuestion도구로 확인을 요청한다 ("확인 완료" / "수정 필요") - •"수정 필요" 선택 시 수정 사항을 반영한 후 다시 리뷰한다
- •"확인 완료" 선택 시 다음 단계로 진행한다
Step 9: git commit
변경된 파일(TIL, Daily 노트, MOC, 백로그)을 하나의 atomic commit으로 커밋한다.
- •커밋 메시지 형식:
📝 til: {한글 제목}({영문 제목}) - {카테고리}- •예:
📝 til: 클로저(Closure) - javascript
- •예:
- •push는 하지 않는다 (로컬 커밋만)
- •Step 1~8이 모두 완료된 후에만 커밋한다
저장 경로 규칙
./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 마크다운 템플릿
--- date: YYYY-MM-DDTHH:mm:ss category: 카테고리 tags: - til - 태그1 - 태그2 aliases: - "한글 제목" - "영문 제목" --- # 제목 > [!tldr] 한줄 요약 > 핵심을 한 문장으로 요약 ## 핵심 내용 학습한 핵심 개념을 설명한다. 필요하면 소제목으로 나눈다. 관련 개념이 vault에 있거나 앞으로 작성될 수 있으면 표준 마크다운 링크로 연결한다. ### 소제목 (필요시) 상세 설명... ## 예시 ```언어 // 코드 예시 또는 실제 사례
[!example] 실행 결과 코드 실행 결과나 동작 설명
참고 자료
관련 노트
### 템플릿 작성 규칙
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가 없으면 새로 생성:
--- tags: - moc - til --- # TIL (Today I Learned) ## 카테고리 ### javascript - [클로저(Closure)](til/javascript/closure.md)
백로그 연동
./til/{카테고리}/backlog.md에 학습한 주제가 있으면:
- •
- [ ]를- [x]로 변경 - •링크가 표준 마크다운 형식(
[표시명](til/{카테고리}/{slug}.md))이 아니면 업데이트
피해야 할 실패 모드
- •Daily/MOC/백로그 누락: 가장 흔한 실수. 체크리스트 반드시 확인
- •의도하지 않은 슬러그 충돌: 새 학습인데 같은 슬러그 파일이 있는지 확인 (심화 학습 모드에서는 충돌이 정상)
- •민감 정보 노출:
example.com,your-api-key등 대체값 사용
완료 체크리스트
저장 시 아래 항목을 모두 확인한다. 하나라도 빠지면 저장 미완료:
- • 링크 후보 파악 완료 (기존 TIL/백로그 확인, 미존재 개념은 사용자 확인)
- • TIL 파일이 템플릿 형식에 맞게 저장됨
- • Daily 노트에 카테고리별 링크 추가됨
- • TIL MOC에 항목 추가됨
- • 백로그 항목 있으면
[x]체크 + 링크 업데이트 - • 저장 경로 안내함
- • 문서 리뷰 완료 (사용자 확인)
- • git commit (push 제외)