FROM THE WORKSHOP / 이슈
4/24 인스타 자동 포스팅 누락 — Mac 호출 시 시크릿/인프라 부재
4/24 인스타 자동 포스팅 누락 — Mac 호출 시 시크릿/인프라 부재
발생
2026-04-24 일자 /insta-post 호출이 Mac 세션에서 시도됐을 때 가드 fail. 원인 분석 (Mac directive msg 2565 KST 12:23):
~/.claude/secrets/instagram.json만들어진 곳: WSL/home/ssamssae/.claude/secrets/instagram.json(Apr 24 06:57, 274 bytes, 0600).~/insta-autopost/repo: WSL/home/ssamssae/insta-autopost/(render.py, publish.py, posted.json, GET_TOKEN.md, out/, templates/, .git).- Mac 본진은 둘 다 없음 (Mac 사전 점검에서 MISSING 확인).
/insta-postSKILL.md 의 가드는 시크릿 존재 + worklog 존재 두 겹 → Mac 에서 시크릿 없으면 즉시 abort.
→ 이날 인스타 포스팅이 자동으로 안 올라갔음. 강대종님이 다음 날 발견.
해결 (2026-04-25 13:45 KST, WSL → Mac 미러링)
Mac directive (msg 2565) 기반 WSL @Myclaude2 가 SCP 로 미러링 수행:
1) 사전 검증
$ ls -la ~/.claude/secrets/instagram.json
-rw------- 1 ssamssae ssamssae 274 Apr 24 06:57 ...
$ ls -la ~/insta-autopost/
GET_TOKEN.md out posted.json publish.py render.py templates .git .gitignore
WSL 양쪽 정상.
2) Mac 측 사전 점검
$ ssh [email protected] 'ls -la ~/.claude/secrets/instagram.json'
ls: /Users/user/.claude/secrets/instagram.json: No such file or directory
$ ssh [email protected] 'if [ -d ~/insta-autopost ]; then echo EXISTS; else echo MISSING; fi'
MISSING
둘 다 없으니 백업 불필요.
3) 시크릿 SCP
$ scp -p ~/.claude/secrets/instagram.json [email protected]:~/.claude/secrets/instagram.json
$ ssh [email protected] 'ls -la ~/.claude/secrets/instagram.json'
-rw------- 1 user staff 274 Apr 24 06:57 /Users/user/.claude/secrets/instagram.json
-p 옵션으로 0600 모드 보존됨. 별도 chmod 600 불필요. 시크릿 내용은 텔레그램·로그·터미널 stdout 어디에도 echo/cat 안 함.
4) insta-autopost 폴더 SCP
$ scp -rp ~/insta-autopost [email protected]:~/
$ ssh [email protected] 'ls ~/insta-autopost/'
GET_TOKEN.md
out
posted.json
publish.py
render.py
templates
posted.json 양쪽 동기화 시점: 2026-04-25 13:45 KST (이 SCP 직후, WSL 의 4/24 마지막 상태 그대로 Mac 에 복사). 이후 양방향 동기화 정책은 다음 turn 결정 사항.
5) Mac 측 venv 체크
$ ssh [email protected] 'ls ~/.claude/tools/venv/bin/python 2>/dev/null && echo VENV_OK || echo VENV_MISSING'
VENV_MISSING
⚠️ Mac 측 Pillow/requests venv 미설치 — ~/.claude/tools/venv/bin/python 부재. /insta-post SKILL.md 가 이 절대경로를 호출하므로 Mac 에서 실행하려면 venv setup 필요. 다음 turn 후속 작업.
미러링 검증 상태
- ✅ Mac 시크릿 미러링 (0600 모드 보존)
- ✅ Mac insta-autopost 폴더 미러링 (.git 포함, 모든 핵심 파일 도착)
- ⚠️ Mac venv MISSING — Pillow + requests 설치 필요 (다음 turn)
- ⏸ posted.json 양방향 동기 정책 — 미정 (다음 turn)
- ⏸ 토큰 만료 ~2026-06-23 (60일) 알림 자동화 — 미정
다음 액션 후보
- Mac 측
~/.claude/tools/venv생성 + Pillow/requests/python-dateutil 설치 - posted.json 동기화 정책: WSL 이 SoT 인가, 양쪽 commit 시 git push/pull 인가, ~/insta-autopost 자체를 git remote 로 묶을 것인가
- 토큰 만료 D-7 알림 자동화 (현재 GET_TOKEN.md 수동 절차)
- /insta-post SKILL.md 의 시크릿/folder 부재 가드 fail 시 텔레그램 즉시 보고 (그날 누락 모르고 지나가는 것 방지)
Mac venv setup 진행 (2026-04-25 13:50 KST)
WSL → Mac 인계 directive (msg 6979) 기반 Mac @MyClaude 가 7단계 진행. 결과 부분 PASS + finding 1건.
사전 검증 (step 1-2)
- /sync exit=0, claude-skills b260ead 도착, issue 파일 받음
~/.claude/secrets/instagram.json274 bytes 0600 확정 (cat 안 함)~/insta-autopost/6개 핵심 파일 + .git + .gitignore 모두 도착
venv + 의존성 (step 3-4)
$ python3 -m venv ~/.claude/tools/venv
$ ~/.claude/tools/venv/bin/python -V
Python 3.13.5
$ ~/.claude/tools/venv/bin/pip install --upgrade pip
pip 25.1.1 → 26.0.1
$ ~/.claude/tools/venv/bin/pip install Pillow requests python-dateutil
$ ~/.claude/tools/venv/bin/python -c "import PIL, requests, dateutil; print(...)"
Pillow=12.2.0 requests=2.33.1 dateutil=2.9.0.post0
✅ directive 최소 세트 import 검증 PASS.
dry-run SKIP — finding: render.py 추가 의존성 (step 5)
~/.claude/tools/venv/bin/python render.py --help 시도 결과:
ModuleNotFoundError: No module named 'playwright'
원인: render.py L21 from playwright.async_api import async_playwright — directive 가 명시한 최소 세트(Pillow/requests/dateutil)에 누락. 그 외 추가 발견:
- publish.py 는 stdlib 만 사용 (json + urllib.request + subprocess), 추가 패키지 불필요. WSL directive 가 명시한
requests도 사실 publish.py 코드상 미사용 - chromium 번들은 Mac 표준 위치
~/Library/Caches/ms-playwright/chromium-1217/에 이미 존재 (Playwright MCP 가 2026-04-16 깔아둠) → Python playwright 도 같은 번들 재사용 가능, 별도 다운로드 불필요
render.py 에 --dry-run 옵션 부재 (--date / --title / --hook / --worklog / --output 만). directive 룰 “render.py 가 dry-run 모드 미지원이면 step 4 import 검증 통과만으로 PASS 처리하고 publish.py 호출은 절대 하지 말 것” 에 따라 step 5 SKIP. publish.py 미호출.
현재 상태
- ✅ venv 생성 + pip 26.0.1
- ✅ Pillow/requests/python-dateutil import PASS
- ⚠️ render.py 추가 의존성 finding:
playwrightPython pkg 미설치 → 현재 상태로는 /insta-post 호출 시 또 ModuleNotFoundError - ✅ chromium 번들 기존 활용 가능 (추가 다운로드 0)
- ⏸ /insta-post 양방향 호출 가능 여부: 강대종님 결정 후 추가 작업 1건 필요
강대종님 결정 대기
A) ~/.claude/tools/venv/bin/pip install playwright 추가 설치 → render.py 실 dry 호출 (—title “smoke” —hook “test” —output ~/insta-autopost/out/dummy.png) 로 PNG 1080×1350 검증 → 정리 → /insta-post 양쪽 그린
B) /insta-post SKILL.md 의 의존성 정의 갱신 (Pillow/requests/dateutil + playwright) — WSL directive 보강 따로 필요
A 가 1단계로 끝남 (chromium 번들 재사용으로 다운로드 비용 0).
A 진행 결과 (2026-04-25 14:04 KST)
강대종님 OK (msg 6986) 후 A 경로 진행 완료.
playwright Python pkg 설치
$ ~/.claude/tools/venv/bin/pip install playwright
Successfully installed greenlet-3.4.0 playwright-1.58.0 pyee-13.0.1 typing-extensions-4.15.0
chromium 번들 호환성 — 추가 다운로드 발생
기존 ~/Library/Caches/ms-playwright/chromium-1217/ 은 npm playwright-core 1.60.0-alpha (Apr 16 Playwright MCP 가 깐 것). Python playwright 1.58.0 은 별도 빌드 chromium_headless_shell-1208 요구 → mismatch:
playwright._impl._errors.Error: BrowserType.launch: Executable doesn't exist at
.../chromium_headless_shell-1208/chrome-headless-shell-mac-arm64/chrome-headless-shell
playwright install chromium 으로 91.1 MiB 추가 다운로드 (280MB 풀 크롬 아니고 headless shell 만 받음, render.py 가 헤드리스로 동작하므로 충분):
Chrome Headless Shell 145.0.7632.6 (playwright chromium-headless-shell v1208)
downloaded to ~/Library/Caches/ms-playwright/chromium_headless_shell-1208
실 dry 호출 PASS
$ ~/.claude/tools/venv/bin/python render.py \
--title "Mac venv smoke" \
--hook "이건 검증용 더미 카드" \
--date 2026-04-25 \
--output ~/insta-autopost/out/dummy-mac-smoke.png
/Users/user/insta-autopost/out/dummy-mac-smoke.png
$ ls -la ~/insta-autopost/out/dummy-mac-smoke.png
-rw-r--r-- 73156 Apr 25 14:04 dummy-mac-smoke.png
$ python -c "from PIL import Image; im=Image.open(...); print(im.size, im.mode)"
(2160, 2700) RGB
✅ PNG 73KB, 크기 2160×2700 (CANVAS 1080×1350 @ device_scale_factor=2 retina). 정리 완료(rm dummy-mac-smoke.png).
최종 상태
- ✅ Mac venv: Python 3.13.5, pip 26.0.1, Pillow 12.2.0, requests 2.33.1, dateutil 2.9.0.post0, playwright 1.58.0 추가
- ✅ chromium_headless_shell-1208 번들 Mac 표준 위치 설치
- ✅ render.py 실 dry-run PASS (PNG 1080×1350 @2x 정상 생성/정리)
- ⛔️ publish.py 미호출 (인스타 실 POST 0건, posted.json 변경 0)
- ✅ /insta-post Mac 측 양방향 호출 가능 상태 확정
발견 — WSL directive 의 의존성 정의 갱신 권장
WSL /insta-post SKILL.md 의 venv 의존성 명시는 현재 Pillow + requests + python-dateutil (publish.py 가 사실 stdlib 만 쓰니 requests/python-dateutil 도 불필요). 정확한 최소 세트는 Pillow + playwright + playwright install chromium 만이면 충분. 다음 turn 후속 작업 후보 (강대종님 결정).
남은 후속
- WSL
/insta-postSKILL.md 의존성 갱신 (위 finding 반영) - posted.json 양방향 동기 정책 (WSL SoT? git remote? — 미정)
- 토큰 만료 D-7 알림 자동화 (~2026-06-23, GET_TOKEN.md 수동 절차)
- /insta-post SKILL.md 가드 fail 시 텔레그램 즉시 보고 패치
SKILL.md 갱신 (2026-04-25 14:25 KST, WSL @Myclaude2)
Mac 의 finding (render.py 가 playwright Python pkg 필요, requests/python-dateutil 사실 미사용) + 가드 fail 보고 누락 두 건 한꺼번에 SKILL.md 에 반영.
1) 의존성 섹션 신설
기존엔 의존성 명시가 흩어져 있었음 (“실패 시” 섹션의 playwright install chromium 한 줄 정도). 새로 “사전 조건 → 의존성 (Python venv)” 서브섹션 추가:
- 최소 세트:
Pillow + playwright+playwright install chromium - requests / python-dateutil: 불필요 명시 (publish.py 가 stdlib 만 사용)
- 새 기기 미러링 시 두 줄 명령으로 끝나는 절차 박음
2) 가드 재정렬 + 텔레그램 보고
기존 가드 #1, #2 (worklog / 중복) → 가드 #0~#3 으로 4단계 분리:
- 가드 #0 (venv 점검):
~/.claude/tools/venv/bin/python부재 → 텔레그램 알림 + 중단 - 가드 #1 (worklog 점검): 부재 시 텔레그램 알림 + 중단 (기존엔 silent abort, 4/24 누락 사례 재발 방지)
- 가드 #2 (시크릿 점검): 부재 시 기기 가드 흐름 + 자동 호출 시 텔레그램 알림
- 가드 #3 (중복 점검): 누락 아님 — 텔레그램 알림 불필요, 채팅 회신만
이후 절차 step 4-8 → 6-10 으로 시프트.
3) 다음 단계 절차 번호 정렬
가드 5개 (#0~#3 + 시크릿) → 카드 렌더 = step 6, 캡션 = 7, 발행 = 8, 텔레그램 = 9, cleanup = 10. 가드 #3 의 dedup 보호 layer 언급도 가드 #3 으로 정정.
커밋
feat(insta-post): add venv guard, plain dependency spec, telegram alert on miss (1183a3c → rebase 후 07a10a2 push). Mac 측은 다음 /sync 때 받음.
남은 후속 (이번 turn 미해결)
- posted.json 양쪽 동기화 정책 — 강대종님 OK 받기 전 WSL 단독 결정 안 함
- 토큰 만료 D-7 알림 — Mac directive 의 캘린더 등록 (2026-06-16 09:00 KST) 으로 처리됨 → 별도 자동화 작업 필요 없음, 이 후속 항목 닫음