weekly-newsletter
Obsidian vault에서 이번 주(토~금) 작성/수정된 글들을 모아 뉴스레터 생성. 서브 에이전트 기반 병렬 처리로 메인 컨텍스트 절약. 기술적, 리더십적으로 외부에 공유할 만한 내용을 선별하여 정리. "뉴스레터 만들어줘", "이번 주 글 정리해줘", "weekly digest" 등의 요청 시 자동 적용.
Best use case
weekly-newsletter is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Obsidian vault에서 이번 주(토~금) 작성/수정된 글들을 모아 뉴스레터 생성. 서브 에이전트 기반 병렬 처리로 메인 컨텍스트 절약. 기술적, 리더십적으로 외부에 공유할 만한 내용을 선별하여 정리. "뉴스레터 만들어줘", "이번 주 글 정리해줘", "weekly digest" 등의 요청 시 자동 적용.
Teams using weekly-newsletter should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/weekly-newsletter/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How weekly-newsletter Compares
| Feature / Agent | weekly-newsletter | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Obsidian vault에서 이번 주(토~금) 작성/수정된 글들을 모아 뉴스레터 생성. 서브 에이전트 기반 병렬 처리로 메인 컨텍스트 절약. 기술적, 리더십적으로 외부에 공유할 만한 내용을 선별하여 정리. "뉴스레터 만들어줘", "이번 주 글 정리해줘", "weekly digest" 등의 요청 시 자동 적용.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Weekly Newsletter Skill
## 개요
매주 토요일 오전 실행하여 **기술적, 리더십적으로 외부 공유할 만한 내용**을 뉴스레터로 작성하는 skill.
## 핵심 아키텍처
> **서브 에이전트 기반 병렬 처리**로 메인 에이전트의 컨텍스트를 최소화합니다.
```
┌─────────────────────────────────────────────────────────────┐
│ Main Agent (Orchestrator) │
│ - 날짜 범위 계산 (Phase 1) │
│ - 서브 에이전트 병렬 실행 (Phase 2) │
│ - 결과 통합 및 뉴스레터 작성 (Phase 3) │
└─────────────────────────────────────────────────────────────┘
│
┌───────────────┼───────────────┐
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ SubAgent 1 │ │ SubAgent 2 │ │ SubAgent 3 │
│ Daily Notes │ │ Coffee-time │ │ Weekly Docs │
│ Analyzer │ │ Analyzer │ │ Analyzer │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
└───────────────┼───────────────┘
▼
┌─────────────────┐
│ 뉴스레터 작성 │
│ (Main Agent) │
└─────────────────┘
```
## 인수 (Arguments)
| 인수 | 설명 | 기본값 |
|------|------|--------|
| 주차 | 분석할 주차 (YYYY-WXX 형식) | 금주 |
**사용 예시**:
- `/weekly-newsletter` - 금주 뉴스레터 생성
- `/weekly-newsletter 2026-W03` - 2026년 3주차 뉴스레터 생성
## 주차 정의
> **중요**: 이 스킬에서 주(week)는 **토요일~금요일** 기준입니다.
| 주차 | 시작일 (토) | 종료일 (금) |
|------|------------|------------|
| 2026-W01 | 2025-12-27 | 2026-01-02 |
| 2026-W02 | 2026-01-03 | 2026-01-09 |
| 2026-W03 | 2026-01-10 | 2026-01-16 |
## 실행 시점
- **실행**: 매주 토요일 오전 (또는 필요 시)
- **대상 기간**: 해당 주 토요일 ~ 금요일 (7일간)
- **출력**: `newsletters/YYYY-WXX-newsletter.md`
## 경로 정보
| 항목 | 경로 |
|------|------|
| vault | `$VAULT_ROOT/` |
| coffee-time | `$VAULT_ROOT/coffee-time` |
| dailies | `$VAULT_ROOT/notes/dailies/` |
| newsletters | `$VAULT_ROOT/newsletters/` |
| 사용자 프로필 | `~/git/aboutme/AI-PROFILE.md` |
## 입력 소스
| 소스 | 경로 | 담당 서브 에이전트 |
|------|------|------------------|
| Daily Notes | `notes/dailies/` (토~금) | SubAgent 1 |
| coffee-time | `coffee-time/` (해당 주) | SubAgent 2 |
| 주간 작성 문서 | vault 전체 (해당 주 수정) | SubAgent 3 |
---
## 실행 절차
### Phase 1: 초기화 (메인 에이전트 - 순차)
1. **주차 결정 및 날짜 범위 계산**
```bash
# 인수로 주차가 주어진 경우
if [ -n "$1" ]; then
WEEK_NUM="$1" # 예: 2026-W03
else
# 금주 계산 (ISO 주차 기준)
WEEK_NUM=$(date +%G-W%V)
fi
# ISO 주차의 월요일 구하기
ISO_MONDAY=$(date -j -f "%G-W%V-%u" "${WEEK_NUM}-1" +%Y-%m-%d 2>/dev/null)
# 토요일 = ISO 월요일 - 2일 (주의 시작)
SATURDAY=$(date -j -v-2d -f "%Y-%m-%d" "$ISO_MONDAY" +%Y-%m-%d)
# 금요일 = 토요일 + 6일 (주의 끝)
FRIDAY=$(date -j -v+6d -f "%Y-%m-%d" "$SATURDAY" +%Y-%m-%d)
# 다음날 (검색 종료 경계)
NEXT_DAY=$(date -j -v+1d -f "%Y-%m-%d" "$FRIDAY" +%Y-%m-%d)
echo "주차: $WEEK_NUM"
echo "대상 기간: $SATURDAY (토) ~ $FRIDAY (금)"
```
**예시**:
- `2026-W03` → ISO 월요일: 2026-01-13 → 토요일: 2026-01-11 → 금요일: 2026-01-17
- **수정**: 실제로는 2026-01-10 (토) ~ 2026-01-16 (금)
> **참고**: macOS `date` 명령어 사용. GNU date와 문법이 다름.
2. **출력 경로 확인**
```bash
OUTPUT_FILE="$VAULT_ROOT/newsletters/${WEEK_NUM}-newsletter.md"
```
---
### Phase 2: 서브 에이전트 병렬 실행 ★
> **중요**: 아래 3개의 Task를 **단일 메시지에서 동시에 호출**하여 병렬 실행합니다.
> 각 서브 에이전트는 분석 결과를 **마크다운 형식의 텍스트**로 반환합니다.
> 비용/속도 최적화를 위해 **haiku 모델**을 사용합니다.
---
#### SubAgent 1: Daily Notes Analyzer
**Task 호출 파라미터:**
| 파라미터 | 값 |
|---------|-----|
| description | "Daily Notes 분석" |
| subagent_type | "general-purpose" |
| model | "sonnet" |
**프롬프트 (SATURDAY, FRIDAY, NEXT_DAY 치환 필요):**
```
당신은 Daily Notes 분석 전문가입니다. 코드를 작성하지 말고 분석만 수행하세요.
## 작업
{SATURDAY} (토) ~ {FRIDAY} (금) 기간의 Daily Notes를 분석하여 주간 업무 하이라이트를 추출합니다.
## 경로
- Daily Notes: $VAULT_ROOT/notes/dailies/
## 실행 단계
1. Bash로 해당 주 Daily Notes 찾기 (macOS 호환):
find $VAULT_ROOT/notes/dailies -name "*.md" -type f \
-exec stat -f "%Sm %N" -t "%Y-%m-%d" {} \; 2>/dev/null | \
awk -v start="{SATURDAY}" -v end="{FRIDAY}" '$1 >= start && $1 <= end {print $2}'
2. 각 Daily Note 읽기 (Read 도구 사용)
3. 추출할 내용:
- 주요 업무 하이라이트
- 기술 학습 내용
- 해결한 문제들
- 외부 공유에 적합한 인사이트
## 필터링 기준
**포함**: 기술 트렌드, 학습 방법론, 팀 운영 인사이트
**제외**: 내부 업무 세부사항, 개인 일정, 고객/파트너 정보
## 출력 형식 (마크다운으로 반환)
### 주간 업무 하이라이트
- **[날짜]**: 주요 작업 및 성과
- **[날짜]**: 주요 작업 및 성과
### 기술 학습
- 학습 내용 1
- 학습 내용 2
(Daily Notes가 없으면 "해당 주에 Daily Notes 없음" 반환)
```
---
#### SubAgent 2: Coffee-time Analyzer
**Task 호출 파라미터:**
| 파라미터 | 값 |
|---------|-----|
| description | "Coffee-time 분석" |
| subagent_type | "general-purpose" |
| model | "sonnet" |
**프롬프트 (SATURDAY, FRIDAY, NEXT_DAY 치환 필요):**
```
당신은 Coffee-time 노트 분석 전문가입니다. 코드를 작성하지 말고 분석만 수행하세요.
## 작업
{SATURDAY} (토) ~ {FRIDAY} (금) 기간의 coffee-time 노트를 분석하여 핵심 인사이트를 추출합니다.
## 경로
- Coffee-time: $VAULT_ROOT/coffee-time/
## 파일명 패턴
- `YYYY. M. DD. 커피타임.md`
- 예: `2026. 1. 14. 커피타임.md`
## 실행 단계
1. Bash로 해당 주 coffee-time 노트 찾기 (macOS 호환):
find $VAULT_ROOT/coffee-time -name "*.md" -type f \
-exec stat -f "%Sm %N" -t "%Y-%m-%d" {} \; 2>/dev/null | \
awk -v start="{SATURDAY}" -v end="{FRIDAY}" '$1 >= start && $1 <= end {print $2}'
2. 각 커피타임 노트 읽기 (Read 도구 사용)
3. 추출할 내용:
- 기술 인사이트 (트렌드, 도구, 방법론)
- 리더십/팀 운영 토론
- 업계 동향 분석
- 핵심 인용문/교훈
## 출력 형식 (마크다운으로 반환)
### 커피타임 하이라이트
#### [날짜] - [주제]
- 핵심 논의: ...
- 주요 인사이트: ...
- 교훈: ...
#### [날짜] - [주제] (있는 경우)
- 핵심 논의: ...
(커피타임 노트가 없으면 "해당 주에 커피타임 노트 없음" 반환)
```
---
#### SubAgent 3: Weekly Documents Analyzer
**Task 호출 파라미터:**
| 파라미터 | 값 |
|---------|-----|
| description | "주간 문서 분석" |
| subagent_type | "general-purpose" |
| model | "sonnet" |
**프롬프트 (SATURDAY, FRIDAY, NEXT_DAY 치환 필요):**
```
당신은 Obsidian Vault 문서 분석 전문가입니다. 코드를 작성하지 말고 분석만 수행하세요.
## 작업
{SATURDAY} (토) ~ {FRIDAY} (금) 기간에 생성/수정된 기술 문서들을 분석하여 외부 공유 적합 내용을 추출합니다.
## 경로
- Vault: $VAULT_ROOT/
- 분석 대상: 001-INBOX/, 003-RESOURCES/, 000-SLIPBOX/
## 실행 단계
1. Bash로 해당 주에 수정된 .md 파일 찾기 (macOS 호환):
find $VAULT_ROOT \( -path "*/001-INBOX/*" -o -path "*/003-RESOURCES/*" -o -path "*/000-SLIPBOX/*" \) \
-name "*.md" -type f -exec stat -f "%Sm %N" -t "%Y-%m-%d" {} \; 2>/dev/null | \
awk -v start="{SATURDAY}" -v end="{FRIDAY}" '$1 >= start && $1 <= end {print $2}'
2. 발견된 파일 중 중요 문서 읽기 (Read 도구 사용, 최대 10개)
3. 분류 기준:
- 기술 트렌드 (AI, 아키텍처, 개발 방법론)
- 리더십/조직 인사이트
- 학습 방법론
- 업계 동향
## 필터링 기준
**포함**: SDD, AI 코딩 도구, 새로운 아키텍처 패턴, 효과적인 매니저 특징, AI 활용 학습법
**제외**: 내부 업무 세부사항, 회사 고유 프로세스, 개인 일정, 고객/파트너 정보
## 출력 형식 (마크다운으로 반환)
### 기술 트렌드
- **[문서명]**: 핵심 내용 요약 (2-3줄)
### 리더십 & 조직 인사이트
- **[문서명]**: 핵심 내용 요약
### 학습 방법론
- **[문서명]**: 핵심 내용 요약
(수정된 문서가 없으면 "해당 주에 수정된 기술 문서 없음" 반환)
```
---
### Phase 3: 결과 통합 및 뉴스레터 작성 (메인 에이전트)
1. **3개 서브 에이전트 결과 수집**
- 각 Task 도구의 반환값을 수집
2. **사용자 프로필 읽기**
- Read 도구로 `~/git/aboutme/AI-PROFILE.md` 확인
- 톤앤매너 조정에 활용
3. **뉴스레터 작성**
Write 도구를 사용하여 `newsletters/{WEEK_NUM}-newsletter.md` 생성:
```markdown
---
id: {WEEK_NUM}-newsletter
aliases:
- {YEAR}년 {WEEK}주차 뉴스레터
tags:
- newsletter
- weekly-digest
created_at: {TODAY}
period: {SATURDAY} ~ {FRIDAY}
---
# Weekly Digest - {YEAR}년 {WEEK}주차
> "핵심 인용문" - 출처
**기간**: {SATURDAY_DISPLAY} (토) ~ {FRIDAY_DISPLAY} (금)
---
## 이번 주 커피타임 하이라이트
{SubAgent 2 결과 - 커피타임 분석}
---
## 기술 트렌드
{SubAgent 3 결과 - 기술 트렌드 부분}
---
## 리더십 & 조직 인사이트
{SubAgent 3 결과 - 리더십 부분}
{SubAgent 2 결과 - 리더십 관련 내용}
---
## 주간 업무 하이라이트
{SubAgent 1 결과}
---
## 이번 주 핵심 교훈
1. 교훈 1 (위 내용에서 추출)
2. 교훈 2
3. 교훈 3
---
## 다음 주 포커스
- [ ] 포커스 영역 1
- [ ] 포커스 영역 2
---
## Related Notes
- [[관련 노트 1]]
- [[관련 노트 2]]
```
4. **완료 메시지 출력**
```
{WEEK_NUM} 뉴스레터가 생성되었습니다: newsletters/{WEEK_NUM}-newsletter.md
```
---
## 병렬 실행 핵심 원칙
1. **단일 응답에서 3개 Task 동시 호출**: 메인 에이전트는 Phase 2에서 하나의 응답에 3개의 Task 도구 호출을 포함해야 합니다.
2. **haiku 모델 사용**: 비용과 속도 최적화를 위해 서브 에이전트는 haiku 모델을 사용합니다.
3. **결과만 반환**: 각 서브 에이전트는 마크다운 형식의 분석 결과 텍스트만 반환합니다.
4. **메인 에이전트 역할 최소화**:
- Phase 1: 날짜 계산만 수행
- Phase 2: Task 호출만 수행 (분석 로직 없음)
- Phase 3: 결과 조합 및 뉴스레터 작성만 수행
---
## 컨텍스트 절약 효과
| 구분 | 기존 방식 | 서브 에이전트 방식 |
|------|----------|-------------------|
| 메인 에이전트 컨텍스트 | 모든 파일 내용 로드 | 최종 결과만 수신 |
| 병렬 처리 | 불가 | 3개 작업 동시 실행 |
| 실패 격리 | 전체 실패 | 개별 서브 에이전트만 재시도 |
---
## 뉴스레터 톤앤매너
1. **CTO 관점의 Weekly Digest**
2. **점진적 개선(Incremental) 관점** 반영
3. **TDD/Clean Code 철학**과 연결
4. **실용적 인사이트** 중심
5. **핵심 인용문**으로 섹션 강조
6. **다음 주 포커스** 섹션으로 연속성 제공
---
## 외부 공유 적합성 필터링
**포함 (외부 공유 적합):**
| 분류 | 예시 |
|------|------|
| 기술 트렌드 | SDD, AI 코딩 도구, 새로운 아키텍처 패턴 |
| 리더십 인사이트 | 효과적인 매니저 특징, 팀 운영 노하우 |
| 학습 방법론 | 조각 지식 전략, AI 활용 학습법 |
| 업계 동향 분석 | 하이프 사이클, 재본스 역설 |
**제외:**
| 분류 | 이유 |
|------|------|
| 내부 업무 세부사항 | 민감한 비즈니스 정보 |
| 회사 고유 프로세스 | 내부 전용 |
| 개인 일정/TODO | 공유 부적합 |
| 고객/파트너 정보 | 기밀 사항 |
---
## 에러 처리
- 서브 에이전트 실패 시: 해당 섹션을 "분석 실패"로 표시하고 나머지 결과는 반영
- newsletters 폴더 없음: 자동 생성
- 파일 없음: "해당 주에 [항목] 없음"으로 표시
---
## 검증 체크리스트
- [ ] 해당 주(토~금) 날짜 범위 정확한지
- [ ] coffee-time 해당 주 노트 모두 포함 여부
- [ ] dailies 내용 반영 여부
- [ ] 외부 공유 부적합 내용 제외 여부
- [ ] 마크다운 포맷 정상 렌더링
- [ ] Related Notes 링크 정확성
- [ ] 주차 번호(Week Number) 정확한지
---
## 의존 관계
```
daily-work-logger (매일)
↓
dailies/YYYY-MM-DD.md
↓
weekly-newsletter (토요일) ← 이 skill
↓
newsletters/YYYY-WXX-newsletter.md
```
---
## 관련 Skill
- `daily-work-logger`: 매일 업무 내역 정리 (이 skill의 입력 소스)
- `obsidian-vault`: vault 작업 기본 가이드Related Skills
vis
Vault Intelligence System (vis) CLI를 활용한 Obsidian vault 시맨틱 검색, 자동 태깅, MOC 생성, 관련 문서 연결, 주제별 문서 연결, 주제 수집, 태그 통계, 지식 공백 분석, 중복 감지, 학습 리뷰 등 vault 지식 관리 전반을 지원하는 skill. vault 검색, 문서 정리, 태그, MOC, 관련 문서, 주제 수집, 중복 검사, 학습 리뷰, 지식 공백, 클러스터링, 인덱싱, 주제별 문서 연결, 태그 통계 관련 작업 시 자동 적용.
spark-python-data-source
Build custom Python data sources for Apache Spark using the PySpark DataSource API — batch and streaming readers/writers for external systems. Use this skill whenever someone wants to connect Spark to an external system (database, API, message queue, custom protocol), build a Spark connector or plugin in Python, implement a DataSourceReader or DataSourceWriter, pull data from or push data to a system via Spark, or work with the PySpark DataSource API in any way. Even if they just say "read from X in Spark" or "write DataFrame to Y" and there's no native connector, this skill applies.
session-handoff
세션 종료 시 plan/INDEX/메모리/저널을 업데이트하고 다음 세션 재개 프롬프트 제공
searching-mlflow-docs
Searches and retrieves MLflow documentation from the official docs site. Use when the user asks about MLflow features, APIs, integrations (LangGraph, LangChain, OpenAI, etc.), tracing, tracking, or requests to look up MLflow documentation. Triggers on "how do I use MLflow with X", "find MLflow docs for Y", "MLflow API for Z".
retrieving-mlflow-traces
Retrieves MLflow traces using CLI or Python API. Use when the user asks to get a trace by ID, find traces, filter traces by status/tags/metadata/execution time, query traces, or debug failed traces. Triggers on "get trace", "search traces", "find failed traces", "filter traces by", "traces slower than", "query MLflow traces".
recall
Load context from vault memory. Temporal queries (yesterday, last week, session history) use agf (history.jsonl) for fast session lookup. Topic queries use vis semantic search. "recall graph" generates interactive temporal graph of sessions and files. Every recall ends with "One Thing" - the single highest-leverage next action synthesized from results. Use when user says "recall", "what did we work on", "load context about", "remember when we", "prime context", "yesterday", "what was I doing", "last week", "session history", "recall graph", "session graph".
vercel-react-best-practices
React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.
querying-mlflow-metrics
Fetches aggregated trace metrics (token usage, latency, trace counts, quality evaluations) from MLflow tracking servers. Triggers on requests to show metrics, analyze token usage, view LLM costs, check usage trends, or query trace statistics.
prompt-contracts
프롬프트 작성, brainstorming, planning, design, 설계, 기능 개발 시 Prompt Contracts 프레임워크 적용. Goal/Constraints/Format/Failure Conditions 4요소로 명확한 명세 작성. "바이브 코딩" 방지. brainstorming, writing-plans, 설계, 기능 구현 관련 작업 시 자동 적용.
obsidian-vault
Obsidian vault 및 마크다운 문서 작업 시 사용. markdown-oxide LSP를 통한 효율적인 검색, 백링크 탐색, 태그 관리 지원. vault 경로, 태그 체계, vault-intelligence CLI, 토큰 최적화 전략 제공. Obsidian, vault, 마크다운, 태그, 노트 정리, zettelkasten, 백링크, wiki-link, PKM 관련 작업 시 자동 적용.
jira
Use jira CLI for Jira operations including issue management, project queries, transitions, and JQL search
instrumenting-with-mlflow-tracing
Instruments Python and TypeScript code with MLflow Tracing for observability. Must be loaded when setting up tracing as part of any workflow including agent evaluation. Triggers on adding tracing, instrumenting agents/LLM apps, getting started with MLflow tracing, tracing specific frameworks (LangGraph, LangChain, OpenAI, DSPy, CrewAI, AutoGen), or when another skill references tracing setup. Examples - "How do I add tracing?", "Instrument my agent", "Trace my LangChain app", "Set up tracing for evaluation"