| name | calendar |
| description | 콘텐츠 캘린더 — 채널별 게시 리듬을 잡고 속도형·정밀형·축적형을 제 주기에 배치하며, 빈칸을 저품질로 채우지 않게 관리한다. "캘린더 짜줘 / 이번 주 뭐 올려 / 다음 주 계획 / 게시 일정 / 콘텐츠 캘린더 / 언제 올리는 게 좋아 / 리듬 어떻게 가져가 / 캘린더 비었는데"일 때, 또는 주간 판정 시 자동 호출. |
마케팅 루프(항상): 감지 → 판단 → 제작 → 배포 → 학습. 측정 없는 게시 금지. 자세히 [[method]].
calendar — 리듬은 지키고 편수는 세지 않는다 (CON-09 · §2-4)
캘린더의 목적은 칸을 채우는 것이 아니라 리듬을 지키는 것이다. 리듬(언제·어느 채널에 나오는가)은 계정 신뢰와 알고리즘 도달에 유리하지만, 리듬을 지키려고 빈칸을 저품질로 메우면 그 계정의 다음 게시물 도달까지 깎인다(§2-6). 그래서 이 스킬은 두 가지만 한다: 시간 특성에 맞는 자리 배치, 그리고 빈칸을 안전하게 처리하는 규칙.
실행 유형: [A] 배치·이동·빈칸 판정·저장은 자동 / 예약 게시·발주 일정 확정은 [P] 승인 후 — config approval_mode 적용. 자세히 [[role]]
0. 준비 — 채널 리듬과 재고를 먼저 본다
marketing-copilot library list content --status draft --limit 30
marketing-copilot library list content --status scheduled --limit 30
marketing-copilot library list message --status validated --limit 20
marketing-copilot library expiring --days 7
config.json의 channels.active(운영 중)와 wanted(시작하고 싶은 것)를 구분한다. wanted 채널을 active처럼 채우지 않는다 — 새 채널은 최소 리듬 하나부터 시작한다.
- 검증된 메시지 재고(
validated)가 캘린더의 진짜 연료다. 재고가 없으면 칸 수를 늘리지 말고 [[messages]]·[[repurpose]]부터 돌린다.
1. 시간 특성 3분류로 자리를 나눈다 (§2-4)
| 분류 | 채널·유형 | 반감기/리드타임 | 캘린더 배치 | 판정 주기 |
|---|
| 속도형 | 인스타·틱톡·숏폼·커뮤니티 | ~48시간 | 주 단위로 리듬 칸을 잡고 당일 큐에서 최종 판정 | 7일(cadence.organic_review_days) |
| 정밀형 | 퍼포먼스 광고·인플루언서·프로모션 | 돈이 실시간 소진 | 시작일·판정일·중단조건 확인일을 함께 찍는다 | 3~7일(cadence.ads_verdict_days) |
| 축적형 | 블로그·SEO·브랜드·구주제 업데이트 | 수 주~수 년 | 월 단위 슬롯 + 리드타임 역산(작성→검수→게시) | 월간 |
- 속도형 칸은 "예약"이 아니라 "후보"다. 실제 게시 여부는 그날 [[today]]에서 퀄리티 바로 판정한다.
- 정밀형은 캘린더에 중단조건 확인일이 없으면 등록하지 않는다 — 남의 돈이 나가는 일정이다(§13-6).
- 축적형은 리드타임을 역산해 소재 발주일([[brief]])을 게시일보다 먼저 찍는다.
2. 채널별 리듬 잡기 (CON-09)
- 리듬은 지킬 수 있는 최소치로 시작한다. 주 5회를 적어 놓고 2회를 하는 것보다, 주 2회를 적고 2회를 하는 계정이 산다.
- 채널마다 ①요일·시간대 ②포맷 축(시리즈·고정 코너) ③담당(사람/AI 초안)을 적는다. 시리즈화는 속도형에서 가장 싸게 도달을 올리는 장치다.
- 같은 메시지를 여러 채널에 같은 날 도배하지 않는다. 파생물은 채널 문법으로 다시 만들고([[repurpose]]) 날짜를 흩는다 — 같은 글을 복사해 붙이면 플랫폼 네이티브 항목에서 바로 걸린다.
- 이벤트·시즌·출시(프로모션 [[promo]], 형제 핸드오프 [[handoff]])는 역산 캘린더로 따로 얹는다: 마감일 → 채널 총동원 순서 → 소재 발주 마감.
3. 빈칸 규칙 — 저품질로 채우지 않는다 (§2-6 · §13-3)
빈칸이 생기면 아래 순서로 소진한다. 마지막까지 채울 게 없으면 비워 둔다 — 그것도 판정이다.
- 검증된 메시지의 재활용 후보([[repurpose]]) — 반응 좋았던 메시지를 다른 포맷·다른 채널로.
- 보강 큐 소진 — 퀄리티 바 미달로 밀린 초안 중 오늘 보강하면 통과하는 것.
- 구주제 업데이트(축적형) — 이미 성과가 있는 글을 갱신하는 게 새 글보다 싸고 세다.
- 성과 기록·메시지 귀속 — 칸을 비우고 [[analyze]]로 학습을 돌린다.
- 비워 둔다. 사유를 캘린더에 남긴다("재고 없음 — 바 낮추지 않음").
캘린더에 "편수 목표"를 적지 않는다. 목표는 리듬 유지 + 게시당 반응이다(§11).
4. 갱신·이동 (주간)
- 게시된 항목은
published로 내리고 성과 슬롯을 만든다. 밀린 항목은 삭제하지 말고 다음 슬롯으로 이동 + 사유 기록 — 반복해서 밀리는 주제는 재고가 아니라 폐기 후보다.
- 주간 판정([[weekly-review]])에서 다음 주 캘린더를 확정하고, 필요한 소재 물량을 산출해 [[brief]]·[[imagefactory]]로 넘긴다.
- 경보: 게시당 평균 반응이 3주 연속 하락하면 칸을 늘리지 말고 줄인다 — 빈도를 낮추고 바를 올리는 게 먼저다(§13-3).
marketing-copilot library update content <id> --json '{"status":"scheduled","publish_date":"YYYY-MM-DD","channel":"instagram","message_id":"MSG-..."}'
출력 (data/calendar/.md 저장)
🗓 콘텐츠 캘린더 {기간} — 배치 {N}칸 (속도형 {a} · 정밀형 {b} · 축적형 {c}) · 빈칸 {v}
| 날짜 | 채널 | 유형 | 주제 | 메시지 | 상태 | 담당 |
|---|---|---|---|---|---|---|
| 07-28(월) | 인스타 | 속도형 | {주제} | MSG-003 | 후보(당일 바 판정) | AI 초안 |
| 07-29(화) | 광고 | 정밀형 | {캠페인} | MSG-001 | 집행중 · 판정일 07-31 · 중단조건 등록 ✅ | 승인 필요 |
| 07-31(목) | 블로그 | 축적형 | {주제} | MSG-002 | 초안(발주 마감 07-29) | 나 |
■ 빈칸 처리: 07-30 — 재활용 후보 {제목}으로 대체 / 08-01 — 재고 없음, 비워 둠(바 낮추지 않음)
■ 다음 주 필요 소재: {규격 n종 · 변형 m종} → [[brief]]
⚠️ 3주 연속 반응 하락 {채널} — 주 {x}회 → {y}회로 줄이고 바를 올릴 것을 제안합니다
다음: {가장 가까운 칸}부터 [[today]] 큐로 넘깁니다.
원칙
- 빈칸은 실패가 아니다. 저품질로 채운 칸이 실패다. 캘린더는 발행 압박 장치가 아니라 리듬 관리 장치다.
- 예약 ≠ 확정. 속도형 칸은 당일 [[today]]에서 퀄리티 바를 통과해야 게시된다. 커뮤니티·네이버 블로그·티스토리의 예약은 사람의 게시 일정이고, 공식 경로 채널(인스타·워드프레스·메일 등)은 auto 모드에서 승인 양식·게이트 통과 시 예약 발행까지 자동이다([[publish-policy]] 한계 통치).
- 환각 금지. 최적 게시 시간·업계 평균 빈도 같은 수치를 지어내지 않는다. 자사 실측이 없으면 "확인 필요"로 두고, 몇 주 돌려 데이터를 만든 뒤 조정한다.
- 측정 없는 배치 금지. 캘린더의 모든 게시 칸에는 메시지 ID와 UTM·성과 기록 슬롯이 따라붙는다(철학 6·ANA-17).
- 데이터 경계·권한: 미공개 출시일·프로모션 조건은 공유 캘린더에 넣지 않는다(
context/_policy.md). 일정 확정·예산이 걸린 칸은 승인 모드를 따른다.
관련: [[today]] · [[idea]] · [[repurpose]] · [[brief]] · [[weekly-review]] · [[publish-policy]] · [[method]]