Instagram 미디어의 댓글을 관리합니다 — 목록 조회, 답글 작성, 댓글 숨김. `manage_comments` 권한이 부여된 경우에만 동작합니다. 발행된 게시물의 댓글 모더레이션(응대/정리) 에 사용합니다. 다음과 같은 요청 시 사용하세요: - "인스타 게시물 댓글 확인해줘" - "이 댓글에 답글 달아줘" - "스팸 댓글 숨겨줘" - "최근 포스트 댓글 정리해줘" - "특정 댓글 숨김 처리해줘" [책임 경계] vs 형제 스킬: Instagram 댓글 *조회/답글/숨김* 만 담당합니다. 포스트 발행은 instagram-post 스킬, 인사이트 조회는 instagram_insights 도구를 직접 사용하세요.
Scanned 9/4/2026
Install to Claude Code
npx -y skills add modu-ai/moai-cowork --skill instagram-comments --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Instagram Comments?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/modu-ai-instagram-comments)More formats (shields.io, HTML) on the badges page.
---
name: instagram-comments
description: |
Instagram 미디어의 댓글을 관리합니다 — 목록 조회, 답글 작성, 댓글 숨김. `manage_comments` 권한이 부여된 경우에만 동작합니다. 발행된 게시물의 댓글 모더레이션(응대/정리) 에 사용합니다.
다음과 같은 요청 시 사용하세요:
- "인스타 게시물 댓글 확인해줘"
- "이 댓글에 답글 달아줘"
- "스팸 댓글 숨겨줘"
- "최근 포스트 댓글 정리해줘"
- "특정 댓글 숨김 처리해줘"
[책임 경계] vs 형제 스킬: Instagram 댓글 *조회/답글/숨김* 만 담당합니다. 포스트 발행은 instagram-post 스킬, 인사이트 조회는 instagram_insights 도구를 직접 사용하세요.
version: "1.3.0"
---
# Instagram 댓글 관리 (instagram-comments)
## 개요
발행된 Instagram 미디어의 댓글을 조회하고, 답글을 달고, 댓글을 숨긴다. 이 스킬은 Instagram Graph API 의 댓글 엔드포인트(`manage_comments` 권한 게이트) 를 통해 `instagram_comments_list` / `instagram_comments_reply` / `instagram_comments_hide` 도구를 호출한다.
> **권한**: 세 가지 도구 모두 Meta 앱에 `manage_comments` 권한이 부여되어 있어야 한다. 권한이 없으면 API 가 거부한다.
## 트리거 키워드
댓글, comment, 답글, reply, 숨김, hide, 모더레이션, 스팸, 정리
## 워크플로우
### 1단계: 댓글 목록 조회
특정 미디어(`media_id`) 의 댓글을 나열한다:
```python
instagram_comments_list(media_id="<미디어 ID>")
# → {"data": [{"id", "text", "username", "timestamp", "hidden": false}, ...]}
```
- `media_id` 는 `instagram_publish_image` 등 발행 도구가 반환한 `media_id` (또는 `instagram_insights` 로 조회한 미디어 ID).
### 2단계: 답글 초안 작성
특정 댓글에 달 답글을 **먼저 초안으로만** 쓴다. 이 단계에서는 아직 아무것도 발행하지 않는다.
답글 본문도 저장된 문체 프로필을 반영해 작성한다 (있으면). 공격적/스팸 댓글에는 답글 대신 숨김을 권장.
### 3단계: 한국어 감사 3단 (답글 발행 전 필수)
답글은 브랜드 계정 이름으로 공개된 자리에 나가고, 사업 계정에 그대로 남는다. 사용자에게 보여주기 **전에** ⟨한국어 감사 3단⟩을 통과시킨다. 순서는 고정이다:
```
moai-coworker:ai-slop-reviewer 1차 일반 슬롭 정리
→ moai-writer:korean-spell-check 2차 맞춤법 — 제안 수집 (미공개 정보가 섞였으면 건너뜀)
→ moai-writer:korean-humanize 3차 정밀 윤문 + 맞춤법 반영 + Phase 6 최종 검수
```
- **[HARD] `korean-humanize`가 마지막이다.** Phase 6 최종 검수가 판정한 **바로 그 산출물**이 발행된다.
- `korean-spell-check`는 원문을 외부 서비스(`nara-speller.co.kr`)로 보낸다. 답글에 **아직 공개되지 않은 정보**(미발표 출시일·비공개 실적·고객 개인정보)가 섞였다면 이 단계를 건너뛴다 — 생략해도 `korean-humanize`가 맞춤법을 함께 본다. 생략했으면 그 사실을 결과에 적는다.
- 감사가 `hold_and_report`로 판정하면 발행하지 않는다. 사유를 그대로 보여주고 2단계로 돌아간다.
### 4단계: 승인 게이트 (답글·숨김 공통)
**[HARD] 답글 발행과 댓글 숨김은 승인 없이 실행하지 않는다.** 둘 다 고객이 보는 자리에서 일어나는 일이다.
- **[HARD] 승인은 §승인 요청 계약의 경로로 받는다.** 산문으로 "올릴까요?"라고 묻지 않는다. **물을 수 없다는 이유로 게이트를 건너뛰지 않는다** — 경로 선택은 §승인 요청 계약을 따른다.
- **[HARD] 요약하지 말고 실제로 넘어가는 인자 전부를 그대로 보여준다:**
| 보여줄 것 | 답글 | 숨김 |
|---|---|---|
| 발행 계정 (`IG_USER_ID`) | ✓ | ✓ |
| 대상 게시물 `media_id` | ✓ | ✓ |
| 대상 댓글 `comment_id` | ✓ | ✓ |
| 대상 댓글 **원문 전문**과 작성자 | ✓ | ✓ |
| 감사를 마친 답글 **전문**과 바이트 수 | ✓ | — |
| 감사 3단에서 무엇이 바뀌었는지 한 줄 | ✓ | — |
| 숨김 사유 (스팸 / 비난 / 기타) | — | ✓ |
승인 선택지는 이렇게 구성한다:
| 선택지 | 뜻 |
|---|---|
| 이대로 실행 (권장) | 보여준 인자 그대로 답글 발행 또는 숨김 |
| 고쳐 쓰기 / 대상 바꾸기 | 2단계로 복귀 → 감사 3단 재통과 → 재승인 |
| 취소 | 아무것도 실행하지 않고 종료 |
- **[HARD] 여러 댓글을 한꺼번에 처리할 때도 건별로 보여준다.** "스팸 5건 숨김" 같은 묶음 승인은 금지한다 — 5건 중 하나가 정당한 고객 불만이어도 사용자가 알 수 없다. 목록으로 한 번에 제시하되, 각 건의 댓글 원문·작성자·사유가 모두 보여야 한다.
> 숨김은 되돌릴 수 있다(아래 5단계). 그래도 승인을 받는 이유는, 숨김이 **누군가를 침묵시키는 결정**이기 때문이다. 되돌릴 수 있다는 것과 해도 된다는 것은 다르다. 특히 스팸으로 잘못 분류된 정당한 불만을 숨기면, 고객은 자기 댓글이 사라진 것을 보고 브랜드를 떠난다.
### 5단계: 실행
승인된 것만 실행한다.
```python
# 답글
instagram_comments_reply(comment_id="<댓글 ID>", text="<감사를 마치고 승인된 답글>")
# → {"id": "<새 답글 ID>"}
# 숨김 (삭제가 아님 — 작성자와 페이지 관리자만 안 보이거나, 정책에 따라 전체 숨김)
instagram_comments_hide(comment_id="<댓글 ID>")
# → {"hidden": true}
```
숨김은 가역적이다 — Meta 정책에 따라 다시 보이게 할 수 있다. 답글은 가역적이지 않다.
- **[HARD] 실패해도 자동 재시도하지 않는다.** 답글 발행이 애매하게 실패하면(타임아웃·응답 없음) 재시도하지 않고 멈춘다. 성공 신호가 없다는 것은 답글이 달리지 않았다는 증거가 아니며, 확인 없는 재시도는 같은 답글을 두 번 단다.
- **[HARD] 이 서버에는 답글이 달렸는지 확인할 수단이 없다.** `instagram_comments_list(media_id)` 는 그 미디어의 **댓글 목록**만 가져온다 — 특정 댓글에 달린 **답글(replies)** 은 조회하지 않는다(`instagram_api.py` `comments_list`). 게다가 그 엔드포인트 경로 자체가 아직 검증 대상(`@MX:TODO`)이다. 이 도구로 "답글 없음"을 판정하면 **성공한 답글을 못 본 채 두 번 달게 된다.**
- 따라서 애매한 실패 뒤에는 **사용자에게 Instagram 앱·웹에서 해당 댓글을 직접 열어 확인해 달라고 요청**하고, **달리지 않았다는 사용자의 확인을 받은 뒤에만** 다시 실행한다. 스킬이 혼자 판정하지 않는다.
- 나중에 replies 를 조회하는 도구가 실제로 노출되면 그때 이 조항을 바꾼다. **도구가 있을 것이라 가정하고 미리 써 두지 않는다.**
## 승인 요청 계약 (런타임 중립)
[HARD] 이 스킬의 게이트는 **특정 도구 이름에 묶이지 않는다.** `AskUserQuestion`은 Claude 런타임의 수단일 뿐이고, Codex를 비롯한 다른 런타임에는 그 도구가 없다. 도구 이름으로 계약을 쓰면 그 도구가 없는 런타임에서 게이트가 **영구 blocker**가 되어, 승인이 필요한 모든 작업이 그냥 멈춘다. 그건 안전이 아니라 고장이다.
승인은 아래 순서로 구한다. 위에서부터 **실제로 가능한 첫 번째**를 쓴다.
**승인의 정의는 수단이 아니라 결과다: 승인서를 사용자에게 그대로 보여주고, 그에 대한 명시적 응답을 받는 것.** 아래는 그 결과를 만드는 경로들이며, 위에서부터 가능한 첫 번째를 쓴다.
| 순위 | 경로 | 조건 |
|---|---|---|
| 1 | 런타임의 구조화 질문 도구 (`AskUserQuestion` 등) | 그 도구가 현재 세션에 노출돼 있을 때 |
| 2 | **일반 대화로 승인서를 제시하고 다음 턴에서 응답을 받는다** | 사용자와 직접 대화 중일 때. 도구가 없어도 이 경로는 언제나 열려 있다 |
| 3 | 구조화 blocker 반환 → 상위 오케스트레이터가 물어봄 | 서브에이전트로 실행 중일 때 |
**[HARD] 런타임의 도구 실행 권한 프롬프트는 승인이 아니다.** 그 프롬프트는 "이 도구를 호출해도 되는가"를 물을 뿐, 게이트가 보여주기로 한 인자·견적·동의 문항을 표시하지 않는다. 승인서 전체와 선택지를 실제로 표시하는 경우에만 2번 경로로 인정한다.
**[HARD] 2번 경로가 있으므로 "물을 수단이 없다"는 상황은 사실상 없다.** 대화가 가능한 곳에서는 언제나 승인서를 글로 제시할 수 있다. fail-closed는 **대화도 blocker 반환도 불가능한 완전 무인 실행**에만 해당한다 — 그 경우에만 실행하지 않고 멈춘다.
**[HARD] 3번을 쓸 때 blocker는 그 자체로 승인 요청서여야 한다.** 상위가 무엇을 물어야 할지 모르면 되물을 수 없고, 그러면 교착된다. 다음을 모두 담는다:
- 승인받을 **행위** 한 줄 (무엇이 되돌릴 수 없는지 / 얼마가 나가는지)
- 게이트가 요구하는 **인자 전부** (요약하지 않은 값)
- **선택지 목록** — 상위가 그대로 사용자에게 제시할 수 있는 형태
- **재개 방법** — 어떤 답을 받으면 무엇을 이어서 실행하는지
**[HARD] 세 경로가 모두 불가능한 무인 실행에서는 실행하지 않는다(fail-closed).** 물을 수단이 없다는 것은 승인을 받았다는 뜻이 아니다. 이때는 "승인 수단이 없어 진행하지 못했다"고 기록하고 멈춘다 — 조용히 진행하지 않는다. 반대로 **대화가 가능한데 도구가 없다는 이유로 멈추는 것도 잘못**이다. 2번 경로를 쓴다.
> 이 계약은 `CLAUDE.local.md` §범용성 원칙(OS 2종 × 런타임 2종에서 동일 동작)의 게이트 쪽 적용이다. 한 런타임에서만 도는 게이트는 미완성으로 본다.
---
## 주의사항
| 상황 | 대응 |
|------|------|
| `manage_comments` 권한 없음 | Meta 앱 검수(App Review) 로 권한 추가 필요 |
| `setup_required` 에러 | `IG_ACCESS_TOKEN` / `IG_USER_ID` 환경변수 설정 |
| Personal 계정 | Graph API 미지원 — Professional 계정 필요 |
| 엔드포인트 미검증 | comments 엔드포인트 경로는 run-phase 검증 대상(@MX:TODO) — 최초 사용 시 공식 문서로 경로 재확인 권장 |
| 감사 3단에서 `hold_and_report` 판정 | 답글을 발행하지 않음. 사유를 그대로 보여주고 2단계로 복귀 |
| 답글에 미공개 정보·고객 개인정보가 섞임 | `korean-spell-check` 생략 (외부 전송) — 생략 사실을 결과에 적음 |
| 사용자가 승인 게이트에서 취소 | 아무것도 실행하지 않고 종료. 부분 실행 금지 |
## 출력 형식
```markdown
## 댓글 관리 결과
**미디어**: <media_id>
**댓글 수**: N
| 댓글 ID | 작성자 | 본문 | 상태 |
|---|---|---|---|
| ... | ... | ... | 표시/숨김 |
**조치**: (답글/숨김 내역)
```
## 발행 전 설정 (최초 1회)
Threads 와 동일한 Instagram 자격증명(`IG_ACCESS_TOKEN` / `IG_USER_ID`) 에 추가로 Meta 앱에 `manage_comments` 권한이 부여되어야 한다. 발급 절차는 `mcp-servers/moai-mcp-threads-poster/CONNECTORS.md` 의 Instagram 섹션 참조.
## 관련 스킬
| 스킬 | 사용 시점 |
|------|----------|
| `instagram-post` | 포스트 발행 (댓글 관리 전에 발행이 선행) |
## 이 스킬을 사용하지 말아야 할 때
- 포스트 발행: `instagram-post` 스킬
- 인사이트 조회: `instagram_insights` 도구 직접 호출
- Threads 댓글: Threads API 는 본 플러그인 범위 밖
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!