주제를 Threads 게시글 초안으로 작성합니다. 저장된 문체 프로필이 있으면 적용합니다. 발행 전에 사실·개인정보·문장·글자 수를 점검하고 최종본을 사용자가 명시적으로 승인해야 Graph API 로 발행합니다. 예약·정기 발행은 현재 앱의 지원 여부를 확인합니다.
다음과 같은 요청 시 사용하세요:
- "이 주제로 Threads 포스트 작성해줘"
- "Threads에 올릴 글 초안 만들어줘"
- "이 뉴스를 Threads용으로 요약해줘"
- "블로그 글을 Threads 포스트로 변환해줘"
- "내 문체로 초안 작성해줘" (저장된 프로필 자동 적용)
- "이 초안 그대로 Threads에 올려줘" (최종 점검 → 승인 → 즉시 발행)
[책임 경계] vs 형제 스킬: 초안 작성(저장된 문체 프로필 적용 포함)·발행 전 최종 점검·승인 후 즉시 발행을 담당합니다. 문체 *분석·저장*은 threads-style-learn, 멀티 채널(Facebook/X) 포맷은 threads-multi...
Installs into .claude/skills of the current project.
Are you the author of Threads Post Draft?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/modu-ai-threads-post-draft-moai-cowork)
---
name: threads-post-draft
description: |
주제를 Threads 게시글 초안으로 작성합니다. 저장된 문체 프로필이 있으면 적용합니다. 발행 전에 사실·개인정보·문장·글자 수를 점검하고 최종본을 사용자가 명시적으로 승인해야 Graph API 로 발행합니다. 예약·정기 발행은 현재 앱의 지원 여부를 확인합니다.
다음과 같은 요청 시 사용하세요:
- "이 주제로 Threads 포스트 작성해줘"
- "Threads에 올릴 글 초안 만들어줘"
- "이 뉴스를 Threads용으로 요약해줘"
- "블로그 글을 Threads 포스트로 변환해줘"
- "내 문체로 초안 작성해줘" (저장된 프로필 자동 적용)
- "이 초안 그대로 Threads에 올려줘" (최종 점검 → 승인 → 즉시 발행)
[책임 경계] vs 형제 스킬: 초안 작성(저장된 문체 프로필 적용 포함)·발행 전 최종 점검·승인 후 즉시 발행을 담당합니다. 문체 *분석·저장*은 threads-style-learn, 멀티 채널(Facebook/X) 포맷은 threads-multichannel이 담당합니다. 이미지·비디오는 같은 점검·승인 절차를 거친 뒤 해당 MCP 발행 도구를 사용하세요. 예약·정기 발행은 본 스킬 범위 밖입니다.
version: "1.2.3"
---
# Threads 초안 작성·직접 발행 (threads-post-draft)
## 개요
주제를 받아 Threads 초안을 작성하고, **발행 전에 사실·개인정보·문장을 점검한 뒤**, 최종본을 사용자가 승인하면 **즉시** Graph API 로 발행합니다. 큐·예약·상태머신은 없습니다.
발행된 글은 공개 계정에 남습니다. 따라서 최종 점검과 사용자 승인을 필수 단계로 둡니다.
> 예약·정기 발행(예: "매주 수요일 12시")은 현재 앱에 별도 기능이 있는지 확인해 안내합니다. 본 스킬은 즉시 발행만 합니다.
## 트리거 키워드
Threads, 스레드, 초안, 작성, 발행, 포스트, 게시글, 주제, 변환
## 워크플로우
### 0단계: 문체 적용 (있으면)
초안 작성 *전* 에 저장된 문체 프로필이 있는지 확인합니다:
```python
threads_style_load(path=None)
# → {path, exists: bool, profile: <markdown or None>}
```
- **프로필이 있으면** (`exists: True`): 반환된 마크다운의 차원(말투·문장 길이·오프닝·클로징·이모지·시그니처 구절 등) 을 아래 1단계 초안 작성에 반영합니다. 프로필은 `threads-style-learn` 스킬이 만들어 저장한 것입니다.
- **프로필이 없으면** (`exists: False`): 브랜드 톤이 지정됐으면 그것을, 아니면 합리적 기본 톤(캐주얼 대화체) 으로 작성합니다. 프로필 없어도 초안 작성은 정상 동작합니다.
> 프로필을 새로 만들거나 갱신하려면 `threads-style-learn` 스킬을 먼저 호출하세요.
### 1단계: 주제 분석 및 초안 작성
사용자의 주제/블로그 글/뉴스를 분석하여 Threads 최적화 초안을 작성합니다:
- **길이 제한**: 최대 500자 (아래 글자 수 확인 규칙 참조)
- **구조**: 짧은 문장, 대화 유도, 핵심 메시지 1-2개
- **톤**: 브랜드 톤 일치 (지정 시), 기본값은 캐주얼한 대화체
- **토픽 태그·링크**: 선택사항. 현재 계정의 작성 화면과 공식 API 제한을 확인하고 사용한다. 노출 증가를 보장하지 않는다.
### 2단계: 발행 전 최종 점검 (필수)
사용자에게 보여주기 전에 초안의 주장과 수치를 원자료와 대조하고, 미공개 정보·개인정보가 없는지 확인합니다. 맞춤법·띄어쓰기·어색한 반복을 직접 읽어 고친 뒤 원래 뜻이 유지되는지 다시 대조합니다. 출처나 공개 가능 여부를 확인할 수 없으면 발행을 보류하고 이유를 알립니다.
- **[HARD] 점검이 승인보다 앞입니다.** 승인 뒤에 문장을 고치면 사용자가 승인한 글과 발행되는 글이 달라집니다.
- **[HARD] 500자 제한은 점검을 마친 최종본으로 확인합니다.** 수정했다면 다시 셉니다.
- `moai-coworker:ai-slop-reviewer`, `moai-writer:korean-spell-check`, `moai-writer:korean-humanize`가 현재 세션에 있으면 보조 검수에 사용할 수 있습니다. 별도 플러그인 설치를 발행 조건으로 삼지 않습니다. 외부 맞춤법 서비스를 쓰기 전에는 미공개 정보나 개인정보가 전송되는지 확인합니다.
- 보조 검수에서 `hold_and_report`가 나오거나 의미 보존을 확인할 수 없으면 발행하지 않고 1단계로 돌아갑니다. 보조 검수 뒤에도 최종본을 직접 다시 읽습니다.
이미지·링크가 있다면 본문뿐 아니라 실제 연결 대상도 승인 전에 확인합니다.
### 3단계: 최종본 확인 (승인 게이트)
점검을 마친 **최종본**을 사용자에게 보여드리고 승인을 받습니다. **승인 없이는 발행하지 않습니다** ("자동 아닌 자율").
- **[HARD] 승인은 사용자에게 승인서를 그대로 보여주고 명시적 응답을 받는다.** 산문으로 "괜찮으세요?"라고 묻지 않습니다 — 발행은 되돌릴 수 없으므로 사용자가 명시적으로 고르게 합니다.
- **[HARD] 요약이 아니라 발행될 문장 그대로를 보여준다.** 최종본 전문 + 최종 글자 수 + 토픽 태그/링크를 함께 제시하고, 최종 점검에서 무엇이 바뀌었는지 한 줄로 알려드립니다.
- 사용자가 수정을 요청하면 1단계로 돌아가 다시 쓰고, **최종 점검을 다시 한 뒤** 재승인을 받습니다.
- 사용자가 승인하면 4단계로 갑니다.
현재 세션에 구조화 질문 도구가 있으면 승인서 전문과 선택지를 그 도구로 보여줍니다. 없으면 대화에 같은 승인서를 제시하고 다음 사용자 응답을 기다립니다. 서브에이전트가 사용자에게 직접 물을 수 없으면 승인서 전문·선택지·재개 조건을 상위 에이전트에 반환합니다. 도구 실행 권한 팝업은 게시 내용에 대한 승인이 아니며, 명시적 응답을 받기 전에는 발행하지 않습니다.
선택지는 이렇게 구성합니다:
| 선택지 | 뜻 |
|--------|-----|
| 이대로 발행 (권장) | 최종본 그대로 `threads_publish_text` 호출 |
| 수정 요청 | 1단계로 복귀 → 최종 점검 → 재승인 |
| 발행 취소 | 아무것도 발행하지 않고 종료 |
### 4단계: 즉시 발행 (승인 시)
승인된 최종본을 `threads_publish_text` 도구로 **즉시** Graph API 발행합니다:
```python
threads_publish_text(text="<승인된 최종본>")
# → {media_id, container_id, permalink_hint, note}
```
- 텍스트만 발행할 때는 `threads_publish_text`를 사용합니다.
- 이미지/비디오 포스트도 2~3단계의 본문·미디어 점검과 명시적 승인을 먼저 거친 뒤 `threads_publish_image(text, image_url)` / `threads_publish_video(text, video_url)`를 호출합니다. **[HARD] 승인 화면에는 점검을 마친 본문과 실제로 넘어가는 인자 전부**(미디어 종류·`image_url`/`video_url` 원문·발행 계정)**를 그대로 보여줍니다.** 승인 뒤 인자가 바뀌면 다시 점검하고 승인받습니다.
- 자격증명(`THREADS_ACCESS_TOKEN`, `THREADS_USER_ID`) 이 미설정이면 `setup_required` 에러를 반환합니다 — 서버는 크래시하지 않습니다. 발급 절차는 `mcp-servers/moai-mcp-threads-poster/CONNECTORS.md` 참조.
- **[HARD] 실패해도 자동 재시도하지 않는다.** 발행 도구가 애매하게 실패하면(타임아웃·응답 없음) **재시도하지 않고 멈춥니다.** 성공 신호가 없다는 것은 발행되지 않았다는 증거가 아니며, 확인 없는 재시도는 같은 글을 두 번 올립니다. 발행은 컨테이너 생성 → 발행 2단계라, 1단계만 성공한 상태에서 재시도하면 중복 컨테이너가 남습니다.
- **[HARD] 이 서버에는 발행 여부를 조회할 도구가 없다.** `threads_get_profile`은 `username`·`id`·`followers_count`·`profile_picture_url`만 반환합니다(`server.py:281`) — 타임라인도 게시글 상태도 없습니다. 나머지 도구도 발행·프로필·문체 저장뿐이라 게시 여부를 되물을 수단이 없습니다. 따라서 애매한 실패 시에는 **사용자에게 Threads 앱/웹에서 직접 확인해 달라고 요청**하고, 올라가지 않았다는 사용자의 확인을 받은 뒤에만 다시 발행합니다. 스킬이 혼자 판단하지 않습니다.
> 발행은 세션 안에서 즉시 일어납니다. 백그라운드 자동 발행은 없습니다. 예약이 필요하면 현재 앱의 지원 여부를 확인하세요.
## 글자 수 확인 (500자 제한)
[Meta 공식 소개](https://about.fb.com/news/2023/07/introducing-threads-new-app-text-sharing/)는 일반 Threads 게시글을 최대 500자로 안내합니다. 서버의 사전 검사는 Python `len(text)`로 세며, 한글 한 글자를 UTF-8 3바이트로 환산해 한도를 줄이지 않습니다. 결합 문자·복합 이모지의 세부 계산은 API와 다를 수 있으므로 최종 발행 오류가 있으면 그 응답을 확인하고 본문을 조정합니다.
## 출력 형식
최종 점검을 마친 뒤, 승인 요청은 현재 앱의 질문 도구 또는 대화로 이 형식을 그대로 보여줍니다:
```markdown
## 발행 최종본 (승인 요청)
<점검을 마친 최종본 — 발행될 문장 그대로>
**글자 수**: N / 500 ← 최종 점검 뒤 다시 센 값
**토픽 태그**: (선택사항) #태그이름
**링크**: (선택사항) URL
**최종 점검**: 사실·개인정보·맞춤법·의미 보존 확인 결과와 변경 사항
```
승인 후 발행이 끝나면:
```markdown
## 발행 완료
**media_id**: ...
**permalink**: https://www.threads.net/@<username>/post/<media_id>
```
## 주의사항
| 상황 | 대응 |
|------|------|
| 500자 초과 시 | 초안을 줄이거나 두 개의 포스트로 분할 제안 |
| 토픽 태그·링크가 여러 개인 경우 | 현재 API의 제한과 초안의 읽기 흐름을 확인한다 |
| 이미지/비디오 포함 요청 시 | `threads_publish_image`, `threads_publish_video` 도구 직접 호출 제안 |
| 브랜드 톤 미지정 시 | 업종·타겟 기반 캐주얼 톤 초안 제안 후 확인 |
| `setup_required` 에러 | 앱 설정 또는 사용자 자격증명 파일에서 `THREADS_ACCESS_TOKEN`, `THREADS_USER_ID` 확인 (CONNECTORS.md 참조) |
| 예약·정기 발행 요청 시 | 현재 앱의 지원 여부를 확인해 안내 (본 스킬은 즉시 발행만) |
| 출처·공개 가능 여부 미확인 또는 보조 검수 `hold_and_report` | 발행하지 않음. 사유를 보여주고 1단계로 복귀 |
| 초안에 미공개 정보가 섞임 | 공개 여부를 확인할 때까지 발행 보류. 외부 맞춤법 서비스에 전송하지 않음 |
| 점검 후 500자 초과 | 최종본 기준으로 다시 판정 — 줄이거나 두 포스트로 분할 제안 |
| 발행 도구가 애매하게 실패 | 자동 재시도 금지. 실제 발행 여부를 먼저 확인한 뒤 판단 |
| "점검 건너뛰고 바로 올려줘" 요청 | 점검을 마친 최종본을 승인받은 뒤 발행 |
## References
| 파일 | 로드 조건 |
|------|-----------|
| references/threads-spec.md | Threads 글자 수와 미디어 규격 확인 시 |
## 관련 스킬
| 스킬 | 사용 시점 |
|------|----------|
| `threads-style-learn` | 문체 분석·저장 (이 스킨이 초안 작성 시 자동 적용) |
| `threads-multichannel` | 초안을 Threads/Facebook/X 용으로 멀티 채널 포맷 |
| `moai-marketer:content-sns-content` | 브랜드 톤 가이드·채널별 최적화 패턴 |
| `moai-coworker:ai-slop-reviewer` | 노출된 경우 AI 문구 추가 검토 |
| `moai-writer:korean-spell-check` | 노출되고 외부 전송이 허용된 경우 맞춤법 제안 |
| `moai-writer:korean-humanize` | 노출된 경우 `장르: 카피`로 추가 윤문·의미 검수 |
## 이 스킬을 사용하지 말아야 할 때
- Facebook/X 용 텍스트 포맷: `threads-multichannel` 스킬
- 문체 분석·저장: `threads-style-learn` 스킬
- 예약·정기 발행: 현재 앱의 지원 여부 확인 (본 플러그인은 즉시 발행만)
---
## 발행 전 설정 (최초 1회)
발행에는 Threads 장기 액세스 토큰과 사용자 ID가 필요합니다. 발급 절차는 `mcp-servers/moai-mcp-threads-poster/CONNECTORS.md`를 따릅니다. **토큰은 저장소의 `.mcp.json`에 직접 쓰지 않습니다.**
앱이 플러그인 자격증명 입력 화면을 제공하면 거기에 값을 입력합니다. 값이 서버에 전달되지 않는 환경에서는 사용자 홈의 `.moai/mcp/threads.json`에 UTF-8 JSON 객체로 저장합니다. macOS·Linux는 `~/.moai/mcp/threads.json`, Windows는 사용자 프로필 아래 `.moai/mcp/threads.json`입니다. 서버는 실제 값이 든 환경변수, 이 파일 순서로 읽으며 미확장 `${...}`는 자격증명으로 취급하지 않습니다.
```json
{
"THREADS_ACCESS_TOKEN": "<장기 액세스 토큰>",
"THREADS_USER_ID": "<Threads 사용자 ID>"
}
```
이 파일과 토큰 값은 대화 결과나 저장소에 남기지 않습니다. 환경변수로 설정하는 개발자용 절차는 `CONNECTORS.md`에 있습니다.
**동작 확인**: `threads_get_profile` 도구 호출 → 프로필 정보 반환되면 연동 성공.