用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/River-181/org-ops-workspace --skill drop-announce命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | drop-announce |
| description | Drop 공지 자동화 — 유동적 항목 개수 지원, 이미지 스마트 캡처, Drop 파일 생성, /drop-publish 자동 호출 |
| argument-hint | <번호> "<제목>" "<타입>" (항목은 stdin에서 N개 읽기) |
Drop 공지 발행을 한 번에 자동화:
_system/obsidian/maps/MAP-드롭.md)/drop-publish 호출 → Discord #share + Notion 동시 발행두 가지 작성 경로:
/drop-announce)로 전체 자동화01_ops/templates/tpl-drop.md로 초안 작성 후 drop_status: ready로 바꾸고 /drop-publish만 호출. 아래 "공유 내용"·"카카오톡 공유용" 섹션 형식은 두 경로 모두에 동일하게 적용된다./drop-announce <번호> "<제목>" "<타입>"
그 후 항목을 자유롭게 입력 (1개 ~ N개):
① <항목명> | <링크> | by <제공자> | <한줄설명>
② <항목명> | <링크> | by <제공자> | <한줄설명>
(필요한 만큼 반복)
/drop-announce 0017 "이번 주 도구 4가지" "Tools"
① Korean Law MCP | https://github.com/chrisryugj/korean-law-mcp | by Chris (@chrisryugj) | 한국 법률 DB 연동
② Meta AI — 뇌 반응 예측 | https://www.meta.com/research/ | by Meta Research | UI/UX 리서치용 AI
③ Anthropic Science Hub | https://www.anthropic.com/science | by Anthropic | Claude 개발 뒤의 과학
④ NotebookLM MCP | https://notebooklm.google.com/ | by Google | 리서치 노트 AI 자동화
/drop-announce 0018 "새로운 Claude 모델 출시" "News"
① Claude 4.5 발표 | https://www.anthropic.com/news/claude-4.5 | by Anthropic | 최신 AI 모델 공개
/drop-announce 0019 "AI 모델 비교" "Research"
① GPT-4 vs Claude | https://comparison.com/gpt-vs-claude | by OpenAI/Anthropic | 성능 비교 분석
② 코드 생성 능력 벤치마크 | https://benchmark.com/llm | by HuggingFace | 정량 데이터
DROP_NUMBER=$(printf "%04d" $1) # "0017"
DROP_TITLE="$2" # "이번 주 도구 4가지"
DROP_TYPE="$3" # "Tools" (기본값: "News")
TODAY=$(date +%Y-%m-%d)
FILENAME=$(date +%y%m%d)
# 항목 개수 동적 읽기
ITEMS=()
COUNT=0
while IFS='|' read -r NUM NAME LINK AUTHOR DESC; do
NUM=$(echo "$NUM" | xargs) # ① 제거
NAME=$(echo "$NAME" | xargs)
LINK=$(echo "$LINK" | xargs)
AUTHOR=$(echo "$AUTHOR" | xargs)
DESC=$(echo "$DESC" | xargs)
ITEMS+=("$NUM|$NAME|$LINK|$AUTHOR|$DESC")
((COUNT++))
done
echo "📋 항목 개수: $COUNT개"
# Drop 이미지 정본 보관 규칙(04_studio/assets/README.md):
# PNG/JPG/GIF는 04_studio/assets/etc/에 보관하고, 임베드는 반드시 전체 경로로 쓴다.
# 예: ![[04_studio/assets/etc/260629-drop-0040-예시.png|700]] (바레 파일명만 쓰면 안 됨)
ASSETS_DIR="04_studio/assets/etc"
mkdir -p "$ASSETS_DIR"
# 항목 개수에 따라 격자 동적 계산
# 1~2개: 1열, 3~4개: 2열
COLS=$((COUNT > 2 ? 2 : 1))
ROWS=$((($COUNT + $COLS - 1) / $COLS))
# 카드 크기 및 간격
CARD_WIDTH=320
CARD_HEIGHT=200
CARD_X_OFFSET=40
CARD_Y_OFFSET=80
GAP_X=380
GAP_Y=240
# JSON 카드 생성 (각 항목별)
ELEMENTS="["
for i in "${!ITEMS[@]}"; do
IFS='|' read -r NUM NAME LINK AUTHOR DESC <<< "${ITEMS[$i]}"
COL=$((i % COLS))
ROW=$((i / COLS))
X=$((CARD_X_OFFSET + COL * GAP_X))
Y=$((CARD_Y_OFFSET + ROW * GAP_Y))
# 색상 로테이션 — 브랜드 Light 팔레트 4종 (design-tokens.css --brand-light-* 계열)
# 라벤더 / 페이퍼 / 실버블루 / 브라운 틴트
COLORS=("#EDE7F8" "#F4F1EA" "#E8EDF2" "#F2EAE0")
COLOR=${COLORS[$i % 4]}
ELEMENTS+="
{
\"type\": \"rectangle\",
\"id\": \"card$((i+1))\",
\"x\": $X,
\"y\": $Y,
\"width\": $CARD_WIDTH,
\"height\": $CARD_HEIGHT,
\"backgroundColor\": \"$COLOR\",
\"fillStyle\": \"solid\",
\"roundness\": {\"type\": 3},
\"strokeColor\": \"#3A4147\",
\"strokeWidth\": 1,
\"label\": {
\"text\": \"$NUM $NAME\\nby $AUTHOR\\n\\n$DESC\",
\"fontSize\": 16,
\"fontColor\": \"#1A1813\"
}
},"
done
ELEMENTS="${ELEMENTS%,}]"
> /tmp/excalidraw.json <<
EXCALIDRAW_URL=
# 환경변수 로드
source _system/tools/.env
# 각 링크에서 오브젝트별 스크린샷 캡처
capture_smart_screenshot() {
local url=$1
local output=$2
local description=$3
echo "📸 캡처 중: $description"
# Safari 열기 + 로딩 대기
open -a Safari "$url"
sleep 4
# 웹사이트 유형별 정밀 캡처 (오브젝트 중심)
if [[ "$url" == *"github.com"* ]]; then
# GitHub: 리포지토리 헤더 영역만 캡처
screencapture -t png -R 0,100,1920,400 "$ASSETS_DIR/$output.png"
elif [[ "$url" == *"meta.com"* ]]; then
# Meta: 콘텐츠 본체 영역 캡처
screencapture -t png -R 0,200,1920,600 "$ASSETS_DIR/$output.png"
elif [[ "$url" == *"anthropic.com"* ]]; then
# Anthropic: 메인 섹션 캡처
screencapture -t png -R 0,150,1920,550 "$ASSETS_DIR/$output.png"
elif [[ "$url" == *"google.com"* ]] || [[ == ** ]];
screencapture -t png -R 0,100,1920,500
[[ == ** ]];
screencapture -t png -R 100,100,1720,820
screencapture -t png -R 0,100,1920,700
}
capture_smart_screenshot \
i ;
IFS= -r NUM NAME LINK AUTHOR DESC <<<
capture_smart_screenshot \
파일명: 04_studio/drops/${FILENAME}-drop-${DROP_NUMBER}-${슬러그}.md
Frontmatter (정확한 순서):
---
title: "Drop #${DROP_NUMBER} — ${DROP_TITLE}"
kind: drop
area: studio
status: draft
drop_status: ready
drop_number: "${DROP_NUMBER}"
type: ${DROP_TYPE}
tags:
- type/drop
- category/${CATEGORY}
source: 외부
link:
memo: ${항목들 요약}
visibility: Member
created: ${TODAY}
published_at:
up: "[[MAP-드롭]]"
discord_message_id:
notion_page_id:
---
콘텐츠 (동적 항목 개수):
## 공유 내용
📢 **이번 주 Drop ${COUNT}개 공개했어요!**
(항목별 반복):
**${NUM} ${NAME}** by ${AUTHOR}
${DESC}
![[04_studio/assets/etc/${FILENAME}-drop-${NUM}.png|600]]
---
(마지막 항목 후):
더 자세한 내용은 각 Drop 문서를 확인해주세요! 🎯
[ Drop | #${DROP_NUMBER} ]
## 카카오톡 공유용
(항목별 하이라이트를 소개형("① ~ / ② ~")이 아니라 하나의 산문으로 엮는다.
"이번 주 Drop ${COUNT}개 공개했어요" 식으로 시작해, 항목별 핵심을 한두 문장씩
자연스럽게 이어 붙이고, 마지막에 링크와 스레드 안내를 둔다.
말투·분량 기준은 아래 "카카오톡 공유용 섹션 형식" 참고.)
이번 주 Drop ${COUNT}개 공개했어요! (항목별 핵심을 한 문장씩 자연스럽게 이어서 서술)
더 자세한 건 디스코드 스레드에서 볼 수 있어요.
(항목별 링크 나열, 한 줄씩)
[ Drop | #${DROP_NUMBER} ]
## 링크
- ${NAME}: ${LINK}
(각 항목 반복)
Drop 파일명에서 wikilink를 생성해 MAP-드롭.md의 그래프 링크 callout 마지막 줄에 삽입한다.
MAP_FILE="_system/obsidian/maps/MAP-드롭.md"
DROP_SLUG="${FILENAME}-drop-${DROP_NUMBER}-${슬러그}" # Drop 파일명에서 .md 제거
# 그래프 링크 callout의 마지막 항목 다음에 삽입
# "> - [[마지막항목]]" 패턴 찾아 그 뒤에 추가
python3 - <<PYEOF
import re
with open("$MAP_FILE", "r", encoding="utf-8") as f:
content = f.read()
new_link = "> - [[$DROP_SLUG]]"
# 그래프 링크 callout 내 마지막 [[...]] 줄 다음에 삽입
pattern = r'(> - \[\[[^\]]+\]\]\n)(\n> \[!)'
replacement = r'\1' + new_link + r'\n\2'
updated = re.sub(pattern, replacement, content)
if updated == content:
# fallback: callout 마지막 [[...]] 줄 바로 뒤에 추가
pattern2 = r'((?:> - \[\[[^\]]+\]\]\n)+)'
def add_link(m):
block = m.group(1)
return block.rstrip('\n') + '\n' + new_link + '\n'
updated = re.sub(pattern2, add_link, content, count=1)
# updated 필드 갱신
import datetime
today = datetime.date.today().isoformat()
updated = re.sub(r'^updated:.*$', f'updated: {today}', updated, flags=re.MULTILINE)
with open("$MAP_FILE", "w", encoding="utf-8") as f:
f.write(updated)
print(f"✅ MAP-드롭 그래프 링크 추가: [[$DROP_SLUG]]")
PYEOF
echo "🚀 /drop-publish 스킬 호출..."
/drop-publish "04_studio/drops/${FILENAME}-drop-${DROP_NUMBER}*.md"
# 칸반 파일에서 항목 찾기 및 이동
KANBAN_FILE="_system/obsidian/kanban/칸반-드롭.md"
for i in "${!ITEMS[@]}"; do
IFS='|' read -r NUM NAME LINK AUTHOR DESC <<< "${ITEMS[$i]}"
# "🔜 발행 대기" → "✅ 발행 완료"로 항목 이동
sed -i '' "/- \[ \] \[\(${NAME}\|${LINK}\)\]/s/^/✅ $TODAY /g" "$KANBAN_FILE"
done
_system/tools/.env에 설정:
DISCORD_BOT_TOKEN="your_bot_token"
DISCORD_GUILD_ID="your_guild_id"
DISCORD_SHARE_CHANNEL_ID="your_channel_id"
NOTION_API_KEY="your_api_key"
NOTION_DROPS_DB_ID="your_db_id"
기존 drop-0018 형식 따름 (필드 순서 엄격히 지킬 것):
title: "Drop #NNNN — [제목]" (반드시 "#" 포함, 큰따옴표 필수)kind: "drop" (고정)area: "studio" (고정)status: "draft" (생성 시) → "live" (발행 후) ← 단일 값, 리스트 아님drop_status: "ready" (생성 시) → "live" (발행 후)drop_number: "NNNN" (4자리 zero-pad 문자열, 큰따옴표 필수)type: "Tip", "Tools", "News", "Research", "Insight" 등tags: YAML 배열 형식만 허용 (- type/drop, - category/tips) — 인라인 해시태그 금지source: "내부" (자체 제작) | "외부" (외부 링크) | "Discord" (Discord 공유)link: 외부 URL (선택)memo: 한 줄 설명 (drops.csv에도 반영됨)visibility: "Member" (기본) 또는 "Internal"created: YYYY-MM-DDpublished_at: YYYY-MM-DD (발행 전 빈 값)up: "[[MAP-드롭]]" (고정, 큰따옴표 필수)related: (선택) 다른 드롭이나 외부 소스와 교차 링크할 때 YAML 배열로 추가 — ["[[260629-drop-0039-예시]]"] 등. 아크형 드롭(여러 드롭을 하나로 묶는 완결 드롭)은 묶이는 드롭 전체를 여기 나열한다.discord_message_id: 발행 후 기록notion_page_id: 발행 후 기록비표준 필드 추가 금지: series, updated, drop_type, author 등 위 목록에 없는 필드는 넣지 말 것.
Drop 파일의 ## 공유 내용은 Discord 스레드에 그대로 올라가는 본문이다.
핵심 원칙:
---로 구분된 여러 섹션(왜 유용한가·핵심·의미 등)으로 길게 써도 된다. 단, 체크리스트·FAQ 같은 기획 문서를 통째로 넣지 않는다 — 기획·초안이 길면 04_studio/drops/기획/에 별도 보관하고 링크만 참조.![[04_studio/assets/etc/파일명.png|700]] 형식으로 삽입 — 전체 경로를 포함해서 쓴다 (04_studio/assets/README.md 정본 규칙). 이미지 파일은 04_studio/assets/etc/에 저장한다.[ Drop | #NNNN ] (드롭 번호 없이 [ Drop ]만 쓰지 않는다)올바른 구조:
## 공유 내용
📝 **[한 줄 훅]**
[핵심 인사이트]
![[04_studio/assets/etc/이미지.png|700]]
---
**[구조화된 핵심 정보 — 필요한 만큼 --- 로 섹션 반복]**
[ Drop | #NNNN ]
## 카카오톡 공유용
(아래 "카카오톡 공유용 섹션 형식" 참고)
## 링크
- [출처]: [URL]
## 카카오톡 공유용은 멤버들에게 카카오톡으로 공유하는 텍스트다. ## 공유 내용과 별도로 작성하고, 반드시 코드블럭(```)으로 감싼다 — publish-drop.py가 코드블럭 안 텍스트를 우선 추출하며, 코드블럭이 없으면 섹션 전체를 그대로 긁어와 형식이 깨진다.
핵심 원칙:
[ Drop | #NNNN ]아크형 드롭(여러 드롭을 하나로 묶는 완결 드롭) 추가 규칙:
[Drop #NN] 식으로 소개하지 않는다 — 장별 번호·제목 구분, 불릿 나열 금지.올바른 구조 (drop-0023, drop-0025 참고):
[첫 문단: 맥락 소개 + 핵심 키워드. "~이에요" 마무리.]
[둘째 문단: 주요 포인트 + 링크 + 스레드 안내.]
https://링크주소
[ Drop | #NNNN ]
말투 레퍼런스 (drop-0025):
"Google I/O 2026 정리예요. 구글 유료(Pro) 계정 쓰신다면 이번에 꽤 챙길 게 많아요. 올해 키워드는 '에이전틱 AI'인데, 내가 안 시켜도 배경에서 알아서 돌아가는 AI예요. Gemini가 채팅 도구를 넘어서 Gmail·Docs·캘린더를 24시간 자동 정리하는 에이전트가 됐고, Docs Live는 말로 brain dump만 해도 문서를 완성해줘요."
✨ Drop #0017 공지 발행 완료!
📄 Drop 파일: 04_studio/drops/260401-drop-0017-도구4가지.md
🖼️ 이미지 5개: 04_studio/assets/etc/
💬 Discord: https://discord.com/channels/.../1234567890
📋 Notion: https://www.notion.so/xxxxx
✅ /drop-publish 자동 실행 완료
✓ discord_message_id 기록됨
✓ notion_page_id 기록됨
✓ drops.csv 갱신됨
✓ 칸반 자동 이동 완료 (4개 항목)
/drop-publish 호출로 즉시 Discord+Notion 동시 발행published_at 미래 날짜로 설정 시 예약