이 스킬이 시스템에 하는 일 (설치 전 확인)
- Threads에 답글을 실제로 발행할 수 있습니다. 동봉 스크립트는 기본 dry-run이고
--go에서만 발행합니다.- 문체를 역산하려고 본인 계정의 과거 답글을 대량으로 읽습니다.
- 액세스 토큰이 필요합니다. 환경변수에서만 읽습니다.
개인 스레드 답글 보이스 (@bam.bam_2)
밤밤 개인 계정에 온 댓글에 답글을 다는 작업 전용.
- 브랜드 계정(@get100.official)이 남의 글에 콜드로 댓글 다는 기준은
~/Projects/getback/마케팅/threads-1000/ENGAGE-VOICE.md(2026-07-10 밤밤 확정)다. 그쪽 철칙 3개(한 줄·미러링 금지·존대 유지)는 여기서도 유효하지만, 거기 적힌 말투 마커(ㅇ_ㅇ?~넹 ~당 ~욤)는 밤밤의 게시물 에서 뽑은 것이라 답글에서는 거의 안 쓰인다(실측 ㅇ_ㅇ 0.0%,~2.5%). 답글은 이 문서를 정본으로 본다. - 계정 성과 분석은
threads-analytics스킬.
근거
Threads Graph API GET /me/replies 전량 22,560건(2024-04-26 ~ 2026-08-08) 실측.
0. ⚠️ 초안은 코덱스가 쓴다 (2026-08-15 밤밤 확정)
"다음부터 이거 코덱스로 하기로 하자"
답글 초안 생성은 클로드가 직접 하지 말고 코덱스에 넘긴다. 2026-08-15 배치에서 클로드 초안이 두 번 연속 반려됐고("내말투 들어간거냐", "코덱스는 내말투 잘 따라하던데"), 같은 재료를 물린 코덱스 출력이 채택됐다. 클로드는 재료 준비 · 검증 · 발행 · 예외 판단을 맡는다.
왜 클로드 초안이 실패했나 (반복 금지)
- 통계 표를 보고 새로 지어냈다. 문체표(길이·이모티콘 비율)만 맞추면 리듬은 비슷해지지만 반응 방식은 못 배운다. 결과물이 지나치게 깔끔하고 훈수형(
~하셔도 됩니다,~반응 다릅니다)이 됐다. - 댓글↔답글 짝(pair)을 한 번도 안 봤다. 답글만 따로 보면 "어떤 말에 어떻게 받아치는지"가 안 보인다. 밤밤은 드립을 치고(
천재라기엔 계란값이 많이 들었습니다 ㅋㅋ), 어미를 갖고 놀고(~게여~할게욤'ㅁ'워우...;;), 상대를 자기 판으로 끌어당긴다(6기 재참여하시죠!?이제 맥스의 세계로 가보시죠!).
실행 절차
- 짝 코퍼스 수집 —
reply-logs/의 pairs 수집 스크립트로 최근 2개월치 내 글 conversation을 훑어{남의 댓글 → 밤밤 답글}짝을 뽑는다(2026-08-15 기준 430건). 한 줄·90자 이하만 남기고 최신순 220건을 예시로 쓴다. - 프롬프트 조립 —
build_codex_prompt.py가 짝 220건 원문 + 계량 기준표(아래 1장) + 절대규칙 + 대상 댓글 전체를 묶는다. 출력은번호|답글한 줄씩만. 2026-09-13에 밤밤 지시로 세 가지가 빌더에 박혔다(1-2장 참조). ⓐ 이미지 글 하드게이트 ⓑ 같은 글 기존 답글 주입 ⓒ 수량 할당을 건수로 지시. - 실행 — 코덱스 CLI는 맥북 샌드박스에서
env: node: No such file or directory로 죽는다. 맥미니에서 돌린다:scp /tmp/codex_prompt.txt mac-mini:/tmp/→ssh mac-mini 'codex exec --skip-git-repo-check - < /tmp/codex_prompt.txt'. (맥미니엔timeout명령이 없으니 붙이지 말 것.) - 클로드가 검수 — ⚠️ 눈으로 읽지 말고 먼저 숫자로 잰다(2026-08-23 추가). 초안 전체를 1장 실측표와 대조해
20자 이하 비율 / 중앙 길이 / 느낌표 / 감상·요약 종결(~네요·~군요·~같아요)4개를 계산하고, 실측에서 크게 벗어나면 밤밤에게 보여주기 전에 다시 뽑는다.- 2026-08-23 실패: 눈으로만 훑고 212건을 그대로 올렸다가 "왤케 말투가 별로지"로 반려. 재보니 20자 이하 19%(실측 66%) / 느낌표 21%(실측 32%) / 감상 종결 18%(실측 9%) 였다. 프롬프트를 고쳐 다시 뽑으니 94% / 32% / 3%로 잡혔다.
- 코덱스 출력에서 아래도 잡아낸다. 실제로 나온 결함들이다.
ㅋㅋㅋ3개 이상 →ㅋㅋ로 자동 보정(2장 5번 절대규칙)- 훈수·교훈 종결(
~하시면 됩니다,A는 이렇게 B는 이렇게가 맞겠네요) ㅋㅋ과다 — 코덱스는 31%까지 올린다(실측 13%)- 맥락상 기회를 날리는 답글 — 예: 공간 홍보 댓글에 웃고 넘기기(밤밤은 8/30 70명 행사 공간을 찾는 중이었다). 이런 건 클로드 안으로 갈아끼운다. 2026-08-15에 실제로 12번만 클로드 안이 채택됐다.
- 밤밤에게 코덱스안/클로드안을 나란히 보여주고 번호로 고르게 한다(7장).
1. 계량 기준표 — 초안이 이 범위를 벗어나면 다시 쓴다
⚠️ 2026-08-15 갱신. 아래 표는 2026-08 한 달치 한 줄 답글 492건 실측이다. 이전 판(2026-05 이후 836건 기준)은 느낌표 11% / 물음표 22%로 적혀 있었는데 8월 실측은 거의 정반대였다(느낌표 31% / 물음표 7.5%). 그 낡은 표를 믿고 쓴 초안이 밤밤에게 반려됐다. 문체표는 배치 시작할 때마다 다시 재본다.
| 항목 | 실측값(2026-08) | 지킬 것 |
|---|---|---|
| 글자수 중앙값 | 17자 | 20자 안팎. 36자 넘으면 이유가 있어야 함 |
| 줄 수 | 1줄 | 줄바꿈은 예외 |
느낌표(!) 포함 | 31.1% | 3건에 1건. 이게 밤밤 톤의 핵심이다. 없으면 딱딱해진다 |
ㅎㅎ | 16.3% | 6건에 1건 |
ㅋㅋ | 13.4% | 7~8건에 1건. 코덱스가 남발하니 깎을 것 |
| 물음표로 끝 | 7.5% | 13건에 1건. 되묻기를 남발하지 말 것 |
님 호칭 | 7.1% | 이름 아는 사람에게만 |
~하시죠 / ~실래요 청유 | 3.0% | 상대를 자기 판으로 끌어당길 때 |
ㅠ ㅠ_ㅠ | 8% | 공감·엄살에만 |
| 이모지 | 1% | 사실상 안 쓴다 |
| 반말 종결 | 3% | 존대가 기본. 상대가 반말로 걸어와도 존대 |
| 상대 단어 되받기(미러링) | 2% | 사실상 안 한다 |
1-2. 빌더에 박힌 세 가지 (2026-09-13 밤밤 지시로 개정)
밤밤: "댓글노가다 규칙 먼저 뜯어보고 하자" → 코덱스가 맥락을 어떻게 짚는지를 점검하다 구멍 두 개를 찾았다. 프롬프트의 본체는 통계표가 아니라 짝 220건 원문인데, 대상 쪽에 붙는 맥락이 얇았다.
ⓐ 이미지/영상 글은 설명이 없으면 빌더가 죽는다 (exit 2)
예전엔 IMAGE_NOTES={}가 빈 dict 기본값이라, 설명을 안 채우면 아무 경고 없이 캡션만 보고 초안이 나왔다. 2026-09-08 대상 33건 중 16건이 IMAGE였다. 스킬 4장에 "이미지 글은 반드시 열어서 확인"이라고 적혀 있었지만 스크립트가 강제하지 않아 지켜지지 않던 지점이다.
- 이제
post_media가 IMAGE/VIDEO/CAROUSEL_ALBUM인데 설명이 없으면 permalink와 이미지 URL을 찍고 exit 2로 죽는다. - 설명은
reply-logs/image_notes.json에{post_id: "설명"}으로 누적 저장된다. 같은 글이 다음 배치에 또 나와도 재사용된다. extract.py가media_url+children{media_url}을 같이 뽑으므로, 그 URL을 받아 실제로 열어보고 채운다.
ⓑ 같은 글에 내가 이미 단 답글을 프롬프트에 넣는다
extract.py가 원글 conversation에서 밤밤 답글 전체를 모아 existing_my_replies로 저장하고, 빌더가 원글 블록 아래에 (이 글에 내가 이미 단 답글 — 표현·소재가 겹치지 않게 쓸 것: "…")로 넣는다.
사후 difflib 차단이 아니라 생성 단계에서 막는 방식이다(밤밤의 generation-over-gate 원칙).
ⓒ 수량은 비율이 아니라 건수로 박는다
⚠️ 코덱스는 백분율 지시를 못 지키고 한쪽으로 몰린다. 2026-09-13에 3차까지 돌려서 잡았다.
| 항목 | 1차 | 2차 | 3차(채택) | 실측 |
|---|---|---|---|---|
| 20자 이하 | 100% | 13% | 74% | 66% |
| 중앙 길이 | 17자 | 24자 | 18자 | 17자 |
| 느낌표 | 18.5% | 42.6% | 42.6% | 31% |
| 물음표로 끝 | 25.9% | 9.3% | 13% | 7.5% |
- 1차("3분의 2는 20자 이하")→ 전부 20자 이하로 만들고 느낌표는 모자라고 물음표는 3.5배 남발.
- 2차(건수 하한만 지시)→ 반대로 21~35자를 47/54건까지 밀어버림. 하한만 주면 그쪽으로 몰린다.
- 3차(하한+상한 동시)에서 잡혔다. 그래서 빌더의
QUOTA는short_min / mid_min / mid_max / excl_min / qmark_max / hh_min을 전부 대상 건수 N에 비례해 계산해 "총 N건 중 최소 X건 / 최대 Y건" 문장으로 찍는다.
1-1. 코덱스 프롬프트에 반드시 넣을 것 (2026-08-23 확정)
계량 기준만 주면 코덱스는 "대화를 닫는 감상평"을 쓴다. 프롬프트에 답글의 목적을 먼저 박는다.
밤밤은 커뮤니티 기획자다. 답글의 목적은 '좋은 말로 마무리'가 아니라 그 사람과 관계를 여는 것이다. 모든 답글은 셋 중 하나여야 한다. (A) 상대에게 초점을 돌린다 — 그 사람 이야기를 묻는다 (B) 드립으로 받아친다 — 짧게 웃기고 끝낸다 (C) 내 판으로 끌어당긴다 — 만나자/오라/해보자 A 40% / B 40% / C 20% 정도로 섞어라.
금지 항목은 실제로 걸린 문장을 예시로 붙여야 먹힌다(추상적으로 "미러링 금지"만 쓰면 또 한다). 길이는 "중앙 18자"가 아니라 **"3분의 2는 20자 이하"**로 지시해야 실측에 맞는다.
⚠️ 유형에 맞는 응답을 해라 — (A)를 전면 적용하지 말 것
감사합니다 잘 쓰겠습니다 좋은정보 얻어갑니다 같은 인사·감사 댓글에 "어떤 일 하시는 분인가요?"를 붙이면 안 된다.
2026-08-23 밤밤 지적: "감사합니다에 뭔 어떤일 하시는 분인가요냐;;; 뭐 줬다는말에 감사합니다 같은걸로 해줘"
- 감사 → 감사로. 뭘 줬다(별·스하리) → 고맙다고. 잘 쓰겠다 → 잘 쓰시라고.
- 대신 11건이 전부 "감사합니다"면 대행 티가 나므로 감탄사·엄살·짧은 드립으로 매번 변주한다.
- 캐묻는 질문은 실제로 물어볼 게 있는 댓글(자기 상황을 말한 사람, 질문한 사람, 검증성 지적을 한 사람)에만.
⚠️ 같은 질문 5개 금지
2026-08-23에 17건 중 5건이 "어떤 일 하세요 / 무슨 업무 하세요 / 뭘 자동화하고 싶으세요"로 겹쳤다. 초안을 받으면 질문 유형이 겹치는지 정규식으로 세어보고 3건 이상 겹치면 분산시킨다.
2. 절대 규칙 7개
- 같은 문구를 두 번 쓰지 않는다. 최근 836건에 완전히 겹치는 답글이 0건이다. 밤밤은 매번 다르게 쓴다.
- ⚠️ 2026-08-08 실패: 76건 대행하면서
감사합니다 ㅎㅎ를 7번 썼다. 고유 문구 70/76. 이게 대행 티가 나는 1순위 지점이다.
- ⚠️ 2026-08-08 실패: 76건 대행하면서
- 미러링 금지. 상대 말을 요약해 되돌려주지 않는다("17번이면 세계관도 17번 바뀌신 거네요" ❌). 실측 미러링 2%.
- 훈수 금지, 존대 유지. 교훈으로 끝맺지 않는다. 상대가 반말이어도 존대로 답한다.
ㅎㅎ/ㅋㅋ를 기본값으로 붙이지 않는다. 10건 중 8건은 이런 것 없이 끝난다.ㅋㅋㅋ(세 번 이상)는 쓰지 않는다. 비웃는 느낌으로 읽힐 수 있다는 밤밤 지적(2026-08-08). 대신ㅋㅋ(두 번) 또는:)를 쓴다.:)는 실측 데이터에도 실제로 등장하는 표현.- 재답글(내 답글에 달린 대댓글)은 답글 대상이 아니다. 남이 나에게 새로 단 최상위 댓글에만 답한다. 내가 이미 답한 스레드 안에서 이어지는 대화(재답글)는 대량 발행 대상에서 제외한다(2026-08-08 밤밤 지시).
- 초대·모집성 답글에 뭉뚱그린 템플릿 문구를 쓰지 않는다.
~가능해요 편하게 오세요류의 일반화된 초대 문구는 다단계·리딩방·투자 스캠 계정의 전형적 홍보 템플릿과 표면 패턴이 겹쳐 Threads의 "금융 사기 및 스캠" 자동 필터에 오탐될 수 있다. 행사명·날짜·장소 등 구체적 디테일을 최소 1개 이상 넣어서 일반 템플릿과 표면적으로 구분되게 쓴다.- ⚠️ 2026-08-10 실제 사례:
누구나 참여 가능해요 편하게 오세요!(70명 네트워킹 행사 문의 답글)가 "경제적 이익에 관한 현실성 없는 주장/약속"으로 자동 삭제 후 5분 만에 재검토로 복원됨. 오탐이었지만 재발 방지 대상. - 예:
누구나 참여 가능해요 편하게 오세요!❌ →이번 강남 모임은 신청만 하면 누구나 오실 수 있어요!✅ (구체적 장소/행사 정보 포함)
- ⚠️ 2026-08-10 실제 사례:
3. 댓글 유형별 대응 (실측 패턴)
① 짧은 공감·인사 (12자 이하) — 내 답글 중앙 16자 감사로 끝내지 말고 상대에게 관심을 돌린다. 프로필을 보고 그 사람 이야기를 꺼내는 게 이 계정의 핵심 동작이다.
친해지고 싶어요 😅→우와 캐나다에서 크리에이터로 도전하고 계시네요~?!뚫어주세요~~~~~→뭐가 고민이예요!!피드 발견→온제님은 어떤일을 하시나요?!오잉→또잉?!- 감사만 할 거면 짧게 변주:
ㅋㅋㅋ공감감사합니다/100% 감사합니다./ㅎㅎ반갑습니다!
② 보통 (13~45자) — 내 답글 중앙 22자 한 조각 얹거나 되묻는다.
경험의 기회는 내가 만드는 거지..!→맞아요 내 인생의 주인공도 나 잖아요!? ㅎㅎ1인 사업가 디자이너 보여요!!→헉 5년차 디자이너~! 손목 괜찮으세요?교육커뮤니티 만들고싶은데 시작을 모르겠어요→으아 어떤 교육 커뮤니티를 운영하시는데요..? 먼저 만들어보시죠!
③ 긴 글 (46자+) — 내 답글 중앙 27자 길이를 따라가지 않는다. 한 지점만 집어서 짧게.
- 긴 경험담 →
랜덤뽑기 하듯이 모임을 참여하는 것과 잘 검증된 사람들과 만나는건 체력소비가 달라요. - 긴 공감글 →
벗어나셨나요?!
④ 60자 넘게 쓰는 경우는 이 셋뿐 (전체의 13%) 자기 경험/수치를 나눌 때, 링크·제품을 안내할 때, 상대를 구체적으로 띄워줄 때. 그 외에는 길게 쓰지 않는다.
⑤ 답하지 않는 것
- 논쟁 걸어오는 계정 — 밤밤이 지정하면 그 계정 전체를 무시한다.
- 정치 사안(집회·참정권 등) — 본계정으로 안 엮인다.
- 남들끼리 주고받는 대댓글 — 부모가 밤밤 글/답글이 아니면 대상 아님.
- 재답글(부모가 내 답글인 대댓글) — 최상위 댓글만 대상으로 한다(2026-08-08 밤밤 지시).
- 맥락이 불분명한 댓글은 밤밤에게 확인하고 보류(원글 속 표현을 짧게 묻는 댓글이 그 예다 — 원글 본문에 있는 단어·표현을 물어보는 거면 원글 전문을 먼저 대조해볼 것).
4. 첫 어절로 자주 쓰는 것
오 와 그 크으으으 아 헉 근데 이거 저랑 — 감탄사로 열고 바로 짧게 끝내는 리듬.
⚠️ 오프너 반복 금지(2026-08-14 밤밤 지적): 같은 배치 안에서 여러 건을 쓸 때 오만 계속 쓰면 대행 티가 확 난다(절대 규칙 1번 "같은 문구 두 번 안 씀"의 연장). 위 목록에서 매 건마다 다른 첫 어절을 고르고, 감탄사 없이 바로 본론으로 시작하는 것도 정상적인 선택지로 섞는다.
⚠️ 이미지·영상 있는 게시물은 반드시 실제로 열어서 확인(2026-08-14 밤밤 지적): 게시물에 사진/동영상이 있으면 텍스트 캡션만 읽고 댓글을 쓰지 않는다. 스크린샷으로 이미지 내용을 직접 확인한 뒤, 캡션과 이미지 중 실제로 반응할 지점(구체적 사물·장면·비교컷 등)을 잡아서 쓴다. 캡션이 짧거나 이미지가 핵심인 게시물(예: 사진 위주 게시물, before/after 비교컷)일수록 이미지를 안 보면 완전히 엉뚱한 댓글이 나온다 — 텍스트만 보고 썼다가 실제와 다른 내용으로 지적받은 사례 있음.
5. 대량 발행 절차
스크립트 세트 (전부 ~/Projects/ops/threads-tool/reply-logs/, 2026-08-15 정비)
| 파일 | 역할 |
|---|---|
extract.py | 미답변 최상위 댓글 추출(컷오프+스킵리스트 적용) → pending_YYYY-MM-DD.json |
build_pairs.py | {남의 댓글 → 밤밤 답글} 짝 코퍼스 수집 → /tmp/pairs.json |
build_codex_prompt.py | 짝 220건 + 기준 + 대상을 묶어 코덱스 프롬프트 생성. 이미지 설명 없으면 exit 2로 죽는다. 원글 단위로 묶어 seq를 매기고 target_YYYY-MM-DD.json으로 저장(표시번호=데이터키) |
image_notes.json | {post_id: "이미지/영상 내용 설명"} 누적 저장소. 빌더가 여기를 본다 |
publish.py | python3 reply-logs/publish.py YYYY-MM-DD — final_YYYY-MM-DD.json을 30~45초 간격으로 발행하고 batch_YYYY-MM-DD.jsonl에 기록. 발행 직전 username 검증, 재실행해도 중복 발행 안 됨. 날짜는 인자로 받는다(2026-08-23 파라미터화). 한 날짜에 여러 배치를 돌릴 땐 final_ 파일만 갈아끼우면 로그가 중복을 걸러준다 |
(구버전 postreplies.py는 맥미니에만 있다)
python# 대상 추출 — 내 답글이 자식으로 없는 남의 댓글만 GET /v1.0/{post_id}/conversation?fields=id,text,username,timestamp,replied_to&limit=100 # 발행 (2단계) POST /v1.0/{uid}/threads {media_type:TEXT, text, reply_to_id:<댓글id>} POST /v1.0/{uid}/threads_publish {creation_id}
토큰: 맥미니 ~/Projects/ops/threads-tool/.env 또는 ~/Projects/getback/discord_bot/.env (둘 다 @bam.bam_2). uid <DISCORD_ID>.
반드시 지킬 것
-
발행 직전 대상 댓글 작성자가 초안에 적힌 계정과 같은지 대조하고, 다르면 SKIP + 기록. 리다이렉트·순서 밀림으로 엉뚱한 사람에게 달리는 걸 막는다.
-
성공분을 JSONL에 남겨 재실행해도 중복 발행되지 않게 한다.
-
30~45초 간격. 계정이 도달 제한을 받은 적이 있다면 속도 자체가 위험하다. 76건에 약 55분.
-
발행 뒤 conversation을 재조회해 누락 0을 확인하고, 그 사이 새로 들어온 댓글은 따로 센다.
-
답글 발행 후 상대 프로필의 최신 원글 최대 5개에 좋아요를 누르고, 가장 최신 원글 1개에 맞춤 댓글을 단다(2026-08-09 밤밤 지시). 게시물이 5개 미만이면 가능한 만큼만, 이미 좋아요된 글은 중복 클릭하지 않는다. 각 좋아요 사이 3
8초·계정 사이 2040초 간격을 둔다. 성공/스킵/실패 수를 발행 로그에 함께 남긴다. -
원글 판정 필수: 프로필 기본 탭에는 상대가 남긴 답글·인용글이 원글처럼 섞여 보일 수 있다. 댓글 버튼을 누르기 직전, 현재 스레드의 원 작성자가 상대 username인지와 본문이 프로필에서 읽은 최신 원글 본문과 일치하는지 대조한다. 밤밤 글에 상대가 단 답글 페이지로 이동했으면 취소하고 프로필로 돌아간다(2026-08-09 중복 댓글 직전 발견 사례).
-
정치 프로필/정치 최신글은 좋아요·선제 댓글에서 제외한다. 자동 좋아요 중 정치 글을 발견하면 해당 좋아요를 즉시 취소하고 맞춤 댓글도 달지 않는다.
-
맞춤댓글은 최근 3일 이내 원글에만 단다(2026-08-10 밤밤 지시). 상대 프로필의 가장 최신 원글이 3일보다 오래됐으면 그 계정은 맞춤댓글을 생략하고 좋아요만 진행한다.
-
답변하기 애매한 글은 댓글을 스킵하고 좋아요만 진행한다(2026-08-15 밤밤 확정). 아래 4가지 중 하나라도 해당하면 댓글 후보에서 제외 — 무리하게 초안을 짜내지 말고 좋아요만 하고 넘어간다.
- 너무 추상적/철학적인 성찰글 — 걸 수 있는 구체적 소재가 없어 질문이 범용화된다(그 글이 아니라 "시작/성장/도전" 같은 주제어가 들어간 아무 글에나 붙여도 말이 되는 질문이 나오면 이 케이스).
- 광고/마케팅/홍보 목적 게시물 — 사장님 홍보, 상세페이지·마케팅 서비스 판매, 창업 컨설팅 등. 댓글이 진짜 반응이 아니라 고객 문의처럼 읽힌다.
- 원문에 없는 걸 프로필 정보로 추론해서 연결한 질문이 되는 경우 — 예: 프로필 태그가 "bass"라서 "이 채널도 보시나봐요?"처럼 원문이 확인해주지 않은 전제를 까는 질문. 확인 안 된 연결은 만들지 않는다.
- 원문 자체가 모호하거나(뜻이 불확실), 콘텐츠가 템플릿/AI풍이라 진짜 개인 경험인지 불확실한 경우 — 일러스트/AI 생성 이미지·영상에 감성 문구가 반복되는 계정, 문장 뜻이 여러 갈래로 읽히는 짧은 글 등. 뜻을 잘못 짚어 엉뚱한 댓글이 나올 위험이 크다.
-
이미 어떤 방향으로든 팔로우 관계가 있는 계정은 좋아요·맞춤댓글 대상에서 전부 제외한다(2026-08-11 밤밤 지시 "이미 팔로우하는 사람한테는 뭔 글쓰지 말라고", 2026-08-13 재확인 "나랑 팔로우인사람도 왜 포함하냐"). 이 단계의 목적은 아직 연결되지 않은 사람과의 새 관계 형성이다.
팔로우 버튼 판정표 (프로필 상단 버튼 텍스트를 그대로 읽는다)
버튼 텍스트 의미 처리 팔로우 서로 아무 관계 없음 유일한 대상. 좋아요 + 맞춤댓글 팔로잉 밤밤이 이미 상대를 팔로우 중 전진 제외(좋아요도 안 누름) 맞팔로우 상대가 밤밤을 팔로우 중 전진 제외 2026-08-13 사고: 서브에이전트에 "맞팔로우면 팔로워(스킵), 그외(팔로우/팔로잉)면 비팔로워"라고 지시해서 "팔로잉"(이미 내가 팔로우 중)이 대상으로 섞였고 hayan_sool에 좋아요 1건이 잘못 나갔다(즉시 취소). 서브에이전트에게는 버튼 텍스트를 있는 그대로 보고하라고만 시키고, 팔로워/비팔로워 같은 해석을 시키지 않는다.
⚠️ 밤밤이 특정 글을 콕어 "이 글에 댓글 단 사람은 다 팔로우하고 좋아요해라"고 지시하면 이 제외 규칙은 그 배치에 한해 무효다(2026-09-13 실제 지시). 이미
팔로잉인 사람은 팔로우가 no-op이니 좋아요만 진행하고, 결과 보고에 새 팔로우/기존 팔로잉을 나눈다. 정치 스크리닝은 지시와 무관하게 유지한다.
5-1. 속도 최적화 (2026-08-10 밤밤 지시, 반복 요청되는 작업이라 기본값으로 박아둠)
안전 페이싱(발행 3045초, 좋아요 38초·계정 20~40초)은 절대 줄이지 않는다 — 이건 속도가 아니라 계정 안전이 목적이다. 줄일 수 있는 건 이 페이싱 안에서 에이전트가 쓰는 조사·확인 오버헤드다.
- 팔로워/정치/3일규칙 조사는 서브에이전트 병렬이 기본값이다. 대상 계정을 5
8개씩 묶어 45개 그룹으로 나누고, 각 그룹을 default 프로필·fast 카테고리 서브에이전트에게 병렬 위임한다. 지시문에 다음을 명시: (1) 계정별 프로필 방문 후 "적용된 조치" 다이얼로그가 뜨면 좌상단 로고 근처 클릭으로 닫기, (2) 팔로우 버튼 텍스트를 있는 그대로(팔로우 / 팔로잉 / 맞팔로우) 보고 — 해석하지 말 것, (3) 버튼이 "팔로우"인 경우에만 고정글 제외한 최신 원글 최대 5개의 본문 앞부분과 게시시각, (4) bio·고정글·최근글 정치성 여부, (5) 가장 최신 원글이 3일 이내인지. 서브에이전트는 조사만 하고 좋아요·댓글은 직접 달지 않는다 — ref가 서브에이전트 자체 탭에서만 유효해서 본 세션이 발행을 다시 만들어야 한다. 2026-08-10 실측: 38계정 수동 조사 대비 5개 병렬 조사가 훨씬 빠르고, 다이얼로그 오탐지로 팔로워 5명을 비팔로워로 오분류할 뻔했던 수동 조사 버그도 재검증으로 잡았다. - 조사 결과를 바탕으로 실행 대상(계정·좋아요 대상 게시물·댓글 여부)을 미리 확정해 명단으로 만든 뒤 실제 방문을 시작한다. 방문하면서 매번 좋아요 대상을 고르지 않고, 댓글도 방문해서 바로 쓴다.
- 검증 회도를 줄인다: 좋아요는 5개 다 누른 뒤 한 번만 상태를 확인한다(매 클릭마다 재스냅샷 금지). 댓글은 게시 후 2~3초 대기하고 본문 포함 여부를 1회 확인하면 된다. "확인 안됨"이면 바로 최신순 재정렬로 넘어가지 말고 5초 더 기다렸다가 같은 방식으로 1회만 재확인한다(인기순 정렬 때문에 새 댓글이 안 보일 수 있다). 이유 없이 같은 게시물을 두 번 이상 재제출하지 않는다 — 2026-08-10
miji74000중복 게시 사고(게시 확인 지연을 재제출 신호로 오해해 발생) 이후 이 규칙 추가.
⚠️ 스레드 프로필은 가상 스크롤이다 — 스크롤 뒤에 좋아요 누르면 엉뚱한 글을 누른다 (2026-09-13 실제 발생)
프로필 게시물은 [data-pressable-container="true"]로 잡히는데, 아래로 스크롤하면 위쪽 게시물이 DOM에서 통째로 사라진다.
"5개 로드될 때까지 스크롤 → 그때 수집"으로 짜면 최신 5개가 아니라 스크롤 끝에 남은 오래된 글에 좋아요가 나간다.
실제로 한 계정에 1~2일 전 글 5개를 눌렀고, 정작 최신 3개(50분·11시간·1일)는 빠졌다.
올바른 순서:
window.scrollTo(0,0)으로 맨 위로 간다.- 보이는 대로 수집 → 조금 스크롤 → 다시 수집을 반복해 url 기준으로 누적한다(문서 순서=최신순 유지). 새 게시물이 2회 연속 안 늘면 중단(원글이 5개 미만인 계정).
- 누를 때는 url로 다시 찾아 없으면 위부터 다시 훑어서 찾은 뒤
scrollIntoView후 클릭한다.
원글 판정은 스냅샷 파싱 대신 컨테이너 안 첫 번째 a[href^="/@"]의 아이디가 프로필 주인과 같은지로 본다(남의 글에 단 답글은 부모 작성자가 먼저 나온다). 고정글은 고정됨 텍스트로 걱러낸다.
팔로우 버튼은 메시지 보내기 버튼의 형제로 잡는다(게시물마다 달린 작은 팔로우 버튼과 이름이 같아서 역할/이름으로는 구분이 안 된다).
- 프로필 미리보기 팝업이나 태그 링크를 클릭해 다른 계정으로 튀는 오작동이 가끔 생긴다(좋아요가 누락된 적이 있다). 좋아요·댓글 진행 후 페이지 타이틀이 의도한 계정과 다르면 즉시 원래 계정으로 돌아가 좋아요 상태를 전체 재확인한다.
6. "답글 노가다 하자" 실행 순서
- 지난 회차에 넘어간 댓글은 두 번 다시 초안에 올리지 않는다(2026-08-13 밤밤 지시 "내가 댓글 노가다 할때 넘어간거 왜또 자꾸 들고오냐"). 미답변으로 남아 있어도 그건 실수가 아니라 밤밤의 판단이다.
- 컷오프 규칙: 직전 발행 로그(
~/Projects/ops/threads-tool/reply-logs/batch_*.jsonl)의 마지막 timestamp보다 오래된 미답변 댓글은 전부 제외한다. 그 시각 이후에 새로 들어온 댓글만 대상이다. - 영구 스킵리스트:
~/Projects/ops/threads-tool/reply-logs/skiplist.json. 추출 직후 이 파일의 comment_id를 무조건 뺀다. 새로 넘어간 건이 생기면 매 회차 끝에 여기에 추가한다. - 애매해서 밤밤에게 물어봤던 건도 답을 못 받았으면 스킵리스트로 보낸다. 같은 댓글을 두 번 물어보지 않는다.
- ⚠️ "이미 답한 것"은 사람 단위로도 본다(2026-08-23 밤밤 지적 "내가 이미 답글쓴거에도 답글을 쓸려고해?").
추출기는 그 댓글의 직접 자식에 내 답글이 있는지만 보는데, 그러면 같은 글 안에서 그 사람과 이미 주고받은 경우를 놓친다.
실제 사례: 어떤 계정의 최상위 댓글에는 내 답글이 없었지만, 같은 글 다른 갈래에서 이미 언쟁을 한 상태였다. 거기에 순한 답글을 새로 달면 딴사람처럼 보인다.
→ 추출 후 각 원글 conversation에서
부모가 나(bam.bam_2)인 항목의 작성자집합을 만들고, 그 집합에 든 사람의 댓글은 후보에서 뺀다. - 기존 답글과 문구가 겹치는지도 본다. 같은 글에 이미 단 내 답글들과 초안을
difflib유사도 0.5 이상으로 비교해 걸러낸다(2026-08-23에 "이제 당당해지실 차례입니다!"가 같은 글의 "이미 잘하고 계시니 이제 당당해지시면 됩니다!"와 중복될 뻔했다).
- 컷오프 규칙: 직전 발행 로그(
- @bam.bam_2 내 글의 미답변 최상위 댓글을 라이브 API로 찾는다.
- 정치 관련 글을 쓰는 계정, 밤밤에게 부정적·논쟁성 댓글을 쓴 계정, 홍보·스팸, 재답글은 제외한다.
- 초안은 코덱스가 만든다(0장). 클로드가 직접 쓰지 않는다. 남은 전체 대상의 답글 초안을 한 번에 만든다. 모든 항목에 연속 번호를 붙여 밤밤이
1~10 발행,12번 수정처럼 한 번에 오더할 수 있게 한다. 임의로 10개씩 끊지 않는다. - 프로필은 정치 스크리닝과 맥락 파악에 쓰는 배경 자료다. 모든 답글에 상대 직업·최근 글을 억지로 끌어오지 않는다. 댓글 맥락에 먼저 반응하고, 프로필 언급은 자연스럽게 연결될 때만 쓴다.
- 밤밤 승인 뒤 답글을 30~45초 간격으로 발행한다. 각 대상의 username·댓글 id·부모 글 id·기존 밤밤 답글 유무를 발행 직전 재검증한다.
- 발행 뒤 댓글 작성자 전원을 5~8명씩 묶어 서브에이전트 병렬로 팔로워·정치·3일규칙 조사한다(5-1장). 팔로워·정치계정·계정없음은 제외하고, 남은 비팔로워 명단(계정별 좋아요 대상·댓글 여부)을 미리 확정한다.
- 확정된 명단을 순서대로 방문해 최신 원글 최대 5개에 좋아요를 누르고, 3일 이내 최신 원글 1개에 맞춤 댓글을 단다(3일 초과면 좋아요만). 검증은 5-1장 기준으로 최소화한다.
7. 사람 확인은 받고 간다
초안 전체를 밤밤에게 먼저 보여주고 승인받는다. 승인 없이 발행하지 않는다.
⚠️ 번호는 화면에 보이는 순서대로 1부터 연번(2026-08-23 밤밤 지적 "내가 하나씩 답변할 수 있게 번호를 메겨줘야지").
- 원글별로 묶어서 보여주면서 번호는 추출 순서(시간순)를 쓰면
1,2,5,8,3,4...처럼 튄다. 밤밤이1~10 발행으로 지시할 수 없다. - 표시 번호와 데이터 키를 반드시 같은 값으로 둔다. 2026-08-23에 화면 표시 번호로 제외 대상을 골랐는데 파일은 다른 순번을 쓰고 있어서 엉뚱한 5건이 제외되고 스팸 5건이 초안에 남았다. 제외·수정 지시를 받으면 그 번호로 파일을 조회해 대상 본문을 한 번 출력해 대조한다.
- 표시할 땐
번호 | @계정 | 댓글 앞부분 | 답글한 줄로. 클로드안으로 갈아낀 건 코덱스안을 같이 보여준다.
8. Threads 자동 제재(적용된 조치) 대응
어떤 답글이 Threads의 자동 모니터링(금융 사기/스캠 등)에 걸려 "적용된 조치" 알림을 받으면 — 나중에 자동 복원되었더라도 — 그 댓글은 삭제만 한다. 에이전트가 현장에서 다른 문구로 임의로 재작성해 재발행하지 않는다 — 이건 7번 규칙(사람 확인 받고 간다)을 우회하는 것이다. 대체 문구가 필요하면 새 초안으로 밤밤에게 다시 승인받는다.
- 근본 대책은 2장 7번(초대·모집성 답글 템플릿 금지) 규칙처럼 초안 생성 단계에서 미리 막는 것이지, 발행 후 사고 대응 단계에서 임의로 고치는 것이 아니다.


