Reply Automation
ComposioHQ/awesome-claude-skills
Automate Reply tasks via Rube MCP (Composio). An agent skill from ComposioHQ/awesome-claude-skills.
밤밤 개인 스레드 계정(@bam.bam2)의 "내 글에 달린 댓글"에 답글을 대신 쓸 때 읽을 것. An agent skill from bam-bam-2/solo-skills.
$ npx skills add bam-bam-2/solo-skills --skill threads-reply-voice -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install bam-bam-2/solo-skills threads-reply-voice --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/bam-bam-2/solo-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/threads-reply .claude/skills/threads-reply-voice && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "threads-reply-voice" agent skill from https://github.com/bam-bam-2/solo-skills/tree/main/skills/threads-reply into .claude/skills/threads-reply-voice/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "threads-reply-voice", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/bam-bam-2/solo-skills/tree/main/skills/threads-replyType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add bam-bam-2/solo-skills --skill threads-reply-voice -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install bam-bam-2/solo-skills threads-reply-voice --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bam-bam-2/solo-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/threads-reply .agents/skills/threads-reply-voice && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "threads-reply-voice" agent skill from https://github.com/bam-bam-2/solo-skills/tree/main/skills/threads-reply into .agents/skills/threads-reply-voice/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "threads-reply-voice", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add bam-bam-2/solo-skills --skill threads-reply-voice -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install bam-bam-2/solo-skills threads-reply-voice --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bam-bam-2/solo-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/threads-reply .cursor/skills/threads-reply-voice && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "threads-reply-voice" agent skill from https://github.com/bam-bam-2/solo-skills/tree/main/skills/threads-reply into .cursor/skills/threads-reply-voice/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "threads-reply-voice", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/bam-bam-2/solo-skills.git --path skills/threads-reply--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add bam-bam-2/solo-skills --skill threads-reply-voice -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install bam-bam-2/solo-skills threads-reply-voice --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bam-bam-2/solo-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/threads-reply .gemini/skills/threads-reply-voice && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "threads-reply-voice" agent skill from https://github.com/bam-bam-2/solo-skills/tree/main/skills/threads-reply into .gemini/skills/threads-reply-voice/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "threads-reply-voice", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install bam-bam-2/solo-skills threads-reply-voiceInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add bam-bam-2/solo-skills --skill threads-reply-voice -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/bam-bam-2/solo-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/threads-reply .github/skills/threads-reply-voice && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "threads-reply-voice" agent skill from https://github.com/bam-bam-2/solo-skills/tree/main/skills/threads-reply into .github/skills/threads-reply-voice/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "threads-reply-voice", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add bam-bam-2/solo-skills --skill threads-reply-voice -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install bam-bam-2/solo-skills threads-reply-voice --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bam-bam-2/solo-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/threads-reply .opencode/skills/threads-reply-voice && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "threads-reply-voice" agent skill from https://github.com/bam-bam-2/solo-skills/tree/main/skills/threads-reply into .opencode/skills/threads-reply-voice/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "threads-reply-voice", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
threads-reply-voice밤밤 개인 스레드 계정(@bam.bam2)의 "내 글에 달린 댓글"에 답글을 대신 쓸 때 읽을 것. An agent skill from bam-bam-2/solo-skills.
Threads Reply Voice is an agent skill from bam-bam-2/solo-skills. 밤밤 개인 스레드 계정(@bam.bam2)의 "내 글에 달린 댓글"에 답글을 대신 쓸 때 읽을 것. 답글 22,560건 실측으로 역산한 문체 기준표, 댓글 유형별 대응, 대량 발행 절차와 안전장치를 담고 있다.
Its SKILL.md is about 4.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including scripts.
The repository describes itself as: 1인 사업가 생산성 키트 — 직원 없이 58개를 자동화했고, 그중 바로 쓸 수 있는 AI 에이전트 스킬 38개(+실행 스크립트 19개)를 공개합니다. The licence is MIT.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 0712439. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
scpsshpython3From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use scp and ssh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Threads Reply Voice loads about 4.2k tokens when it runs. Until then it costs about 35 tokens; SKILL.md has 3,141 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
토큰: 맥미니 `~/Projects/ops/threads-tool/.env` 또는 `~/Projects/getback/discord_bot/.env` (둘 다 @bam.bam_2). uid `<DISCORD_ID>`Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from bam-bam-2/solo-skills at commit 0712439, republished under its MIT licence (© bam-bam-2). 3,141 words, ~4,158 tokens.
.claude/skills/threads-reply-voice/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.이 스킬이 시스템에 하는 일 (설치 전 확인)
- Threads에 답글을 실제로 발행할 수 있습니다. 동봉 스크립트는 기본 dry-run이고
--go에서만 발행합니다.- 문체를 역산하려고 본인 계정의 과거 답글을 대량으로 읽습니다.
- 액세스 토큰이 필요합니다. 환경변수에서만 읽습니다.
밤밤 개인 계정에 온 댓글에 답글을 다는 작업 전용.
~/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) 실측.
"다음부터 이거 코덱스로 하기로 하자"
답글 초안 생성은 클로드가 직접 하지 말고 코덱스에 넘긴다. 2026-08-15 배치에서 클로드 초안이 두 번 연속 반려됐고("내말투 들어간거냐", "코덱스는 내말투 잘 따라하던데"), 같은 재료를 물린 코덱스 출력이 채택됐다. 클로드는 재료 준비 · 검증 · 발행 · 예외 판단을 맡는다.
~하셔도 됩니다, ~반응 다릅니다)이 됐다.천재라기엔 계란값이 많이 들었습니다 ㅋㅋ), 어미를 갖고 놀고(~게여 ~할게욤 'ㅁ' 워우...;;), 상대를 자기 판으로 끌어당긴다(6기 재참여하시죠!? 이제 맥스의 세계로 가보시죠!).reply-logs/ 의 pairs 수집 스크립트로 최근 2개월치 내 글 conversation을 훑어 {남의 댓글 → 밤밤 답글} 짝을 뽑는다(2026-08-15 기준 430건). 한 줄·90자 이하만 남기고 최신순 220건을 예시로 쓴다.build_codex_prompt.py가 짝 220건 원문 + 계량 기준표(아래 1장) + 절대규칙 + 대상 댓글 전체를 묶는다. 출력은 번호|답글 한 줄씩만.
2026-09-13에 밤밤 지시로 세 가지가 빌더에 박혔다(1-2장 참조). ⓐ 이미지 글 하드게이트 ⓑ 같은 글 기존 답글 주입 ⓒ 수량 할당을 건수로 지시.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 명령이 없으니 붙이지 말 것.)20자 이하 비율 / 중앙 길이 / 느낌표 / 감상·요약 종결(~네요·~군요·~같아요) 4개를 계산하고, 실측에서 크게 벗어나면 밤밤에게 보여주기 전에 다시 뽑는다.ㅋㅋㅋ 3개 이상 → ㅋㅋ로 자동 보정(2장 5번 절대규칙)~하시면 됩니다, A는 이렇게 B는 이렇게가 맞겠네요)ㅋㅋ 과다 — 코덱스는 31%까지 올린다(실측 13%)⚠️ 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% | 사실상 안 한다 |
밤밤: "댓글노가다 규칙 먼저 뜯어보고 하자" → 코덱스가 맥락을 어떻게 짚는지를 점검하다 구멍 두 개를 찾았다. 프롬프트의 본체는 통계표가 아니라 짝 220건 원문인데, 대상 쪽에 붙는 맥락이 얇았다.
예전엔 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% |
QUOTA는 short_min / mid_min / mid_max / excl_min / qmark_max / hh_min을 전부 대상 건수 N에 비례해 계산해 "총 N건 중 최소 X건 / 최대 Y건" 문장으로 찍는다.계량 기준만 주면 코덱스는 "대화를 닫는 감상평"을 쓴다. 프롬프트에 답글의 목적을 먼저 박는다.
밤밤은 커뮤니티 기획자다. 답글의 목적은 '좋은 말로 마무리'가 아니라 그 사람과 관계를 여는 것이다. 모든 답글은 셋 중 하나여야 한다. (A) 상대에게 초점을 돌린다 — 그 사람 이야기를 묻는다 (B) 드립으로 받아친다 — 짧게 웃기고 끝낸다 (C) 내 판으로 끌어당긴다 — 만나자/오라/해보자 A 40% / B 40% / C 20% 정도로 섞어라.
금지 항목은 실제로 걸린 문장을 예시로 붙여야 먹힌다(추상적으로 "미러링 금지"만 쓰면 또 한다). 길이는 "중앙 18자"가 아니라 **"3분의 2는 20자 이하"**로 지시해야 실측에 맞는다.
감사합니다 잘 쓰겠습니다 좋은정보 얻어갑니다 같은 인사·감사 댓글에 "어떤 일 하시는 분인가요?"를 붙이면 안 된다.
2026-08-23 밤밤 지적: "감사합니다에 뭔 어떤일 하시는 분인가요냐;;; 뭐 줬다는말에 감사합니다 같은걸로 해줘"
2026-08-23에 17건 중 5건이 "어떤 일 하세요 / 무슨 업무 하세요 / 뭘 자동화하고 싶으세요"로 겹쳤다. 초안을 받으면 질문 유형이 겹치는지 정규식으로 세어보고 3건 이상 겹치면 분산시킨다.
감사합니다 ㅎㅎ를 7번 썼다. 고유 문구 70/76. 이게 대행 티가 나는 1순위 지점이다.ㅎㅎ/ㅋㅋ를 기본값으로 붙이지 않는다. 10건 중 8건은 이런 것 없이 끝난다.ㅋㅋㅋ(세 번 이상)는 쓰지 않는다. 비웃는 느낌으로 읽힐 수 있다는 밤밤 지적(2026-08-08). 대신 ㅋㅋ(두 번) 또는 :)를 쓴다. :)는 실측 데이터에도 실제로 등장하는 표현.~가능해요 편하게 오세요 류의 일반화된 초대 문구는 다단계·리딩방·투자 스캠 계정의 전형적 홍보 템플릿과 표면 패턴이 겹쳐 Threads의 "금융 사기 및 스캠" 자동 필터에 오탐될 수 있다. 행사명·날짜·장소 등 구체적 디테일을 최소 1개 이상 넣어서 일반 템플릿과 표면적으로 구분되게 쓴다.누구나 참여 가능해요 편하게 오세요!(70명 네트워킹 행사 문의 답글)가 "경제적 이익에 관한 현실성 없는 주장/약속"으로 자동 삭제 후 5분 만에 재검토로 복원됨. 오탐이었지만 재발 방지 대상.누구나 참여 가능해요 편하게 오세요! ❌ → 이번 강남 모임은 신청만 하면 누구나 오실 수 있어요! ✅ (구체적 장소/행사 정보 포함)① 짧은 공감·인사 (12자 이하) — 내 답글 중앙 16자 감사로 끝내지 말고 상대에게 관심을 돌린다. 프로필을 보고 그 사람 이야기를 꺼내는 게 이 계정의 핵심 동작이다.
친해지고 싶어요 😅 → 우와 캐나다에서 크리에이터로 도전하고 계시네요~?!뚫어주세요~~~~~ → 뭐가 고민이예요!!피드 발견 → 온제님은 어떤일을 하시나요?!오잉 → 또잉?!ㅋㅋㅋ공감감사합니다 / 100% 감사합니다. / ㅎㅎ반갑습니다!② 보통 (13~45자) — 내 답글 중앙 22자 한 조각 얹거나 되묻는다.
경험의 기회는 내가 만드는 거지..! → 맞아요 내 인생의 주인공도 나 잖아요!? ㅎㅎ1인 사업가 디자이너 보여요!! → 헉 5년차 디자이너~! 손목 괜찮으세요?교육커뮤니티 만들고싶은데 시작을 모르겠어요 → 으아 어떤 교육 커뮤니티를 운영하시는데요..? 먼저 만들어보시죠!③ 긴 글 (46자+) — 내 답글 중앙 27자 길이를 따라가지 않는다. 한 지점만 집어서 짧게.
랜덤뽑기 하듯이 모임을 참여하는 것과 잘 검증된 사람들과 만나는건 체력소비가 달라요.벗어나셨나요?!④ 60자 넘게 쓰는 경우는 이 셋뿐 (전체의 13%) 자기 경험/수치를 나눌 때, 링크·제품을 안내할 때, 상대를 구체적으로 띄워줄 때. 그 외에는 길게 쓰지 않는다.
⑤ 답하지 않는 것
오 와 그 크으으으 아 헉 근데 이거 저랑 — 감탄사로 열고 바로 짧게 끝내는 리듬.
⚠️ 오프너 반복 금지(2026-08-14 밤밤 지적): 같은 배치 안에서 여러 건을 쓸 때 오만 계속 쓰면 대행 티가 확 난다(절대 규칙 1번 "같은 문구 두 번 안 씀"의 연장). 위 목록에서 매 건마다 다른 첫 어절을 고르고, 감탄사 없이 바로 본론으로 시작하는 것도 정상적인 선택지로 섞는다.
⚠️ 이미지·영상 있는 게시물은 반드시 실제로 열어서 확인(2026-08-14 밤밤 지적): 게시물에 사진/동영상이 있으면 텍스트 캡션만 읽고 댓글을 쓰지 않는다. 스크린샷으로 이미지 내용을 직접 확인한 뒤, 캡션과 이미지 중 실제로 반응할 지점(구체적 사물·장면·비교컷 등)을 잡아서 쓴다. 캡션이 짧거나 이미지가 핵심인 게시물(예: 사진 위주 게시물, before/after 비교컷)일수록 이미지를 안 보면 완전히 엉뚱한 댓글이 나온다 — 텍스트만 보고 썼다가 실제와 다른 내용으로 지적받은 사례 있음.
스크립트 세트 (전부 ~/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는 맥미니에만 있다)
# 대상 추출 — 내 답글이 자식으로 없는 남의 댓글만
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초 간격. 이 계정은 2026-04-28 도달 차단 이력이 있어 속도 자체가 위험이다. 76건에 약 55분.
발행 뒤 conversation을 재조회해 누락 0을 확인하고, 그 사이 새로 들어온 댓글은 따로 센다.
답글 발행 후 상대 프로필의 최신 원글 최대 5개에 좋아요를 누르고, 가장 최신 원글 1개에 맞춤 댓글을 단다(2026-08-09 밤밤 지시). 게시물이 5개 미만이면 가능한 만큼만, 이미 좋아요된 글은 중복 클릭하지 않는다. 각 좋아요 사이 38초·계정 사이 2040초 간격을 둔다. 성공/스킵/실패 수를 발행 로그에 함께 남긴다.
원글 판정 필수: 프로필 기본 탭에는 상대가 남긴 답글·인용글이 원글처럼 섞여 보일 수 있다. 댓글 버튼을 누르기 직전, 현재 스레드의 원 작성자가 상대 username인지와 본문이 프로필에서 읽은 최신 원글 본문과 일치하는지 대조한다. 밤밤 글에 상대가 단 답글 페이지로 이동했으면 취소하고 프로필로 돌아간다(2026-08-09 중복 댓글 직전 발견 사례).
정치 프로필/정치 최신글은 좋아요·선제 댓글에서 제외한다. 자동 좋아요 중 정치 글을 발견하면 해당 좋아요를 즉시 취소하고 맞춤 댓글도 달지 않는다.
맞춤댓글은 최근 3일 이내 원글에만 단다(2026-08-10 밤밤 지시). 상대 프로필의 가장 최신 원글이 3일보다 오래됐으면 그 계정은 맞춤댓글을 생략하고 좋아요만 진행한다.
답변하기 애매한 글은 댓글을 스킵하고 좋아요만 진행한다(2026-08-15 밤밤 확정). 아래 4가지 중 하나라도 해당하면 댓글 후보에서 제외 — 무리하게 초안을 짜내지 말고 좋아요만 하고 넘어간다.
이미 어떤 방향으로든 팔로우 관계가 있는 계정은 좋아요·맞춤댓글 대상에서 전부 제외한다(2026-08-11 밤밤 지시 "이미 팔로우하는 사람한테는 뭔 글쓰지 말라고", 2026-08-13 재확인 "나랑 팔로우인사람도 왜 포함하냐"). 이 단계의 목적은 아직 연결되지 않은 사람과의 새 관계 형성이다.
팔로우 버튼 판정표 (프로필 상단 버튼 텍스트를 그대로 읽는다)
| 버튼 텍스트 | 의미 | 처리 |
|---|---|---|
| 팔로우 | 서로 아무 관계 없음 | 유일한 대상. 좋아요 + 맞춤댓글 |
| 팔로잉 | 밤밤이 이미 상대를 팔로우 중 | 전진 제외(좋아요도 안 누름) |
| 맞팔로우 | 상대가 밤밤을 팔로우 중 | 전진 제외 |
2026-08-13 사고: 서브에이전트에 "맞팔로우면 팔로워(스킵), 그외(팔로우/팔로잉)면 비팔로워"라고 지시해서 "팔로잉"(이미 내가 팔로우 중)이 대상으로 섞였고 hayan_sool에 좋아요 1건이 잘못 나갔다(즉시 취소). 서브에이전트에게는 버튼 텍스트를 있는 그대로 보고하라고만 시키고, 팔로워/비팔로워 같은 해석을 시키지 않는다.
⚠️ 밤밤이 특정 글을 콕어 "이 글에 댓글 단 사람은 다 팔로우하고 좋아요해라"고 지시하면 이 제외 규칙은 그 배치에 한해 무효다(2026-09-13 실제 지시). 이미 팔로잉인 사람은 팔로우가 no-op이니 좋아요만 진행하고, 결과 보고에 새 팔로우/기존 팔로잉을 나눈다. 정치 스크리닝은 지시와 무관하게 유지한다.
안전 페이싱(발행 3045초, 좋아요 38초·계정 20~40초)은 절대 줄이지 않는다 — 이건 속도가 아니라 계정 안전이 목적이다. 줄일 수 있는 건 이 페이싱 안에서 에이전트가 쓰는 조사·확인 오버헤드다.
miji74000 중복 게시 사고(게시 확인 지연을 재제출 신호로 오해해 발생) 이후 이 규칙 추가.프로필 게시물은 [data-pressable-container="true"]로 잡히는데, 아래로 스크롤하면 위쪽 게시물이 DOM에서 통째로 사라진다.
"5개 로드될 때까지 스크롤 → 그때 수집"으로 짜면 최신 5개가 아니라 스크롤 끝에 남은 오래된 글에 좋아요가 나간다.
2026-09-13에 @drpark23에게 실제로 1~2일 전 글 5개를 눌렀고, 정작 최신 3개(50분·11시간·1일)는 빠졌다.
올바른 순서:
window.scrollTo(0,0) 으로 맨 위로 간다.scrollIntoView 후 클릭한다.원글 판정은 스냅샷 파싱 대신 컨테이너 안 첫 번째 a[href^="/@"]의 아이디가 프로필 주인과 같은지로 본다(남의 글에 단 답글은 부모 작성자가 먼저 나온다). 고정글은 고정됨 텍스트로 걱러낸다.
팔로우 버튼은 메시지 보내기 버튼의 형제로 잡는다(게시물마다 달린 작은 팔로우 버튼과 이름이 같아서 역할/이름으로는 구분이 안 된다).
gogopangpang 사례, 좋아요 2개 누락). 좋아요·댓글 진행 후 페이지 타이틀이 의도한 계정과 다르면 즉시 원래 계정으로 돌아가 좋아요 상태를 전체 재확인한다.~/Projects/ops/threads-tool/reply-logs/batch_*.jsonl)의 마지막 timestamp보다 오래된 미답변 댓글은 전부 제외한다. 그 시각 이후에 새로 들어온 댓글만 대상이다.~/Projects/ops/threads-tool/reply-logs/skiplist.json. 추출 직후 이 파일의 comment_id를 무조건 뺀다. 새로 넘어간 건이 생기면 매 회차 끝에 여기에 추가한다.부모가 나(bam.bam_2)인 항목의 작성자 집합을 만들고, 그 집합에 든 사람의 댓글은 후보에서 뺀다.difflib 유사도 0.5 이상으로 비교해 걸러낸다(2026-08-23에 "이제 당당해지실 차례입니다!"가 같은 글의 "이미 잘하고 계시니 이제 당당해지시면 됩니다!"와 중복될 뻔했다).1~10 발행, 12번 수정처럼 한 번에 오더할 수 있게 한다. 임의로 10개씩 끊지 않는다.초안 전체를 밤밤에게 먼저 보여주고 승인받는다. 승인 없이 발행하지 않는다.
⚠️ 번호는 화면에 보이는 순서대로 1부터 연번(2026-08-23 밤밤 지적 "내가 하나씩 답변할 수 있게 번호를 메겨줘야지").
1,2,5,8,3,4...처럼 튄다. 밤밤이 1~10 발행으로 지시할 수 없다.번호 | @계정 | 댓글 앞부분 | 답글 한 줄로. 클로드안으로 갈아낀 건 코덱스안을 같이 보여준다.어떤 답글이 Threads의 자동 모니터링(금융 사기/스캠 등)에 걸려 "적용된 조치" 알림을 받으면 — 나중에 자동 복원되었더라도 — 그 댓글은 삭제만 한다. 에이전트가 현장에서 다른 문구로 임의로 재작성해 재발행하지 않는다 — 이건 7번 규칙(사람 확인 받고 간다)을 우회하는 것이다. 대체 문구가 필요하면 새 초안으로 밤밤에게 다시 승인받는다.
© bam-bam-2, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (scripts) in skills/threads-reply of bam-bam-2/solo-skills.
Open the folder on GitHubat commit 0712439
Threads Reply Voice next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Threads Reply Voice this skillbam-bam-2/solo-skills | 367 | — | ~4.2k | Automated safety check: Notes | MIT | |
| Reply AutomationComposioHQ/awesome-claude-skills | 77k | 3 repos | ~723 | Automated safety check: Pass | None | |
| Reply To PR Threadstobihagemann/turbo | 408 | — | ~941 | Automated safety check: Pass | MIT | |
| Reply From Superhumansuperset-sh/superset | 15k | — | ~1.1k | Automated safety check: Pass | Custom licence | |
| Turn This Into A Threadsickn33/agentic-awesome-skills | 47k | 1 repos | ~1.4k | Automated safety check: Pass | MIT | |
| Gmail Reply-All Commandgoogleworkspace/cli | 31k | — | ~736 | Automated safety check: Pass | Apache-2.0 |
ComposioHQ/awesome-claude-skills
Automate Reply tasks via Rube MCP (Composio). An agent skill from ComposioHQ/awesome-claude-skills.
tobihagemann/turbo
Draft, confirm, and post replies to GitHub PR review threads.
superset-sh/superset
Draft a reply, a follow-up, or a new email in Superhuman in the user's own voice — read the whole thread first, reuse an existing draft instead of adding a second one, keep the right people on the…
sickn33/agentic-awesome-skills
Turn a long idea, transcript, article or draft into a Twitter/X thread where every tweet stands alone.
googleworkspace/cli
Replies to everyone on a Gmail message through the gws CLI, with threading handled automatically, options to add or drop recipients, and a draft mode.
googleworkspace/cli
Replies to a Gmail message from the gws CLI with automatic threading, plus CC, BCC, extra recipients, attachments, HTML bodies and draft or dry-run modes.
bam-bam-2/solo-skills
Use Orca's computer-use CLI to inspect and operate local desktop app windows through accessibility trees, screenshots, and safe UI actions.
bam-bam-2/solo-skills
Use Orca orchestration for structured multi-agent coordination: threaded messages, blocking ask/reply flows, task dispatch, workerdone/escalation waits, task DAGs, decision gates, coordinator loops…
bam-bam-2/solo-skills
마크다운 원고를 실제 책처럼 보이는 PDF/EPUB 전자책으로 만들 때 사용. An agent skill from bam-bam-2/solo-skills.
bam-bam-2/solo-skills
밤밤의 강연·라이브·기수 세션 녹화본(줌 클라우드·디스코드·맥 화면기록)을 자막판 영상으로 만들고 배포할 때 읽을 것.
bam-bam-2/solo-skills
밤밤의 네이버 메일(you@example.com)을 브라우저 없이 읽어야 할 때 사용. An agent skill from bam-bam-2/solo-skills.
bam-bam-2/solo-skills
Creative writing skill for creating style skills that teach Claude to write in specific styles.
밤밤 개인 스레드 계정(@bam.bam2)의 "내 글에 달린 댓글"에 답글을 대신 쓸 때 읽을 것. An agent skill from bam-bam-2/solo-skills. Threads Reply Voice is an agent skill from bam-bam-2/solo-skills.bam2)의 "내 글에 달린 댓글"에 답글을 대신 쓸 때 읽을 것.
Run `npx skills add bam-bam-2/solo-skills --skill threads-reply-voice -a claude-code`. Or copy the skill folder (skills/threads-reply in bam-bam-2/solo-skills) into .claude/skills/threads-reply-voice in your project. Claude Code loads it when a task matches its description.
Run `npx skills add bam-bam-2/solo-skills --skill threads-reply-voice -a codex`. Or copy the skill folder (skills/threads-reply in bam-bam-2/solo-skills) into .agents/skills/threads-reply-voice in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add bam-bam-2/solo-skills --skill threads-reply-voice -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/threads-reply-voice, .gemini/skills/threads-reply-voice, .github/skills/threads-reply-voice and .opencode/skills/threads-reply-voice in your project.
Going by SKILL.md and its folder, Threads Reply Voice needs JavaScript for the scripts in its folder and the command-line tools its instructions call (scp, ssh and python3). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use ssh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Threads Reply Voice is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.2k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Threads Reply Voice: Reply Automation (ComposioHQ/awesome-claude-skills, 77k stars), Reply To PR Threads (tobihagemann/turbo, 408 stars), Reply From Superhuman (superset-sh/superset, 15k stars) and Turn This Into A Thread (sickn33/agentic-awesome-skills, 47k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
bam-bam-2 (a GitHub user) maintains it in bam-bam-2/solo-skills, which has 367 GitHub stars. The repository holds 38 skills in this directory. The repository was last updated on September 14, 2026.
Source: bam-bam-2/solo-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.