with one click
shorts
YouTube Shorts 영상 제작 파이프라인 실행 (다국어 지원)
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
YouTube Shorts 영상 제작 파이프라인 실행 (다국어 지원)
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
| name | shorts |
| description | YouTube Shorts 영상 제작 파이프라인 실행 (다국어 지원) |
| license | MIT |
| compatibility | opencode |
| metadata | {"audience":"content-creators","workflow":"youtube-shorts","complexity":"advanced","estimated_time":"30-60min"} |
YouTube Shorts 영상을 자동으로 제작하는 9-phase 파이프라인.
┌─────────────────────────────────────────────────────────────────┐
│ WORKFLOW ARCHITECTURE │
├─────────────────────────────────────────────────────────────────┤
│ INPUT: /shorts [options] │
│ │
│ ┌────────────────────┐ │
│ │ PHASE 0: ENV CHECK │ 환경 변수 검증 │
│ └─────────┬──────────┘ │
│ ▼ │
│ ┌────────────────────┐ │
│ │ PHASE 1: INIT │ 세션 초기화, 히스토리 로드 │
│ └─────────┬──────────┘ │
│ ▼ │
│ ┌────────────────────┐ │
│ │ PHASE 2: COLLECT │ 소재 수집 (병렬, 최대 5개) │
│ │ librarian │ ← Sisyphus 기본 에이전트 │
│ │ (websearch) │ │
│ └─────────┬──────────┘ │
│ ▼ │
│ ┌────────────────────┐ │
│ │ PHASE 2.5: ORACLE │ 초기 전략 자문 │
│ │ (Sisyphus 내장) │ ← Sisyphus 기본 oracle 사용 │
│ └─────────┬──────────┘ │
│ ▼ │
│ ┌────────────────────┐ ┌──────────────────────────────────┐ │
│ │ PHASE 3-6: VIDEO │ │ 병렬 파이프라인 (최대 5개) │ │
│ │ PIPELINE × N │ │ ├─ scenario-writer │ │
│ │ │→ │ ├─ script-writer │ │
│ │ │ │ ├─ neuroscientist (검증) │ │
│ │ │ │ ├─ impatient-viewer (검증) │ │
│ │ │ │ ├─ Sisyphus 직접 번역 │ │
│ │ │ │ ├─ voice-selector │ │
│ │ │ │ ├─ bgm-selector │ │
│ │ │ │ ├─ shorts-video-generator │ │
│ │ │ │ └─ subtitle-generator │ │
│ └─────────┬──────────┘ └──────────────────────────────────┘ │
│ ▼ │
│ ┌────────────────────┐ │
│ │ PHASE 7: CHANNEL │ Oracle 채널 결정 (일괄) │
│ │ assign_channels │ │
│ └─────────┬──────────┘ │
│ ▼ │
│ ┌────────────────────┐ │
│ │ PHASE 8: UPLOAD │ YouTube 업로드 (순차 - 락 파일) │
│ │ video-uploader │ ⚠️ 병렬 금지 (레이스 컨디션) │
│ └─────────┬──────────┘ │
│ ▼ │
│ ┌────────────────────┐ │
│ │ PHASE 9: FINALIZE │ 결과 저장, wisdom 업데이트 │
│ └─────────┬──────────┘ │
│ ▼ │
│ OUTPUT: output/{date}_{event_id}/ 폴더에 최종 영상 │
└─────────────────────────────────────────────────────────────────┘
# 기본 사용 (한국어, 자동 소재 수집, 1개 영상)
/shorts
# 영어 버전 생성
/shorts --lang en
# 다중 영상 생성 (최대 5개)
/shorts --count 5
# 주제 지정
/shorts --topic "우주의 미스터리"
# 특정 채널 + 언어 지정
/shorts --channel middle --lang en "Burnout prevention tips"
# 업로드 포함
/shorts --upload --visibility unlisted
| 파라미터 | 설명 | 기본값 | 유효값 |
|---|---|---|---|
| --topic | 영상 주제 | 자동 수집 | 문자열 |
| --channel | 타겟 채널 | 자동 결정 | young/middle/senior |
| --lang | 언어 | ko | ko/en/ja/zh/es/pt/de/fr |
| --count | 생성할 영상 수 | 1 | 1-5 |
| --upload | 업로드 여부 | false | flag |
| --visibility | 공개 범위 | private | public/unlisted/private |
background_task 사용스킬 시작 시 todowrite로 아래 항목 모두 생성:
Phase 0-1:
- 환경 변수 검증
- History 초기화
Phase 2-2.5:
- 소재 수집 ({count}개, {lang})
- Oracle 초기 전략 자문
Phase 3-6 (파이프라인 × {count}):
- 시나리오 작성 ({count}개)
- 스크립트 작성 ({count}개)
- 품질 검증 (neuroscientist + impatient-viewer)
- 음성 선택 (voice-selector)
- BGM 선택 (bgm-selector)
- 영상 생성 (shorts-video-generator):
├─ AI 후킹 영상 (Sora → DALL-E fallback, 0-5초)
├─ 스톡 영상 수집 (Pexels)
├─ TTS 음성 생성 (ElevenLabs)
├─ BGM 믹싱 (음성+배경음악)
└─ 영상 합성 (AI후킹+스톡+오디오, 자막 없이)
- ⚠️ 자막 생성 (subtitle-generator) ← 별도 호출 필수!
├─ AssemblyAI STT
├─ SRT 생성 (2-3단어씩)
└─ ffmpeg 하드코딩
Phase 7-9:
- 채널 결정 (Oracle)
- YouTube 업로드 ({count}개) - upload 플래그 시
- 결과물 저장 (output/)
shorts-video-generator 완료 후:
→ "영상 완성됐으니 다음 Phase로" ← 틀림!
→ "subtitle-generator 호출 확인" ← 맞음!
체크 순서:
1. final.mp4 존재? → shorts-video-generator 성공
2. subtitle.srt 존재? → subtitle-generator 성공
3. final.mp4에 자막 포함? → 하드코딩 성공
Agent: 직접 실행 (Read tool) Dependencies: None Goal: 필수 API 키 존재 확인
현재 작업 디렉토리에서 .env 파일 읽기:
Read("{CWD}/.env")
필수 변수 확인:
ELEVENLABS_API_KEY (TTS 필수)OPENAI_API_KEY 또는 GCP_PROJECT_ID (AI 영상)PEXELS_API_KEY 또는 PIXABAY_API_KEY (스톡 영상)--upload 시: YOUTUBE_CLIENT_ID, YOUTUBE_CLIENT_SECRETIF 필수 변수 누락:
Agent: 직접 실행 Dependencies: Phase 0 complete Goal: 세션 초기화 및 히스토리 로드
세션 ID 생성:
session_{YYYYMMDD}_{HHMMSS}
디렉토리 변수 설정:
PROJECT_ROOT = {현재 작업 디렉토리}
OUTPUT_DIR = {PROJECT_ROOT}/output
HISTORY_DIR = {PROJECT_ROOT}/history
히스토리 파일 로드/초기화:
{HISTORY_DIR}/global-history.json
임시 작업 폴더 생성:
/tmp/shorts/{session_id}/pipelines/
Agent: librarian (Sisyphus 기본 에이전트)
Dependencies: Phase 1 complete
Pattern: 병렬 실행 (count > 1 시)
Goal: 트렌딩 기반 바이럴 소재 수집
Note: 기존
curious-event-collector는 Sisyphus 내장librarian으로 대체됨. librarian은 websearch, context7, GitHub 검색 기능을 통합 제공.
참조 파일:
content-bank/trending-config.json- 국가/연령 API 매핑content-bank/content-strategy.md- 연령별/국가별 전략
설정 로드:
Read("content-bank/trending-config.json")
region = trending_config.regions[lang]
age_prefs = trending_config.age_preferences[channel]
country_prefs = trending_config.country_preferences[lang]
트렌딩 키워드 수집 (librarian에게 위임):
트렌딩 소스:
- YouTube Data API: mostPopular videos in {region.youtube_region}
- Google Trends: trending_searches(pn='{region.google_trends_geo}')
- NewsAPI (선택): top-headlines?country={region.newsapi_country}
연령별 카테고리 필터:
- young: Gaming(20), Entertainment(24), Music(10)
- middle: Howto(26), People(22), Science(28)
- senior: People(22), Pets(15), Howto(26)
타겟 채널 결정 (현재 파라미터 기준):
IF --channel 지정됨:
target_channel = "{lang}-{channel}" # 예: ko-middle
ELSE:
target_channels = ["{lang}-young", "{lang}-middle", "{lang}-senior"]
해당 채널의 기존 주제 추출 (global-history.json > channels_index):
exclude_topics = channels_index[target_channel].topics
exclude_keywords = channels_index[target_channel].keywords
# --channel이 auto면 해당 언어 모든 채널의 topics 합집합
중복 체크 규칙:
librarian 호출 (exclude_topics + 트렌딩 키워드 전달):
background_task(
agent="librarian",
prompt="""
YouTube Shorts용 바이럴 소재를 {count}개 수집하세요.
[트렌딩 수집 - 우선순위 1]
YouTube Data API로 현재 트렌딩 확인:
- Region: {region.youtube_region}
- Categories: {age_categories[channel]} # 연령별 카테고리
Google Trends로 실시간 검색어 확인:
- Geo: {region.google_trends_geo}
[국가별 선호 컨텐츠 - content-bank/content-strategy.md 참조]
{country_prefs.top_content}
[연령별 감정 트리거]
{age_prefs.emotional_triggers}
[수집 카테고리 - 우선순위 2]
- 미스터리: 미해결 사건, UFO, 초자연
- 과학: 새로운 발견, 반직관적 사실
- 역사: 숨겨진 역사, 흥미로운 사실
- 심리: 인간 행동, 뇌과학
- 귀여운 동물: 펫, 야생동물, 감동 스토리 (Pexels/Pixabay 영상 활용 가능)
- 만족감: ASMR, 정리정돈, 크래프트
- 감동: 따뜻한 스토리, 가족, 커뮤니티
[제외 주제]: {exclude_topics}
[언어]: {lang}
[타겟 연령]: {channel} ({age_prefs.age_range})
[출력 형식]: XML
<event id="evt_001">
<title>제목</title>
<category>카테고리</category>
<hook>훅 문장</hook>
<viral_potential>7-10</viral_potential>
<viral_score>
<trend_velocity>트렌딩 속도 1-10</trend_velocity>
<demographic_fit>연령 적합도 1-10</demographic_fit>
<emotional_intensity>감정 강도 1-10</emotional_intensity>
</viral_score>
<suggested_visuals>Pexels/Pixabay 검색 키워드</suggested_visuals>
</event>
"""
)
--topic이 지정된 경우:
<task_result agent="librarian" type="material_collection">
<summary>5개 이벤트 수집 완료</summary>
<events>
<event id="evt_001">
<title>달의 뒷면에서 발견된 이상한 구조물</title>
<category>미스터리</category>
<hook>NASA가 숨기려 했던 사진이 유출됐습니다</hook>
<viral_potential>9/10</viral_potential>
</event>
</events>
</task_result>
Agent: Sisyphus 내장 oracle (GPT-5.2 급 추론)
Dependencies: Phase 2 complete
Goal: 이벤트별 채널 힌트 및 접근 전략
Note: 기존 플러그인
oracle.md는 Sisyphus 내장 oracle로 대체됨. Sisyphus oracle은 더 강력한 추론 능력과 전략적 판단력을 제공.
Sisyphus oracle 호출 (초기 전략):
task(
agent="oracle",
prompt="""
YouTube Shorts 초기 전략을 수립하세요.
[채널 프로필]
- channel-young (10-20대): 트렌드, 밈, 자기계발, 연애 | 빠르고 친근
- channel-middle (30-40대): 직장, 육아, 건강, 재테크 | 실용적, 공감
- channel-senior (50대+): 건강, 추억, 가족, 여유 | 여유롭고 따뜻
[수집된 이벤트]: {events}
[언어]: {lang}
각 이벤트별로:
1. 채널 힌트 (confidence 포함)
2. 접근 전략 (톤앤매너, 스타일)
3. 난이도 평가
"""
)
Note: 중복 체크는 Phase 2에서 이미 처리됨. Oracle은 순수하게 전략만 제공.
<task_result agent="sisyphus-oracle" type="initial_strategy">
<summary>5개 이벤트 전략 수립 완료</summary>
<strategies>
<strategy event_id="evt_001">
<channel_hint confidence="0.8">channel-young</channel_hint>
<approach>트렌디한 밈 스타일, 빠른 컷 전환</approach>
<difficulty>medium</difficulty>
</strategy>
</strategies>
</task_result>
Pattern: FAN-OUT (병렬 실행, 최대 5개) Dependencies: Phase 2.5 complete Goal: 각 이벤트별 영상 생성
각 이벤트(evt_001, evt_002, ...)에 대해 순차 실행:
Agent: scenario-writer
task(
agent="scenario-writer",
prompt="event={event}, oracle_hint={hint}"
)
Output:
<task_result agent="scenario-writer" event_id="evt_001">
<summary>15-60초 시나리오 작성 완료</summary>
<scenario>
<duration>45</duration>
<sections>
<hook seconds="0-5">충격적인 오프닝</hook>
<build seconds="5-30">긴장감 조성</build>
<payoff seconds="30-45">결론 및 반전</payoff>
</sections>
<dopamine_triggers>mystery, curiosity_gap, variable_reward</dopamine_triggers>
</scenario>
<file_ref>/tmp/shorts/{session}/pipelines/evt_001/scenario.json</file_ref>
</task_result>
Agent: script-writer
task(
agent="script-writer",
prompt="scenario={scenario}"
)
Output:
<task_result agent="script-writer" event_id="evt_001">
<summary>스크립트 작성 완료 (450자)</summary>
<script>
<opening>"이 사진을 보세요. NASA가 50년간 숨겨왔습니다."</opening>
<body>...</body>
<closing>...</closing>
</script>
<file_ref>/tmp/shorts/{session}/pipelines/evt_001/script.md</file_ref>
</task_result>
Agent: neuroscientist
task(
agent="neuroscientist",
prompt="script={script}"
)
Validation Logic:
IF score < 7:
IF attempt < 3:
→ Sisyphus oracle 긴급 자문 (emergency_consult)
→ script-writer 재작성 (피드백 반영)
→ 재검증
ELSE:
→ 최선의 버전으로 진행 (경고 출력)
Agent: impatient-viewer
task(
agent="impatient-viewer",
prompt="script={script}"
)
Validation Logic: Step 4와 동일 (3회 실패 시 경고와 함께 진행)
Agent: Sisyphus 직접 처리 (별도 에이전트 불필요)
Note: 기존
translator에이전트는 Sisyphus가 직접 처리하도록 변경됨. 번역은 LLM의 기본 기능이며, 로컬라이제이션 원칙을 프롬프트에 포함.
IF lang != "ko":
# Sisyphus가 직접 번역 수행 (에이전트 호출 불필요)
번역 시 다음 원칙 적용:
1. 문화적 레퍼런스 → 현지 이해 가능한 비유로 대체
2. 유머 → 현지 유머 코드에 맞게 조정
3. 숫자/단위 → 현지 단위로 변환 (kg, miles 등)
4. 톤앤매너 → 언어별 적절한 격식체 적용
지원 언어:
- en: 영어 (글로벌 표준)
- ja: 일본어 (경어 체계 고려)
- zh: 중국어 (간체/번체 구분)
- es: 스페인어 (라틴아메리카/스페인 차이)
- pt: 포르투갈어 (브라질/포르투갈 차이)
- de: 독일어 (격식체)
- fr: 프랑스어 (격식체)
Agent: voice-selector
⚠️ 한국어(ko): 반드시
script_concept을 전달하여 2-Tier 선택 활성화
- Tier 1: ElevenLabs API 동적 검색 (스크립트 톤/무드 기반)
- Tier 2: Fallback 목록 (API 실패 시)
task(
agent="voice-selector",
prompt="""
script={script}
lang={lang}
channel={channel_hint}
script_concept={
"tone": "{scenario_tone}", # energetic | professional | warm | friendly | calm
"topic": "{event_title}",
"gender": null # male | female | null (자동 선택)
}
"""
)
tone 결정 기준 (scenario에서 추출):
| 채널 | 기본 tone | 조정 조건 |
|---|---|---|
| young | energetic | 감성적 주제 → friendly |
| middle | professional | 건강/가족 주제 → warm |
| senior | warm | 정보성 주제 → calm |
Output:
<task_result agent="voice-selector">
<summary>voice_id 선택: Taemin (따뜻하고 자연스러움)</summary>
<voice_id>Ir7oQcBXWiq4oFGROCfj</voice_id>
<method>api_search</method> <!-- api_search | fallback -->
<settings>
<model_id>eleven_multilingual_v2</model_id>
<stability>0.35</stability>
<similarity_boost>0.75</similarity_boost>
<speed>1.15</speed>
</settings>
<selection_log>
<tier_1_query>korean young energetic bright</tier_1_query>
<tier_1_result>success</tier_1_result>
</selection_log>
</task_result>
Agent: bgm-selector
task(
agent="bgm-selector",
prompt="script={script}, mood={scenario_mood}"
)
Agent: shorts-video-generator
task(
agent="shorts-video-generator",
prompt="script={script}, voice_id={voice_id}, bgm_path={bgm_path}"
)
Process:
Output: /tmp/shorts/{session}/pipelines/{event_id}/output/final.mp4 (자막 미포함)
Agent: subtitle-generator
Dependencies: Step 6c 완료 (final.mp4 존재)
⚠️ CRITICAL: shorts-video-generator와 별도로 반드시 호출해야 함!
task(
agent="subtitle-generator",
prompt="video_path=/tmp/shorts/{session}/pipelines/{event_id}/output/final.mp4, lang={lang}"
)
Process:
Output:
/tmp/shorts/{session}/pipelines/{event_id}/subtitle.srt/tmp/shorts/{session}/pipelines/{event_id}/output/final.mp4 (자막 포함)# 각 이벤트를 독립 파이프라인으로 병렬 실행
FOR event IN events:
background_task(
agent="pipeline-executor", # 개념적 - 실제로는 순차 에이전트 호출
prompt="Execute steps 3a-6d for event={event}"
)
/tmp/shorts/{session}/pipelines/{event_id}/subtitle.srtshorts-video-generator 완료 후 반드시 확인:
# 자막 파일 존재 확인
ls /tmp/shorts/{session}/pipelines/{event_id}/subtitle.srt
# 자막이 영상에 하드코딩되었는지 확인 (ffprobe)
ffprobe -i final.mp4 -show_streams 2>&1 | grep subtitle
자막 파일 없으면: subtitle-generator 누락 → 즉시 호출
Agent: Sisyphus 내장 oracle
Dependencies: All Phase 6 pipelines complete
Goal: 최종 채널 배정
Note: Sisyphus 내장 oracle을 사용하여 채널 배정 결정.
모든 완료된 영상 수집
Sisyphus oracle 호출 (채널 배정):
task(
agent="oracle",
prompt="""
완성된 YouTube Shorts 영상들의 최적 채널을 결정하세요.
[채널 프로필]
- channel-young (10-20대): 트렌드, 밈, 자기계발, 연애 | 빠르고 친근
- channel-middle (30-40대): 직장, 육아, 건강, 재테크 | 실용적, 공감
- channel-senior (50대+): 건강, 추억, 가족, 여유 | 여유롭고 따뜻
[완료된 영상]: {videos}
[언어]: {lang}
각 영상별로:
1. 최적 채널 (confidence 포함)
2. 배정 이유
3. 채널 간 균형 고려
"""
)
Note: 중복 체크는 Phase 2 수집 단계에서 이미 처리됨. Oracle은 주제 적합성과 연령대 매칭만 고려하여 채널 결정.
<task_result agent="sisyphus-oracle" type="assign_channels">
<summary>5개 영상 채널 배정 완료</summary>
<assignments>
<assignment video_id="evt_001">
<channel confidence="0.9">channel-young</channel>
<reasoning>트렌디한 주제, 빠른 템포</reasoning>
</assignment>
</assignments>
</task_result>
Agent: video-uploader
Dependencies: Phase 7 complete AND --upload flag
Pattern: 순차 실행 (병렬 금지!)
Goal: YouTube 업로드
업로드는 반드시 순차 실행!
병렬 업로드 시 레이스 컨디션으로 히스토리 충돌 발생
락 파일 사용: {HISTORY_DIR}/.upload.lock
락 파일 확인/생성:
if [ -f "{HISTORY_DIR}/.upload.lock" ]; then
# 대기 (최대 5분)
fi
touch "{HISTORY_DIR}/.upload.lock"
각 영상 순차 업로드:
FOR video IN assigned_videos:
task(
agent="video-uploader",
prompt="video={video}, channel={channel}, visibility={visibility}"
)
# 히스토리 즉시 업데이트
락 파일 해제:
rm "{HISTORY_DIR}/.upload.lock"
IF --upload 플래그 없음:
Agent: 직접 실행 Dependencies: Phase 7 (또는 Phase 8) complete Goal: 최종 결과물 아카이빙
결과물 이동:
mkdir -p "{OUTPUT_DIR}/{YYYYMMDD}_{event_id}"
mv /tmp/shorts/{session}/pipelines/{event_id}/* "{OUTPUT_DIR}/{YYYYMMDD}_{event_id}/"
메타데이터 생성:
// {OUTPUT_DIR}/{YYYYMMDD}_{event_id}/metadata.json
{
"event_id": "evt_001",
"title": "달의 뒷면에서 발견된 이상한 구조물",
"channel": "channel-young",
"lang": "ko",
"duration": 45,
"created_at": "2025-01-13T11:40:00Z",
"uploaded": true,
"youtube_url": "https://youtube.com/shorts/xxx"
}
글로벌 히스토리 업데이트:
// {HISTORY_DIR}/global-history.json에 추가
{
"event_id": "evt_001",
"title": "달의 뒷면에서 발견된 이상한 구조물",
"created_at": "2025-01-13T11:40:00Z"
}
세션 로그 저장:
{HISTORY_DIR}/sessions/{session_id}.json
임시 폴더 정리:
rm -rf /tmp/shorts/{session_id}
| 에이전트 | 역할 | 대체 전 | Phase |
|---|---|---|---|
| librarian | 소재 수집 (websearch) | curious-event-collector | 2 |
| oracle | 전략 자문 + 채널 결정 | oracle.md | 2.5, 4, 5, 7 |
| (Sisyphus 직접) | 다국어 번역 | translator.md | 5.5 |
| 에이전트 | 역할 | 모델 | Temp |
|---|---|---|---|
| scenario-writer | 시나리오 작성 | sonnet | 0.6 |
| script-writer | 스크립트 작성 | sonnet | 0.5 |
| neuroscientist | 뇌과학 검증 | sonnet | 0.3 |
| impatient-viewer | 시청자 검증 | sonnet | 0.5 |
| voice-selector | ElevenLabs 음성 선택 | haiku | 0.2 |
| bgm-selector | Pixabay BGM 선택 | haiku | 0.2 |
| shorts-video-generator | 영상 생성 | sonnet | 0.3 |
| subtitle-generator | AssemblyAI 자막 | haiku | 0.2 |
| video-uploader | YouTube 업로드 | haiku | 0.1 |
MAX_EVENTS = 5
MAX_SCENARIO_ITERATIONS = 3
MAX_FEEDBACK_ITERATIONS = 3
MIN_SCORE = 7
| 에러 | Phase | 복구 액션 |
|---|---|---|
| 환경 변수 누락 | 0 | 즉시 중단 (복구 불가) |
| 소재 수집 실패 | 2 | 재시도 3회, 실패 시 중단 |
| 검증 점수 < 7 | 4, 5 | Oracle 긴급 자문 → 재작성 (최대 3회) |
| TTS 실패 | 6c | 대체 voice_id로 재시도 |
| 업로드 실패 | 8 | 재시도 3회, 실패 시 로컬 저장 |
각 Phase 완료 후 확인:
$ARGUMENTS
Convert raw feature requirements, bug reports, or rough task descriptions into a goal-optimized prompt for the agentic coding tool that will run it — Claude Code or OpenAI Codex. 거친 요구사항·버그 리포트·대충 적은 작업 설명을, 그 작업을 실제로 실행할 코딩 에이전트(Claude Code 또는 Codex)에 맞춘 goal 최적화 프롬프트로 변환한다. Use when the user wants a requirement shaped into a prompt/spec/goal for an agent — "이거 프롬프트로 만들어줘 / 변환해줘", "코덱스(codex)/클로드코드용으로", "목표·범위·완료조건 갖춘 프롬프트로" — or mentions the goal feature or /goal command. By default targets the agent running the skill (Claude Code → Claude-optimized, Codex → Codex-optimized); honors an explicit named target. Proactively fire on vague requirements headed to a coding agent ("대시보드 빠르게 해줘", "add auth", "로그인 버그 고쳐줘"). Not for implementing/debugging it yourself, codex code review, explaining /goal, translating, editing AGENTS.md, multi-agent orchestration (cmux/herdr), or writing a plan.
Use when the user wants to turn a repetitive, reviewable task into a controlled agent loop — phrases like "이거 자동화/반복하고 싶어", "루프로 돌리고 싶어", "정기적으로 점검하게 해줘", "loop engineering", "agent loop 설계", or wants to audit existing loops ("루프 점검", "loop audit"). Designs a loop with trigger·state·verification·human-gate·stop + 7 guardrails + 6 metrics, maps it onto an existing engine (herdr/loop/Cron/Workflow/Codex Automations), and writes a spec to docs/loops/. Does NOT execute loops itself and is NOT for one-off prompts (use goalcraft) or multi-agent run orchestration (use herdr/cmux).
Convert a recurring or repetitive task description into a Claude Code /loop prompt — the loop sibling of goalcraft. 반복·주기적 작업 설명을 Claude Code /loop 용 프롬프트로 변환한다(goalcraft의 loop 형제). Use when the user wants a task shaped into a /loop prompt — "루프 프롬프트로 만들어줘", "/loop 용으로", "주기적으로 반복하게", "매 N분마다 ~", "~까지 반복해서", "이거 loop으로 돌려줘" — or mentions the /loop command, recurring/scheduled in-session execution, or babysitting/polling a long-running thing. Picks the mode (fixed interval → cron, self-paced → model self-paces, or loop.md default) and bakes in an objective stop condition, an iteration ceiling, and a verification check. Proactively fire on recurring-execution requests ("배포 끝날 때까지 확인", "CI 통과할 때까지 반복", "keep checking the deploy"). Not for single-shot tasks or /goal until-condition prompts (→ goalcraft, which owns /goal), running the loop yourself, deciding whether something should be a loop or auditing loop governance (→ loop-engineering), translating, or explaining /loop.
Use when creating, revising, or critiquing frontend UI (web or mobile) where visual quality, product fit, design-system fidelity, or avoiding generic "AI-slop" output matters — e.g. "make this look good", "why does this look AI-generated", building a landing page / app screen / dashboard, or a design pass on existing UI. Turns vague design intent into a decision-first workflow: classify the surface, decide direction before code, escape default looks, build to measurable craft standards, and verify the rendered result. Portable across Claude Code and Codex.
Use when the user asks to inspect, summarize, explain, configure, connect, curate, or troubleshoot the session-journal Obsidian logging workflow for Claude Code or Codex — including pointing it at an existing/Obsidian-Sync vault, keeping AI-generated notes distinct from hand-authored ones, multi-machine setup, distilling durable knowledge, or verifying the vault config.
Use when the user asks to save durable lessons from session-journal into the LLM-Wiki, collect mistakes or insights from agent work, create reviewable wiki draft candidates, or report those draft candidates to Slack.