Skip to content
Back to skills

Threads Post Draft

ASecurity

주제를 Threads 게시글 초안으로 작성합니다. 저장된 문체 프로필이 있으면 적용합니다. 발행 전에 사실·개인정보·문장·글자 수를 점검하고 최종본을 사용자가 명시적으로 승인해야 Graph API 로 발행합니다. 예약·정기 발행은 현재 앱의 지원 여부를 확인합니다. 다음과 같은 요청 시 사용하세요: - "이 주제로 Threads 포스트 작성해줘" - "Threads에 올릴 글 초안 만들어줘" - "이 뉴스를 Threads용으로 요약해줘" - "블로그 글을 Threads 포스트로 변환해줘" - "내 문체로 초안 작성해줘" (저장된 프로필 자동 적용) - "이 초안 그대로 Threads에 올려줘" (최종 점검 → 승인 → 즉시 발행) [책임 경계] vs 형제 스킬: 초안 작성(저장된 문체 프로필 적용 포함)·발행 전 최종 점검·승인 후 즉시 발행을 담당합니다. 문체 *분석·저장*은 threads-style-learn, 멀티 채널(Facebook/X) 포맷은 threads-multi...

  • 303 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 1, 2026
ai-agentspythonapi

Works with

  • api
  • mcp

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned October 1, 2026

npx -y skills add modu-ai/cowork-plugins --skill threads-post-draft --agent claude-code

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.

Security grade badge for Threads Post Draft
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/modu-ai-threads-post-draft-moai-cowork/badge)](https://www.skillsdirectory.com/skills/modu-ai-threads-post-draft-moai-cowork)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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` 도구 호출 → 프로필 정보 반환되면 연동 성공.

Files in this skill

  • SKILL.md13.2 KB
  • references/threads-spec.md1.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…